Twitter/X Engaged Audience Exporter · Replies + Retweeters avatar

Twitter/X Engaged Audience Exporter · Replies + Retweeters

Pricing

from $0.45 / 1,000 unique engaged people

Go to Apify Store
Twitter/X Engaged Audience Exporter · Replies + Retweeters

Twitter/X Engaged Audience Exporter · Replies + Retweeters

Build a deduplicated audience from public tweet replies and retweets, with explicit relationship edges, bounded profile enrichment, JSON/CSV exports, and honest partial or empty summaries.

Pricing

from $0.45 / 1,000 unique engaged people

Rating

0.0

(0)

Developer

Data Slayer

Data Slayer

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Twitter/X Engaged Audience Exporter

Turn public tweet replies and retweets into a deduplicated audience plus explicit person-to-tweet relationship edges for research, outreach preparation, CRM imports, and engagement analysis.

Watch the demo

YouTube video coming soon.

What this Actor does

Paste up to 25 public X/Twitter post URLs or numeric tweet IDs. The Actor checks replies, retweets, or both, normalizes the public account details it can retrieve, collapses the same person across posts and engagement types, and writes two typed record kinds:

  • person: one row per unique public account found during the run.
  • engagement_edge: one row per unique account-to-post reply or retweet relationship.

This is different from a raw comments export. A person who replied twice and retweeted the same post appears once in the audience table, while the distinct relationships remain available in the edge table.

Supported engagement types

TypeIncludedNotes
RepliesYesReturns public reply authors and, when available, reply text and thread identifiers.
RetweetsYesReturns public retweeter accounts.
QuotesNoQuote-author coverage is not part of this version.
LikesNoLiker lists are not part of this version.

The Actor reports complete, partial, empty, unavailable, and failed tweet outcomes separately. “Complete” means all selected routes reached a normal stopping condition within the configured limits; it is not a claim that X exposes every historical engagement.

Input

FieldTypeDefaultLimitsPurpose
tweetUrlsstring[]required1–25Public x.com or twitter.com status URLs, or numeric tweet IDs. Duplicate IDs are processed once.
engagementTypesstring[]reply, retweetone or bothSelect the relationship types to collect.
maxPeoplePerTweetinteger2501–1,000Bounds each selected engagement type for each input tweet.
maxUniquePeopleinteger10001–5,000Global cap after cross-post deduplication.
includeProfileDetailsbooleanfalse—Add a bounded profile snapshot to unique-person rows.
maxProfileLookupsinteger1001–500Maximum profile enrichment attempts when enrichment is enabled.

Free-plan runs are limited to one tweet, 50 unique people, and no profile enrichment. Paid-plan limits follow the values above.

{
"tweetUrls": [
"https://x.com/apify/status/2021770553154285890",
"2021770553154285891"
],
"engagementTypes": ["reply", "retweet"],
"maxPeoplePerTweet": 250,
"maxUniquePeople": 1000,
"includeProfileDetails": false,
"maxProfileLookups": 100
}

Output

The default dataset contains only paid value records. Run status and diagnostics are stored in the default key-value store under OUTPUT; status records are never inserted as billable dataset items.

Unique-person row

{
"recordType": "person",
"personKey": "id:44196397",
"userId": "44196397",
"username": "example_user",
"name": "Example User",
"bio": "Public profile biography",
"profileUrl": "https://x.com/example_user",
"profileImageUrl": "https://pbs.twimg.com/profile_images/example.jpg",
"followersCount": 4200,
"followingCount": 380,
"verified": false,
"blueVerified": false,
"engagementTypes": ["reply", "retweet"],
"sourceTweetIds": ["2021770553154285890"],
"sourceTweetUrls": ["https://x.com/i/status/2021770553154285890"],
"edgeCount": 2,
"firstEngagedAt": "2026-09-20T11:23:45Z",
"lastEngagedAt": "2026-09-20T11:23:45Z",
"profile": null,
"enrichmentStatus": "not_requested",
"collectedAt": "2026-09-21T00:00:00Z"
}

Engagement-edge row

{
"recordType": "engagement_edge",
"edgeId": "4e3a8ca84184ce3ea62d8d02be9f14ea",
"sourceTweetId": "2021770553154285890",
"sourceTweetUrl": "https://x.com/i/status/2021770553154285890",
"personKey": "id:44196397",
"userId": "44196397",
"username": "example_user",
"engagementType": "reply",
"engagementTweetId": "2021770553154285999",
"engagementTweetUrl": "https://x.com/i/status/2021770553154285999",
"parentTweetId": "2021770553154285890",
"conversationId": "2021770553154285890",
"text": "Useful launch notes—thanks for sharing.",
"engagedAt": "2026-09-20T11:23:45Z",
"replyDepth": 1,
"collectedAt": "2026-09-21T00:00:00Z"
}

null means the field was not available for that account or relationship. Counts are numbers when available. JSON arrays remain arrays; CSV exports flatten nested fields according to Apify’s export rules.

Run summary and failure behavior

Open the OUTPUT record in the run’s key-value store to see:

  • accepted and duplicate input counts;
  • complete, partial, empty, and failed tweet counts;
  • successful and failed engagement-type checks;
  • unique people and edges found versus saved;
  • deduplicated edge count;
  • profile enrichment outcomes;
  • reached limits and stable functional error codes.

A private, deleted, or unavailable tweet is not presented as a successful empty result. If one selected engagement type works and another does not, the tweet is marked partial and usable records from the successful type remain available. Transient rate limits, timeouts, and service errors receive bounded retries. Repeated cursors terminate safely.

Pricing

This Actor uses pay-per-event pricing:

  • one Actor-start event per run;
  • one tweet-scan event only when at least one selected engagement source is successfully checked, including a valid empty result;
  • one unique-person event per saved person row;
  • one edge event per saved engagement_edge row;
  • one profile-enrichment event only when optional profile details are successfully returned and added.

Failed lookups and status summaries are not billed as dataset results. Use Apify’s maximum-charge setting plus maxPeoplePerTweet, maxUniquePeople, and maxProfileLookups to control spend.

Common workflows

  • Build a deduplicated launch-engager list from several campaign tweets.
  • Join reply text to public account identities for sentiment or moderation analysis.
  • Separate people who replied from people who retweeted.
  • Load unique people into a CRM while retaining auditable source-post edges.
  • Schedule repeated exports and compare snapshots downstream using stable tweet, user, and edge IDs.

Limitations and responsible use

  • Only public data that is available at run time can be returned.
  • Coverage can vary by post age, visibility, account privacy, deletion, and platform behavior.
  • Limits prevent unbounded collection; a successful bounded run is not a completeness guarantee.
  • This version does not return likes/likers or quote authors.
  • This Actor is independent and is not affiliated with or endorsed by X Corp.
  • Public profile and engagement data can still be personal data. You are responsible for a lawful purpose, data minimization, retention, and honoring applicable privacy and platform rules.

API and automation

Run the Actor from Apify Console, the Apify API, schedules, webhooks, or integrations. Results are available as JSON, CSV, Excel, and other dataset export formats supported by Apify. Filter recordType == "person" for the deduplicated audience and recordType == "engagement_edge" for the relationship graph.

Support

Open an issue on the Actor page with the run ID, the affected tweet ID, and the functional error code from OUTPUT. Do not post private credentials or personal access tokens.

FAQ

How much does it cost to run this Actor? Pricing is listed in the Pricing section above, charged per row returned. You only pay for the rows the Actor actually produces, so a small test run costs cents.

Do I need cookies or a login? No. This Actor reads public data only - no cookies, no account, no browser automation.

Can I schedule it? Yes. Run it from the Apify API, on a schedule, or via a webhook, and export results as JSON, CSV or Excel.

What if I need a slightly different output? Open an issue on the Actor's Issues tab describing the shape you need.

More Twitter actors from the same portfolio. Apify only auto-recommends actors in the same category, so here are the rest of ours:

Actor
Twitter/X Comments Scraper · No Cookies
Twitter/X Community Members Scraper · No Cookies
Twitter/X Followers Scraper · No Cookies
Twitter/X Following Scraper · Public Profiles
Twitter/X List Members Scraper · No Cookies
Twitter/X Profile Scraper · Bulk Handles, URLs & IDs
Twitter/X Search Scraper · Small Jobs & Advanced Queries
Twitter/X Trends Scraper · No Cookies
Twitter/X Tweet Details Scraper · URL or ID
Twitter/X Tweets Scraper · No Cookies