Threads Profile API
Get a public profile from its handle: name, bio, followers, following and how many threads it has posted.
- 1 credit per call
- Failed calls are free
- Updated
- threads.profile
{ "name": "Instagram", "title": "Instagram (@instagram) • Threads, Say more", "followers": 38400000, "canonical_url": "https://www.threads.com/@instagram", "description": "38.4M Followers • 1.5K Threads • Discover what's new on Instagram 🔎✨. See the latest conversations with @instagram.", "following": 0, "threads_count": 1500}
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| handle | string | yes | The profile's handle, such as instagram, with or without @. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| name | string | The account's name. | |
| followers | integer | Followers, as Threads shows them. | 38,400,000 |
| following | integer | How many accounts it follows. | 0 |
| threads_count | integer | Threads posted, as Threads shows it. | 1500 |
| canonical_url | string | The profile's address. | https://www.threads.com/@instagram |
| title | string | The page title Threads shows. | Instagram (@instagram) • Threads, Say more |
| description | string | The page description Threads shows. | 38.4M Followers • 1.5K Threads • Discover what's new on Instagr… |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "threads.profile", "input": { "handle": "instagram" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "threads.profile", "input": { "handle": "instagram" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "threads.profile", "input": { "handle": "instagram" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
Use Upscrape to look up @instagram on Threads. How many followers and threads does it have?
More from the Threads API
The same data from other platforms
Threads Profile API FAQ
The short answers. The docs have the long ones.
How much does the Threads Profile API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send handle. The input fields below list every option with its type and limits.
Do I need a Threads login?
No. It reads public Threads data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds threads.profile, checks its price and runs it with the same credits as the REST API.
Your first Threads call is free.
Up to 100 free credits to start, no card needed.