# Twitter Mentions Scraper (X) (`sfoln/x-user-mentions`)

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.

- Family: Social media data
- Categories: Social media, News, Lead generation
- Availability: on request (private on Apify). Email contact@sfoln.com with subject "Access request: Twitter Mentions Scraper (X) (sfoln/x-user-mentions)" before calling; calls fail until it is public.
- JSON: https://www.sfoln.com/actors/x-user-mentions.json
- MCP: https://mcp.apify.com?tools=sfoln/x-user-mentions
- REST (sync): POST https://api.apify.com/v2/actors/sfoln~x-user-mentions/run-sync-get-dataset-items
- REST (async): POST https://api.apify.com/v2/actors/sfoln~x-user-mentions/runs

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 per delivered record

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

Pay-per-event, USD, billed by Apify; no platform usage charge. Only records with status `ok` are charged. Cap a run with `maxTotalChargeUsd`. Apify free plan: up to 10 per run.

## Run

```bash
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 client configuration:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/x-user-mentions"
    }
  }
}
```

Example prompt: Get the 60 latest posts that mention @apify on X and flag any complaints or support questions.

## Input

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.

| Field | Type | Default | Meaning |
| --- | --- | --- | --- |
| `handles` (required) | array | — | Handles 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. |
| `maxMentionsPerUser` | integer | `20` | Max 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. |
| `since` | string | — | Since (date): Only mentions on or after this date/time (YYYY-MM-DD, ISO date-time, or unix seconds). Optional. |
| `until` | string | — | Until (date): Only mentions before this date/time (YYYY-MM-DD, ISO date-time, or unix seconds). Optional. |
| `maxItems` | integer | `1000` | Max accounts: Safety cap on the number of accounts processed in this run. |
| `concurrency` | integer | `3` | Concurrency: Accounts processed in parallel (1–5). |
| `itemTimeoutSecs` | integer | `300` | Per-account time limit (seconds): Stop paginating an account after this long; rows already delivered are kept. |
| `includeRaw` | boolean | `false` | Include raw upstream response: Attach the unmodified TwitterAPI.io payload to each record under `raw` (larger output). |

Example input:

```json
{
  "handles": [
    "apify"
  ]
}
```

## Output

One record per input item with `status` (`ok` is charged; `not_found`, `error`, `skipped_*` are free) and `charged`. The run stores an `OUTPUT` summary record.

| Field | Type | Meaning |
| --- | --- | --- |
| `input` | string | object | Input: The input item this record corresponds to. |
| `status` | string | Status: ok \| not_found \| error \| skipped_invalid \| skipped_budget \| skipped_free_plan (result rows are always ok) |
| `charged` | boolean | Charged: Whether this record incurred a pay-per-event charge. |
| `chargedEvent` | string | Charged event: Pay-per-event event charged for this record. |
| `source` | string | Source: Upstream data source (twitterapi = TwitterAPI.io). |
| `fetchedAt` | string | Fetched at: ISO timestamp. |
| `error` | object | Error: code / message when status is not ok. |
| `warnings` | array | Warnings: Non-fatal notes (e.g. stopped early). |
| `recordType` | string | Row type: mention (one per mentioning post, charged) \| user-summary (one per input account, free). |
| `mentionedHandle` | string | null | Mentioned account: The input account that is mentioned. |
| `id` | string | null | Post id: Numeric post (tweet) id as a string. |
| `url` | string | null | URL: Link to the post on x.com. |
| `text` | string | null | Text: Full post text. |
| `createdAt` | string | null | Created at: ISO 8601 creation time. |
| `lang` | string | null | Language: Language code detected by X. |
| `postedVia` | string | null | Posted via: Client app used to post. |
| `authorHandle` | string | null | Author handle: Author's handle without @. |
| `authorId` | string | null | Author id: Author's numeric user id. |
| `authorName` | string | null | Author name: Author display name. |
| `authorFollowers` | integer | null | Author followers: Author follower count at fetch time. |
| `authorIsBlueVerified` | boolean | null | Author blue verified: Author has a blue check. |
| `likes` | integer | null | Likes: Like count. |
| `retweets` | integer | null | Reposts: Repost (retweet) count. |
| `replies` | integer | null | Replies: Reply count. |
| `quotes` | integer | null | Quotes: Quote count. |
| `views` | integer | null | Views: View count (null when X does not report it). |
| `bookmarks` | integer | null | Bookmarks: Bookmark count. |
| `isReply` | boolean | Is reply: Post is a reply. |
| `inReplyToId` | string | null | In reply to post: Parent post id. |
| `inReplyToUserId` | string | null | In reply to user id: Parent author id. |
| `inReplyToHandle` | string | null | In reply to handle: Parent author handle. |
| `conversationId` | string | null | Conversation id: Root post id of the thread. |
| `isRetweet` | boolean | Is repost: Post is a repost. |
| `retweetedTweetId` | string | null | Reposted post id: Original post id for reposts. |
| `isQuote` | boolean | Is quote: Post quotes another post. |
| `quotedTweetId` | string | null | Quoted post id: Quoted post id. |
| `hashtags` | array | Hashtags: Hashtags without #. |
| `mentions` | array | Mentions: Mentioned handles without @. |
| `urls` | array | Links: Expanded links in the post. |
| `media` | array | Media: Photos / videos: type, url, videoUrl (best MP4), expandedUrl. |
| `mediaCount` | integer | Media count: Number of attached media items. |
| `handle` | string | null | Handle: Account handle (summary rows). |
| `mentionsReturned` | integer | null | Mentions returned: Mentions delivered for this account (summary rows). |
| `pagesFetched` | integer | null | Pages fetched: Upstream pages fetched (summary rows). |
| `stopReason` | string | null | Stop reason: limit \| end \| budget \| deadline \| empty_pages \| max_pages \| error (summary rows). |

Example record:

```json
{
  "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"
}
```

## Related

- [Brand Monitoring – X, Reddit, News & Bluesky](https://www.sfoln.com/actors/brand-mentions-monitor.md) (`sfoln/brand-mentions-monitor`)
- [Tweet Replies Scraper (X / Twitter)](https://www.sfoln.com/actors/x-post-replies.md) (`sfoln/x-post-replies`)
- [Tweet Thread Context API – Replies & Author](https://www.sfoln.com/actors/x-post-context.md) (`sfoln/x-post-context`)
- [Twitter Profile Scraper (X)](https://www.sfoln.com/actors/x-profile-lookup.md) (`sfoln/x-profile-lookup`)

Publisher: SFOLN LLC, contact@sfoln.com. Catalogue: https://www.sfoln.com/catalog.json. Agent guide: https://www.sfoln.com/agents.md.
