X Profile Lookup: twitter profile scraper from $2/1k avatar

X Profile Lookup: twitter profile scraper from $2/1k

Pricing

from $1.00 / 1,000 profile founds

Go to Apify Store
X Profile Lookup: twitter profile scraper from $2/1k

X Profile Lookup: twitter profile scraper from $2/1k

Twitter profile scraper and X profile API. Paste X handles or profile URLs, get one flat row each: display name, bio, location, website, join date, exact follower, following and post counts, badge type, profile picture and header. No login, no API key. Never charged for a miss.

Pricing

from $1.00 / 1,000 profile founds

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

You give this actor a list of X (Twitter) handles or profile URLs and for each one it returns the display name, bio, location, website, join date, exact follower / following / post counts, badge type, profile picture and header image. Every number is read from the profile page's own server-rendered data at request time. No login, no cookies, no API key, and no stored database sits between you and the answer.

Who it's for

Growth and partnerships teams sizing an account before they pitch it, community managers keeping a roster of member handles current, researchers tracking how a set of accounts grows week over week, and anyone whose CRM has a Twitter handle column that has never been enriched. If your workflow today is "open 40 tabs and copy the follower count into a spreadsheet", this is that job as one API call. Pricing is per profile: a few tenths of a cent for a profile that came back with data, and nothing at all for a handle that is unused, suspended or typo'd. No seat license, no monthly minimum, no credit system to decode.

Why this one

  • Exact counts, not the abbreviated ones on the page. The profile card shows "92.3M followers" and "74.3K posts". The page's own data carries 92385570 and 74276, and that is what this actor returns. Rounded figures are useless for tracking growth; these are not.
  • No API key and no $200/month tier. X's official API starts at $200/month for the plan most people need. This reads the public profile page, which anyone can open in a browser, and bills per profile found.
  • Never charged for a miss. A handle nobody holds comes back as a clean NOT_FOUND row, a suspended account is labelled as suspended rather than silently returned as empty data, and neither one costs anything.
  • A suspended account is never sold to you as a hit. X still renders a page for a suspended handle. This actor reads the status and treats it as a miss, instead of billing you for a row with no profile in it.
  • Handles, @handles, x.com links and old twitter.com links all work. Paste whatever your CRM already stores; you do not have to normalise the column first.
  • No credential ever enters this actor. There is no input field that could take a bearer token, a cookie or a password, because none is needed.

What you get

Every row starts with the same five fields, then the profile fields.

FieldTypeDescription
querytextThe handle or URL you submitted, echoed back
foundbooleantrue if the profile was found
statustextOK on a match; NOT_FOUND, BLOCKED, BAD_FORMAT, or REQUEST_FAILED on a miss
messagetextPlain-English reason for a miss, only present when found is false
scrapedAtISO 8601 datetimeWhen the page was fetched
handletextThe account's handle, in the casing X itself uses
userIdtextThe account's stable numeric X user ID, which survives a handle change
displayNametextThe account's display name
biotextThe bio text, as X stores it
locationtextThe self-declared location, if the account sets one
websitelinkThe account's link, already expanded past the t.co wrapper
joinedDateISO 8601 datetimeWhen the account was created
followersCountnumberExact follower count
followingCountnumberExact following count
tweetCountnumberExact number of posts
verifiedbooleanWhether the account carries any badge
verifiedTypetextWhich badge: Blue, Business or Government
isProtectedbooleanWhether the account is protected (posts visible to followers only)
profileImageUrlimageProfile picture, upgraded to the 400x400 size
bannerUrlimageHeader image, if the account sets one
profileUrllinkCanonical profile page

Deselect any field in the Input tab's column picker to drop it from every row: query, found, status, message and scrapedAt always stay.

Price

Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed per item only when data is actually found and returned — see .actor/pay_per_event.json for exact prices. A miss is never charged.

1,000 handles through this actor: about $2 if every one resolves, less if some do not, and less again on a paid Apify plan. The same 1,000 profiles through X's own API means a $200/month subscription before you read the first row.

