X (Twitter) Followers Scraper - Export Follower Profiles avatar

X (Twitter) Followers Scraper - Export Follower Profiles

Pricing

from $0.09 / 1,000 accounts

Go to Apify Store
X (Twitter) Followers Scraper - Export Follower Profiles

X (Twitter) Followers Scraper - Export Follower Profiles

Export the followers of any public X (Twitter) account. Each row is a full profile, not just a handle. You get the bio, follower and following counts, verification, location, avatar, website and join date. No API key, nothing to paste. $0.09 per 1,000.

Pricing

from $0.09 / 1,000 accounts

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

14

Total users

7

Monthly active users

19 hours ago

Last modified

Share

X (Twitter) Followers Scraper: export who follows an account, as full profiles

Give it up to ten X handles and you get the accounts that follow them, one row each, with the whole profile on it: bio, follower and following counts, post count, verification type, location, avatar, website and join date. Flip one switch and you get the accounts they follow instead.

Worth knowing before your first run: the list comes back newest-first, so asking for 200 gets you the 200 most recent followers, not a sample of all of them. There is no way to page to the oldest end of a big account.

InputUp to 10 X handles
OutputOne full profile per account
Ceiling2,000 accounts per handle, 5,000 per run
Account neededNone from you
Price$0.09 per 1,000 accounts, flat on every plan

๐Ÿ‘ฅ What X (Twitter) Followers Scraper does

Each handle is read in turn and its list is walked from the top. Because the newest arrivals sit at the top, a weekly re-run of the same handle is cheap: the people who turned up since last time are the first ones you see.

Rows are handles first, then filled out into full profiles. That second step is what puts the counts, the location, the avatar and the join date on the row, and it is why profileEnriched is on every row. A row with profileEnriched: false came back thin, with the handle, name and bio only. Those rows still count as rows.

mode decides which direction you are reading. followers gives you the accounts following each handle; following gives you the accounts it follows. The columns are identical either way, and relation on each row tells you which one you asked for.

๐Ÿ“ฅ What you give it

{
"handles": ["NASA", "github"],
"mode": "followers",
"maxItemsPerHandle": 200,
"enrichProfiles": true
}

Every field below is prefilled in the form rather than defaulted in the schema. If you drive this from the API, set what you want explicitly instead of leaving it out.

FieldPrefilled withWhat it is
handlesNASA, githubUp to 10 handles, with or without the @. Profile links like https://x.com/NASA work too.
modefollowersfollowers or following.
maxItemsPerHandle50How many accounts to return for each handle, up to 2,000. You pay per row, so this is the budget.
enrichProfilestrueFills in the counts, location, verification, avatar and join date. Turn it off only if all you want is the list of handles.
sessionCookiesnothingOptional, and not needed for a normal run. Your own X account, as an auth_token=...; ct0=... pair. Both halves are needed: X refuses an auth_token on its own. Marked secret in the schema.
proxyUrlsnothingOptional. One URL per line as http://user:pass@host:port, if you want the run to use servers you already pay for.

Run it with empty input and you get one labelled sample row, free, so you can see the shape before you spend anything.

๐Ÿ“ค What you get back

A real row from a real run:

{
"ok": true,
"charged": true,
"recordType": "profile",
"sourceHandle": "NASA",
"relation": "following",
"userName": "NASAHubble",
"name": "Hubble",
"url": "https://x.com/NASAHubble",
"description": "The official X account for the NASA Hubble Space Telescope, managed and operated by NASA's Goddard Space Flight Center.",
"followersCount": 8902296,
"followingCount": 44,
"tweetsCount": 8448,
"isVerified": true,
"verifiedType": "government",
"location": "Goddard Space Flight Center",
"profileImageUrl": "https://pbs.twimg.com/profile_images/3468011581/efb98...jpeg",
"createdAt": "2008-03-06T20:15:02.000Z",
"isProtected": false,
"website": "http://www.nasa.gov/mission_pages/hubble/main/index.html",
"profileBannerUrl": "https://pbs.twimg.com/profile_banners/14091091/1669391293",
"listedCount": 15216,
"mediaCount": 3127,
"favouritesCount": 1241,
"userId": "14091091",
"profileEnriched": true,
"scrapedAt": "2026-09-16T22:18:47.607Z"
}
FieldWhat it is
sourceHandle, relationWhich handle you asked about, and whether this row is a follower of it or an account it follows.
userName, name, urlHandle, display name and profile link.
verifiedTypeWhat kind of tick: blue, business, government, creator or a professional type. More useful than a plain boolean.
websiteExpanded out of the t.co wrapper, so it is the real address.
profileImageUrlRewritten to the 400px version rather than the thumbnail.
listedCount, mediaCount, favouritesCountHow many lists include them, how many media posts, how many likes given.
userIdX's numeric id, which survives a handle change.
profileEnrichedtrue when the full profile came back, false when only the handle, name and bio did.
scrapedAtWhen this row was read.

