X (Twitter) Profile Scraper: Followers, Bio & Tweets avatar

X (Twitter) Profile Scraper: Followers, Bio & Tweets

Pricing

from $6.15 / 1,000 results

Go to Apify Store
X (Twitter) Profile Scraper: Followers, Bio & Tweets

X (Twitter) Profile Scraper: Followers, Bio & Tweets

X (Twitter) profile scraper and API. Look up any public account by username or URL and export the full profile plus recent tweets: follower count, following, bio, location, verification, business category and tweet engagement. JSON, CSV, Excel. No login, no API key.

Pricing

from $6.15 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

X (Twitter) Profile & Tweets Scraper

X (Twitter) Profile Scraper: Followers, Bio & Tweets

The most complete X (Twitter) profile scraper and social media data API on Apify. Give it a username or profile URL and get back every public profile field X exposes, from follower count and verification to business category and join date, plus the account's most recent tweets with full engagement metrics. No login, no cookies, no API key, no official Twitter API access token required.

Ideal for influencer data, lead generation, competitor research, audience analysis, and social media monitoring at scale. Export clean JSON, CSV, or Excel and drop it straight into your CRM, spreadsheet, or data pipeline.

Here is one real result, with every field the actor returns (the recentTweets array is trimmed to 1 tweet to keep the sample short; every value shown is real):

{
"profileImageUrl": "https://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB.jpg",
"profileImageShape": "Square",
"username": "NASA",
"displayName": "NASA",
"url": "https://x.com/NASA",
"userId": "11348282",
"bio": "Making the seemingly impossible, possible. ✨",
"bioUrls": [],
"bioHashtags": [],
"bioMentions": [],
"website": "http://www.nasa.gov/",
"location": "Pale Blue Dot",
"isVerified": true,
"isBlueVerified": true,
"verified": false,
"verifiedType": "Government",
"isIdentityVerified": false,
"verifiedReason": "This account is verified because it is a government or multilateral organization account.",
"verifiedSince": "2009-08-07T19:53:50.941Z",
"isProtected": false,
"canDm": false,
"professionalType": null,
"professionalCategories": [],
"isBusinessAccount": true,
"affiliatesCount": 87,
"affiliation": null,
"accountCreated": "Wed Dec 19 20:20:32 +0000 2007",
"accountCreatedISO": "2007-12-19T20:20:32.000Z",
"birthdate": { "day": 1, "month": 10, "year": 1958 },
"followerCount": 92383412,
"fastFollowerCount": 0,
"normalFollowerCount": 92383412,
"followingCount": 117,
"tweetCount": 74272,
"mediaCount": 28136,
"listedCount": 96943,
"favouritesCount": 16984,
"bannerUrl": "https://pbs.twimg.com/profile_banners/11348282/1775567134",
"defaultProfileImage": false,
"withheldInCountries": [],
"pinnedTweetId": null,
"pinnedTweetIds": [],
"numTweetsFetched": 1,
"recentTweets": [
{
"id": "2095621168208248911",
"url": "https://x.com/NASA/status/2095621168208248911",
"text": "RT @Astro_Jessica: Photo or it didn't happen. Some initial views from my camera during Tuesday's spacewalk...",
"createdAt": "Thu Sep 03 21:13:15 +0000 2026",
"createdAtISO": "2026-09-03T21:13:15.000Z",
"likeCount": 0,
"replyCount": 0,
"retweetCount": 240,
"quoteCount": 0,
"bookmarkCount": 0,
"viewCount": 46693,
"lang": "en",
"conversationId": "2095621168208248911",
"possiblySensitive": null,
"isReply": false,
"inReplyToUsername": null,
"isQuote": false,
"quotedStatusId": null,
"isRetweet": true,
"source": "Twitter for iPhone",
"hashtags": [],
"mentions": ["Astro_Jessica"],
"links": [],
"media": []
}
],
"observedAt": "2026-09-04T05:37:12.054Z",
"error": null
}

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

