Scweet is a free, open source data extraction & web scraping project written in Python and released under MIT. It has 1,627 GitHub stars, 281 forks and 1 open issues, and was last pushed 3 days ago. On this registry it ranks #63 of 83 tracked projects in Data Extraction & Web Scraping, with 5 head-to-head comparisons available.

Scrape Twitter / X without the official API.
Tweets, profiles, followers, trends and more.

Run on Apify Python Quickstart CLI Quickstart Documentation

Tests PyPI Version Python versions PyPI Downloads License Scweet Actor Status


Two ways to run it

1. Hosted : nothing to manage ⭐

Runs on Apify. You do not need X accounts, cookies or proxies.

  • Configure and run from your browser, no code needed, or drive it from code with the Python API
  • Search tweets, profile timelines, follower / following lists
  • Export in different formats (JSON, CSV or XLSX)
  • Free tier included; pay-as-you-go pricing is on the Actor page

Run Scweet on Apify - free tier

2. Self-hosted : full control

Bring your own X accounts and proxies. Run it from Python or the CLI, inside your own infrastructure.

from Scweet import Scweet

s = Scweet(auth_token="YOUR_AUTH_TOKEN")
tweets = s.search("bitcoin", limit=100)

Both give you the same data. Self-hosted: you run the code, and you manage the accounts and the proxies. Hosted: you press a button and get the results.


What you can scrape

  • Tweets — by keyword, hashtag, user, date range, engagement filters, language, location
  • Profile timelines — a user's full tweet history, with replies and media tabs
  • Tweets by id — full data for known tweet ids, their replies, and who reposted them
  • Followers / Following — full account lists at scale, verified followers included
  • User profiles — bio, follower count, verification status, by handle or by id
  • People search & trends — find accounts by keyword, read what is trending now

Python Quickstart

Three steps from nothing to tweets. One account, one call, one result.

1. Install

pip install -U Scweet

2. Get your auth_token

Log into x.com → DevTools F12ApplicationCookieshttps://x.com → copy the auth_token value. That one value is all you need; Scweet builds the rest.

Use a dedicated account, never your personal one.

3. Scrape

from Scweet import Scweet

s = Scweet(auth_token="YOUR_AUTH_TOKEN")
tweets = s.search("bitcoin", limit=100)

for tweet in tweets:
    print(tweet["text"])

That is the whole first run. On the next run, reuse the same accounts with no credentials:

s = Scweet()                       # reads the state file scweet_state.db
tweets = s.search("ethereum", limit=100, save=True)   # save=True writes a CSV

Always set limit. Without it, a run continues until the daily cap of the account.

Next: add a proxy for real volume, use several accounts, or read the full documentation.

Proxies

A proxy is optional for a small run and recommended for real volume, because many requests from one IP raise the risk to an account. Pass one URL for all accounts:

s = Scweet(auth_token="YOUR_AUTH_TOKEN", proxy="http://user:[email protected]:8000")

On a rotating provider, put {session} in the URL to give each account its own exit IP: http://user,session-{session}:[email protected]:8000. For a proxy per account, see Multiple accounts & proxies.

All methods have async variants: asearch(), aget_profile_tweets(), aget_followers(), etc.


Common tasks

Search tweets

tweets = s.search(
    "AI agents",
    since="2026-01-01",
    from_users=["elonmusk"],
    min_likes=50,
    limit=200,
    save=True,
)

Profile timeline

tweets = s.get_profile_tweets(["elonmusk"], limit=200)

Followers / Following

followers = s.get_followers(["elonmusk"], limit=1000)
following = s.get_following(["elonmusk"], limit=1000)
verified  = s.get_verified_followers(["elonmusk"], limit=1000)

User profiles

profiles = s.get_user_info(["githubstatus", "elonmusk"])
profiles = s.get_user_info(user_ids=["44196397"])   # numeric ids work too

Tweets by id, replies, reposters

tweets    = s.get_tweet_info(["1866123456789", "1866123456790"])  # up to 50 per request
replies   = s.get_tweet_replies("1866123456789", limit=100)
reposters = s.get_reposters("1866123456789", limit=100)

People search, trends, media

people = s.search_users("python developer", limit=50)
trends = s.get_trending()
media  = s.get_profile_media(["nasa"], limit=100)
tweets = s.get_profile_tweets(["nasa"], limit=100, include_replies=True)

For the full list of supported search operators, see twitter-advanced-search.


CLI

# Search with proxy, save to CSV
scweet --auth-token YOUR_AUTH_TOKEN --proxy http://user:pass@host:port \
  search "bitcoin" --since 2026-01-01 --limit 500 --save

# Followers, saved as JSON
scweet --auth-token YOUR_AUTH_TOKEN \
  followers elonmusk --limit 1000 --save --save-format json

For multi-account runs, use --cookies-file cookies.json.


Multiple accounts & proxies

For higher throughput and reduced ban risk, use multiple dedicated accounts with per-account proxies.

Running Scweet locally at any real volume usually means dedicated accounts and proxies. You can use a single proxy, a rotating proxy, or assign one per account. On a rotating provider, put {session} in the proxy URL to give each account its own session — see "Proxy modes" in DOCUMENTATION.md.

cookies.json format:

[
  { "username": "acct1", "cookies": { "auth_token": "..." }, "proxy": "http://user1:pass1@host1:port1" },
  { "username": "acct2", "cookies": { "auth_token": "..." }, "proxy": "http://user2:pass2@host2:port2" }
]
s = Scweet(cookies_file="cookies.json")  # proxies are read from the file, one per a

readme truncated — read the full docs on github

Frequently asked questions

Is Scweet free to use?

Scweet is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Scweet do?

Scrape tweets, profiles, followers and following from Twitter/X, no API key needed. Python library with smart multi-account pooling, proxy support and async.

What is Scweet written in?

Scweet is primarily written in Python. Its source is publicly available at https://github.com/Altimis/Scweet, and it has 1,627 GitHub stars.