๐Ÿงพ Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itBilled
An accountok: true and a userNameyes
The sample row_sample: trueno
A diagnosticok: false and an errorCodeno

Filter on ok == true and you have your data. charged separates real rows from sample and diagnostic rows, and is not a receipt.

Two things the Overview table will not show you, because it does not carry those columns. _sample is hidden, so the free sample row reads as a real profile, and profileEnriched is hidden, so a thin row looks complete until you notice the empty counts. Both are in the JSON. A thin row is still a row, so if filling profiles in matters to you, check that column.

The error codes you are most likely to see: NOT_FOUND for a handle that does not exist, has been suspended, or is protected; NO_RESULTS for an account with nobody on that side of its list; BLOCKED when a handle could not be read this run; TIME_BUDGET for handles the run ran out of time for. All are uncharged, and the run still ends green.

โ–ถ๏ธ How to run it

  1. Open X (Twitter) Followers Scraper and click Try for free.
  2. Type handles into X (Twitter) handles, one per line.
  3. Choose Followers or Following, and set Accounts per handle.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.

๐Ÿ’ฐ How much does it cost?

$0.09 per 1,000 accounts. Flat on every Apify plan, no volume tiers.

You pay per account delivered. The sample row and diagnostic rows are not charged. maxItemsPerHandle times the number of handles is the ceiling on what a run can spend, so set it while you are testing.

๐Ÿ’ก What people use it for

  • Watching who has followed a competitor or a conference account this week, since new followers come first.
  • Building an audience list where the bio and the follower count matter, not just the handle.
  • Checking overlap between two accounts' followers by running both and joining on userId.
  • Working out what kind of accounts follow you, using verifiedType and followersCount to sort.

๐Ÿšง What it does not do

  • Newest-first only. You cannot reach the older end of a large account's list.
  • Protected accounts are unreadable. They come back as a diagnostic row saying so.
  • No emails, no phone numbers. Only what X puts on a public profile.
  • Ten handles per run, 2,000 accounts per handle, 5,000 per run. A very big account can also stop short of what you asked for when the list stops paging.
  • Thin rows are possible and are still charged. profileEnriched: false is the flag for it.
  • No tweets. This is the audience, not the timeline.

๐Ÿงญ Which X scraper do you need?

If you wantUse
Who follows an account, or who it followsThis one
Profile records for handles you already haveTwitter Profile Scraper
Tweets matching a keyword or an advanced queryTwitter (X) Search Scraper
Specific tweets, or a profile's timelineTweet Scraper
Everything posted into a curated X listTwitter List Scraper

โ“ Questions people ask

Do I need an X account or an API key? No. The cookie field is optional and most runs never need it.

Can I get all 90 million followers of a big account? No. The ceiling is 2,000 per handle and 5,000 per run, taken from the newest end.

What is the difference between followers and following? Direction. followers is who follows the handle, following is who the handle follows. Same columns, and relation says which.

Why do some rows have empty counts? They came back thin, with only the handle, name and bio. profileEnriched: false marks them.

Is scraping X legal? This reads public profiles only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes, and it suits this one: a weekly run picks up the new arrivals first.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Include the handles you used and the run ID, and paste any errorCode you got back, since that usually says what happened straight away.