Meta Threads Scraper - Posts, Profiles & Search
Pricing
from $4.00 / 1,000 results
Meta Threads Scraper - Posts, Profiles & Search
Scrape Threads without login. Posts by user or keyword. Accounts by keyword. Engagement metrics + public profiles. For social listening, influencer research, lead gen, competitor analysis.
Pricing
from $4.00 / 1,000 results
Rating
3.0
(11)
Developer
Rush
Maintained by CommunityActor stats
27
Bookmarked
1.5K
Total users
303
Monthly active users
0.5 hours
Issues response
2 days ago
Last modified
Categories
Share
Extract public Threads data including posts, profiles, engagement metrics (likes, replies, reposts, shares, views), and contact information from bios. Scrape a user's posts, search public posts by keyword or hashtag, or discover accounts by keyword. Built for social media monitoring, influencer outreach, and competitive analysis. No login required. Export to JSON/CSV/Excel.
Note: This is an experimental tool. Website structure may occasionally change, which could affect data extraction. Please test with small batches before large-scale use.
What Data Can You Get?
User Profile Information
- Username and display name
- Bio/description (full text)
- Profile picture URL (standard and high-resolution variants)
- Follower count (when available)
- Verification status
- Fediverse / ActivityPub participation flag
- Profile URL
- Contact information: emails, phone numbers, and website links extracted from bio
- External profile links
- Interest and topic tags from the user's profile
- Linked podcast name, URL, and platform (when available)
Post Content
- Text content
- Post creation time (ISO, formatted, and Unix timestamp)
- Post URL and unique code
- Engagement metrics: likes, replies, reposts, quotes, shares, and views
- Pinned post indicator and edit status
- Sponsored / paid-partnership flag
- Accessibility / alt-text caption on images (when available)
- Original media width and height
- Media attachments (images, videos, carousels, GIFs)
- Audio-track indicator on video posts (
has_audio; null for non-video posts) - AI-content label flag (
is_ai_generated; set when the post is marked as AI-generated) - Inline sticker indicators and sticker metadata when present (
is_sticker_post,sticker_count,sticker_ids,sticker_urls) - Topic / trend tag the post is grouped under (when present)
- Tagged place / location name (when the author added one)
- Detected content language (e.g.
zh_TW; empty when not flagged) - Spoiler-cover indicator
- Shared link's preview title (when the post embeds a link)
- Hashtags used
- User mentions — both text matches and platform-resolved tagged users
- External links
Conversation Context (per post)
- Reply flag with the username being replied to
- Reply-control setting (who is allowed to reply)
- Quote-post flag and the URL of the quoted post
- Repost flag and the URL of the original post
Why This Scraper?
Core capabilities (what most users come for)
| Need | This actor |
|---|---|
| Engagement metrics (likes, replies, reposts, quotes, shares, views) when public | ✅ |
| Bio contact extraction (emails, phones, links) for lead gen | ✅ |
| Scrape by username; search by hashtag or keyword | ✅ |
| Discover accounts by keyword (Find Profiles) | ✅ |
Date-bounded research (start_date / end_date) | ✅ |
| Batch up to 20 users or 20 keywords per run | ✅ |
| No login required | ✅ |
Pro features (deeper analytics)
| Feature | What it enables |
|---|---|
| Sponsored / paid-partnership flag | Filter organic vs branded content |
AI-content label flag (is_ai_generated) | Separate AI-generated posts from human-made ones |
Audio-track flag on videos (has_audio) | Spot silent vs sound-on video content |
| Quote / repost source URLs | Map conversation graphs across posts |
| Reply context (target username + reply-control) | Reconstruct thread structure |
| Image accessibility caption | Content cataloging and a11y workflows |
| HD profile picture URL | Premium branding research |
| Fediverse / ActivityPub flag | Cross-platform reach analysis |
Quick Picker
- Want a specific account's posts →
mode: "user" - Want posts about a keyword or hashtag →
mode: "search" - Want to discover accounts matching a keyword →
mode: "profiles" - Want periodic monitoring (poll for recent public mentions) →
mode: "search"+search_filter: "recent" - Want a topic's high-engagement results →
mode: "search"+search_filter: "top" - Want posts inside a date window →
mode: "search"+start_date/end_date
Use Cases
- Social Media Monitoring: Track brand mentions and conversations
- Influencer Discovery: Find content creators with follower metrics
- Competitor Research: Monitor competitor activity and engagement
- Content Analysis: Analyze trending topics and hashtags
- Lead Generation: Discover profiles in your niche
- Market Research: Collect posts for downstream sentiment analysis
How to Use
Input Configuration
| Parameter | Type | Description | Example |
|---|---|---|---|
mode | string | Scraping mode: user, search, or profiles | "user" |
usernames | array | Target usernames (for user mode, max 20). Accepts bare name, with @, or full Threads URL. | ["zuck", "@nike", "https://threads.com/@meta"] |
keywords | array | Keywords or hashtags (for search & profiles modes, max 20) | ["AI", "tech"] |
search_filter | string | Search mode only. top (popular posts) or recent (newest matching posts first; broader coverage, pool can still include older posts) | "top" |
start_date | string | Search mode only. Show posts from this date onward (YYYY-MM-DD or "7 days") | "2026-01-01" |
end_date | string | Search mode only. Show posts up to this date (inclusive) | "7 days" |
max_posts | number | Posts per user/keyword (10-10000; very high limits may not fully fill). In Find Profiles: accounts per keyword, capped at 10 — use more keywords for more | 200 |
Note: Date options and sort order are only for Search mode. If you use date filters in User Posts or Find Profiles, the run will stop and show a clear reminder.
Mode 1: Scrape User Posts (with Profile Data)
Extract posts and available public profile information from a specific user:
{"mode": "user","usernames": ["zuck"],"max_posts": 200}
Optional: flag a user's posts by keyword
Add keywords in User Posts mode to tag which of the user's posts mention your terms. Posts are not removed — each row gets a keyword_match flag (true/false), so you keep the returned batch and can filter downstream.
{"mode": "user","usernames": ["zuck"],"keywords": ["AI"],"max_posts": 500}
Batch Scraping Multiple Users
Scrape posts from multiple users in one run (up to 20 usernames):
{"mode": "user","usernames": ["zuck", "instagram", "nike"],"max_posts": 200}
This returns:
- Each user's bio and follower count
- Contact information extracted from bio (emails, phones, links)
- Recent public posts with engagement metrics (likes, replies, reposts, shares, views)
- Profile verification status
- Media attachments
- Mentions and hashtags
Mode 2: Search Posts by Keyword or Hashtag
Find public posts about a keyword or hashtag. Each search blends hashtag and full-text results into one deduped list, sorted by your chosen order. Result volume is best-effort and depends on Threads' current public search availability.
Tip: Include or omit the
#— bothAIand#AIwork. Multi-word terms are matched against all the words you enter, so very specific or cross-language combinations (for example an English word plus a Chinese phrase) may return few or no public results — try a single, more focused term for broader coverage.
Understanding Search Filters
| Filter | Best For | What You Get |
|---|---|---|
Top (top) | Discovering viral content | Popular posts with high engagement |
Recent (recent) | Broader topic discovery | Newest matching posts first; broader coverage than Top, though the pool can still include older posts |
Top/Popular Posts
{"mode": "search","keywords": ["artificial intelligence", "#startup"],"search_filter": "top","max_posts": 50}
Recent Posts
{"mode": "search","keywords": ["AI"],"search_filter": "recent","max_posts": 50}
Mode 3: Find Profiles (Discover Accounts by Keyword)
Discover Threads accounts matching a keyword — returns up to 10 accounts per keyword, each enriched with bio, follower count, links and extracted contacts. Ideal for lead generation and influencer discovery. The cap is per keyword, so add more keywords for more accounts (e.g. 5 keywords → up to 50). Some niche keywords return fewer than 10 — that is normal.
{"mode": "profiles","keywords": ["coffee roaster", "specialty coffee"],"max_posts": 10}
Output rows are account profiles (not posts), with key fields such as username, display_name, bio, followers_count, is_verified, profile_url, external_links, emails, phones, plus a search_keyword field. See the dataset schema for the complete field list.
Region tip: Threads ranks account results by the requester's region. This actor runs from Apify's servers, so generic keywords lean toward those regions. For local results, include a place name in the keyword (e.g.
台北 餐廳rather than餐廳) — the keyword itself then constrains the results.
Periodic Topic Monitoring
If you want to monitor keywords on a schedule — for lead generation, brand-mention tracking, or competitor monitoring — pair mode: "search" with search_filter: "recent" and run the actor automatically:
{"mode": "search","keywords": ["YOUR_KEYWORD_1", "YOUR_KEYWORD_2"],"search_filter": "recent","max_posts": 30}
Workflow
- Schedule the actor — Use Apify Schedules with a cron expression (e.g.
0 */3 * * *for every 3 hours) to trigger the actor automatically. - Each run writes the matching public posts it finds to your dataset — every post comes with a unique identifier and a timestamp you can use downstream.
- Downstream processing (your responsibility):
- Deduplicate against your existing database using each post's unique identifier
- Optionally filter by post timestamp to keep entries within your time window
- Trigger your automation on new posts (AI reply drafting, Slack/email notifications, etc.)
- Append new entries to your database / Google Sheet
Tips
- Each run returns a finite batch of matching public posts. For very high-volume keywords, a single run may not cover your full polling interval — shorten the schedule (e.g. every 30 minutes instead of every 3 hours) to reduce gaps between monitoring runs.
- The actor does not perform cross-run deduplication — this is intentional, so you keep full control over data retention and storage.
Date Filtering (Search Mode Only)
Filter search results by date range. Supports absolute dates and relative dates. Only posts within your selected date range are kept. Date filters apply to Search mode only — using them in other modes stops the run with a clear reminder.
{"mode": "search","keywords": ["AI"],"search_filter": "top","start_date": "2026-01-01","end_date": "2026-02-28","max_posts": 100}
{"mode": "search","keywords": ["AI"],"start_date": "7 days","max_posts": 50}
Output Format
Viewing Your Data
- Dataset View: Click "Preview" to see scraped posts
- All Fields: Switch to "All fields" view to see complete data including:
- Full user profile information
- Complete mentions array
- Media metadata
- Additional extracted fields
Sample Dataset Output
Each post is saved as a separate record. Below is an illustrative example of the fields (values shown are placeholders) from user mode:
{"post_url": "https://www.threads.com/@zuck/post/DTa3-B1EbTp","post_code": "DTa3-B1EbTp","text_content": "we're establishing a new top-level initiative called Meta Compute...","created_at": "2026-01-12T18:00:30+00:00","created_at_display": "2026-01-12 18:00 UTC","created_at_timestamp": 1768240830,"like_count": 2684,"reply_count": 810,"repost_count": 129,"quote_count": 42,"share_count": 221,"view_count": 416512,"has_media": false,"media_type": "text","media_url": "","media_urls": [],"media_width": null,"media_height": null,"has_audio": null,"is_ai_generated": false,"is_gif": false,"is_sticker_post": false,"sticker_count": 0,"sticker_ids": [],"sticker_urls": [],"hashtags": [],"mentions": [],"urls": [],"is_pinned": false,"is_edited": false,"is_paid_partnership": false,"accessibility_caption": "","is_reply": false,"reply_to_username": "","reply_control": "everyone","is_quote_post": false,"quoted_post_url": "","is_repost": false,"reposted_post_url": "","is_spoiler": false,"language": "","topic_tag": "","location_name": "","location_id": "","link_title": "","mentioned_users": [],"scraped_at": "2026-04-25T10:00:00+00:00","username": "zuck","display_name": "Mark Zuckerberg","profile_url": "https://www.threads.com/@zuck","is_verified": true,"followers_count": 5450146,"bio": "Mostly superintelligence and MMA takes","profile_pic_url": "https://...","profile_pic_hd_url": "https://...","fediverse_enabled": true,"external_links": ["https://zuck.com"],"emails": [],"phones": [],"bio_links": [],"profile_tags": ["AI", "Tech"],"podcast_name": "","podcast_url": "","podcast_platform": "","search_filter": null,"search_keyword": null,"keyword_match": null}
In User Posts mode,
search_keyword,search_filter, andkeyword_matchare always present so the columns line up with Search mode.search_filterstaysnull(it applies only to Search);search_keywordandkeyword_matcharenullunless you supplykeywordsto tag matching posts.
Sample 2: A reply post that quotes a sponsored brand collaboration
An illustrative record (placeholder values) showing the conversation-context and partnership fields populated together (abbreviated — only selected fields shown; every record carries the full field set from Sample 1):
{"post_url": "https://www.threads.com/@nike/post/EXMPL_REPLY01","post_code": "EXMPL_REPLY01","text_content": "Loved the new collab piece — wearing it tomorrow!","created_at": "2026-04-22T14:30:00+00:00","like_count": 412,"reply_count": 23,"repost_count": 9,"view_count": 18750,"is_paid_partnership": true,"accessibility_caption": "Athletic shoe in red colorway on a wooden surface","media_width": 1200,"media_height": 1600,"has_audio": null,"is_ai_generated": false,"is_reply": true,"reply_to_username": "athleteX","reply_control": "followers_only","is_quote_post": true,"quoted_post_url": "https://www.threads.com/@brandY/post/QUOTED_ORIG","is_repost": false,"reposted_post_url": "","username": "nike","display_name": "Nike","is_verified": true,"followers_count": 1250000,"fediverse_enabled": true}
Search mode results include author profile data inline plus three additional fields:
search_keyword: the searched keyword or hashtagsearch_filter: the sort order used (top or recent)keyword_match: whether the post text directly matches the searched term
Use keyword_match: true to filter for posts whose caption clearly mentions your keyword. In Search mode, author profile fields are best-effort and are backfilled when public profile data is available.
Example Use Cases
1. Competitor Analysis with Engagement Metrics
{"mode": "user","usernames": ["competitor_brand_a", "competitor_brand_b"],"max_posts": 300}
Pull a deep post history with engagement metrics (likes, replies, reposts, quotes, shares, views) for side-by-side competitor analysis. Each post also carries sponsored-content, quote/repost, and reply-context flags so you can slice organic vs paid content quickly.
2. Influencer Discovery
{"mode": "user","usernames": ["creator_a", "creator_b", "creator_c"],"max_posts": 200}
Pull long-form profile data (bio, followers, tags, podcast link, contact info from bio) plus recent posts to build an influencer shortlist in one run. The Fediverse and verified indicators are included when publicly shown.
3. Brand Mention Monitoring
{"mode": "search","keywords": ["#YourBrand", "#CompetitorBrand"],"max_posts": 200}
Follow brand and competitor conversations. Each row includes a keyword_match flag so you can separate direct matches from broader context.
4. Trend & Content Research (Search, Top)
{"mode": "search","keywords": ["AI tools", "machine learning"],"search_filter": "top","max_posts": 200}
Discover high-engagement posts on topic keywords. The paid-partnership flag lets you isolate sponsored content; quote/repost URLs let you map conversation graphs.
5. Date-bounded Research (Search with Date Filter)
{"mode": "search","keywords": ["climate policy"],"search_filter": "top","start_date": "30 days","max_posts": 200}
Narrow a topic to the last 30 days for time-sensitive research. Date filtering is available only in Search mode.
Limitations
Batch Limits:
- Up to 20 usernames or 20 keywords per run
max_postsaccepts 10–10000 per source
Actual Results:
- Result volume depends on public availability, account activity, topic activity, and Threads' current public results behavior
- Different modes and queries can return different amounts; if a run looks lighter than expected, try the same input again later or adjust the search/filter
Search Relevance:
- Threads search ranking does not guarantee exact keyword-only matching
- "Top" mode surfaces popular results and may include broadly related content
- "Recent" mode lists the newest matching posts first, but casts a wider net so the pool can still include older posts (it is not limited to brand-new posts only)
- In
searchmode, results are returned on a best-effort basis from what is publicly available - Use
keyword_matchto quickly separate direct matches from broader context results - For a tighter date window, combine
searchwithstart_date/end_date; only posts inside your range will be kept
When You Get Few or No Results (logged-out limits):
This actor scrapes Threads without logging in (no account at risk, no cookie input). Threads serves a stricter, smaller pool of content to non-logged-in clients than what you see in a normal browser session.
What this means in practice:
- Niche / uncommon keywords (e.g. multi-word CJK phrases like
蒙古滷肉飯,紐約 中餐廳, or specific product combos likeclaude sonnet 4.5) may return very few or zero results — even when you see those posts logged-in - Popular single keywords (e.g.
ai,台北,nike,news,美食) tend to return more public results than niche phrases - Search blends hashtag and full-text results automatically, so a single keyword already casts the widest public net; if a niche multi-word phrase returns 0, try a shorter or more popular term
- A run that returns 0 rows ends as SUCCEEDED (not failed) with a clear "no public posts found" status message — try a broader or more popular keyword, or run again later
If you specifically need logged-in-only content, this actor is not the right tool — consider running a manual export or a different account-bound workflow.
FAQ
Q: What engagement metrics can I get?
A: The scraper extracts likes, replies, reposts, quotes, shares, and views when publicly available. On some posts, share_count and view_count can be null.
Q: How does contact information extraction work?
A: Contact extraction is best effort. The scraper reads the public bio text and profile links to find emails, phone numbers, and websites — it does not read text inside images or on linked pages. Phone parsing covers international formats (with leading +), US formats, and common Taiwan formats (09xx mobile and 02–08 area-code landlines). Availability depends on what the account chose to publish in the bio.
Q: How do I see all available data fields?
A: In the Apify console, switch from "Preview" to "All fields" view. You will see the full schema, including fields that may be null for some records.
Q: Does it support batch scraping of multiple users or keywords? A: Yes. You can enter up to 20 usernames or 20 keywords in one run. Items are processed in sequence and combined into the same dataset.
Q: Can I tell which posts are sponsored / paid partnerships?
A: Every post includes an is_paid_partnership field. true means a paid-partnership or branded-content signal is publicly shown; false means no such signal was found. Useful for filtering toward likely-sponsored content.
Q: Can I see quote posts and reposts, and the original they reference?
A: Yes. is_quote_post + quoted_post_url mark quotes; is_repost + reposted_post_url mark reposts. The reference URL points to the original post so you can open it directly.
Q: Can I distinguish top-level posts from replies?
A: Yes. is_reply is true when the post is a reply; reply_to_username tells you who is being replied to; reply_control reflects the post's reply-audience setting when present (e.g. everyone, followers_only, mentioned_only), and is empty when not set.
Q: What about image alt text and media size?
A: When available, accessibility_caption returns the image description and media_width / media_height return the original pixel dimensions.
Q: Can I tell if a post is AI-generated or whether a video has sound?
A: is_ai_generated is true when the post carries an AI-content label, false when it does not, and null when it can't be determined. has_audio is true/false for video posts (whether the clip has a sound track) and null for non-video posts.
Q: Is there a Fediverse / ActivityPub signal?
A: Yes. fediverse_enabled is true when a Fediverse sharing indicator is publicly shown on the profile.
Q: Do I need to choose between hashtag and full-text search?
A: No. Search mode combines available public hashtag and keyword results into one de-duplicated list automatically. Just enter your keyword (with or without #) and pick a top or recent sort order. Results depend on what Threads makes publicly available.
Q: How does Find Profiles work, and how many accounts can it return?
A: Find Profiles (mode: "profiles") returns up to 10 accounts per keyword, each enriched with bio, follower count, links and contacts. To reach more accounts, use several related keywords.
Q: Why do account results look like they are from another country?
A: Threads ranks accounts by the requester's region, and this actor runs from Apify's servers. For generic keywords the results lean toward those regions. To target a place, put it in the keyword (e.g. 台北 餐廳) so the keyword itself constrains the results. Geo-targeting is not supported.
Q: Why do search results seem unrelated to the keyword?
A: Threads search ranking is not strict keyword-only matching. Results can include broadly related content and sometimes unrelated content. Use keyword_match to separate direct matches in downstream filtering.
Q: Why do I get fewer results than my max_posts limit? A: Threads limits the amount of content accessible through its interface. The actual number of available posts varies based on several factors including account activity and content type.
Q: Why are bio or follower_count sometimes empty in Search mode? A: Search mode first uses post-level public data, then tries to backfill author profile details. Some profiles still return limited public fields, so availability may vary by account and time.
Alternative: Official API
This scraper works without login, so it returns only publicly available data.
If you need your own account's data, the official Threads API offers an authenticated developer model designed for account-bound, long-term application integrations.
Disclaimer
This Actor is provided for research and educational purposes. You are solely responsible for how you use it and for ensuring that your use of the Actor and any data it returns complies with all laws and regulations applicable to you. Data availability and accuracy may vary over time. The developers accept no liability for how this tool or the data it returns is used.
Keywords: Threads scraper, Threads search scraper, Threads data scraper, Meta Threads scraper, Threads post extractor, Threads profile scraper, Threads hashtag search, Threads keyword search, Threads search without login, Threads data extraction, export Threads posts, download Threads data, Threads exporter, Threads posts, Threads engagement metrics, follower count scraper, Threads bio email extractor, Threads account finder, influencer discovery, Threads influencer research, social media scraper, social media monitoring, brand monitoring, competitor analysis, competitor intelligence, trend research, content research tool, social listening tool, market research, Instagram Threads, Threads API, Threads automation, Threads search, OpenClaw, Claude Code, Gemini CLI, Antigravity, Codex, ChatGPT