Twitter Profile Scraper - X Followers, Bio & Verified Badge avatar

Twitter Profile Scraper - X Followers, Bio & Verified Badge

Pricing

from $0.14 / 1,000 profiles

Go to Apify Store
Twitter Profile Scraper - X Followers, Bio & Verified Badge

Twitter Profile Scraper - X Followers, Bio & Verified Badge

Scrape X (Twitter) profiles in bulk from handles, URLs or ids: followers, following, posts, likes and listed counts, bio, website, location, join date, verified type, pinned post and recent activity. No login or cookies. Monitor mode returns only changed profiles.

Pricing

from $0.14 / 1,000 profiles

Rating

0.0

(0)

Developer

Top Api

Top Api

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

What does Twitter Profile Scraper do?

Twitter Profile Scraper extracts public X (Twitter) profiles from x.com and turns a list of handles, profile URLs or user ids into structured rows: one account with its followers, following, posts, likes and listed counts, bio, website, location, join date, verified badge, pinned post and recent activity. Built for influencer marketers, sales and lead-gen teams, and analysts who need clean Twitter profile data without copying it by hand.

X Profile Scraper - Twitter Profile Scraper - X.com User Scraper - Twitter Follower Count Checker

Public X (Twitter) profile page that Twitter Profile Scraper turns into a row

  • Full Twitter profile per row: id, handle, display name, bio with links expanded, website, location, followers, following, posts, likes, listed and media counts, join date, avatar and banner.
  • Verification and status: blue, Business (gold) and Government (grey) check marks, protected accounts, affiliate badges, plus a status row for handles that do not exist or are suspended.
  • Activity signals from the same page, at no extra request: last post date, days since the last post, average likes, replies, reposts and views of the latest posts, and an engagement rate, all read from the same page.
  • No login, cookies or X API key: paste handles, @handles, x.com or twitter.com URLs, or numeric ids.
  • Monitor mode: re-check the same accounts on a schedule and get only the profiles whose followers, posts, bio or badge changed, with the deltas.
  • Pay only for delivered profiles: no start fee.
  • Export anywhere: JSON, CSV, Excel, XML; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack, the Apify API and MCP.

What data can you get from an X (Twitter) profile?

πŸ†” User id (`id`)πŸ‘€ Handle (`userName`)πŸ“ Display name
πŸ’¬ Bio (`description`)πŸ”— Bio links and mentions🌐 Website
πŸ“ LocationπŸ“… Join date (`createdAt`)πŸ‘₯ Followers
➑️ Following🧾 Posts count (`statusesCount`)❀️ Likes count (`favouritesCount`)
πŸ“‹ Listed countπŸ–ΌοΈ Media countβœ… Verified badge and type
πŸ”’ Protected flag🏒 Affiliate badgeπŸ“Œ Pinned post id
πŸ§‘ Avatar (400x400) and bannerπŸ•’ Last post dateπŸ“ˆ Engagement rate
πŸ‘ Average likes, replies, repostsπŸ‘€ Average viewsπŸ“° Latest 5 posts (add-on)

On a 22-profile test run every row had the id, handle, name, follower, following and post counts, join date and verification fields; 86% had a bio, 73% a website, 82% likes/listed/media counts and 91% a last-post date.

How to scrape Twitter profiles with Twitter Profile Scraper

  1. Create a free Apify account: $5 of monthly credit, no card needed.
  2. Open Twitter Profile Scraper and click Try for free.
  3. Paste handles, profile URLs or ids into Handles, profile URLs or user ids, one per line.
  4. Optionally set filters (minimum followers, verified only, bio keywords) and Max profiles to deliver.
  5. Click Start. Profiles stream into the dataset in about a second each.
  6. Open the Storage tab and Export as JSON, CSV or Excel, or let a schedule run it for you.

⬇️ Input

