Top AI Repos — open-source AI, indexed and scored
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Top AI Repos tracks AI repositories on GitHub and answers two different questions about each one: is it moving right now, and would you bet a product on it.
Python library and CLI for X/Twitter scraping with multi-account rotation and built-in rate-limit handling.
| Date | Stars |
|---|---|
| 2026-07-24 | 2614 |
| 2026-07-25 | 2616 |
| 2026-07-28 | 2626 |
| 2026-07-30 | 2635 |
| 2026-08-06 | 2635 |
Today
— stars today
This week
— stars this week
This month
— stars this month
Momentum
35.0
growth rate 0.00%/day
# twscrape
<div align="center">
[<img src="https://badges.ws/pypi/v/twscrape" alt="version" />](https://pypi.org/project/twscrape)
[<img src="https://badges.ws/pypi/python/twscrape" alt="py versions" />](https://pypi.org/project/twscrape)
[<img src="https://badges.ws/pypi/dm/twscrape" alt="downloads" />](https://pypi.org/project/twscrape)
[<img src="https://badges.ws/github/license/vladkens/twscrape" alt="license" />](https://github.com/vladkens/twscrape/blob/main/LICENSE)
[<img src="https://badges.ws/badge/-/buy%20me%20a%20coffee/ff813f?icon=buymeacoffee&label" alt="donate" />](https://buymeacoffee.com/vladkens)
</div>
twscrape is an async Python library and CLI for X/Twitter Search and GraphQL endpoints. It runs on your own account pool, keeps sessions in SQLite, rotates accounts when an endpoint is rate-limited, and returns either parsed SNScrape-style models or raw API responses.
<div align="center">
<img src=".github/example.png" alt="example of cli usage" height="400px">
</div>
## Install
```bash
pip install twscrape
```
`httpx` is the default HTTP backend. For browser-like TLS fingerprinting, install the optional `curl-cffi` backend:
```bash
pip install "twscrape[curl]"
TWS_HTTP_BACKEND=curl twscrape user_by_login xdevelopers
```
## Features
- Search and GraphQL X/Twitter API methods
- Async/await API for running multiple scrapers concurrently
- Login flow with optional email verification code retrieval
- Cookie-based account setup
- Saved account sessions and per-account proxies
- Raw Twitter API responses and parsed SNScrape-compatible models
- Automatic account switching across rate-limited operations
## Sponsor
<p align="center">
<a href="https://www.swiftproxy.net/?ref=twscrape">
<img src=".github/swiftproxy.png" alt="Swiftproxy residential proxies" width="460">
</a>
</p>
<p align="center">
<a href="https://www.swiftproxy.net/?ref=twscrape"><strong>Swiftproxy</strong></a>
provides 90M+ residential IPs across 220+ locations for web scraping,
automation, and data collection. Non-expiring traffic, city-level targeting,
and a free trial. Use code <code>PROXY90</code> for 10% off.
</p>
## Start With Cookies
twscrape requires authorized X/Twitter accounts. The most stable setup is to add an account from browser cookies containing `auth_token` and `ct0`.
```bash
twscrape add_cookie my_account "auth_token=xxx; ct0=yyy"
twscrape accounts
twscrape search "from:xdevelopers lang:en" --limit=20
```
Or let the CLI prompt for the cookie value:
```bash
twscrape add_cookie my_account
```
Cookie accounts that include `ct0` are activated immediately; no `login_accounts` step is needed.
To get cookies: open x.com -> DevTools (F12) -> Application -> Cookies -> copy `auth_token` and `ct0` values.
Ready-to-use cookie accounts are available from [this provider](https://kutt.to/ueeM5f). Proxy users can bring their own proxies or use [this provider](https://kutt.to/eb3rXk). These are referral links.
X/Twitter's Terms of Service discourage using multiple accounts. Use this project responsibly and at your own discretion.
## Python API
```python
import asyncio
from twscrape import API, gather
async def main():
api = API() # or API("accounts.db")
# Add once; the session is stored in the account database.
await api.pool.add_account_cookies("my_account", "auth_token=xxx; ct0=yyy")
user = await api.user_by_login("xdevelopers")
print(user.id, user.username, user.followersCount)
tweets = await gather(api.search("from:xdevelopers lang:en", limit=20))
for tweet in tweets:
print(tweet.id, tweet.user.username, tweet.rawContent)
if __name__ == "__main__":
asyncio.run(main())
```
`gather()` is a convenience helper. You can stream results directly:
```python
async for tweet in api.search("open source lang:en", limit=100):
print(tweet.id, tweet.rawContent)
```
Configure what happens when no account is immediately available:
```python
api = API(raise_when_no_aExcerpt of 12,139 characters
Read on GitHub233
6
6
1
1
Lucas Le Ray · France
1
Marcin
1
Matvii Sakhnenko · Vend Marketplaces · Poland
1
1
1
1
Oleg Sviatchenko
1
1
ShuM
1
Terence Dignon · Meta · United States
1
1
Yunus Emre Gündoğmuş · Summarify & Hepsiburada · Turkey
1
1
1
kedi
1
Would you bet a product on this? Bounded 0–100 and slow moving.
matched fp:5cc877b33c29a3f3, topic:web-scraping, readme:web scraping