Give the actor a list of X (Twitter) handles or profile URLs. For each one it reads the public profile and writes a single normalized record containing the full profile plus the account's most recent tweets. Handles can be provided as @name, name, or a full profile URL such as https://x.com/nasa; duplicates are removed automatically. Missing source values are returned as null, never invented, and each tweet carries its own engagement metrics (likes, replies, retweets, quotes, bookmarks, views), entities (hashtags, mentions, links), and media.

The actor reads only public data. Protected, suspended, or non-existent accounts return a record with a populated error field instead of profile data, and are never charged.

Why this X profile scraper

  • No API key and no login. No Twitter developer account, no OAuth token, no cookies to paste.
  • Every public field, honest nulls. Follower and following counts, verification type and reason, business/creator category, affiliate badge, birthdate (when public), banner, pinned tweets and more. If X does not expose a value, you get null, never a fake.
  • Follower counts you can trust. followerCount plus the fastFollowerCount / normalFollowerCount split X reports internally.
  • ISO timestamps. Every date is returned both in the raw X format and as sortable ISO 8601 (accountCreatedISO, createdAtISO).
  • Profile and timeline in one record. No second run to fetch recent tweets.
  • Bulk and fast. Pass hundreds of handles in one run; profiles are fetched concurrently.

Use cases

  • Influencer marketing: rank creators by follower count, engagement, verification, and category.
  • Lead generation: pull bio links, websites, locations, and open-DM status for outreach.
  • Competitor and brand monitoring: track follower growth and posting activity over time.
  • Audience and market research: enrich a list of usernames into a full social media dataset.
  • Data pipelines: feed clean JSON/CSV into dashboards, CRMs, or notebooks.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the NASA profile and its 20 most recent tweets.

{
"handles": ["NASA"],
"maxTweetsPerUser": 20
}

Add more handles to the handles array to scrape several accounts in one run. Set maxTweetsPerUser to 0 if you only want profile fields and no tweets.

Input reference

FieldTypeRequiredDefaultDescription
handlesstring[]yes(none)Public X handles or profile URLs to scrape, one record per handle. Accepts @name, name, or https://x.com/name. Duplicates are removed.
startUrlsstring[]no[]Optional list of full X profile URLs. Merged with handles and de-duplicated.
maxTweetsPerUserintegerno20Maximum recent tweets to keep per handle, 0 to 40. X's public timeline returns up to about 40 recent tweets in one page. Set 0 for profile only.
maxProfilesintegerno(none)Optional cap on how many profiles to process in one run. Leave empty for no limit.

Output reference

One dataset item per handle. Types: string, number, boolean, object, object[], or null when the source value is absent.

FieldTypeDescription
profileImageUrlstringFull-resolution profile avatar URL.
profileImageShapestringAvatar shape, for example Circle, Square, or Hexagon.
usernamestringThe account handle (screen name).
displayNamestringDisplay name shown on the profile.
urlstringCanonical profile URL on x.com.
userIdstringNumeric X user ID as a string.
biostringProfile description / bio.
bioUrlsstring[]Expanded links contained in the bio text.
bioHashtagsstring[]Hashtags contained in the bio text.
bioMentionsstring[]@mentions contained in the bio text.
websitestringWebsite link from the profile, or null.
locationstringSelf-reported location, or null.
isVerifiedbooleanWhether the account carries any verified badge.
isBlueVerifiedbooleanWhether the account has an X (blue) verified badge.
verifiedbooleanLegacy verification flag.
verifiedTypestringVerification type, for example Government, Business, or null.
isIdentityVerifiedbooleanWhether the account passed X identity verification.
verifiedReasonstringHuman-readable reason the account is verified, or null.
verifiedSincestringISO 8601 timestamp of when verification was granted, or null.
isProtectedbooleanWhether the account is protected (private).
canDmbooleanWhether the account accepts direct messages from anyone.
professionalTypestringBusiness, Creator, or null for a professional account.
professionalCategoriesstring[]Business category names for a professional account.
isBusinessAccountbooleanWhether the account is a business/organization account.
affiliatesCountnumberNumber of affiliated accounts, or null.
affiliationobjectParent-organization badge (label, url, badgeUrl), or null.
accountCreatedstringAccount creation timestamp in raw X format.
accountCreatedISOstringAccount creation timestamp as ISO 8601.
birthdateobjectPublic birthday parts (day, month, year), or null. Only publicly shared parts are filled.
followerCountnumberNumber of followers.
fastFollowerCountnumberX internal "fast follower" count.
normalFollowerCountnumberX internal "normal follower" count.
followingCountnumberNumber of accounts followed.
tweetCountnumberTotal tweets posted.
mediaCountnumberTotal media items posted.
listedCountnumberNumber of lists the account appears on.
favouritesCountnumberNumber of likes the account has given.
bannerUrlstringProfile banner image URL, or null.
defaultProfileImagebooleanWhether the account still uses the default avatar.
withheldInCountriesstring[]Country codes where the account is withheld.
pinnedTweetIdstringID of the pinned tweet, or null.
pinnedTweetIdsstring[]All pinned tweet IDs.
numTweetsFetchednumberCount of tweets returned in recentTweets.
recentTweetsobject[]Most recent tweets. Each holds id, url, text, createdAt, createdAtISO, likeCount, replyCount, retweetCount, quoteCount, bookmarkCount, viewCount, lang, conversationId, possiblySensitive, isReply, inReplyToUsername, isQuote, quotedStatusId, isRetweet, source, hashtags, mentions, links, and media.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed handle a single item with a populated error field is written instead and is not charged.