ParameterTypeDescription
πŸ” What to scrape
handlesListRequired (prefilled with nasa, apify). Handles, @handles, x.com / twitter.com profile URLs, x.com/i/user/<id> links or id:<number>.
βœ‚οΈ Refine results
minFollowers / maxFollowersIntegerFollower range. Default 0 = no limit.
verifiedOnlyBooleanOnly accounts with a blue, Business or Government check mark. Default false
withWebsiteOnlyBooleanOnly accounts that list a website. Default false
bioKeywordsListOnly accounts whose bio or name contains one of these words.
excludeProtectedBooleanDrop protected (locked) accounts. Default false (they are delivered with their public counts).
activeWithinDaysIntegerOnly accounts whose latest post or reply is at most N days old. Default 0 = any.
βž• Extra data
includeLatestTweetsBooleanAdds latestPosts: up to 5 latest original posts and replies. Charged as posts.
tweetsPerProfileInteger1-5 posts to attach. Default 5
includePinnedTweetBooleanAdds the full pinnedPost. Charged as posts (once per profile, together with latest posts).
includeUnavailableBooleanStatus rows for missing, suspended or invalid inputs. Default false
πŸ” Monitoring
monitorModeBooleanDeliver only accounts that are new or changed since the last run. Pair with a schedule.
monitorStoreNameStringKey-value store that keeps the per-account memory. Default x-profile-monitor
πŸ“¦ Output
maxItemsIntegerStop after this many delivered profiles. Default 0 = the whole list.
compactBooleanCore fields only, sized for AI agents and MCP.
βš™οΈ Advanced
proxyConfigurationProxyDefault: no proxy, with automatic fallback to the Apify datacenter and residential pools if X refuses a request.
maxConcurrencyIntegerProfiles loaded in parallel, 1-20. Default 8

Input JSON

{
"handles": ["nasa", "@apify", "https://x.com/stripe", "id:12"],
"minFollowers": 1000,
"withWebsiteOnly": true,
"includeLatestTweets": true,
"tweetsPerProfile": 3,
"maxItems": 500
}

Paste Twitter handles, URLs or ids in one list

Every line is resolved on its own, so a spreadsheet column works as it is. Do: nasa, @nasa, https://twitter.com/nasa, https://x.com/nasa/status/123 (the handle is read from the URL). Don't: paste search or hashtag links such as x.com/search?q=nasa; they are reported as invalid input.

Prefix short numeric Twitter ids with id:

X handles can be all digits, so a short number like 12345 is looked up as a handle. A 16-20 digit number is read as a user id automatically; for older, shorter ids write id:11348282 or paste x.com/i/user/11348282. If you list a handle and its id, the profile is delivered once.

Use filters to keep only the Twitter profiles you want

minFollowers, verifiedOnly, withWebsiteOnly, bioKeywords, excludeProtected and activeWithinDays run after the profile is read. A list of 1,000 handles filtered down to 200 delivers 200 profiles.

⬆️ Output

Every X account becomes one dataset item. Here is the table view of a real run:

Twitter Profile Scraper output table with followers, verification and activity

And one row as JSON (shortened):

{
"status": "active",
"id": "3510729917",
"userName": "apify",
"name": "Apify",
"url": "https://x.com/apify",
"description": "Thousands of Actors to automate your business, get real-time web data, and integrate your apps and agents. ...",
"website": "https://apify.com",
"location": "The Interwebz",
"followers": 17657,
"following": 301,
"statusesCount": 4986,
"favouritesCount": 4470,
"listedCount": 150,
"mediaCount": 1266,
"createdAt": "2015-09-01T08:38:01.064Z",
"isBlueVerified": false,
"verifiedType": "Business",
"protected": false,
"profilePicture": "https://pbs.twimg.com/profile_images/2036008913192316928/yuW3cobE_400x400.png",
"pinnedTweetId": "2087572956683567110",
"lastPostAt": "2026-10-03T12:19:29.000Z",
"recentEngagementRatePct": 0.0411
}

Fields

Fill is measured on a 22-profile platform run (big brands, government accounts, small personal accounts and one protected account).

