SFOLN

Catalogue / Social media data

Twitter Mentions Scraper (X)

sfoln/x-user-mentions · Social media, News, Lead generation On request

Scrape the latest public X (Twitter) posts that mention any @handle: text, date, author, likes, reposts, replies, views, media and links, one JSON row per mention, with an optional date window. $0.70 per 1,000 mentions; accounts without mentions are free.

About

What it does

Twitter Mentions Scraper (X) gets the latest public X (Twitter) posts that mention an account (@handle) as clean, flat records: text, timestamp, author (handle, name, followers, blue check), likes, reposts, replies, quotes, views, bookmarks, media, hashtags, mentions and expanded links. Optional date window. Built for brand monitoring, customer support triage, PR and campaign tracking, influencer discovery and social-listening dashboards.

Price

Price per delivered record

EventPricePer 1,000Charged for
X mention
x-mention
$0.0007$0.70 / 1,000Charged once per post mentioning the account delivered to the dataset. Per-account summary rows are free.

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-user-mentions/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"handles":["apify"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/x-user-mentions"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~x-user-mentions/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: Get the 60 latest posts that mention @apify on X and flag any complaints or support questions.

Input

Input fields

Paste X (Twitter) handles. The Actor returns recent posts that mention each account (newest first), one dataset record per post, plus one summary record per account.

FieldTypeDefaultMeaning
handles *arrayrequiredHandles or profile URLs
X handles (with or without @) or profile URLs, one per line. Duplicates are removed. Accounts on the Apify free plan can process up to 10 accounts per run.
maxMentionsPerUserinteger20Max mentions per account
How many of the most recent mentions to return per account (20–200). Mentions are fetched in pages of 20, so the minimum is one page. Range 20–200.
sincestring—Since (date)
Only mentions on or after this date/time (YYYY-MM-DD, ISO date-time, or unix seconds). Optional.
untilstring—Until (date)
Only mentions before this date/time (YYYY-MM-DD, ISO date-time, or unix seconds). Optional.
maxItemsinteger1000Max accounts
Safety cap on the number of accounts processed in this run. Range 1–10000.
concurrencyinteger3Concurrency
Accounts processed in parallel (1–5). Range 1–5.
itemTimeoutSecsinteger300Per-account time limit (seconds)
Stop paginating an account after this long; rows already delivered are kept. Range 30–1800.
includeRawbooleanfalseInclude raw upstream response
Attach the unmodified TwitterAPI.io payload to each record under `raw` (larger output).
Example input
{
  "handles": [
    "apify"
  ]
}

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 (result rows are always ok) 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).
recordTypestringRow type
mention (one per mentioning post, charged) | user-summary (one per input account, free).
mentionedHandlestring | nullMentioned account
The input account that is mentioned.
idstring | nullPost id
Numeric post (tweet) id as a string.
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.
postedViastring | nullPosted via
Client app used to post.
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.
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.
handlestring | nullHandle
Account handle (summary rows).
mentionsReturnedinteger | nullMentions returned
Mentions delivered for this account (summary rows).
pagesFetchedinteger | nullPages fetched
Upstream pages fetched (summary rows).
stopReasonstring | nullStop reason
limit | end | budget | deadline | empty_pages | max_pages | error (summary rows).
Example record
{
  "input": "apify",
  "recordType": "mention",
  "mentionedHandle": "apify",
  "id": "1845100000000000002",
  "url": "https://x.com/someone/status/1845100000000000002",
  "text": "Loving the new @apify actors https://apify.com/store",
  "createdAt": "2026-10-12T18:00:00.000Z",
  "lang": "en",
  "postedVia": "Twitter Web App",
  "authorHandle": "someone",
  "authorId": "77",
  "authorName": "Some One",
  "authorFollowers": 321,
  "authorIsBlueVerified": true,
  "likes": 9,
  "retweets": 2,
  "replies": 0,
  "quotes": 0,
  "views": 400,
  "bookmarks": 1,
  "isReply": false,
  "inReplyToId": null,
  "inReplyToUserId": null,
  "inReplyToHandle": null,
  "conversationId": "1845100000000000002",
  "isRetweet": false,
  "retweetedTweetId": null,
  "isQuote": false,
  "quotedTweetId": null,
  "hashtags": [],
  "mentions": [
    "apify"
  ],
  "urls": [
    "https://apify.com/store"
  ],
  "media": [],
  "mediaCount": 0,
  "status": "ok",
  "charged": true,
  "chargedEvent": "x-mention",
  "source": "twitterapi",
  "fetchedAt": "2026-10-14T10:00:00.000Z"
}

Machine-readable

This page for agents