X (Twitter) Likes and Reposts Scraper | $0.12/1K | Per Account
Pricing
from $0.10 / 1,000 post returneds
X (Twitter) Likes and Reposts Scraper | $0.12/1K | Per Account
See what an X (Twitter) account reacts to, not what it publishes. Export the posts it reposted, replied to or liked, each with the original author and full engagement metrics. The intent signal a timeline never shows, for lead scoring and account research. JSON, CSV or Excel. By FeedMiner.
Pricing
from $0.10 / 1,000 post returneds
Rating
0.0
(0)
Developer
FeedMiner
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
🧭 Reactions beat broadcasts. A prospect's own timeline is marketing. What they repost at 11pm is what they actually care about, and that is what this exports.
💸 $0.12 per 1,000 posts, down to $0.10 on the larger Apify plans. No start fee, and a run that returns nothing costs nothing.
🔗 Full posts, not just links. Every row is the reposted or answered post itself, with its text, its original author and its engagement, so the export reads without a second lookup.
🧾 Honest about the likes tab. X made likes private by default in 2024. When a likes run comes back empty, the message says the account keeps its likes private rather than blaming your credentials.
| FeedMiner · X (Twitter) suite • Posts, profiles, audiences, media, trends | ||
➤ You are here | Trending topics by country · $0.16/1K trends | Search, threads, lists, communities · $0.12/1K tweets |
Copy to your AI assistant
feedminer/x-signals-scraper on Apify. Exports what X (Twitter) accounts react to: reposts, replies, likes. One row per post with account (whose signal), signal (reposts|replies|likes), text, url, createdAt, engagement counts and the original author. Call ApifyClient("TOKEN").actor("feedminer/x-signals-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Input: handles (string[]), signals (string[] of reposts|replies|likes), maxItems (int), sessions (array, optional). Note X made third party likes private in 2024, so the likes surface can legitimately return nothing. Full spec: GET https://api.apify.com/v2/acts/feedminer~x-signals-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
How to scrape what an X (Twitter) account reacts to
Basic: what a prospect reposts
{ "handles": ["paulg"], "signals": ["reposts"], "maxItems": 200 }
Who they talk to
{ "handles": ["paulg"], "signals": ["replies"], "maxItems": 300 }
Replies show the accounts a person actually converses with, which is a relationship map their following list only hints at.
Both signals for a shortlist of prospects
{"handles": ["ceo1", "ceo2", "ceo3"],"signals": ["reposts", "replies"],"maxItems": 3000}
Try the likes tab
{ "handles": ["someaccount"], "signals": ["likes"], "maxItems": 200 }
Some accounts still expose it. When one does not, the run says so for that account and keeps going with the rest.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
handles | array | Accounts to read, as handles or profile URLs | |
signals | array | ['reposts'] | Reposts and replies are the reliable ones. X made the likes tab private in 2024, so likes often come back empty even with an account |
maxItems | integer | 1000 | Stop once this many posts have been collected |
Advanced
| Parameter | Type | Default | Description |
|---|---|---|---|
sessions | array | Optional. The Actor works without one. X accounts of your own, for anyone who would rather the run used accounts they control | |
debugMode | boolean | false | Verbose logs for support |
Nothing to connect
Paste handles and press Start. There is no account to create, no cookie to copy and nothing to keep alive on your side.
If you would rather the run worked from accounts you own, the optional sessions field takes them. Several can be given at once and the work spreads across them.
About the likes tab
X made the likes of an account private by default in 2024. A likes run can therefore come back empty for an account that simply keeps them private, which is not a failure and not a credential problem. The run says which account produced nothing and why. Reposts and replies are unaffected.
What data can you extract?
| Field | Type | Description |
|---|---|---|
account | string | Whose signal this is, the handle you asked for |
signal | string | reposts, replies or likes |
text | string | The post text |
url | string | Direct link to the post |
createdAt | string | Publication date, RFC 3339 |
lang | string | Language X detected |
likeCount retweetCount replyCount quoteCount viewCount | integer | Engagement on the post |
isReply isQuote isRetweet | boolean | What kind of post this is |
inReplyToUsername | string | Who is being answered, on a reply |
author | object | The original author: handle, name, bio, followers, verification |
hashtags mentions links media | array | Entities in the post |
Pricing: Pay Per Event (PPE)
| Event | Price |
|---|---|
| Post returned | $0.00012 |
That is $0.12 per 1,000 posts, with no start fee and no charge for a run that returns nothing. The price steps down on its own for the larger Apify plans, to $0.11 and then $0.10 per 1,000.
What a run costs
| One prospect's reposts, 200 posts | $0.024 |
| A hundred prospects, 20,000 posts | $2.40 |
Free tier
The Apify free plan includes $5 of usage every month, which is roughly 41,000 posts here. No card required.
Advanced usage
Qualify a lead list. Feed a hundred prospect handles, pull their reposts, and count how many amplified a competitor. That column ranks the list better than firmographics.
Map a relationship graph. replies plus inReplyToUsername gives the accounts a person actually engages with, which is where warm introductions come from.
Track a topic through people. The posts a set of accounts repost, grouped by the original author, shows who the category listens to.
Time it. createdAt on the reacted post plus the account's own posting hours tells you when a prospect is on X, which is when your outreach lands.
Watch a shift. Run the same handles monthly and compare which authors they amplify. A change in who someone reposts is often the first sign of a change in what they buy.
Integrate X reaction data into your stack
Python
from apify_client import ApifyClientfrom collections import Counterclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("feedminer/x-signals-scraper").call(run_input={"handles": ["ceo1", "ceo2", "ceo3"],"signals": ["reposts"],"maxItems": 2000,})rows = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(Counter(r["author"]["userName"] for r in rows).most_common(10))
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('feedminer/x-signals-scraper').call({handles: ['paulg'],signals: ['replies'],maxItems: 300,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const talksTo = new Set(items.map((i) => i.inReplyToUsername).filter(Boolean));
No code
Send rows to Google Sheets, Airtable, Slack, Zapier, Make or n8n from the Integrations tab of the run.
Performance
| Measure | Value |
|---|---|
| Parallelism | One worker per account supplied, up to eight |
| Partial results | Kept and delivered when a limit is reached |
FAQ
Do I need an X account?
No. Paste handles and press Start. The optional sessions field is there for anyone who would rather run on accounts they own.
Why did the likes come back empty? Because that account keeps its likes private, which X now does by default. The run tells you which account, and reposts and replies still work.
Is my account at risk? The run reads at browsing pace, one page at a time, and steps back as soon as X pushes back. Use a secondary account, as you would with any third party tool.
How far back does it go?
As deep as X paginates the timeline, newest first, up to your maxItems.
Do I get the original author of a repost?
Yes, author is the author of the reposted post, and account is the one who reposted it.
Can I tell a quote from a plain repost?
Yes, isQuote and isRetweet are on every row.
Can I run this on hundreds of handles?
Yes. Give several accounts in sessions so the work spreads, and raise maxItems to match.
What if a handle does not exist? It is reported and skipped, and everything else in the run is delivered.
Support
An account that returns nothing, a signal you need, a shape that does not fit your pipeline: write from the actor page.
Legal compliance
This actor reads timelines that X publishes on public profiles. It does not access private accounts, protected posts or direct messages. Personal data in the output is subject to GDPR, CCPA and similar regimes: collect what you have a lawful basis to collect, keep it only as long as you need it, and honour deletion requests.
FeedMiner · Fast, honestly priced scrapers, kept alive when platforms change.
X Tweet Scraper · X Profile Scraper · X Follower Scraper · X Advanced Search Scraper · X Media Scraper · X Mentions Monitor · X Engagement Scraper · X Likes and Reposts Scraper · X Trends Scraper · All FeedMiner Actors