How it compares

Every value below reflects what each actor advertises for public X (Twitter) profile scraping. This actor is a strict superset: it accepts the same inputs and returns the same fields, plus more.

CapabilityThis actorapidojo/twitter-user-scraperdata-slayer/twitter-userlead.gen.labs/twitter-x-profile-details
Username / handle inputYesYesYesYes
Profile URL inputYesYesNoPartial
No login / no API keyYesYesYesYes
Follower / following countsYesYesYesYes
Fast vs normal follower splitYesNoNoNo
Verification typeYesYesPartialPartial
Verified reason and dateYesNoNoNo
Business / creator categoryYesYesNoNo
Affiliate badge + affiliate countYesPartialPartialNo
Public birthdayYesNoNoNo
Bio links / hashtags / mentionsYesNoNoNo
Recent tweets with engagementYesPartialNoNo
ISO 8601 timestampsYesNoNoNo
Open-DM flagYesYesNoNo

Named competitors are independent third-party actors; capabilities are summarized from their public Apify listings and may change.

Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~x-profile-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"handles":["NASA","OpenAI"],"maxTweetsPerUser":20}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~x-profile-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"handles":["nasa"],"maxTweetsPerUser":10}'

Apify CLI:

apify call scrapers_lat/x-profile-scraper \
--input '{"handles":["NASA"]}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per profile record returned (result event). See the pricing tab for the current per-result price.
  • No charge on failure. A handle that cannot be read (not found, suspended, protected, rate-limited) is written with a populated error field and is not charged.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further billable results.
  • Free Apify plans are capped at 10 handles per run. Upgrade for more.

FAQ and troubleshooting

Do I need a Twitter/X API key or developer account? No. The actor needs only public data, so there is no API key, OAuth token, or login. Just enter handles and run.

Why did a handle return an error? The account is protected, suspended, does not exist, or X rate-limited the request at that moment. Error records are not charged. Re-run rate-limited handles.

How many tweets do I get per handle? X's public timeline exposes up to about 40 recent tweets in one page, so maxTweetsPerUser above 40 is capped by what X returns. Set it to 0 for profile fields only.

Can I pass profile URLs instead of handles? Yes. @nasa, nasa, and https://x.com/nasa are all accepted and normalized to the same handle. You can also put URLs in startUrls.

Can I look up accounts by numeric user ID? Not at this time. X does not expose the by-ID lookup to unauthenticated requests reliably, so this actor works from handles and profile URLs, which are stable and public.

Why is viewCount or bookmarkCount null on some tweets? X does not expose those counters for every tweet in the public timeline. Missing values are returned as null, never invented.

Is this an official X tool? No. This actor is independent and has no affiliation with X (formerly Twitter). It reads only data that is publicly available.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with X (formerly Twitter). Accesses only publicly available profile data.