X / Twitter Monitor & Scraper - Profile Timelines & New Posts
Pricing
from $1.20 / 1,000 results
X / Twitter Monitor & Scraper - Profile Timelines & New Posts
Scrape and monitor public posts from one or many X (Twitter) accounts by handle or URL. Schedule it and turn on 'only new since last run' to get and pay for new posts only. Keyword filter, from:handle search, 23 fields incl. likes, reposts, views. No login. JSON, CSV, Excel.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
TicTech
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Scrape recent public posts from one or many X (Twitter) accounts — by handle or profile URL, no login. Pull a single profile timeline, collect posts from a whole set of accounts in one run with maxItems split fairly across them, or narrow posts with from:handle plus keyword filtering. Every post comes with likes, reposts, replies, quotes, bookmarks, views, media flags and a clean post URL, ready for dashboards, CRM enrichment and n8n / Make / Zapier.
Built for competitor tracking, influencer research, news and creator feeds, and scheduled data pulls on Apify.
How to monitor
Schedule this Actor on Apify (e.g. hourly or daily) and turn on Only new posts since last run (onlyNewSinceLastRun) — each run then returns, and charges for, only posts newer than the ones it saw last time. See Scheduled runs: only new posts for details.
Why teams pick this Actor
- Profile timelines — recent public posts from any public account, by
handle,@handleor profile URL - Multi-account posts, split fairly — pass several handles and
maxItemsis shared across them, so one busy account can’t crowd out the rest from:handle+ keyword filtering — keep only the posts from chosen accounts that contain your keywords (e.g.from:CoinDesk BTC)- Rich engagement fields — likes, reposts, replies, quotes, bookmarks, views, language, media flags (23 fields)
- Clean post text — normalized whitespace (no messy blank lines /
\n\ndumps); readable in Output and exports - Clean snake_case JSON —
id,text,author,handle,created_at,url, plus filter flags (is_reply,is_repost,is_quote) - No login, proxy included — Actor-owned Apify RESIDENTIAL proxy (no proxy UI to misconfigure)
- Filters that matter — toggle replies and reposts; hard
maxItemscap for predictable cost - Example Tasks ready — profile timeline, competitor timelines, multi-account news feed, keyword-filtered crypto and brand posts
- Pairs with transcripts — scrape posts here, then send video URLs to X Video Transcriber
Modes at a glance
mode value | What it does | What you provide |
|---|---|---|
user_timeline | Profile timelines — recent posts from one or more accounts | One or more handles |
list | Multi-account posts — one combined dataset, maxItems split fairly across accounts | handles (the accounts to include) |
search | from:handle + keyword filtering on those accounts’ posts | searchQuery like from:Handle keyword (repeat from: for several accounts) |
Keyword filtering tip: always name the accounts with from:Handle inside searchQuery (e.g. from:Apify scraper, or from:CoinDesk from:WatcherGuru BTC). The Actor reads those accounts’ recent posts and keeps only the ones containing all your keywords (case-insensitive). Rare keywords stop after a few pages per account; if you get fewer than maxItems, add more handles or use a broader keyword.
Multi-account tip: pass the accounts in handles. X List URLs are not supported as an input on their own.
Input examples
Profile timeline (recommended start)
{"mode": "user_timeline","handles": ["Apify"],"maxItems": 20,"includeReplies": false,"includeReposts": false}
Multi-account posts (fair split)
{"mode": "list","handles": ["AP", "BBCWorld", "AJEnglish"],"maxItems": 21}
from:handle + keyword
{"mode": "search","searchQuery": "from:Apify scraper","maxItems": 15}
Keyword across several accounts (e.g. a crypto ticker)
{"mode": "search","searchQuery": "from:WatcherGuru from:BitcoinMagazine from:CoinDesk BTC","maxItems": 10}
Output example
{"id": "2106006297003106381","text": "Some viral TikTok carousels are just paid ads...","author": "Apify","handle": "apify","created_at": "2026-10-02T13:00:03Z","likes": 4,"reposts": 0,"replies": 0,"views": 259,"url": "https://x.com/apify/status/2106006297003106381","has_media": false,"has_video": false,"has_photo": false,"is_reply": false,"is_repost": false,"source_mode": "user_timeline"}
Timelines come from X’s public (logged-out) view. For most accounts that is the newest posts first; a few very large accounts serve older highlighted posts on that view — check created_at and sort if you need strict recency.
Some fields can be null when X does not expose them for a post or account (for example views on some publisher accounts).
Export as JSON, CSV, Excel, or XML from the Dataset / Output tab.
How to run
- Open X / Twitter Scraper → Try for free
- Pick a mode (start with
user_timeline) - Add handles (or a
from:Handle keywordquery) - Free-tier tip: free tier max items per run ≤ 100
- Open Output (or Storage → Dataset) and download
Schedule the Actor for recurring competitor or creator pulls.
Scheduled runs: only new posts
Turn on Only new posts since last run (onlyNewSinceLastRun) to get a clean incremental feed from a schedule:
- First run returns posts as usual and saves the newest post ID for each handle.
- Later runs push — and charge for — only posts newer than the saved ID for that handle.
- Nothing new? The run still finishes SUCCEEDED with 0 items, a clear status message, and no per-post charges (only the small start fee).
- Use a different
stateKeyper Task or schedule (e.g.competitors-daily,news-hourly) so feeds don’t share state. The state lives in thevanzi-x-monitor-statekey-value store in your own Apify account; delete the record to start fresh.
{"mode": "list","handles": ["Apify", "browserbase"],"maxItems": 20,"onlyNewSinceLastRun": true,"stateKey": "scraping-tools-hourly"}
Leave the toggle off (default) and every run behaves exactly as before.
Run it on your own stack
Turn this Actor into a recurring X / Twitter data feed without writing a scraper.
1. Schedule it on Apify. Save your input as a Task (or start from one of the Example Tasks), then add an Apify Schedule — e.g. hourly for a news-account feed, daily for competitor timelines. Each run writes a fresh dataset; turn on onlyNewSinceLastRun so each scheduled run returns only posts you haven’t seen yet, and keep maxItems tight so scheduled runs stay cheap.
2. Push results where you work. In the Actor or Task Integrations tab, add a webhook on Run succeeded to ping your backend, Slack bot, n8n, Make or Zapier flow with the run ID — then fetch the dataset items from the API.
3. Export to Google Sheets or CSV. Every run’s dataset downloads as CSV, JSON, Excel or XML from the Output tab. For a spreadsheet feed, use the dataset items CSV URL:
https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=1
Download it, or pull it straight into Google Sheets with =IMPORTDATA("<that URL>"). Anyone with the dataset ID can read that URL, so share it only where you’re happy for the data to be visible.
4. Call it from your code. Run the Actor synchronously and get the posts back in one request:
curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-x-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"mode":"user_timeline","handles":["Apify"],"maxItems":10}'
Or with the Python client (pip install "apify-client>=3"):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("tictechid/vanzi-x-monitor").call(run_input={"mode": "search", "searchQuery": "from:Apify scraper", "maxItems": 10})for post in client.dataset(run.default_dataset_id).iterate_items():print(post["handle"], post["likes"], post["url"])
More tools from TicTech
| Need | Actor |
|---|---|
| Transcribe X / Twitter videos | X Video Transcriber |
| TikTok / IG / YT Shorts → transcript | Shorts Transcriber |
| Instagram posts & reels | Instagram Scraper |
| TikTok posts & profiles | TikTok Scraper |
| Bluesky posts & search | Bluesky Scraper |
Tip: scrape the post with this Scraper, then pass video post URLs into X Video Transcriber for captions.
Usage Limits
- Free tier: free tier max items per run ≤ 100. Non-paying Apify accounts get 5 free runs of this Actor; after that a run exits SUCCEEDED with an upgrade tip in the status message (no new results, no error).
- Hard
maxItemsceiling per run (safe ceiling 500 when set to0) - Need more capacity? Apify pricing
- Public data only — protected / suspended accounts return nothing; invalid handles are skipped with a warning
- Posts come from accounts you name (
handlesorfrom:Handle); X List URLs alone are not supported - Keyword filtering reads up to 5 pages per account; rare keywords can return fewer than
maxItems
Pricing
Pay-per-event (PPE) on synthetic Apify events:
apify-default-dataset-item— per post pushed (~$1.50 / 1k on FREE; lower on paid tiers)apify-actor-start— small per-run start fee (scales with RAM)
Runs stay lean (HTTP GraphQL, no browser). Dominant cost is residential proxy + compute — keep maxItems tight on schedules.
For more details, contact the maintainer or email us at contact@tictech.id