Threads Profile API
Get a public profile from its handle: name, bio, followers, following and how many threads it has posted.
Sendhandle
Returnsnamehandlefollowersfollowingthreads_countcanonical_url
Get public Threads profiles, posts with likes and replies, tag volumes, search results and profile feeds as clean JSON. Send a handle, a post link or a tag. No Instagram or Threads login.
| # | Text | Likes | Replies | Reposts | Posted (Unix time) | Link | Type |
|---|---|---|---|---|---|---|---|
| 1 | Agrippa said it's time to get back to work 😎 | 5086 | 528 | 266 | 1,790,355,021 | https://www.threads.com/@zuck/post/Ddt7cL5EfUG | thread |
| 2 | Excited to see you at Meta Connect today 😎 | 2997 | 560 | 208 | 1,790,182,897 | https://www.threads.com/@zuck/post/DdoxAnGDrMh | thread |
| 3 | Muse Spark 1.3 is rolling out today with frontier performance a… | 1649 | 266 | 128 | 1,788,377,183 | https://www.threads.com/@zuck/post/Dcy_A8pGo-m | thread |
| 4 | Muse Spark 1.3 is rolling out today with frontier performance a… | 1649 | 266 | 128 | 1,788,377,183 | https://www.threads.com/@zuck/post/Dcy_A8pGo-m/media | thread |
| 5 | Muse Voice Transcribe is MSL's first real-time audio perception… | 1422 | 208 | 118 | 1,788,283,092 | https://www.threads.com/@zuck/post/DcwLClnmOrR | thread |
What each one takes and what it returns. Open one for a real response, every input and every field.
Get a public profile from its handle: name, bio, followers, following and how many threads it has posted.
Sendhandle
Returnsnamehandlefollowersfollowingthreads_countcanonical_url
Get one post from its link, or its handle and ID: text, likes, replies, reposts, quotes and post time.
Sendhandleorpost_idorpost_url
Returnscontenthandletitlecanonical_urldescriptionpost_id
List a profile's recent threads, replies, media posts or reposts, with text, likes, replies and post time.
Sendhandle
Returnscontenturltype
Get a topic tag's volume: how many threads use it in total and how many recently.
Sendtag
Returnstagtotal_threadsrecent_threadstitletag_urlcanonical_url
Search Threads by keyword and get the matching posts with their links.
Sendquery
ReturnsJSON; every field is in the API reference
Find public profiles that match a search.
Sendquery
ReturnsJSON; every field is in the API reference
Get the links to the public replies on a post.
Sendhandleorpost_idorpost_url
ReturnsJSON; every field is in the API reference
List the links to a profile's media posts.
Sendhandle
Returnstypeurl
Get the posts Threads shows on its public home page.
ReturnsJSON; every field is in the API referenceFollow accounts on Threads: followers, posting rhythm and how each post lands.
ProfileProfile feedPostCollect the replies to a post and the profiles taking part in a topic.
Post repliesUser searchOne request shape for every Threads endpoint: the endpoint ID and its input. No SDK needed.
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));
{ "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}
https://data.upscrape.com/mcp
Use Upscrape to look up @instagram on Threads. How many followers and threads does it have?
With Upscrape, open threads.com/@instagram/post/DeRpgdFlhJa and tell me its likes, replies, reposts and quotes.
Using Upscrape, get Mark Zuckerberg's (@zuck) latest media posts on Threads and rank them by likes.
The short answers. The docs have the long ones.
Meta's Threads API is built for managing your own account, and it needs app review. Upscrape reads public Threads pages, so you can look up any public profile, post or tag with one API key.
No. You send a handle, a link or a tag and get JSON back. Nothing runs on your account, and you share no password or cookie. Private profiles are not part of it.
Yes. The post and profile feed endpoints return likes, replies, reposts and quotes for each post.
Profile, post, profile feed, tag, search, user search, post replies, profile media posts and home feed. Each is its own endpoint with a published input schema, and the response is JSON.
Every Threads endpoint costs 1 credit per successful call. You buy credits once, with no subscription, and paid credits never expire. New accounts get free credits to try it.
Yes. Connect any MCP client to the Upscrape MCP server with OAuth or an API key. The agent finds the Threads endpoint, checks its price and runs it with the same credits as the REST API.
Upscrape reads public pages only and needs no login. How you use the data is yours to decide under the laws that apply to you; we sign a data processing agreement for your legal review.
We fix the endpoint. Your request and the response fields stay the same.
Up to 100 free credits to start, no card needed.