X / Twitter Scraper — Clean Data API
Pricing
from $0.25 / 1,000 validated unique posts
X / Twitter Scraper — Clean Data API
Extract public X posts into duplicate-free clean JSON. No buyer API keys. Never fabricates results. Pay only for delivered unique posts.
Pricing
from $0.25 / 1,000 validated unique posts
Rating
0.0
(0)
Developer
Ladra Software
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 days ago
Last modified
Categories
Share
Extract public X (Twitter) posts into clean, duplicate-free JSON with engagement metrics, author profiles, and media.
Store promise: never fabricates posts to hit a quota. Empty or blocked sources → warnings + receipt, not filler rows.
No buyer API keys. Paste handles, URLs, search terms, lists, or conversation IDs — pay only for delivered unique posts.
Why this Actor
| Need | What you get |
|---|---|
| Reliable post lookup | Public status URLs work with zero keys (public embed path) |
| Profiles, search, lists, threads | When the publisher enables a data transport (buyers still paste nothing) |
| Enriched fields | Likes, reposts, replies, quotes, views, bookmarks, author meta, media, reply/quote/retweet flags |
| Advanced search | Filters for users, language, verified, media, links, min engagement, date range |
| Clean pipelines | Canonical URLs, post-ID dedupe, exact maxResults (up to 50,000) |
| Transparent billing | PPE only for delivered unique posts; receipt is never billed |
Quick start
Public post URLs (zero secrets)
{"postUrls": ["https://x.com/OpenAI/status/1950240351547248941"],"maxResults": 20}
Handles + search
{"handles": ["Apify"],"searchTerms": ["web scraping"],"searchType": "Latest","language": "en","excludeRetweets": true,"maxResults": 50,"includeReplies": false}
Lists + conversations + filters
{"listUrls": ["https://x.com/i/lists/1234567890"],"conversationIds": ["1950240351547248941"],"fromUsers": ["OpenAI"],"minLikes": 10,"sinceDate": "2026-01-01","maxResults": 100}
Buyers never configure tokens. If timelines/search are unavailable, the run warns and still processes any post URLs it can resolve.
Output
record_type | Description | Billed? |
|---|---|---|
post | One unique validated public post | Yes → validated-unique-post |
receipt | Counts, transport, resource plan, warnings | Never |
Example post (enriched)
{"record_type": "post","id": "1950240351547248941","url": "https://x.com/OpenAI/status/1950240351547248941","text": "…","author_handle": "OpenAI","author_name": "OpenAI","author": {"handle": "OpenAI","name": "OpenAI","is_blue_verified": true,"followers_count": 1000000,"profile_image_url": "https://…"},"published_at": "2025-07-30T12:00:00+00:00","language": "en","conversation_id": "1950240351547248941","is_reply": false,"is_quote": false,"is_retweet": false,"like_count": 1200,"retweet_count": 340,"reply_count": 88,"quote_count": 12,"view_count": 50000,"bookmark_count": 90,"media": [],"source": "x_data_api"}
source is one of: x_public_oembed | x_api_v2 | x_data_api (never names an upstream vendor).
Pricing (pay-per-event)
| Event | When | Paid plans (≈) | Free plan (≈) |
|---|---|---|---|
validated-unique-post | Each unique post delivered | $0.34–$0.40 / 1K | $8.00 / 1K (deterrent) |
| Plan | USD / post | USD / 1K |
|---|---|---|
| FREE | $0.00800 | $8.00 |
| BRONZE | $0.00040 | $0.40 |
| SILVER | $0.00039 | $0.39 |
| GOLD | $0.00037 | $0.37 |
| PLATINUM | $0.00035 | $0.35 |
| DIAMOND | $0.00034 | $0.34 |
Not billed: receipts, duplicates, empty runs, warnings, failed fetches.
How keys work (publisher vs buyer)
| Role | What they do |
|---|---|
| Buyer (Store user) | Input JSON only — no OpenAI, no X developer account, no third-party keys |
| Publisher | Sets a data transport once on the Actor so handles/search/lists work for everyone |
This matches market leaders: “No API key” for the person running the Actor.
AI/sentiment is not bundled — export JSON and analyze in your own stack (or a separate analysis Actor later).
Input fields
| Field | Description |
|---|---|
postUrls | Public status URLs |
handles | Profile timelines |
searchTerms | Search queries (supports X advanced-search operators) |
listUrls | Public list URLs |
conversationIds | Root tweet IDs for thread/conversation pull |
maxResults | Unique post cap (1–50,000) |
includeReplies | Include replies on profile timelines |
searchType | Latest or Top (third-party search) |
fromUsers / mentionUsers | Author / mention filters |
language | ISO 639-1 code (e.g. en) |
onlyVerified / mediaOnly / linksOnly | Boolean search filters |
excludeReplies / excludeRetweets | Drop replies / retweets from search |
minLikes / minRetweets | Minimum engagement (third-party transport) |
sinceDate / untilDate | YYYY-MM-DD date bounds |
maxConcurrency | Parallel fetches (1–16) |
resourceProfile | safe / speed / manual |
memoryMbytes | Preferred run memory |
Memory
Dynamic defaults typically 512–2048 MB (max 4096). Console override wins.
Limitations
- Public oEmbed path is for status URLs, not firehose search without publisher transport.
- Search windows depend on the publisher’s data transport (official X recent search is often ~7 days).
minLikes/minRetweetsapply on the third-party transport; official X API ignores them with a warning.- Private/suspended posts fail with a warning — no synthetic substitutes.
- Comply with X Terms and applicable law for your use case.
Support
Include run ID + receipt when reporting issues. Target: first response within 24 hours when published.
Changelog
See ../CHANGELOG.md.