FieldTypeWhat it isFill
id, userName, name, urlstringIdentity; id stays stable when a handle changes100%
followers, following, statusesCountintegerFollower, following and post counts100%
favouritesCount, listedCount, mediaCountintegerLikes given, public lists, media posts (countsSource says where they came from)82%
description, descriptionUrls, descriptionMentionsstring, listBio with t.co links expanded, plus its links and @mentions86%
website, websiteDisplaystringProfile link field73%
locationstringWhat the owner typed55%
createdAt, accountAgeDaysstring, integerJoin date (ISO 8601)100%
isBlueVerified, isVerified, verifiedTypeboolean, stringCheck mark; Business or Government when gold or grey100% (type 41%)
protected, possiblySensitivebooleanLocked account, sensitive-media flag100%
profilePicture, coverPicture, profileImageShapestringAvatar 400x400, banner, Circle or Square100% / 86% / 100%
affiliation, businessAffiliatesCountobject, integerAffiliate badge, a verified organisation's affiliate count9% / 41%
pinnedTweetId, pinnedTweetIdsstring, listThe pinned post50%
birthdatestringOnly when the owner made it public5%
lastPostAt, daysSinceLastPoststring, integerLatest original post or reply91%
recentAvgLikes, recentAvgReplies, recentAvgReposts, recentAvgViewsnumberAverages over the latest posts91% (views 77%)
recentEngagementRatePctnumber(likes + replies + reposts + quotes) / followers x 10091%
followersToFollowingRatio, postsPerDaynumberDerived ratios100%
latestPosts, pinnedPostlist, objectWith the posts add-on91% / 50%

Latest and pinned Twitter posts (add-on)

With includeLatestTweets, each profile gets the latest original posts and replies (no reposts) that its public page shows: 5, or 4 when the account has a pinned post, which arrives separately as pinnedPost.

{
"id": "2106358473772408931",
"url": "https://x.com/apify/status/2106358473772408931",
"text": "Did your last β€œagent” actually need to be an agent? πŸ‘€",
"createdAt": "2026-10-03T12:19:29.000Z",
"lang": "en",
"likes": 6, "replies": 1, "reposts": 0, "quotes": 0, "bookmarks": 0, "views": 558,
"isReply": false, "isQuote": false, "isLongPost": false,
"hashtags": [], "mentions": [], "urls": [], "media": []
}

How can I use Twitter profile data?

  • 🎯 Influencer marketers: shortlist creators by follower range, engagement rate and last post date, and skip dormant accounts.
  • πŸ’Ό Sales and lead-gen teams: enrich a list of company or founder handles with website, location and verified status.
  • πŸ“Š Brand and competitor analysts: track follower growth and posting cadence of competitors with monitor mode and a daily schedule.
  • πŸ”Ž Researchers and journalists: check account age, verification type, affiliate badges and suspension status in bulk.
  • πŸ€– AI and data teams: feed compact profile rows to an LLM agent through the API or MCP.
  • 🧹 CRM hygiene: find handles that were renamed (id stays the same), suspended or deleted.

How much does it cost to scrape Twitter profiles?

Twitter Profile Scraper is pay-per-result: $0.00014 per profile ($0.14 per 1,000 profiles), no start fee. Latest and pinned posts are an optional add-on at $0.00065 per profile that receives them.

ProfilesProfile costWith posts add-on
10$0.0014$0.0079
100$0.014$0.079
1,000$0.14$0.79
10,000$1.40$7.90

There is nothing else to pay: Apify platform usage is included in these prices. A 25-profile run took 15 seconds on 256 MB.

Integrations, API, scheduling & MCP

  • Schedules: run Twitter Profile Scraper hourly, daily or weekly from the Schedules tab; turn on monitorMode to get only changed profiles.
  • Webhooks: fire a URL when a run finishes and push new rows to your CRM, a sheet or Slack.
  • No-code: Make, Zapier, n8n, Google Sheets, Airtable and Slack via Apify integrations.
  • API: call it from Node.js or Python with apify-client; code is on the API tab and in the Apify API reference.
  • MCP / AI agents: connect Claude, Cursor or any MCP client through the MCP tab and ask for Twitter profiles in plain language; compact keeps the payload small.

