How to Get Threads User Posts Data
1 Nov 2026 · benthepythondev
If you need everything a public Threads account has published, the Threads User Posts Scraper exports it as rows you can download or pull over an API. It reads accounts the way a logged-out visitor's browser does. It doesn't stop where the profile page asks you to log in, so it keeps paging back to the account's first post. You don't need a login, cookies or an API key.
What you get
Each row is one post, reply or repost. In plain words, a row contains:
- The post itself: its numeric
id, the shortcode, the fullurl, thetext, when it was published (posted_at, in UTC), and whether it is pinned, edited or a reply (is_pinned,is_edited,is_reply,reply_to_author). - Engagement counts:
likes,replies,reposts,quotesandshares. - The author:
username, display name (full_name), the stable numericauthor_idandis_verified. - Content:
mentions,links(the real destination, not a Threads redirect),link_title,quoted_post_url,image_urlsandvideo_urls. - Attached long text:
attachment_textholds the longer text Threads lets authors attach under a post. That text isn't part oftext. - Mode extras: reply rows add
reply_to_urlandreply_to_text. Repost rows addreposted_byandreposted_at.
The Actor has three modes: posts (what the accounts published, newest first, thread continuations by the same author included), replies (replies the accounts wrote, each with the post it answers) and reposts (the original posts an account reposted, with the repost time).
A real example
These two rows come from a real run on @natgeo. Some fields are trimmed:
[
{
"record_type": "post",
"id": "4000516918599612781",
"url": "https://www.threads.com/@natgeo/post/DeEsPEbEflt",
"username": "natgeo",
"author_id": "63269174602",
"full_name": "National Geographic",
"is_verified": true,
"text": "Some days call for productivity. Others call for watching a beluga whale do barrel rolls in front of a mirror.",
"posted_at": "2026-10-04T13:00:20+00:00",
"likes": 1420,
"replies": 21,
"reposts": 21,
"quotes": 1,
"shares": 4,
"is_reply": false,
"links": []
},
{
"record_type": "post",
"id": "4001153096084173246",
"url": "https://www.threads.com/@natgeo/post/DeG84q4DTG-",
"username": "natgeo",
"posted_at": "2026-10-05T10:03:59+00:00",
"likes": 74,
"replies": 1,
"reposts": 1,
"quotes": 0,
"shares": null,
"is_reply": false,
"quoted_post_url": "https://www.threads.com/@natgeoanimals/post/Dd7JH1Oo8Ga"
}
]
The second row quotes another account's post, so quoted_post_url points to it. Its shares came back as null. Count fields can be empty, so plan for that.
Use cases
- Archive an account's full history. The README describes a test run that saved National Geographic's whole public history, 1,819 posts from July 2023 to the day of the run, in 128 seconds. Smaller accounts take a few seconds.
- Run a cheap daily feed. Set
postedAfterto yesterday's date and schedule the run. Reading stops once the Actor reaches older posts, so a daily run only collects the new ones. - Study how an account replies. In
repliesmode, every reply comes with the link and text of the post it answers, so you can read each conversation without opening Threads. - Track what an account amplifies.
repostsmode returns the original posts withreposted_byandreposted_at, which shows what an account shared and when.
How to run it on Apify
Open the Actor page on Apify and fill in the input:
| Field | What it does |
|---|---|
mode | posts, replies or reposts |
usernames | Usernames, @handles or profile links |
maxResults | Rows per account, newest first. 20 by default, up to 100,000 |
postedAfter | Only rows from this UTC date on (YYYY-MM-DD) |
postedBefore | Only rows up to this UTC date |
This input pulls every September 2026 post from two accounts:
{
"mode": "posts",
"usernames": ["natgeo", "nasa"],
"maxResults": 1000,
"postedAfter": "2026-09-01",
"postedBefore": "2026-09-30"
}
You can export results as JSON, CSV or Excel, run the Actor on a schedule, call it through the Apify API, or connect it to Make, Zapier or n8n.
How to call it as an API on RapidAPI
If you already use RapidAPI for your other API keys and billing, the same scraper is listed there as Threads User Posts Scraper on RapidAPI. The listing's own page has the endpoint and request format.
Honest limits
- It reads public accounts only, exactly what a logged-out visitor can see. Private profiles aren't available.
- The default
maxResultsis 20. To get a full history you have to raise it (up to 100,000 per account). - Some engagement fields can be
null, asshareswas in the example above. - Media comes back as URLs in
image_urlsandvideo_urls. The files themselves aren't downloaded. - Date filters use UTC dates, so posts near midnight in your local time can land on the day before or after.
- A missing or misspelled username doesn't fail the run. It's skipped and named in the status message and in the
SUMMARYrecord, so check that record if an account is missing from your results.
Affiliate if you still need an Apify account: apify.com/?fpr=qolupv. I may earn a commission; the price you pay does not change.