X / Twitter Scraper — Clean Data API avatar

X / Twitter Scraper — Clean Data API

Pricing

from $0.25 / 1,000 validated unique posts

Go to Apify Store
X / Twitter Scraper — Clean Data API

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

Ladra Software

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

20 days ago

Last modified

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

NeedWhat you get
Reliable post lookupPublic status URLs work with zero keys (public embed path)
Profiles, search, lists, threadsWhen the publisher enables a data transport (buyers still paste nothing)
Enriched fieldsLikes, reposts, replies, quotes, views, bookmarks, author meta, media, reply/quote/retweet flags
Advanced searchFilters for users, language, verified, media, links, min engagement, date range
Clean pipelinesCanonical URLs, post-ID dedupe, exact maxResults (up to 50,000)
Transparent billingPPE 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": ["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_typeDescriptionBilled?
postOne unique validated public postYesvalidated-unique-post
receiptCounts, transport, resource plan, warningsNever

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)

EventWhenPaid plans (≈)Free plan (≈)
validated-unique-postEach unique post delivered$0.34–$0.40 / 1K$8.00 / 1K (deterrent)
PlanUSD / postUSD / 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)

RoleWhat they do
Buyer (Store user)Input JSON only — no OpenAI, no X developer account, no third-party keys
PublisherSets 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

FieldDescription
postUrlsPublic status URLs
handlesProfile timelines
searchTermsSearch queries (supports X advanced-search operators)
listUrlsPublic list URLs
conversationIdsRoot tweet IDs for thread/conversation pull
maxResultsUnique post cap (1–50,000)
includeRepliesInclude replies on profile timelines
searchTypeLatest or Top (third-party search)
fromUsers / mentionUsersAuthor / mention filters
languageISO 639-1 code (e.g. en)
onlyVerified / mediaOnly / linksOnlyBoolean search filters
excludeReplies / excludeRetweetsDrop replies / retweets from search
minLikes / minRetweetsMinimum engagement (third-party transport)
sinceDate / untilDateYYYY-MM-DD date bounds
maxConcurrencyParallel fetches (1–16)
resourceProfilesafe / speed / manual
memoryMbytesPreferred 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 / minRetweets apply 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.