A daily follower tracker is one API call: {"handles": ["competitor1", "competitor2"], "monitorMode": true, "monitorStoreName": "competitors"} on a schedule. Each run returns only the accounts that changed and adds previousStats, deltas and changedFields.

More social media scrapers from TopApi

πŸ“Έ Instagram Scraper🎡 TikTok Scraper🎬 TikTok Video Scraper
πŸ“£ Facebook Search Posts ScraperπŸ“ Google Maps Reviews Scraper🌐 SimilarWeb Scraper
πŸ’Ό Indeed Jobs Scraper🧭 All TopApi scrapers

Twitter profile data limits & empty runs

  • Speed: about 0.15-0.5 seconds per profile at the default 8 in parallel; 25 profiles took 5-15 seconds on 256 MB.
  • Likes, listed and media counts come from X's public embedded timeline, which answers about 30 lookups per IP every 15 minutes and shows no timeline for some accounts. When it does not answer, those three fields are null (never 0) and countsSource is null. Every other field comes from the profile page itself. On the test runs they filled for 82% of profiles in a fresh run and 48% in a run made right after another.
  • Latest posts: the public profile page shows the 5 most recent original posts and replies; reposts are not included, and protected accounts show none.
  • Not available signed out: professional category, "can DM", the "About this account" panel (account based in, username changes, verified since, identity verification) and follower lists. X shows these only to logged-in users, so they are not in the rows.
  • Monitor memory: one memory name holds about 8,000 accounts (about 850 bytes each); for bigger lists use several names, one per list.
  • Empty dataset: the handles did not exist, were suspended, were invalid or were all filtered out. Turn on includeUnavailable to get a status row for each.

FAQ

How many Twitter profiles can Twitter Profile Scraper collect in one run?

As many as you paste. Each profile is its own lookup, so a run of thousands of handles works; use maxItems as a cost cap and maxConcurrency for speed.

Can I run Twitter Profile Scraper on a schedule to track follower growth?

Yes. Save your handles as a task, open Schedules, pick the cadence and turn on monitorMode. Each run delivers only accounts whose followers, posts, bio, website, name or badge changed, with deltas. Large accounts gain followers almost every hour, so they will appear on most runs.

Does Twitter Profile Scraper work for protected or suspended accounts?

Protected accounts still publish their name, bio and counts, so they are delivered with protected: true and no posts. Suspended and deleted handles return a status row with includeUnavailable.

Can I get tweets with Twitter Profile Scraper?

Yes, the latest original posts and the pinned post, through the posts add-on. For keyword or hashtag search, or a full tweet history, use a dedicated tweet scraper.

Can I integrate Twitter Profile Scraper with other apps?

Yes: Make, Zapier, n8n, Google Sheets and Slack via Apify integrations, or webhooks when a run finishes.

Can I use Twitter Profile Scraper with the Apify API?

Yes. Start runs and fetch datasets with apify-client for Node.js or Python.

Can I use Twitter Profile Scraper through an MCP server?

Yes. Open the MCP tab, connect your MCP client and ask for X profiles in plain language. Turn on compact for smaller rows.

Do I need an X account, cookies or an X API key for Twitter Profile Scraper?

No. It reads only what X shows to signed-out visitors; you pass handles, URLs or ids and nothing else.

Why did my Twitter Profile Scraper run return no results?

The handles did not exist or were suspended, the inputs were not X handles or URLs, or your filters removed every profile. Turn on includeUnavailable and check the run summary.

Twitter Profile Scraper extracts only publicly available profile data and does not log in or collect private data. Results may still contain personal data, which is regulated (for example by GDPR), so make sure you have a legitimate purpose before you use it.

Your feedback

We keep improving Twitter Profile Scraper. Found a bug or missing a field? Open an issue on the Issues tab.