X (Twitter) Account Scraper avatar

X (Twitter) Account Scraper

Pricing

from $0.10 / 1,000 results

Go to Apify Store
X (Twitter) Account Scraper

X (Twitter) Account Scraper

Get profile data from any public X (Twitter) account by handle, @handle, or profile URL. Followers, following, posts count, bio, location, website, verification badge, profile image and banner. HTTP-only, no login required.

Pricing

from $0.10 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Extract public profile data from any X (Twitter) account in bulk — handle, display name, bio, follower and following counts, tweet count, profile image, banner, verified status, and account creation date — in a clean structured JSON output.

Why use this actor

  • No account / no login required — just give it an X handle or profile URL.
  • Identity-flexible input — bare handle (jack), at-prefixed (@elonmusk), or full profile URL (https://twitter.com/nasa, https://x.com/nasa) all work.
  • Exact follower & following counts plus tweet count, listed count, and media count — the same numbers X's web app displays.
  • Verified status — the is_blue_verified flag plus the structured verification_info block tells you whether the badge comes from a paid subscription or an identity check.
  • Account creation date in the response so you can sort by account age, spot suspicious newly-created accounts, or audit brand handles.
  • Automatic retries with exponential backoff; suspended, protected, or non-existent handles surface as _error rows instead of crashing the run.

How it works

  1. You provide a list of X handles or profile URLs.
  2. The actor fetches each profile the same way X's web app does and assembles a flat JSON record per account.
  3. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, or rotating IPs — all handled internally.

Input

{
"handles": ["jack", "nasa"],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}
FieldTypeDescription
handlesarrayList of X handles or profile URLs to scrape. Accepted forms: jack, @elonmusk, https://twitter.com/nasa, https://x.com/nasa.
proxyConfigurationobjectApify Proxy settings. Datacenter proxies are sufficient for public profile lookups.

Output

Input: jack

{
"_input": "jack",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T11:03:56.348095+00:00",
"rest_id": "12",
"id": "VXNlcjoxMg==",
"screen_name": "jack",
"name": "jack",
"created_at": "Tue Mar 21 20:50:14 +0000 2006",
"description": "no state is the best state",
"url": "https://t.co/ZEpOg6rn5L",
"entities": {
"description": {},
"url": {
"urls": [
{
"display_url": "primal.net/jack",
"expanded_url": "http://primal.net/jack",
"indices": [0, 23],
"url": "https://t.co/ZEpOg6rn5L"
}
]
}
},
"location": "",
"followers_count": 7537416,
"friends_count": 3,
"statuses_count": 30509,
"favourites_count": 38827,
"listed_count": 33146,
"media_count": 2963,
"normal_followers_count": 7537416,
"fast_followers_count": 0,
"profile_banner_url": "https://pbs.twimg.com/profile_banners/12/1742427520",
"profile_image_shape": "Circle",
"default_profile": false,
"default_profile_image": false,
"is_blue_verified": true,
"has_graduated_access": true,
"possibly_sensitive": false,
"translator_type": "regular",
"verification_info": {
"is_identity_verified": false,
"reason": {
"description": {
"text": "This account is verified because it's an affiliate of @Square on X. Learn more",
"entities": [
{ "from_index": 54, "to_index": 61, "ref": { "url": "https://twitter.com/Square", "url_type": "ExternalUrl" } }
]
},
"verified_since_msec": "1324658988066"
}
},
"pinned_tweet_ids_str": ["1833951636005552366"],
"has_custom_timelines": true
}
FieldTypeDescription
_inputstringThe handle or URL exactly as you supplied it. Use this to join results back to your input list.
_sourcestringInternal tag for the path used to fetch the record. S1-primary is the standard fast path; values starting with S2- indicate a fallback was used.
_scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
rest_idstringX's internal numeric user ID. Stable across handle changes — the most reliable identifier for an account.
idstringBase64-encoded form of the user ID.
screen_namestringThe current @handle (without the @).
namestringDisplay name shown above the handle on the profile page.
created_atstringAccount creation timestamp (X's native format, e.g. Tue Mar 21 20:50:14 +0000 2006).
descriptionstringThe user's bio / about text. Empty string if not set.
urlstringThe shortened (t.co) URL the user pinned to their profile. Empty if none.
entitiesobjectParsed entities inside description and url — mentions, hashtags, and the original expanded_url for any links.
locationstringFree-text location field from the profile. Empty string if not set.
followers_countintegerNumber of accounts following this profile.
friends_countintegerNumber of accounts this profile follows.
statuses_countintegerTotal tweets (including replies and retweets) the account has posted.
favourites_countintegerNumber of tweets the account has liked.
listed_countintegerNumber of public Lists this account appears on.
media_countintegerNumber of media items (images, videos) the account has posted.
normal_followers_countintegerFollowers excluding fast-followers; almost always equals followers_count.
fast_followers_countintegerInternal X metric — typically 0.
profile_banner_urlstringURL of the profile banner / header image. May be absent if the user has no banner.
profile_image_shapestringShape of the avatar — Circle for normal accounts, Square for business accounts, Hexagon for NFT avatars.
default_profilebooleantrue if the account still uses the default profile design.
default_profile_imagebooleantrue if the avatar is still the default egg / silhouette.
is_blue_verifiedbooleantrue if the account has the blue checkmark (paid subscription or legacy verification migration).
has_graduated_accessbooleanInternal X flag indicating full access tier; usually true for established accounts.
possibly_sensitivebooleanX's content-sensitivity flag for the profile.
translator_typestringX translator tier — almost always none or regular.
verification_infoobjectStructured detail for verified accounts: is_identity_verified (true = passed identity check), a human-readable reason.description.text, and verified_since_msec (millisecond timestamp).
pinned_tweet_ids_strarrayIDs of tweets the user has pinned to their profile (usually 0 or 1).
has_custom_timelinesbooleantrue if the account has created custom timeline collections.

Error envelope

Accounts that are suspended, deactivated, protected, or have never existed return a structured error instead of crashing the run:

{
"_input": "this-handle-does-not-exist-xyz",
"_error": "not_found",
"_errorDetail": "empty user result",
"_source": "S1-primary",
"_scrapedAt": "2026-05-18T11:03:56.348095+00:00"
}

_error values you may see:

ValueMeaning
not_foundHandle has never existed or was permanently deleted.
unavailableAccount is suspended or deactivated. _errorDetail carries X's reason string (e.g. Suspended).
blockedProfile lookup was rejected (HTTP 4xx) — usually rate-limited. The run continues with the next handle.
exceptionUnexpected error; check _errorDetail for the message.

Filter on _error to triage failed rows.

Pricing

This actor is billed per result: $8.00 per 1,000 profiles. Each successful profile = 1 result. Errors (suspended, not-found, blocked) are not billed.

Other Sosmed Actors

PlatformActorBest for
Twitter / XX Account Tweets ScraperProfile + recent tweets timeline for any handle
Twitter / XX Post Detail ScraperFull tweet detail, media variants, engagement counters
Twitter / XX Search ScraperSearch tweets by keyword, hashtag, or from:user
InstagramInstagram Account ScraperBio, followers, post count
ThreadsThreads Account ScraperProfile data for a Threads handle
BlueskyBluesky Account Scraperatproto profile + counters
RedditReddit User Profile ScraperKarma, posts, trophies

Browse the full catalog at apify.com/xtracto.

Notes

  • followers_count, friends_count, and statuses_count are the exact numbers X's web app displays — eventually-consistent and may lag the live network by a few minutes.
  • Protected accounts return their public metadata only (display name, bio, follower/following counts, creation date) — tweets and media are not exposed.
  • Suspended accounts return {"_error": "unavailable", "_errorDetail": "Suspended", "_input": "..."}. Use the error envelope to triage.
  • rest_id is the most reliable identifier — handles can change but rest_id is permanent. Store it if you need long-term joins.
  • For large jobs (>1,000 profiles), Apify Proxy rotation is recommended to avoid per-IP rate limits.