
Threads Downloader
hipersoft/threads-downloader
Download Threads photos, videos and carousel posts by URL. Paste threads.net or threads.com links and get ready-to-use download links plus direct media URLs, a thumbnail, media type and count — one row per URL as JSON, CSV or Excel. Cheap, bulk, built for creators and n8n.
Total users
4Monthly users
3Total runs
799Per post downloaded
$0.003Last rebuilt
Oct 28, 2026Overview
Download Threads photos, videos and carousel posts in bulk. Paste one or more Threads links and get a ready-to-use download link for every piece of media, plus the direct CDN media URL, a poster thumbnail, the media type and how many items the post contains — one tidy row per URL, ready to export as JSON, CSV or Excel.
This is the cheap, no-nonsense way to save Threads media at scale for content creators, editors, marketers, researchers, social-media managers and anyone building an automated media pipeline.
Why use this Threads downloader
- 🖼️ Photos, videos & carousels — one tool for every kind of public Threads post.
- 🔗 Ready download links + direct media URLs — each result gives you a reliable download link and the direct media URL, so you can grab the file however you like.
- 🎠 Full carousels — multi-image and multi-video carousel posts come back with every slide, not just the first.
- 🖼️ Poster thumbnail — every post includes a thumbnail image URL for quick previews and galleries.
- 🏷️ Clean structure — media type (image / video / carousel), media count, post code and a canonical post URL on every row.
- 📦 Bulk in one run — drop in a whole list of URLs and get one clean record per post.
- 💸 Cheapest per-item pricing — pay only for the posts you actually process, with volume discounts as you scale.
- 🧩 Built for automation — feed URLs from a spreadsheet, Make or n8n and get structured records with direct download links back.
- 📤 Export anywhere — JSON, CSV or Excel, or pull straight from the dataset into your own tools.
What you get
Each Threads URL is one dataset record like this:
{
"source": "threads",
"inputUrl": "https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"code": "C4BT8ilPsxy",
"url": "https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"mediaType": "carousel",
"downloadUrls": [
"https://.../download-link-slide-1",
"https://.../download-link-slide-2"
],
"directUrls": [
"https://.../direct-media-slide-1.jpg",
"https://.../direct-media-slide-2.jpg"
],
"thumbnailUrl": "https://.../thumbnail.jpg",
"mediaCount": 2,
"status": "ready"
}
For a video post, mediaType is video and the links point to an MP4. For a carousel, mediaType is carousel and downloadUrls / directUrls contain one entry per slide, with mediaCount telling you how many. A single photo post comes back as image.
Input
Give the downloader a list of Threads URLs. That's it.
{
"postUrls": [
"https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"https://www.threads.com/@zuck/post/DZ7eGA1G7wU"
],
"maxItems": 0
}
Input options
| Field | Type | Description |
|---|---|---|
postUrls |
array | One or more Threads post URLs. Plain strings or { "url": "..." } objects both work. |
maxItems |
integer | Maximum number of URLs to process. 0 means no limit — process everything you provide. |
proxyConfiguration |
object | Optional. Not required — leave it off to run on a direct connection. |
Supported link formats
All of these work, with or without www and with or without a query string, on both domains:
https://www.threads.com/@{user}/post/{code}— photo, video and carousel postshttps://www.threads.net/@{user}/post/{code}— the same posts on the.netdomainhttps://www.threads.net/t/{code}— the short link form
Output
Every run writes a dataset with one row per URL. Use the Overview table in the app, or export to JSON, CSV or Excel from the Storage tab. Key fields:
| Field | Description |
|---|---|
code |
The post's Threads code. |
url |
The canonical https://www.threads.com/@{user}/post/{code} link. |
mediaType |
image, video or carousel. |
downloadUrls |
Ready-to-use download links (one per media item). |
directUrls |
The direct media file URLs (one per media item). |
thumbnailUrl |
Poster thumbnail for the post. |
mediaCount |
How many media items the post contains. |
status |
ready when media was found, failed when it could not be resolved. |
Every URL always produces exactly one record — even when a post can't be resolved — so your output stays aligned with your input list.
Common use cases
- 📥 Back up your own content — archive your photos, videos and carousels in full resolution.
- 🎬 Content repurposing — pull videos and carousels to re-edit or reshare across platforms.
- 📊 Research & analysis — collect media at scale for datasets, moderation or trend studies.
- 🗂️ Media libraries — build a searchable library of posts with thumbnails and direct links.
- 🤖 Automated pipelines — wire it into Make, n8n or your own scripts and download in bulk.
Tips
- Provide clean public post URLs. Private, deleted or restricted URLs may return
status: "failed". - Download links are time-limited — fetch the files soon after the run.
- For very large lists, set
maxItemsto cap a run, or split your URLs across runs.
FAQ
Which posts can I download? Public photos, videos and carousels. Private or removed posts can't be retrieved and come back as status: "failed".
Do carousels return every image? Yes — downloadUrls and directUrls contain one entry per slide, and mediaCount tells you how many.
Do I need a proxy? No. The downloader runs fine on a direct connection. A proxy option is available if you specifically want one.
What formats can I export? JSON, CSV or Excel — or read the dataset directly through the API.
How much does it cost? You pay a small, flat price per URL processed, with automatic volume discounts as you scale — one of the cheapest ways to download Threads media in bulk.
Input
| Field | Type | Description |
|---|---|---|
postUrls requiredThreads URLs | array | One or more Threads post URLs to download. Accepts both domains and every link form: threads.com/@{user}/post/{code}, threads.net/@{user}/post/{code} and the short threads.net/t/{code} — with or without www and with or without a query string. You can paste pla |
maxItemsMax items | integer | Maximum number of URLs to process (0 = no limit; process every URL you provide). Default: 0 |
proxyConfigurationProxy (optional) | object | Optional proxy. Not required — leave off to run on a direct connection. Enable only if you specifically want requests routed through a proxy. |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~threads-downloader/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"postUrls": [
"https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"https://www.threads.com/@zuck/post/DZ7eGA1G7wU"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/threads-downloader").call(run_input={
"postUrls": [
"https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"https://www.threads.com/@zuck/post/DZ7eGA1G7wU"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/threads-downloader').call({
"postUrls": [
"https://www.threads.com/@zuck/post/C4BT8ilPsxy",
"https://www.threads.com/@zuck/post/DZ7eGA1G7wU"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Post downloaded Charged once for each Threads post URL processed. | $0.003 | $0.0015 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Website Contact Scraper
Extract business emails, phone numbers and social media profiles from any list of websites. De-obfuscates emails, reads Organization schema, and optionally crawls contact/about pages. Bulk-ready.
1,576 runs · 69 users · $0.0024 / website scrapedTikTok Video Downloader
Download TikTok videos without watermark in bulk. Paste video or photo-slideshow URLs and get a clean HD MP4 download link plus full metadata: caption, author, play/like/comment/share counts, sound and cover — one row per post as JSON, CSV or Excel. For creators, research and n8n.
678 runs · 9 users · $0.0035 / video downloadedReddit Scraper
Scrape Reddit posts and comments by subreddit, keyword, author or thread URL. Get titles, self-text, scores, upvote ratio, comment counts, comment trees and permalinks — one clean row per post or comment. Export as JSON, CSV or Excel.
568 runs · 15 users · $0.0034 / post scrapedSpotify Scraper
Search Spotify and scrape public metadata for tracks, artists, albums and playlists: names, artists, popularity, followers, genres, release dates, duration, ISRC, preview URL and more. No Spotify login or API key required. For music research, catalogs and analytics.
478 runs · 9 users · $0.0034 / item scrapedReddit Video, Image & GIF Downloader
Download Reddit videos, images and GIFs by post URL. Paste reddit.com or redd.it links and get ready-to-use download links — videos as a single playable MP4 with audio, images and galleries as direct links — one row per URL as JSON, CSV or Excel. Cheap, bulk, built for creators and n8n.
453 runs · 16 users · $0.003 / item scrapedYouTube Scraper
All-in-one YouTube API: get video metadata, full transcripts, comments with replies, channel data, and search results in a single call. No setup, fast and cheap.
350 runs · 52 users · $0.0032 / video scrapedSend the site and the fields. We build it and you get it first.