Threads Search Post Scraper
Pricing
$2.35 / 1,000 posts
Threads Search Post Scraper
Search public Threads posts by keyword or hashtag, or look up posts by URL or numeric ID. Get normalized text, author, publication time, engagement, media, links, conversation data, and public replies from targeted posts in an Apify dataset.
Pricing
$2.35 / 1,000 posts
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
11
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
🧵 Search public Threads posts with focused filters
Researchers, marketers, and developers can search public Threads posts by keyword or hashtag, or look up known posts by URL or numeric ID. The Actor saves normalized rows with post text, public author details, publication time, available engagement counts, media, source links, and conversation data, so you can review Threads search results in an Apify dataset.
- Collect a public Threads post with the Threads Post Scraper example.
- Find public posts under a tag with the Threads Hashtag Search example.
- Search public Threads posts for a phrase with the Threads Post Search example.
- Look up a public Threads post by URL or ID with the Threads Post Lookup example.
- Review recent public Threads posts with the Scrape Recent Threads Posts example.
📊 Structured Threads post data
What you get
The default output is one normalized row for each saved public post. It includes the post text, author, publication time, available engagement counts, media, mentions, hashtags, outbound links, quote or repost links, conversation links, and public replies when Threads embeds them on a targeted post page.
Fields that Threads does not show are omitted. The Actor handles public posts only. It does not promise a historical archive or a complete reply tree when replies are not present on the public post page.
▶️ Run a public Threads search or lookup
How it works
- Choose
Keyword,Hashtag, orPost URL or ID. - Enter one or more keywords, hashtags, public post URLs, or numeric post IDs in the matching field.
- For keyword and hashtag searches, choose
Recent firstorRelevance or top. You can also set a UTC date range, a recent-days window, or a public author. - Set
Maximum postswhen you want a smaller run. Leave it empty to return all available results until the source is exhausted.
Focused runs
Keyword and hashtag lists use one shared sort, date, author, and post limit setting. Use separate runs when searches need independent settings. A direct post lookup accepts public URLs or numeric IDs and ignores search sorting, date, and author filters. You do not need to provide a source credential for public data, but private content is not covered.
Where results go
The Actor saves successful public post rows to the standard Apify dataset and exposes that dataset through the run output and API. A post ID and source URL help you trace each row back to its public Threads post.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
findPostsBy | string | Select keyword, hashtag, or post to choose the target field. |
keywords | array of strings | For keyword, enter one or more words or phrases. The same sort and post limit apply to every submitted keyword. |
hashtags | array of strings | For hashtag, enter one or more hashtags with or without #. The same sort and post limit apply to every submitted hashtag. |
postTargets | array of strings | For post, enter one or more public Threads post URLs or numeric post IDs. The same post limit and output setting apply to every submitted post. |
sortOrder | string | For keyword and hashtag searches, choose recent or top. Direct post lookups ignore this field. |
publicationDate | object | For keyword and hashtag searches, use a UTC date range or a recent-days window. Direct post lookups ignore this field. |
publicationDate.fromDate | UTC date string | First publication date to include in a date range. |
publicationDate.toDate | UTC date string | Last publication date to include in a date range. |
publicationDate.recentDays | positive integer | Include posts published in this many days before the run. |
author | string | For keyword and hashtag searches, enter a public Threads username with or without @. Direct post lookups ignore this field. |
maxItems | positive integer | Optional run limit. Leave it empty to return all available results until the source is exhausted. |
Example input
The following small input is the public input from a successful default keyword run with recent ordering and a one-post limit.
{"findPostsBy": "keyword","keywords": ["AI"],"sortOrder": "recent","maxItems": 1}
🧾 Output
Run output
| Field | Type | What it does |
|---|---|---|
dataset | URL string | Links to the dataset containing successful public Threads post rows. |
The dataset contains normalized public post rows. Optional fields appear only when Threads provides them.
Normalized public post row
The table below is complete for a normalized row. Optional fields appear only when Threads provides them.
| Field | Type | What it does |
|---|---|---|
postId | string | Stable public ID of the Threads post. |
postUrl | string (URI) | Public Threads URL for the post. |
text | string, optional | Text shown in the post. Omitted when the post has no text. |
author | object | Public author details. |
author.id | string | Stable public ID of the author. |
author.username | string | Public Threads username of the author. |
author.displayName | string, optional | Public display name when shown. |
author.isVerified | boolean, optional | Whether Threads marks the author as verified. |
publishedAt | date-time string | Time when Threads published the post. |
engagement | object, optional | Public engagement counts shown for the post. |
engagement.likeCount | integer, optional | Public number of likes. |
engagement.replyCount | integer, optional | Public number of replies. |
engagement.repostCount | integer, optional | Public number of reposts. |
engagement.quoteCount | integer, optional | Public number of quote posts. |
engagement.viewCount | integer, optional | Public number of views when Threads shows it. |
media | array of objects, optional | Image or video attachments shown in the post. Each carousel attachment is listed once in source order. |
media[].type | string | Media type, either image or video. |
media[].url | string (URI), optional | Direct source URL when Threads exposes one that users can open. |
media[].altText | string, optional | Alternative text for the media item when available. |
media[].width | integer, optional | Media width in pixels when available. |
media[].height | integer, optional | Media height in pixels when available. |
media[].durationSeconds | number, optional | Video duration in seconds when available. |
mentions | array of objects, optional | Accounts mentioned in the post text. |
mentions[].username | string | Mentioned public username. |
mentions[].id | string, optional | Mentioned public account ID when available. |
hashtags | array of strings, optional | Hashtags found in the post text. |
outboundLinks | array of strings, optional | Links to other sites found in the post text. |
quotedPost | object, optional | Public post quoted by this post when Threads provides the link. |
quotedPost.postId | string | Stable ID of the quoted post. |
quotedPost.postUrl | string (URI) | Public URL of the quoted post. |
repostedPost | object, optional | Public post reposted by this post when Threads provides the link. |
repostedPost.postId | string | Stable ID of the reposted post. |
repostedPost.postUrl | string (URI) | Public URL of the reposted post. |
conversation | object, optional | Source and parent links when this row is a reply. |
conversation.rootPostId | string | Stable ID of the first post in the conversation. |
conversation.rootPostUrl | string (URI) | Public URL of the first post in the conversation. |
conversation.parentPostId | string | Stable ID of the post this reply directly answers. |
conversation.parentPostUrl | string (URI) | Public URL of the post this reply directly answers. |
replies | array of objects, optional | Public replies embedded on a targeted post page. |
replies[].postId | string | Stable public ID of the reply. |
replies[].postUrl | string (URI) | Public URL for the reply. |
replies[].text | string, optional | Text shown in the reply. Omitted when the reply has no text. |
replies[].author | object | Public author details for the reply. |
replies[].author.id | string | Stable public ID of the reply author. |
replies[].author.username | string | Public Threads username of the reply author. |
replies[].author.displayName | string, optional | Public display name when shown. |
replies[].author.isVerified | boolean, optional | Whether Threads marks the reply author as verified. |
replies[].publishedAt | date-time string | Time when Threads published the reply. |
replies[].engagement | object, optional | Public engagement counts shown for the reply. |
replies[].engagement.likeCount | integer, optional | Public number of likes on the reply. |
replies[].engagement.replyCount | integer, optional | Public number of replies to the reply. |
replies[].engagement.repostCount | integer, optional | Public number of reposts of the reply. |
replies[].engagement.quoteCount | integer, optional | Public number of quote posts for the reply. |
replies[].engagement.viewCount | integer, optional | Public number of views for the reply when Threads shows it. |
replies[].media | array of objects, optional | Image or video attachments shown in the reply. |
replies[].media[].type | string | Reply media type, either image or video. |
replies[].media[].url | string (URI), optional | Direct reply media URL when Threads exposes one that users can open. |
replies[].media[].altText | string, optional | Alternative text for the reply media when available. |
replies[].media[].width | integer, optional | Reply media width in pixels when available. |
replies[].media[].height | integer, optional | Reply media height in pixels when available. |
replies[].media[].durationSeconds | number, optional | Reply video duration in seconds when available. |
replies[].mentions | array of objects, optional | Accounts mentioned in the reply text. |
replies[].mentions[].username | string | Mentioned username in the reply. |
replies[].mentions[].id | string, optional | Mentioned public account ID when available. |
replies[].hashtags | array of strings, optional | Hashtags found in the reply text. |
replies[].outboundLinks | array of strings, optional | Links to other sites found in the reply text. |
replies[].conversation | object | Source and parent links for the reply. |
replies[].conversation.rootPostId | string | Stable ID of the first post in the reply conversation. |
replies[].conversation.rootPostUrl | string (URI) | Public URL of the first post in the reply conversation. |
replies[].conversation.parentPostId | string | Stable ID of the post this reply directly answers. |
replies[].conversation.parentPostUrl | string (URI) | Public URL of the post this reply directly answers. |
replies[].quotedPost | object, optional | Public post quoted by the reply when Threads provides the link. |
replies[].quotedPost.postId | string | Stable ID of the post quoted by the reply. |
replies[].quotedPost.postUrl | string (URI) | Public URL of the post quoted by the reply. |
replies[].repostedPost | object, optional | Public post reposted by the reply when Threads provides the link. |
replies[].repostedPost.postId | string | Stable ID of the post reposted by the reply. |
replies[].repostedPost.postUrl | string (URI) | Public URL of the post reposted by the reply. |
Genuine row from the current beta build
This genuine normalized row comes from a successful current-beta run. It shows five media attachments in source order.
{"postId": "3987964419053431429_66183940337","postUrl": "https://www.threads.com/@fly5466/post/DdYGIKOk6qF","author": {"id": "66183940337","username": "fly5466","displayName": "Ray Lee","isVerified": false},"publishedAt": "2026-09-17T05:20:26.000Z","text": "【台中的大家打擾了,我們在健行路上開了一間個人日式壽喜燒🍲】\n\n籌備了好幾個月,這兩天我們終於在健行路上悄悄試營運了!\n之前每次自己想吃壽喜燒,總覺得大部分店家都要找一堆人共鍋、吃得很有負擔,所以決定開一間「一個人也能自在慢享、認真涮肉」的日式壽喜燒專賣店。\n\n壽喜燒醬汁是我們反覆調整試煮出來的正統日本風味,肉品現點現切,每一鍋都會附上產銷履歷生食級雞蛋、嚴選米飯與新鮮野菜盤。一個人來不用覺得尷尬,安安靜靜享受一頓溫暖的熱鍋。\n\n下班不知道吃什麼,或是晚上想吃點精緻宵夜的朋友,歡迎推門進來坐坐!\n\n📍 駒澤屋壽喜燒\n 地址:台中市北區健行路 837 號\n 營業時間:18:00 – 00:30","engagement": {"likeCount": 1254,"replyCount": 116,"repostCount": 46,"quoteCount": 0},"media": [{"type": "image","url": "https://scontent-sjc6-1.cdninstagram.com/v/t51.82787-15/813623836_17961710655204338_8730779638694876724_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=104&ig_cache_key=Mzk4Nzk2NDM4MzUxNDgzMDYzMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTAyOS5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=9iyZFN3DcGsQ7kNvwF3zmYM&_nc_oc=AdrN9BJ0oVjrRHbAZCqVra9IOTJDFccMr8yl5kHUFps04jT9z9rELCPPRok_112lXNY&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_gid=Xy9otXlXKPAZrIP-2U3ZJw&_nc_ss=7a22e&oh=00_AQJwHtyGxDvmRB-Y0cQQ5sJEmijhi36eBNd96e_-GKLGNQ&oe=6AB502FD","width": 1029,"height": 1286},{"type": "image","url": "https://scontent-sjc6-1.cdninstagram.com/v/t51.82787-15/813837101_17961710658204338_8380217244733884086_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=101&ig_cache_key=Mzk4Nzk2NDM4NDk4MjY1NDQwMw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMzAyNC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=6ibJZpgb6ugQ7kNvwFKUZYl&_nc_oc=AdpFQvTYE-5qYAnOe1bAk0aaDzpszewt4oRD393XNogU4KDQ7jL6gYfKMVBWeCfuXaA&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_gid=Xy9otXlXKPAZrIP-2U3ZJw&_nc_ss=7a22e&oh=00_AQLvnLS7BCiK-6Mbu50KwIvfLn8zg3x2z55v2wHTmlY52A&oe=6AB505D1","width": 3024,"height": 4032},{"type": "image","url": "https://scontent-sjc3-1.cdninstagram.com/v/t51.82787-15/800482579_17961710685204338_3131689629277043608_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=106&ig_cache_key=Mzk4Nzk2NDM4NjU3NjUzOTk2NA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTEyNS5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=JuyHruHazHEQ7kNvwEdv7EU&_nc_oc=Ado6Q9fvZnSHDBnkKc_0Z1PxLFVGJ-CalOl5V-ExDkFa5nc2d14isnquQ1rMjFwC1lM&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_gid=Xy9otXlXKPAZrIP-2U3ZJw&_nc_ss=7a22e&oh=00_AQLHQEsbi_XFKTaUd5tVsQialtnTf_PfNO3DguC5AIfsMA&oe=6AB50590","width": 1125,"height": 1500},{"type": "image","url": "https://scontent-sjc3-1.cdninstagram.com/v/t51.82787-15/813692215_17961710670204338_4835622439120717417_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=103&ig_cache_key=Mzk4Nzk2NDM4NjgxOTgxNzkxMA%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTA4MC5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=6AAxZo2sIkIQ7kNvwH00Xuu&_nc_oc=Adrxgq7G6jmSpTIEUIf60vucBsUVlyjE2AS--hoarh04q155V1t1qsy46hvruUWKOzI&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc3-1.cdninstagram.com&_nc_gid=Xy9otXlXKPAZrIP-2U3ZJw&_nc_ss=7a22e&oh=00_AQI-qn2AlEf45zkACRB77oOQZTYzY5BAi-eN56s7o7AAGw&oe=6AB4F727","width": 1080,"height": 810},{"type": "image","url": "https://scontent-sjc6-1.cdninstagram.com/v/t51.82787-15/812875114_17961710661204338_9217804103085283690_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=107&ig_cache_key=Mzk4Nzk2NDM4NjUyNjI3OTk5Nw%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTA2MS5zZHIucmVndWxhcl9waG90by5DMyJ9&_nc_ohc=ENyL4O-MWf0Q7kNvwHW0ZZU&_nc_oc=AdoAvI0o2O1fY7ktzkhPFIOva_KE_ygMPSdySpRKnF5PNIR7qnIBcsg-WbU3PVaxRso&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-sjc6-1.cdninstagram.com&_nc_gid=Xy9otXlXKPAZrIP-2U3ZJw&_nc_ss=7a22e&oh=00_AQJ1mh1eU-wYLu_8_IWhMkkt71Aqp8pyT7oSFlSMKTzN6w&oe=6AB51114","width": 1061,"height": 1500}]}
💳 Pricing
Charged event
Post charges for one public Threads post saved to the dataset. The event applies to a successful post returned by the Actor.
How charging works
The Actor charges once for each public post it returns. A run that returns no post does not trigger this post event. Set Maximum posts to keep a run and its charge count focused, or leave it empty to collect all available results until the source is exhausted.
🔌 Integrations
Dataset and API
Read the results through the standard Apify dataset and API output. You can export the saved rows or connect them to a workflow from the run output.
❓ FAQ
What happens when I submit several keywords or hashtags?
The Actor searches every submitted value with one shared sort, date, author, and maximum-post setting. Use separate runs when each search needs different filters or limits.
Can I look up a post by URL or numeric ID?
Yes. Choose Post URL or ID and enter one or more public Threads URLs or numeric post IDs. Search sorting, date, and author filters do not apply to direct lookups.
Can I search private Threads posts?
No. The Actor covers the public search and public post-page surface only. It does not require a buyer-supplied Threads credential for that public data.
Will it collect every reply in a conversation?
It can include public replies embedded on a targeted post page. It does not promise a full reply tree or nested replies that the public page does not show.
What if Threads does not show a field?
That field is omitted from the row when it is optional and unavailable. For example, post text, media details, view counts, and engagement counts depend on what Threads exposes.
How can I keep a run smaller?
Set Maximum posts to a positive number. For keyword and hashtag searches, you can also use a date range, a recent-days window, or an author filter. Leaving the limit empty returns all available results until the source is exhausted.
📝 Changelog
v1.0 (12-09-2026)
- Empty keyword searches keep the dataset empty and show a warning with the keyword and selected filters while processing continues.
- Search results keep only posts that contain the submitted keyword and match the selected filters.
- Results use normalized public post fields and public replies, without the former detailed source-data option.
v0.0
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Threads Replies Scraper: Collect public replies from Threads post or profile URLs with conversation context.
- Threads Video Downloader: Get direct source video links and available details from public Threads post URLs.
- Social Media Stats Checker: Check public Threads profile stats alongside other supported social profiles.
- Threads Search Post Scraper: Search public Threads results with text, dates, authors, and engagement data for research and monitoring.
- Threads Search Post Scraper: Search public Threads posts for regular media monitoring and research.
Made with ❤️ by Maxime Dupré