TikTok Slideshow Downloader
Pricing
from $2.70 / 1,000 downloaded photos
TikTok Slideshow Downloader
Download photos from public TikTok slideshow URLs. Save each image to Apify storage with source links, author data, captions, post stats, file metadata, and dataset exports.
Pricing
from $2.70 / 1,000 downloaded photos
Rating
5.0
(1)
Developer
Maxime Dupré
Maintained by CommunityActor stats
2
Bookmarked
81
Total users
16
Monthly active users
4.3 hours
Issues response
16 hours ago
Last modified
Categories
Share
📥 Download TikTok slideshow photos from known public posts
TikTok Slideshow Downloader is for researchers, creators, and social media teams who have public TikTok photo-post links. It saves each available slideshow photo in order and returns a directly retrievable Apify storage link with source post details and public metadata in a dataset. Full photo-post links, supported short-share links, and numeric post IDs are accepted.
Use cases
- Download TikTok slideshow photos saves every available photo from a known public slideshow in its original order.
- Batch download TikTok slideshow photos processes several known public slideshow links in one run.
- Archive TikTok photo posts keeps saved photo files with their source post details.
- Export TikTok slideshow metadata exports captions, creator data, photo order, file data, and source links.
- Track TikTok slideshow engagement exports public views, likes, comments, shares, and saves when TikTok provides them.
- Save TikTok slideshow sound metadata exports public sound IDs, titles, creators, lengths, and original-sound flags when available.
- Use custom TikTok slideshow file names saves photos with a naming pattern you choose while keeping files unique and ordered.
📦 Saved photos and source details
What each row contains
Each dataset row is one unique photo that was downloaded and saved. Each saved photo has one matching downloadUrl for its stored file. If the same TikTok post is submitted more than once, the Actor keeps the first saved match and ignores later references. It keeps the submitted reference, resolved post link, post ID, photo position, saved-file link, file properties, source image link, creator and caption data, public post counts, sound details, and custom data when provided. TikTok may leave optional values null. The Actor does not save a failure row for a skipped link or photo that could not be downloaded.
🚀 Run the TikTok slideshow downloader
Run steps
- Add one or more public TikTok photo-post links, supported short-share links, or numeric post IDs.
- Set Photo limit when you want to stop after a chosen number of saved photos.
- Change File name pattern if you want a different stored-file name.
- Start the Actor and open Downloaded photos.
- Use each
downloadUrlto fetch the saved image.
Limits and choices
The input accepts up to 500 submitted references. maxItems has no fixed upper bound in the schema. Leave Photo limit empty to return all available results until the source is exhausted.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
slideshowUrls | array of objects | Add at least one and at most 500 full public photo-post links, supported short-share links, or numeric post IDs. |
slideshowUrls[].url | string | The public photo-post link, supported short-share link, or numeric post ID to process. |
slideshowUrls[].userData | object | Optional custom data attached to the submitted reference and passed to its saved photo rows. |
maxItems | integer | Optional total photo limit. Set a positive number to stop after that many saved photos. Leave it empty to return all available results until the source is exhausted. The form pre-fills 3 for a small test. |
fileNamePattern | string | Pattern for stored image names. Use {postId}, {photoIndex}, and {extension}. The length must be from 1 to 200 characters. |
Example input
This is the public input from a successful run with the prefilled photo link, photo limit, and file name pattern.
{"slideshowUrls": [{"url": "https://www.tiktok.com/@anamiriamyepez/photo/7498924643227536645"}],"maxItems": 3,"fileNamePattern": "{postId}-photo-{photoIndex}.{extension}"}
🧾 Output
Output fields
The results field links to the saved dataset. Each dataset row has the fields below.
| Field | Type | What it does |
|---|---|---|
results | string | Dataset link for the saved photo rows. |
inputIndex | integer | Position of the submitted reference in the Actor input. |
requestedUrl | string | Reference submitted in the Actor input. |
sourceUrl | string | Resolved public TikTok photo-post link. |
videoId | string | TikTok post ID. |
authorUsername | string or null | Creator username when TikTok provides it. |
authorName | string or null | Creator display name when TikTok provides it. |
caption | string or null | Public post caption when TikTok provides it. |
photoIndex | integer | Photo position in the slideshow, starting at 1. |
photoCount | integer | Total photo count in the source slideshow. |
downloadUrl | string | Directly retrievable Apify storage-record link for the saved photo. |
fileName | string | Name of the saved photo file. |
contentType | string | Media type of the saved photo, such as image/jpeg. |
fileSizeBytes | integer | Saved photo size in bytes. |
imageWidth | integer or null | Photo width in pixels when available. |
imageHeight | integer or null | Photo height in pixels when available. |
sourceImageUrl | string | Original TikTok image link for the photo. It is a source reference, not the saved-file link. |
userData | object | Custom data passed with the submitted reference, when provided. |
post | object | Public counts for the source post. |
post.playCount | integer or null | Public view count when available. |
post.likeCount | integer or null | Public like count when available. |
post.commentCount | integer or null | Public comment count when available. |
post.shareCount | integer or null | Public share count when available. |
post.collectCount | integer or null | Public save count when available. |
audio | object | Public sound details for the source post. |
audio.id | string or null | TikTok sound ID when available. |
audio.title | string or null | Sound title when available. |
audio.authorName | string or null | Sound creator name when available. |
audio.original | boolean or null | Whether TikTok marks the sound as original. |
audio.durationSeconds | number or null | Sound length in seconds when available. |
Example saved photo row
This complete row came from a successful current-beta run. Optional userData was not present in this row.
{"inputIndex": 0,"requestedUrl": "https://www.tiktok.com/@anamiriamyepez/photo/7498924643227536645","sourceUrl": "https://www.tiktok.com/@anamiriamyepez/photo/7498924643227536645","videoId": "7498924643227536645","authorUsername": "anamiriamyepez","authorName": "Ana Miriam Yepez Arreola","caption": "¡Podemos tener más comunicación! 📣, escanea el código QR y contáctame. 👩🏻⚖️⚖️ 💚 💞 🇲🇽 #MiriamYépez #Vota20 #JusticiaConRostroHumano #EleccionesJudiciales2025 🗳️","photoIndex": 1,"photoCount": 3,"fileName": "7498924643227536645-photo-1.jpg","contentType": "image/jpeg","fileSizeBytes": 90286,"imageWidth": 1080,"imageHeight": 1080,"sourceImageUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-maliva-i-photomode-us/4e11f114a249493eb708aa9977d014ca~tplv-photomode-image.jpeg?dr=9616&x-expires=1788994800&x-signature=w7SNqL2IdAQZax5CbZ5DxqY86u0%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=9b759fb9&idc=useast5&ftpl=1","post": {"playCount": 10700,"likeCount": 53,"commentCount": 33,"shareCount": 3,"collectCount": 0},"audio": {"id": "7210195541555169281","title": "Cyber Techno","authorName": "Ganger Baster","original": false,"durationSeconds": 179},"downloadUrl": "https://api.apify.com/v2/key-value-stores/KhP8BGqYx1kS54nnB/records/tiktok-slideshow-0-7498924643227536645-1?signature=17V4q3XDzWyaEVL7vXf9t"}
Some values can be null when TikTok does not publish them.
💳 Pricing
Charged event
Pay-per-event pricing charges one Downloaded photo event for each unique slideshow photo that is downloaded and saved to storage. Skipped links and photos that cannot be downloaded do not create that event. A run with no saved photos has no downloaded-photo event.
🔌 Integrations
Use the saved dataset
Open the results dataset link in Apify, export rows as JSON, CSV, Excel, XML, RSS, or HTML, or call the dataset through the Apify API. You can also use Apify schedules, webhooks, and integrations with the dataset. This guide shows how to connect Apify Actors with other tools:
❓ FAQ
What happens if a slideshow has fewer photos than my limit?
The Actor saves the available photos and moves on. If you leave maxItems empty, it returns all available results until the source is exhausted.
Can I use a short-share link or a numeric post ID?
Yes. The Actor follows supported short-share links first. The final target must be a public TikTok /photo/ post. Numeric post IDs that identify public photo posts are also accepted.
Can I process several posts in one run?
Yes. Add up to 500 known public slideshow references. The maxItems limit controls the total saved photos across the run.
What does one dataset row represent?
One row represents one unique photo that was downloaded and saved. It includes one matching downloadUrl, the photo order, source post details, and available public metadata. If the same source post appears again through another submitted reference, the later match is ignored.
What happens if a run is resumed?
Previously saved photos remain available. Each unique saved photo has one dataset row with its matching downloadUrl, and the completion summary matches the number of unique saved photos.
Does it download normal TikTok videos or audio?
No. It downloads images from public TikTok photo and slideshow posts. It does not download video, standalone audio, or cover files.
Can I use it as a TikTok slideshow downloader without watermark?
No. It saves the slideshow images TikTok makes available. It does not edit, upscale, or remove marks from an image, and it does not promise HD or 4K output.
Do I need a TikTok account or API key?
No. Use public photo posts without a customer-provided source credential. Private, deleted, unavailable, region-limited, and login-only posts are not supported.
Can it find slideshow posts for me?
No. You must give it known post links or IDs. It does not search profiles, hashtags, feeds, comments, shops, or trends.
What if a link or photo is unavailable?
The Actor skips it and continues with the remaining eligible work. It does not save a failure row. Public data and downloadable images can vary based on what TikTok provides at run time.
📝 Changelog
v1.0 (01-09-2026)
- Output rows now use directly retrievable Apify storage-record links for saved images;
storageKeyandscrapedAtare no longer emitted. - Numeric TikTok post IDs are accepted alongside public photo-post and supported short-share links.
- Temporary source-access failures are retried, and warnings describe only photos that remain unavailable while processing continues.
v0.1
- 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
- TikTok Video Downloader Get video or audio links from known public TikTok video URLs.
- TikTok Audio Downloader Save audio from known public TikTok video URLs.
- TikTok Profile Videos API Scraper List a creator's public uploads, including photo carousels, before selecting posts to download.
- TikTok Place Posts Scraper Collect public TikTok posts tied to known places.
- TikTok Search Scraper Find public TikTok videos or creators by keyword before you supply post links.
Made with ❤️ by Maxime Dupré