SFOLN

Catalogue / Social media data

Tweet Lookup API – Tweets by ID or URL

sfoln/x-posts-lookup · Social media, News, Lead generation On request

Look up X (Twitter) posts by ID or URL in bulk: full text, author, date, likes, reposts, replies, quotes, views, media, hashtags and reply or quote links, one record per post. Deleted or protected posts are flagged as not_found. $0.70 per 1,000 posts.

About

What it does

Tweet Lookup API – Tweets by ID or URL fetches X (Twitter) posts by ID or URL in bulk and returns one normalized record per requested post: full text, author, timestamp, likes, reposts, replies, quotes, views, bookmarks, media (incl. best MP4), hashtags, mentions, links, and reply / quote / repost relations. Ideal for refreshing engagement on a list of posts, enriching links collected elsewhere, verifying whether posts still exist, and feeding LLM pipelines.

Price

Price per delivered record

EventPricePer 1,000Charged for
X post
x-post-looked-up
$0.0007$0.70 / 1,000Charged once per requested post id or URL for which the post was returned, or for which the upstream confirmed it does not exist (deleted, protected or never existed).

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

This API is private on Apify for now. Email us and we will publish it for you, usually within two working days. The calls below work once it is public. contact@sfoln.com

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~x-posts-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"posts":["https://x.com/jack/status/20"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/x-posts-lookup"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~x-posts-lookup/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Fetch the post https://x.com/jack/status/20 and report its text, author, likes, reposts and views.

Input

Input fields

Paste post (tweet) ids or x.com / twitter.com status URLs. Each requested post produces exactly one dataset record.

FieldTypeDefaultMeaning
posts *arrayrequiredPost ids or URLs
Numeric post ids or status URLs such as https://x.com/jack/status/20, one per line. Duplicates are removed. Accounts on the Apify free plan can process up to 10 posts per run.
maxItemsinteger10000Max posts
Safety cap on the number of posts looked up in this run. Range 1–100000.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified TwitterAPI.io payload to each record under `raw` (larger output).
Example input
{
  "posts": [
    "https://x.com/jack/status/20"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The input item this record corresponds to.
statusstringStatus
ok | not_found | error | skipped_invalid | skipped_budget | skipped_free_plan e.g. "ok"
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
Pay-per-event event charged for this record.
sourcestringSource
Upstream data source (twitterapi = TwitterAPI.io).
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
code / message when status is not ok.
warningsarrayWarnings
Non-fatal notes (e.g. stopped early).
tweetIdstringRequested id
Post id extracted from the input.
foundbooleanFound
true when the post was returned.
idstring | nullPost id
Numeric post (tweet) id as a string. e.g. "20"
urlstring | nullURL
Link to the post on x.com.
textstring | nullText
Full post text.
createdAtstring | nullCreated at
ISO 8601 creation time.
langstring | nullLanguage
Language code detected by X.
authorHandlestring | nullAuthor handle
Author's @handle without @.
authorIdstring | nullAuthor id
Author's numeric user id.
authorNamestring | nullAuthor name
Author display name.
authorFollowersinteger | nullAuthor followers
Author follower count at fetch time.
authorIsBlueVerifiedboolean | nullAuthor blue verified
Author has a blue check.
likesinteger | nullLikes
Like count.
retweetsinteger | nullReposts
Repost (retweet) count.
repliesinteger | nullReplies
Reply count.
quotesinteger | nullQuotes
Quote count.
viewsinteger | nullViews
View count (null when X does not report it).
bookmarksinteger | nullBookmarks
Bookmark count.
isReplybooleanIs reply
Post is a reply.
inReplyToIdstring | nullIn reply to post
Parent post id.
inReplyToUserIdstring | nullIn reply to user id
Parent author id.
inReplyToHandlestring | nullIn reply to handle
Parent author handle.
conversationIdstring | nullConversation id
Root post id of the thread.
isRetweetbooleanIs repost
Post is a repost (retweet).
retweetedTweetIdstring | nullReposted post id
Original post id for reposts.
isQuotebooleanIs quote
Post quotes another post.
quotedTweetIdstring | nullQuoted post id
Quoted post id.
hashtagsarrayHashtags
Hashtags without #.
mentionsarrayMentions
Mentioned handles without @.
urlsarrayLinks
Expanded links in the post.
mediaarrayMedia
Photos / videos: type, url, videoUrl (best MP4), expandedUrl.
mediaCountintegerMedia count
Number of attached media items.
postedViastring | nullPosted via
Client app used to post (e.g. Twitter for iPhone).
Example record
{
  "input": "https://x.com/jack/status/20",
  "tweetId": "20",
  "found": true,
  "id": "20",
  "url": "https://x.com/jack/status/20",
  "text": "just setting up my twttr",
  "createdAt": "2006-03-21T20:50:14.000Z",
  "lang": "en",
  "postedVia": "Twitter Web Client",
  "authorHandle": "jack",
  "authorId": "12",
  "authorName": "jack",
  "authorFollowers": 6500000,
  "authorIsBlueVerified": false,
  "likes": 300000,
  "retweets": 120000,
  "replies": 15000,
  "quotes": 9000,
  "views": null,
  "bookmarks": 2000,
  "isReply": false,
  "inReplyToId": null,
  "inReplyToUserId": null,
  "inReplyToHandle": null,
  "conversationId": "20",
  "isRetweet": false,
  "retweetedTweetId": null,
  "isQuote": false,
  "quotedTweetId": null,
  "hashtags": [],
  "mentions": [],
  "urls": [],
  "media": [],
  "mediaCount": 0,
  "status": "ok",
  "charged": true,
  "chargedEvent": "x-post-looked-up",
  "source": "twitterapi",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents