X Follower Scraper | $0.15/1K Profiles | Pay-Per-Result
Pricing
from $0.00015 / followers
X Follower Scraper | $0.15/1K Profiles | Pay-Per-Result
Scrape X (Twitter) followers, following, list members, subscribers, and community members for $0.15 per 1,000 delivered profiles on every Apify plan. Filter before billing. Compare audiences. Apify bills platform usage separately. No X login. Built by Xquik. Not affiliated with X Corp.
Pricing
from $0.00015 / followers
Rating
5.0
(4)
Developer
Xquik
Maintained by CommunityActor stats
11
Bookmarked
348
Total users
64
Monthly active users
3 days ago
Last modified
Share
Scrape X (Twitter) followers, following, verified followers, List members, List subscribers, and Community members for $0.15 per 1,000 delivered profiles on every Apify plan. Apify bills platform usage separately. No X login, start fee, or query fee.
Xquik is an independent third-party service. Not affiliated with X Corp. "Twitter" and "X" are trademarks of X Corp.
What does X Follower Scraper do?
X Follower Scraper returns available public profile data for followers, following, Lists, and Communities. Each row includes its source target and relation.
Core behavior
- Filters and duplicate removal run before billing.
- One run accepts handles, numeric IDs, URLs, and short paths.
- Merge mode records shared profiles, sources, relations, and
overlapCount. - Automatic cursors request up to 300 profiles per page.
- Older cursors keep their 200-profile limit and restart when expired.
- Page logs include
fetchDurationMs,processingDurationMs,pushDurationMs,statusDurationMs, andfullPageDurationMswithout repeating targets. - Checkpoints preserve accepted rows, timing, and failure counts after restarts.
Task examples
Choose from 50 public tasks. Each has a bounded input and a matching dataset view. Every task opens with a real audience or filter. Edit it before running.
- Discover AI builders in OpenAI followers
- Build an X audience dataset for AI agents
- Collect X audience data for RAG
- Find AI SEO practitioners on X
- Compare AI brand follower overlap
- Export Twitter followers to CSV
- Analyze competitor follower overlap
- Find micro-influencers in X followers
- Export curated Twitter list members
- Analyze public X Community members
- Collect Community members for AI agents
- Create repeatable X follower snapshots
What data can X Follower Scraper extract?
| Field | Description |
|---|---|
id | Numeric X user ID |
username | Handle (without @) |
name | Display name |
description | Bio text |
followers | Follower count |
following | Following count |
statusesCount | Total tweets posted |
mediaCount | Total media uploaded |
favouritesCount | Total likes given |
verified | Combined public Blue or legacy verified flag |
verifiedType | blue, business, government, or none |
location | Self-reported location |
url | Website URL from profile |
profilePicture | Avatar URL (full-size) |
coverPicture | Banner URL |
createdAt | Account creation timestamp string from X |
sourceTarget | Handle / ID you scraped this profile from |
sourceRelation | Relation: followers, following, list_members, ... |
sourceUrl | Exact URL the profile was discovered on |
sourceTargets | All targets that matched this profile in merge mode |
sourceRelations | All relations that matched this profile in merge mode |
sourceUrls | All source URLs that matched this profile in merge mode |
overlapCount | Number of matching relation-target pairs in merge mode |
resultType | Row type in full and raw output modes |
raw | Safe source profile before Actor-specific formatting |
Rows follow the public profile contract. It covers identity, counts, verification, availability, affiliates, professional data, and biographies. Source attribution, entities, and pinned tweet IDs remain available. See OpenAPI for the exact fields.
Set outputMode: "raw" or includeRaw: true to include a raw copy of the
safe source profile. Compact mode remains the default.
verifiedOnly accepts public Blue and legacy verified profiles. Conflicting
source flags never let a false value hide a true verification state.
Viewer-relative state belongs to Xquik's fetch account, not your dataset. Follow, block, mute, DM, notification, and similar viewer flags are always removed, including from raw output.
How much does it cost to scrape X followers?
Every Apify plan costs $0.00015 per delivered profile ($0.15 per 1,000).
Apify bills your platform usage separately. Xquik applies one charge per
delivered dataset row. This covers profiles and at most 1 empty-run diagnostic.
No separate Xquik subscription applies. No separate start or query fee applies.
Each run also writes a run-report record with estimatedChargeUsd calculated
from the live pay-per-event price Apify exposes to the Actor. Every outcome
writes run-report, including no-input and invalid-input exits. Its version
field reports the exact published Actor source version.
failedTargets counts targets that stopped after a read failure. Accepted
profiles remain billable data rows. These runs use
completionReason: "partial_failure". Fast server-side pagination follows the
same reporting contract.
The default Apify timeout is 0. Runs have no time limit. The Actor follows
every live cursor until the cap or source ends. A caller can still set a finite
timeout. Then completionReason: "deadline_reached" means that limit is near.
The Actor reserves the final 15 seconds for checkpoints, rows, reports, and a
clean exit. Valid profiles remain delivered and bill once. Unfinished pagination
remains resumable.
Independent targets run concurrently. Each target keeps ordered cursor pagination. Dataset writes keep caps, deduplication, attribution, and billing atomic.
- Starts, targets, and relation selection add no separate query charge.
- Filters (
minFollowers,verifiedOnly,bioContains,locationContains,minFollowing,maxFollowing,minStatuses,maxStatuses,minAccountAgeDays,verifiedType,usernameContains,hasWebsite,hasLocation) run before a profile enters your dataset. - With
dedupeAcrossTargets: true, repeats are removed before writing. - Rows rejected by the dataset are not billed.
- No-input, invalid-input, and zero-output runs write 1 diagnostic row with
resultType: "diagnostic"and astatussuch asno-input,invalid-input, orzero-output. Filter diagnostic rows withdataset.filter(r => r.resultType !== "diagnostic").
Set maxTotalChargeUsd in the Apify API, or Max cost per run in Console, to
hard-cap spend. Apify exposes that limit to the Actor as
ACTOR_MAX_TOTAL_CHARGE_USD, and the Actor stops before accepting rows beyond
it. Leave maxItems empty to let the run return as many profiles as the spend
cap allows. Set maxItems only when you want a smaller result cap than the
budget would allow.
How do I use X Follower Scraper to scrape follower data?
1. Paste profile or list URLs
Paste profile, List, or Community URLs. The scraper routes each URL to its relation:
{"startUrls": [{ "url": "https://x.com/nasa/followers" },{ "url": "https://x.com/spacex/verified_followers" },{ "url": "https://x.com/elonmusk/following" },{ "url": "https://x.com/i/lists/1748648376080666720/members" },{ "url": "https://x.com/i/communities/1493446837214187523/members" }],"maxItems": 5000}
2. Bulk handles
Shorthand for many /<handle>/followers targets. Usernames accept @ or no
prefix:
{"twitterHandles": ["elonmusk", "nasa", "openai"],"relation": "followers","maxItems": 1000}
Set relation to followers, following, or verified_followers to switch
what is scraped for every handle.
Aliases accepted for the same input include username, usernames, and
user_names.
3. Multi-relation runs
{"usernames": ["nasa"],"relations": ["followers", "following"],"maxItems": 1000}
You can also use booleans such as getFollowers, getFollowing,
getVerifiedFollowers, getListMembers, getListFollowers, and
getCommunityMembers.
4. Scrape by numeric user, list, or community IDs
{"userIds": ["44196397"],"listIds": ["1748648376080666720"],"communityIds": ["1493446837214187523"],"relation": "followers","maxItemsPerTarget": 500,"maxItems": 1500}
Aliases accepted for numeric user IDs include twitterUserIds and user_ids.
relation applies to numeric user IDs. List IDs default to members. Community
IDs always use members. maxItemsPerTarget prevents the first large target from
consuming the global limit.
5. Filter before you pay
Apply filters so only matching profiles enter your dataset:
{"twitterHandles": ["openai"],"relation": "followers","minFollowers": 1000,"verifiedOnly": true,"verifiedType": "business","minStatuses": 100,"usernameContains": "ai","bioContains": "founder, CEO","locationContains": "San Francisco","maxItems": 500}
The Actor may inspect more profiles than it writes. You only pay for rows that pass every filter and enter your dataset.
Separate bioContains alternatives with commas or new lines. A profile passes
when its bio contains any supplied term. Matching stays case-insensitive.
6. Find audience overlap
Use merge mode to compare competitors, lists, communities, or relation types:
{"twitterHandles": ["openai", "anthropicai", "GoogleDeepMind"],"relation": "followers","dedupeMode": "merge","maxItemsPerTarget": 5000,"maxItems": 15000}
The output contains one row per unique profile. Shared profiles include
sourceTargets, sourceRelations, sourceUrls, sourceTargetKeys, and
overlapCount, so you can sort by overlap or export directly to CSV. Keep
maxItems high enough to let every target contribute rows; use
maxItemsPerTarget to control depth per account.
Accepted URL shapes
| URL | Relation |
|---|---|
https://x.com/<handle>/followers | followers |
https://x.com/<handle>/verified_followers | verified_followers |
https://x.com/<handle>/following | following |
https://x.com/<handle> | default relation (followers if unset) |
https://x.com/i/lists/<id>/members | list_members |
https://x.com/i/lists/<id>/followers | list_followers |
https://x.com/i/lists/<id> | list_members |
https://x.com/i/communities/<id>/members | community_members |
https://x.com/i/communities/<id> | community_members |
<handle>/followers | followers |
<handle>/following | following |
<handle>/verified_followers | verified_followers |
lists/<id>/members | list_members |
lists/<id>/followers | list_followers |
communities/<id>/members | community_members |
twitter.com and mobile.twitter.com are also accepted everywhere.
Input
See the Input tab for the complete list of options. All fields are optional
except at least one of: startUrls, twitterHandles, userIds, listIds, or
communityIds, or their documented aliases.
Examples:
- Add a competitor handle to
twitterHandleswithrelation: "followers". - Paste
https://x.com/<handle>/verified_followersinto Start URLs for verified profiles. - Paste a list URL into Start URLs to audit its members.
- Add 2+ handles. Set
dedupeMode: "first"to keep only the first matching profile row, or usededupeMode: "merge"to keep one row with all matching source targets.
Console & API input UX
The Console exposes these controls:
- The Start URLs field accepts URL strings or
{ "url": "..." }objects. Its JSON editor preserves both API formats. - Relation, Output Mode, and Dedupe Mode are validated selects.
- Relations is a validated multi-select for multi-relation runs.
- Result limits accept whole numbers of 1 or more.
- Numeric profile filters accept whole numbers of 0 or more.
Use canonical fields in new integrations. Compatibility aliases remain available
in JSON, API, SDK, automation, and task inputs. This includes outputVariant
and includeRaw as Output Mode aliases. It also includes dedupeAcrossTargets
as a Dedupe Mode alias. The visual form hides aliases that duplicate a canonical
control. Existing JSON and saved task inputs keep their current behavior.
Always use the latest build
Store runs use the Actor's latest build configuration. API clients should omit
the build override or pass build=latest. Update Tasks and integrations that
pin an older build. Pinned builds never move automatically.
Output
Each profile is a JSON object. Compact mode returns normalized public fields, schema version fields, and source metadata when available:
Dataset and run-report schemas describe every returned field. Primitive fields also include examples for agents and generated integrations.
Sample values are illustrative. Responses reflect source data at run time.
{"schemaVersion": 1,"_schema_version": 1,"id": "44196397","username": "elonmusk","name": "Elon Musk","description": "...","followers": 180000000,"following": 500,"statusesCount": 42000,"mediaCount": 3200,"favouritesCount": 120000,"verified": true,"verifiedType": "blue","location": "...","url": "https://...","profilePicture": "https://...","coverPicture": "https://...","createdAt": "Tue Jun 02 20:12:29 +0000 2009","sourceTarget": "nasa","sourceRelation": "followers","sourceUrl": "https://x.com/nasa/followers"}
Merge dedupe mode adds overlap fields:
{"schemaVersion": 1,"_schema_version": 1,"id": "44196397","username": "elonmusk","sourceTargets": ["nasa", "spacex"],"sourceRelations": ["followers"],"sourceUrls": ["https://x.com/nasa/followers","https://x.com/spacex/followers"],"sourceTargetKeys": ["followers:nasa", "followers:spacex"],"overlapCount": 2}
Export as JSON, CSV, Excel, or HTML from the Apify dataset.
Run options
- Set Apify max total charge to cap run cost. Leave
maxItemsempty for maximum rows within that budget, or setmaxItemsandmaxItemsPerTargetwhen you want fewer profiles. - Combine
minFollowers,verifiedOnly,verifiedType,minStatuses,usernameContains,bioContains,locationContains,hasWebsite, andhasLocationto narrow the billed dataset. - Set
dedupeMode: "first"when scraping multiple competitor handles to get only unique profiles across all targets. - Set
dedupeMode: "merge"to get one row per profile with every matching source target attached. - Set
outputMode: "full"to get optional profile fields such as pinned tweet IDs, entities, and profile metadata when available. - Set
outputMode: "raw"orincludeRaw: trueto include a sanitizedrawobject alongside normalized fields. - Schedule repeat Actor runs and store each dataset to compare profile IDs. Xquik monitors emit supported tweet and profile events, not follower-list changes.
Use cases
- Export competitor followers for lead research.
- Compare audiences across your account, competitors, and public figures.
- Filter follower count and verification to find matching profiles.
- Export members of relevant X Communities.
- Build public social-network datasets for research.
- Segment follower bases by bio keyword, location, or profile type.
Data responsibility
The Actor requests public X profile fields. Results can contain personal data, including self-reported locations. Confirm a lawful purpose and follow applicable privacy rules. Ask qualified counsel when uncertain.
Related actors
- X Tweet Scraper: scrape tweets, engagement metrics, author profiles, and media with structured search filters and pay-per-result pricing
Need more than scraping?
Xquik also provides 47 dashboard tools, 128 REST operations, signed webhooks, and an MCP server.
- API documentation: REST API guides
- Followers API: fetch an account's available followers
- Following API: get who a user follows
- List Members API: export members from a public X list
- MCP server: discover and run supported JSON or text operations
- Webhooks: receive supported Tweet and profile events
FAQ
Do I need an X API key? No. This scraper uses its own infrastructure. No login or credentials required.
What limits a run? Your requested item limit and Apify spend limit stop the run. Apify account and platform limits still apply.
How fast is it? Runtime depends on target size, filters, and upstream availability. Deep filtered runs checkpoint Console progress every 5 pages. This reduces non-data traffic between page fetches.
Why is my run returning fewer rows than maxItems? Filters such as
minFollowers, verifiedOnly, and bioContains apply before writes. Relax
filters to return more results.
How many followers can I scrape from a single account? X paginates large
accounts in batches. Raise Apify's run time limit to fetch more pages.
maxItemsPerTarget only caps each target.
Does the Actor retry temporary failures? Yes. It makes up to 3 attempts per
page for timeouts, 429, and 5xx responses. It honors Retry-After when present.
Otherwise, it uses exponential backoff. Hard failures preserve partial results.
What happens near the Apify run time limit? The Actor adds no shorter run deadline. It uses Apify's configured limit and keeps the final 15 seconds for finalization. It flushes profiles, checkpoints pagination, writes the report, and exits. Rows not accepted by the dataset are not billed.
Can I resume where I left off? Resume cursor input is not exposed yet. Re-running the same target starts from its first available page.
Can I use the Apify API to run this? Yes. See the API tab for Python, JavaScript, and cURL examples.
Can I schedule recurring scrapes? Yes. Use Apify's built-in scheduling to run this Actor on a cron. Compare stored datasets to find follower changes.
Where do I report issues? Use the Issues tab on this Actor's page.
Where are the API docs? Read the API documentation.