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.

apidojo/twitter-user-scraper
Input method

Estimated run cost

$0.00

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 44196397

  • On 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: false

  • getRetweeters

    $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.

Twitter User Scraper specificationsapidojo/twitter-user-scraper
Apify actorapidojo/twitter-user-scraper
InputsstartUrls · twitterHandles · twitterUserIds · searchTerms · getFollowers · getFollowing · getRetweeters · includeUnavailableUsers · maxItems
ReturnsOne record per account, whether it is the subject or one of its followers
Charge eventsSeven. Keyword search, profile URL, followers, following, retweeters, about page, per user
Defaults that costgetFollowers, getFollowing and getRetweeters all prefill to true
Minimum per run5 objects. A single profile has to be listed five times
Login or proxyNeither. Public accounts only
Reliability98.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
Field referenceDocumented in the actor README
id · userNameNumeric ID and the @handle, both always present
nameDisplay name
url · twitterUrlThe x.com and twitter.com forms of the profile link
descriptionBio text, links and hashtags as written
locationFree text, only where the account set one
followers · followingBoth counts at the time of the run
statusesCountTotal posts on the account
listedCountHow many Lists include this account. A quiet authority signal
mediaCount · favouritesCountPosts with media, and likes given
isVerifiedLegacy verification, the old blue check
isBlueVerifiedX Premium. Different thing, kept in a different field
verifiedType"business" and similar, where X exposes it
protected · canDmWhether the account is locked, and open to messages
createdAtAccount creation date, in X’s own string format
followerOfWhich account’s network this record came from
professionalProfessional 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.

What a run costsQuery fee + $0.0005 × billable items
RunMethodCalculationCost
5 profiles, no network5 profile queries5 × $0.004$0.02
20 users1 keyword search$0.008$0.008
100 users1 keyword search$0.008 + 80 × $0.0004$0.04
1 profile + 70 followersprofile + followers$0.004 + $0.016$0.02
1 profile + 500 followersprofile + followers$0.004 + $0.016 + 430 × $0.0004$0.19
1 profile + 1,000 each wayprofile + both networks$0.004 + 2 × $0.016 + 1,860 × $0.0004$0.78
1 tweet + 200 retweetersretweeters 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

Run this scraper free

Apidojo is not affiliated with X Corp.