How to use

  1. In the Apify Console. Open the actor page and click Start — the profiles field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~x-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"profiles":["nasa","apify","github"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
  1. Open the Input tab and paste your list into "X handles or profile URLs to look up": one per line, as a bare handle (nasa), an @handle, or a full profile URL on either domain.
  2. Leave "Try it first" on for your opening run. It caps the run at 5 profiles so you can check the output shape before spending on the whole list.
  3. Optionally trim "Which columns do you want?" to the fields you actually need, or use "Only keep rows containing" and "Skip rows containing" to filter by keyword.
  4. Turn "Try it first" off and press Start to run the full list.

Typical uses: enriching a CRM column of Twitter handles, sizing a list of creators before an outreach campaign, and running the same list weekly so you can chart follower growth over time.

Input

{
"profiles": [
"nasa",
"apify",
"github"
]
}

One X (Twitter) handle or profile URL per line. Accepted formats: nasa, @nasa, https://x.com/nasa, https://twitter.com/nasa.

Sample output

queryfoundstatushandleuserIddisplayNamebiolocationwebsitejoinedDatefollowersCountfollowingCounttweetCountverifiedverifiedTypeisProtectedprofileImageUrlbannerUrlprofileUrlscrapedAt
nasatrueOKNASA11348282NASAMaking the seemingly impossible, possible. ✨Pale Blue Dothttp://www.nasa.gov/2007-12-19T20:20:32.000Z9238561711774276trueGovernmentfalsehttps://pbs.twimg.com/profile_images/1321163587679784960/0ZxKlEKB_400x400.jpghttps://pbs.twimg.com/profile_banners/11348282/1775567134https://x.com/NASA2026-09-08T10:13:18.979Z

A handle nobody holds, or one belonging to a suspended account, gets a row with found: false and a status / message explaining which of the two it was. Neither is charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~x-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"profiles":["nasa","apify","github"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~x-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"profiles":["nasa","apify","github"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~x-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"profiles":["{{profile}}"]}, mapping the row's profile into the profiles array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Twitter Profile Scraper: X Profile API | Apify" — the agent will find and run this actor.

Tips

  • Run "Try it first" on a few accounts whose follower counts you already know, so you can confirm the numbers before committing a long list.
  • Store userId, not handle, as your join key. Handles change; the numeric ID does not, so a rename shows up as a changed handle on the same userId instead of a broken row.
  • Keep the parallel-request setting low on a big list. X notices bursts, and a page of BLOCKED rows costs more in wasted time than a slower, steadier run.
  • verifiedType is more useful than verified on its own: Government and Business badges say something about the account that a paid Blue badge does not.
  • location is free text the account holder typed. "Pale Blue Dot" is a real value. Do not feed it into a geocoder without cleaning it.
  • Re-run the same list on a schedule and diff followersCount between runs to get growth. This actor keeps no history of its own.

vs. alternatives

What it costsWhat you getTrade-off
This actor (x-profile-lookup)$2 per 1,000 found profiles at the FREE tier, less on paid tiers, nothing for a missOne flat row per handle: display name, bio, location, website, join date, exact follower / following / post counts, badge type, picturesProfile data only. It returns nothing about the account's posts, followers list, or engagement. If you need posts, apidojo/tweet-scraper is the actor for that job, not this one.
apidojo/tweet-scraper$0.40 per 1,000 tweetsPosts: the tweets themselves, with their text, media and engagement countsA different product for a different question. Use it when you want what an account said; use this when you want who the account is.
X API (official)From $200/monthEverything X chooses to expose, under a documented contract with rate limits you can plan againstIf you are building a product on X data and need guarantees, pay for the API. This is for the enrichment case where a monthly subscription for a follower-count column makes no sense.
Doing it yourselfYour time, plus parsing a serialized page payload that X reformats without notice, plus telling a suspended account apart from an unused handleThe same dataThe parsing, the exact-versus-rounded count handling, the suspended-versus-missing distinction, and re-testing when the page changes are the maintenance this actor absorbs.

Prices for third-party tools are their published figures as of September 2026 and are not tracked here; check the vendor before relying on the comparison.

FAQ

Why does a row say found: false? One of four reasons, and message always names which: nobody holds that handle (NOT_FOUND, a real HTTP 404 from X), the account is suspended (NOT_FOUND, with "suspended" in the message), the input is not a valid handle shape (BAD_FORMAT), or the request was refused or timed out (BLOCKED / REQUEST_FAILED). None of the four is charged.

Am I charged for a miss? No. The charge fires only when a profile actually resolves and its data is returned. Suspended accounts, unused handles and blocked requests all produce a row and cost nothing.

Do I need an X API key, a login, or a cookie? No. There is no input field that accepts one. The actor reads the public profile page, the same page a logged-out visitor sees.

Are the follower counts exact or rounded? Exact. The visible profile card rounds to "92.3M"; the page's underlying data carries the real integer, and that is the number in followersCount. The same is true of followingCount and tweetCount.

Is this a live check or a stored database? Live. Every run fetches the current page. There is no snapshot behind it, which is also why growth tracking needs a schedule plus your own storage rather than a history field here.

What happens to protected accounts? They still return a row. X serves the profile header for a protected account, so display name, bio, join date and the three counts are all present; isProtected: true flags it. What a protected account does not expose is its posts, which this actor does not return for any account.

What does verifiedType mean? It is X's own label for the badge on the account: Blue for a paid subscription, Business for an organisation, Government for an official body. null means the page carried no badge for that account.

Does an old twitter.com URL still work? Yes. twitter.com, mobile.twitter.com and x.com links all resolve to the same handle before the request is made.

Is this GDPR-relevant? What comes back is an account's own public, self-published profile information, the same fields any visitor sees without logging in. It returns no private data, no email addresses and no follower lists.

Can an AI agent call this directly? Yes. It is on the Apify MCP server, so an agent in Claude, Cursor or another MCP client can find and run it by name, or you can call the REST endpoint shown above from any script or workflow.