Meta Threads Scraper
Pricing
$19.99/month + usage
Meta Threads Scraper
Meta Threads scraper that extracts posts, profiles, and replies from threads.net using direct network requests, so you get structured JSON data for social listening, competitor research, and content analysis without browser automation.
Pricing
$19.99/month + usage
Rating
0.0
(0)
Developer

Kawsar
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Share
I built this Apify actor to pull public data straight from Meta's Threads. It uses a headless browser (Playwright) to gracefully handle Meta's API protections, extracting the raw data they embed directly into the page. You just give it a username or a post URL, and it hands back clean, structured JSON you can actually use.
It handles three main things:
- Posts: grabbing a user's timeline
- Profiles: getting account details like follower counts and bios
- Replies: pulling comments on a specific post
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
usernames | array | - | Threads usernames to scrape (leave out the @ symbol). |
urls | array | - | Exact Profile or post URLs from threads.net. |
scrapeType | string | "posts" | What you want to collect: posts, profile, or replies. |
maxItems | integer | 100 | Maximum items to grab per username or URL. |
timeoutSecs | integer | 300 | When the actor should give up (in seconds). |
requestTimeoutSecs | integer | 30 | How long to wait for a single page load. |
proxyConfiguration | object | Datacenter | Proxy settings to avoid getting blocked. |
Example input
{"usernames": ["zuck", "instagram"],"scrapeType": "posts","maxItems": 50,"proxyConfiguration": { "useApifyProxy": true }}
If you prefer URLs, just pass them directly:
{"urls": ["https://www.threads.net/@zuck"],"scrapeType": "profile"}
Output
The actor stores everything in a dataset. A typical post looks like this:
{"postId": "3141737961795561608","postUrl": "https://www.threads.net/t/CuZsgfWLyiI","postText": "70 million sign ups on Threads as of this morning. Way beyond our expectations.","username": "zuck","userId": "314216","userVerified": true,"userProfilePic": "https://scontent.cdninstagram.com/...","likeCount": 146411,"replyCount": 27068,"repostCount": 0,"publishedAt": "2023-07-07T13:39:32+00:00","imageUrls": [],"videoUrls": [],"hasAudio": null,"postCode": "CuZsgfWLyiI","mediaWidth": 612,"mediaHeight": 612,"isRepost": false,"isQuote": false,"scrapedAt": "2025-03-14T17:30:00+00:00"}
When you scrape in profile mode, you'll get account-level fields instead, like displayName, bio, followerCount, and isPrivate.
How it works under the hood
Threads changes its layout and API protections pretty often. Right now, the actor works by loading the public page using Playwright and extracting the React/Relay server-side rendered (SSR) JSON directly from the page scripts. This means we don't have to fight their dynamic API tokens, and we still get the exact data the native web app uses.
A few tips
- Start small. Use a low
maxItemsvalue (like 10-20) to make sure everything works before running massive scrapes. - If you start seeing blocks or timeouts, switch to Residential proxies. Meta can be pretty aggressive with rate-limiting datacenter IPs.
- The
profilescrape type is the fastest option since it only needs to load one page per user.
Support & Contact
For fast support, custom requests, bug reports, or just to say hi, feel free to reach out directly:
- LinkedIn: kawsarlog
- Telegram: @kawsarlog
I'm regularly building new scrapers and automation tools, so connect with me if you want to see what I'm working on next.