Twitter User Scraper: profiles, followers and following
Twitter User Scraper returns X accounts rather than tweets: a profile by handle, URL or ID, the people who follow it, the people it follows, and who retweeted a given tweet.
Free Apify plan: 5 runs a month, 10 items a run. No credit card.
- $0.004
- per profile looked up
- $0.016
- per network query, ~70 in
- 8.9K
- users · 4.4 from 16 reviews
- 30–80/s
- users, per the listing
Read on 21 September 2026.
Which of the seven charges will your run fire?
Naming an account costs $0.004. Asking about its network costs $0.016 a time, and three switches decide how many of those fire. Two of the three are on before you touch anything.
twitterHandles · startUrls · twitterUserIds$0.004per account named
No users included
Three ways to name an account. Identical price, so pick whichever matches your data.
["elonmusk"] or 44196397On before you touch anything
getFollowers · getFollowing+$0.032per profile, unasked
~70 users each included
Both prefill to true in the schema, so a plain handle lookup already fires two network queries you did not ask for.
getFollowers: falsegetRetweeters$0.016per tweet
~70 retweeters included
Also prefills true. Applies to tweet URLs in startUrls, and returns who retweeted them.
x.com/NASA/status/198134…searchTerms$0.008per search
~20 users included
Finds accounts by keyword instead of naming them. Half the price of a profile query and it brings twenty users with it.
["climate scientist"]
Every user past a query’s included page costs $0.0004, and getAbout adds $0.0002 a profile for creation date, username history and verification timestamps. maxItems is the ceiling on all of it.
| Apify actor | apidojo/twitter-user-scraper |
|---|---|
| Inputs | startUrls · twitterHandles · twitterUserIds · searchTerms · getFollowers · getFollowing · getRetweeters · includeUnavailableUsers · maxItems |
| Returns | One record per account, whether it is the subject or one of its followers |
| Charge events | Seven. Keyword search, profile URL, followers, following, retweeters, about page, per user |
| Defaults that cost | getFollowers, getFollowing and getRetweeters all prefill to true |
| Minimum per run | 5 objects. A single profile has to be listed five times |
| Login or proxy | Neither. Public accounts only |
| Reliability | 98.24% of 202,394 runs succeeded in the last 30 days |
Three questions about people
Look an account up, pull the network around it, or find accounts you cannot name yet. The three cost quite differently, which is the whole reason to know which one you are doing.
How do you get X profile data for a list of handles?
Put them in twitterHandles and turn the network switches off. Each account costs $0.004 and returns the full profile, followers count, bio, location, creation date and X Premium status. Five profiles cost $0.02.
Input
{
"twitterHandles": ["NASA", "ESA", "JAXA_en", "isro", "csagc"],
"getFollowers": false,
"getFollowing": false,
"getRetweeters": false,
"maxItems": 5
}5 × $0.004=$0.02
What comes back
The user record, Around 20 fields per account, with both verification flags kept separate.
{
"type": "user",
"userName": "exampleUser",
"id": "1467931973616386052",
"name": "Example User",
"description": "Bio description with links and hashtags",
"location": "San Francisco, CA",
"followers": 1147899,
"following": 561,
"isVerified": true,
"isBlueVerified": true,
"verifiedType": "business",
"createdAt": "Mon Dec 06 19:00:41 +0000 2021",
"statusesCount": 2104
}Turn the switches off, or pay nine times the price
getFollowers and getFollowing prefill to true. Left alone, each account in that list also fires two $0.016 network queries, turning a $0.004 lookup into $0.036 before a single follower is returned. The README’s input table says they default to false; the schema the form loads says true. Set them explicitly either way.
How do you export the followers of an X account?
Set getFollowers to true on the accounts you named. Each list is one $0.016 query with roughly 70 users included, then $0.0004 per user after. One profile plus 500 followers costs $0.19.
Input
{
"twitterHandles": ["NASA"],
"getFollowers": true,
"getFollowing": false,
"maxItems": 500
}$0.004 + $0.016 + 430 × $0.0004=$0.19
What comes back
The user record, with followerOf, The same shape as a lookup, plus the account whose network produced it.
{
"followerOf": "elonmusk",
"type": "user",
"userName": "exampleUser",
"followers": 1147899,
"following": 561,
"protected": false,
"canDm": true,
"listedCount": 1294,
"mediaCount": 139
}Followers and following are two queries, not one
Asking for both on one account fires $0.032 in query fees and gives you two included pages. A thousand of each comes to $0.78. Decide which direction you actually need before turning both on out of habit.
How do you find X accounts by keyword?
Put terms in searchTerms. A search costs $0.008 and brings about 20 users inside it, which makes it the cheapest way into a niche you cannot name accounts in yet. A hundred users from one search cost $0.04.
Input
{
"searchTerms": ["climate scientist", "oceanographer"],
"getFollowers": false,
"getFollowing": false,
"maxItems": 200
}2 × $0.008 + 160 × $0.0004=$0.08
What comes back
The user record, Identical to a lookup. Feed the handles back in to go deeper on the good ones.
{
"type": "user",
"userName": "example_researcher",
"name": "Example Researcher",
"description": "Ocean carbon. Views my own.",
"followers": 18422,
"isBlueVerified": false,
"listedCount": 204,
"favouritesCount": 1450
}A run needs five objects, even for one profile
The actor requires a minimum of 5 objects per run to cover its operational cost. Its own documented workaround for a single profile is to repeat the handle five times in twitterHandles. A run pulling followers usually clears the floor on its own.
What an account record holds
One shape whatever produced it, and the listing publishes an availability guarantee for each field: eleven are always present, two depend on whether the account filled them in.
6
Identity
Always present
- id, userName
- name
- url, twitterUrl
- profilePicture
- description
5
Size and reach
Always present
- followers, following
- statusesCount
- listedCount
- mediaCount
- favouritesCount
4
Status
Verification kept separate
- isVerified, legacy
- isBlueVerified, X Premium
- verifiedType
- protected, canDm
3
Context
Some conditional
- createdAt
- location, if the user set one
- coverPicture, if set
- followerOf, on network results
id · userName | Numeric ID and the @handle, both always present |
|---|---|
name | Display name |
url · twitterUrl | The x.com and twitter.com forms of the profile link |
description | Bio text, links and hashtags as written |
location | Free text, only where the account set one |
followers · following | Both counts at the time of the run |
statusesCount | Total posts on the account |
listedCount | How many Lists include this account. A quiet authority signal |
mediaCount · favouritesCount | Posts with media, and likes given |
isVerified | Legacy verification, the old blue check |
isBlueVerified | X Premium. Different thing, kept in a different field |
verifiedType | "business" and similar, where X exposes it |
protected · canDm | Whether the account is locked, and open to messages |
createdAt | Account creation date, in X’s own string format |
followerOf | Which account’s network this record came from |
professional | Professional account type and category where set |
isVerified and isBlueVerified are not the same signal and the listing keeps them apart on purpose: one is legacy verification, the other is a paid subscription. Filtering on the wrong one is the usual way an influencer shortlist goes wrong.
What will surprise you
Five things, and the first two are the reason a first run costs more than expected.
- 01
Two network switches are on by default
getFollowers and getFollowing prefill to true in the input schema, and getRetweeters does too. The README’s table says all three are false. The schema is what the form loads, so assume on and set them explicitly.
- 02
A run needs at least five objects
The actor states a minimum of 5 objects per run to cover its operating cost. For one profile with no network, the documented workaround is to list the handle five times.
- 03
Each direction of a network is its own query
Followers and following are $0.016 each, with their own included page. Retweeters is a third. Nothing bundles them.
- 04
Included pages are approximate
Roughly 70 users on a network query, roughly 20 on a keyword search. They are first-page sizes, not guarantees, so budget on the item rate rather than the free tier.
- 05
Suspended accounts are excluded unless you ask
includeUnavailableUsers is off, so suspended and unavailable accounts are dropped. Turn it on when a gap in a follower list would itself be the finding.
Free Apify accounts run it in demo mode: 5 runs a month, capped at 10 items.
What each kind of run costs
A run costs the fee for every query it fires plus $0.0004 for each user past the included pages. The rows below are the listing’s own worked examples, and all seven reproduce from the published event prices.
| Run | Method | Calculation | Cost |
|---|---|---|---|
| 5 profiles, no network | 5 profile queries | 5 × $0.004 | $0.02 |
| 20 users | 1 keyword search | $0.008 | $0.008 |
| 100 users | 1 keyword search | $0.008 + 80 × $0.0004 | $0.04 |
| 1 profile + 70 followers | profile + followers | $0.004 + $0.016 | $0.02 |
| 1 profile + 500 followers | profile + followers | $0.004 + $0.016 + 430 × $0.0004 | $0.19 |
| 1 profile + 1,000 each way | profile + both networks | $0.004 + 2 × $0.016 + 1,860 × $0.0004 | $0.78 |
| 1 tweet + 200 retweeters | retweeters query | $0.016 + 130 × $0.0004 | $0.068 |
The estimator above prices one kind of query at a time, because that is what it can do honestly: a run that mixes a profile lookup with a followers pull adds both fees, as rows four to six show. Computed from the seven charge events the Apify Store API reports; the listing rounds its retweeters example to $0.07 where the arithmetic gives $0.068.
Who scrapes X accounts rather than tweets?
Five kinds of work need the people rather than the posts: influencer research, lead generation, audience overlap, account intelligence and academic network analysis.
Influencer research
Find accounts, then look them up
Search a niche, then pull full profiles on the shortlist and filter on isBlueVerified and listedCount rather than follower count alone
$0.04 per 100 found
Lead generation
Pull a network, followers only
Export the followers of an account your buyers already follow, with bios and locations for qualification
$0.19 per 500 followers
Audience overlap
Pull a network on two accounts
Take both follower lists and intersect them to see how much of a competitor’s audience you already share
$0.78 per 1,000 each way
Account intelligence
Look up accounts, with getAbout
Check creation dates, username history and verification timestamps when an account’s age is the question
$0.0042 per profile
Network researchers
Pull a network, at scale
Build follower graphs for community detection, where followerOf is the edge and the record is the node
$0.0004 per edge
Wiring it into a pipeline
The actor is apidojo/twitter-user-scraper. The one thing to encode deliberately is the switches: leave them out of your run input and you inherit the schema defaults, which fire two network queries per account.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
# Always state the switches. Omitted, they inherit the schema's true and
# each account quietly fires two $0.016 network queries.
run = client.actor("apidojo/twitter-user-scraper").call(run_input={
"twitterHandles": ["NASA", "ESA", "JAXA_en", "isro", "csagc"],
"getFollowers": False,
"getFollowing": False,
"getRetweeters": False,
"maxItems": 5,
})
for u in client.dataset(run.default_dataset_id).iterate_items():
# Legacy verification and paid Premium are different fields
print(u["userName"], u["followers"], u["isVerified"], u["isBlueVerified"])import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
// Audience overlap: two follower lists, intersected.
const run = await client.actor('apidojo/twitter-user-scraper').call({
twitterHandles: ['NASA', 'ESA'],
getFollowers: true,
getFollowing: false,
getRetweeters: false,
maxItems: 4000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
// followerOf is the edge: which account's network produced this record.
const sets = Object.groupBy(items, (u) => u.followerOf);
const [a, b] = Object.values(sets).map((g) => new Set(g.map((u) => u.id)));
console.log([...a].filter((id) => b.has(id)).length, 'shared followers');curl -X POST \
"https://api.apify.com/v2/acts/apidojo~twitter-user-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["climate scientist"],"getFollowers":false,"getFollowing":false,"maxItems":200}'Datasets export as CSV or stream over the API. Every key above is in the actor’s input schema, and the switches are named in full precisely because leaving them out is the expensive option.
Twitter User Scraper FAQ
Why did a simple handle lookup cost more than $0.004?
Because getFollowers and getFollowing prefill to true. Each account then also fires two $0.016 network queries, so the lookup costs $0.036 before any users are returned. Set both to false explicitly.
How much does it cost to export 500 followers?
About $0.19, $0.004 to name the account, $0.016 for the followers query with roughly 70 users inside it, and $0.0004 for each of the remaining 430.
Why does one profile need five handles in the input?
The actor requires a minimum of 5 objects per run to cover its operating cost. Its documented workaround for a single profile is to repeat the handle five times. Runs that pull a network usually clear the floor without help.
What is the difference between isVerified and isBlueVerified?
isVerified is legacy verification, the old blue check. isBlueVerified is an X Premium subscription. They are separate fields because they mean different things, and filtering on the wrong one skews an influencer shortlist.
Can I get who retweeted a tweet?
Yes. Put the tweet URL in startUrls with getRetweeters on. It bills as a $0.016 network query with roughly 70 retweeters included, so 200 retweeters cost about $0.07.
Does it return suspended accounts?
Not by default. includeUnavailableUsers is off, so suspended and unavailable accounts are dropped from the output. Turn it on when the gap itself is what you are measuring.
Can I look accounts up by numeric ID?
Yes. twitterUserIds takes X user IDs directly, at the same $0.004 as a handle. IDs survive a username change, which handles do not.
How fast is it?
The listing quotes 30 to 80 users a second, and elsewhere up to 67. The range is the figure to plan with.
Where Twitter User Scraper fits
Parent scraper
Twitter Scraper
The Twitter family in one place: six scrapers, what each costs, and which to reach for. The rest of them return tweets. This is the one that returns the people who wrote them, and the people around those people.
Sibling scrapers
Guides
- Measuring audience overlap between two X accountsComing soon
- Why listedCount beats follower count for shortlistsComing soon
- Legacy verified or X Premium: filtering the right fieldComing soon
Look up five accounts
Two cents, with the network switches off.
twitterHandles: ["NASA"] · getFollowers: false
Apidojo is not affiliated with X Corp.