Threads Profile Lookup: threads profile scraper from $2/1k avatar

Threads Profile Lookup: threads profile scraper from $2/1k

Pricing

from $1.52 / 1,000 profile founds

Go to Apify Store
Threads Profile Lookup: threads profile scraper from $2/1k

Threads Profile Lookup: threads profile scraper from $2/1k

Threads profile scraper: paste Threads handles or profile URLs and get one flat row per profile with display name, bio, exact follower count, verified badge, private flag, profile picture and bio link. Read live from the profile page's own payload, no login and no cookies. Never charged for a miss.

Pricing

from $1.52 / 1,000 profile founds

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

You give this actor a list of Threads handles or profile URLs and for each one it returns the display name, bio, exact follower count, verified badge, private-account flag, profile picture and bio link. Every field is read from the profile page's own data at request time. No login, no cookies, no browser automation, and no stored database sits between you and the answer.

Who it's for

Influencer agencies building a shortlist of Threads creators, social teams reporting on how a brand's Threads account compares with its Instagram twin, and anyone maintaining a creator roster who is tired of opening one tab per handle to read a follower count. It also fits the plainer enrichment job: a spreadsheet with a Threads handle column and no numbers next to it. Pricing is per profile: a few tenths of a cent for a profile that came back with data, and nothing for a handle that is misspelled or belongs to a deactivated account. No seat license, no monthly minimum, no credit system to decode.

Why this one

  • Exact follower counts. The number returned is the integer Threads itself holds, not a rounded "5.7M" from the visible page. That matters the moment you want week-over-week growth rather than a screenshot.
  • No login, no cookies, no headless browser. The profile payload is in the page Threads serves to an ordinary request. This actor reads it directly, which is both faster and far cheaper than driving a browser, and it means no account of yours is ever involved.
  • Never charged for a miss. A handle that does not exist, or an account that has been deactivated, gets a row saying so and costs nothing. See "Price" below for the found-row rate.
  • Both domains and every handle form work. zuck, @zuck, a threads.com link and an older threads.net link all resolve to the same lookup, so you do not have to normalise your column before pasting it.
  • Private accounts still resolve. Threads serves profile-level facts for a private account, so display name, bio, verified badge and follower count all come back, with isPrivate: true flagging the account as locked rather than failing the lookup.
  • No posts, and it says so. This version returns profile metadata only. That is a stated boundary, not an omission you find out about after paying.

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 Threads handle, without the @
userIdtextThe account's stable numeric ID, which survives a handle change
fullNametextThe account's display name
biotextThe bio text
followerCountnumberExact follower count
verifiedbooleanWhether Threads shows a verified badge on the account
isPrivatebooleanWhether the account is private
profilePicUrlimageProfile picture, at the largest size the page offers
externalUrllinkThe external link in the bio, 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. A handle that does not exist is never billed, so a messy list costs you only for the rows you actually got.

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~threads-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"profiles":["zuck","natgeo","mosseri"]}'
  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 "Threads handles or profile URLs to look up": one per line, as a bare handle (zuck), an @handle, or a full profile URL.
  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: vetting a shortlist of Threads creators before a campaign, tracking a competitor brand's Threads following on a weekly schedule, and filling in the follower column of a creator spreadsheet you already maintain.

Input

{
"profiles": [
"zuck",
"natgeo",
"mosseri"
]
}

One Threads handle or profile URL per line. Accepted formats: zuck, @zuck, https://www.threads.com/@zuck, https://www.threads.net/@zuck.

Sample output

queryfoundstatushandleuserIdfullNamebiofollowerCountverifiedisPrivateprofilePicUrlexternalUrlprofileUrlscrapedAt
zucktrueOKzuck63055343223Mark ZuckerbergMostly superintelligence and MMA takes5729099truefalsehttps://scontent-sjc6-1.cdninstagram.com/v/t51.82787-19/550174606_17925811725103224_8363667901743352243_n.jpghttps://www.threads.com/@zuck2026-09-08T10:12:51.917Z

A handle that does not exist, or one whose account has been deactivated, gets a row with found: false and a status / message explaining why. 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~threads-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"profiles":["zuck","natgeo","mosseri"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~threads-profile-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"profiles":["zuck","natgeo","mosseri"]} (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~threads-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 "Threads Profile Scraper: Follower Counts | Apify" — the agent will find and run this actor.

Tips

  • Run "Try it first" on a handful of accounts whose follower counts you already know, to sanity-check the numbers before committing a full list.
  • Store userId, not handle, as your join key. A creator can change their handle; the numeric ID stays put, so a rename shows up as a changed handle on the same userId.
  • externalUrl is null for the many accounts that do not set a bio link. That is normal, not a sign of a failed lookup.
  • Keep the parallel-request setting low on a long list. A steady run gets through more handles than a burst that starts collecting BLOCKED rows.
  • A Threads handle is usually the same string as the account's Instagram handle, so an existing Instagram creator list is often a usable input list as-is.
  • Re-run the same list on a schedule and diff followerCount between runs to chart growth. This actor keeps no history of its own.

vs. alternatives

What it costsWhat you getTrade-off
This actor (threads-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, exact follower count, verified badge, private flag, profile picture, bio linkProfile metadata only. It returns none of the account's threads, replies or reposts, and no following count, because the profile page does not carry one for a logged-out visitor.
apify/threads-profile-api-scraper$2.50 to $5.99 per 1,000 across the group of Threads actorsThe same profile shape, from the vendor most Threads buyers land on firstIt is the established option with the review history. This one is cheaper per profile and returns the same fields; that is the whole of the difference, so pick on price and on which output shape drops into your table more cleanly.
Meta's Threads APIFreeA documented, supported contractIt only reaches accounts you own or manage. For any other handle it is not an option, which is why this actor exists.
Doing it yourselfYour time, plus finding the profile payload inside a page that ships roughly a megabyte of framework data, and keeping up as Meta reshapes itThe same dataThe payload hunt, the request headers that decide whether the data is served at all, and the deactivated-versus-missing distinction 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? Either the handle does not exist or the account was deactivated (NOT_FOUND), the input is not a valid Threads handle shape (BAD_FORMAT), or the request was refused or failed after retries (BLOCKED / REQUEST_FAILED). The message column names which. None of them is charged.

Am I charged for a miss? No. The charge fires only when a profile actually resolves and its data is returned. A nonexistent handle produces a row, unless you turn on "Hide rows with no result", and costs nothing.

Do I need a Threads or Instagram login? No. There is no input field that accepts a credential. The actor reads the public profile page, the same page a logged-out visitor sees.

Is the follower count exact or rounded? Exact. The visible page abbreviates large numbers; the underlying data carries the real integer, and that is what followerCount returns.

Why is there no following count? Threads does not publish a following count on a logged-out profile page, so there is nothing honest to put in that column. It is left out rather than filled with a guess.

Does this return threads, replies or reposts? No. This version is profile metadata only. If you need post-level data, this is not the actor for it, and the README will say so until that changes.

Does it work on private accounts? Yes, for the profile-level fields. Threads still serves display name, bio, verified badge and follower count for a private account's public profile page, and isPrivate: true flags it.

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

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 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.