Tumblr Media Scraper
Pricing
$2.65 / 1,000 media links
Tumblr Media Scraper
Extract public Tumblr images, GIFs, videos, and audio from post, blog, and archive URLs. Export direct source links with post details, tags, engagement counts, dimensions, and available variants.
Pricing
$2.65 / 1,000 media links
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
17
Total users
0
Monthly active users
8 days ago
Last modified
Categories
Share
📥 Direct Tumblr media links from public posts
Tumblr Media Downloader is for researchers, archivists, content teams, and developers who need direct media links from public Tumblr posts. Add post, blog, or archive URLs and get one dataset row per media item with source links, post details, tags, engagement counts, dimensions, and available variants.
- Get a public Tumblr video with Tumblr Video Downloader.
- Get a public Tumblr GIF link with Tumblr GIF Downloader.
- Get media from a public Tumblr target with Tumblr Downloader.
- Get a public Tumblr audio link with Tumblr Audio Downloader.
- Get public Tumblr image links with Tumblr Image Downloader.
📦 One row for each Tumblr media item
The Actor saves one row for each media item it finds in public Tumblr posts. Rows keep the direct Tumblr media URL with the post URL, blog details, caption, tags, publish time, engagement counts, media type, dimensions, and variants when available. Links stay at Tumblr, so the Actor does not copy or transform the media files.
🚀 Run a Tumblr post, blog, or archive
Run steps
- Add one or more public Tumblr post, blog, or archive URLs.
- Leave
maxItemsempty to return all available results until the source is exhausted, or set a limit for a smaller run. - Start the run and open the
resultslink to view the dataset. - Export rows as JSON, CSV, Excel, or XML, or read them through the Apify API.
Choose a target
Use a post URL for one known post. Use a blog or archive URL to discover public posts and their media. The Actor accepts public targets only.
⚙️ Input
Add public Tumblr target URLs and, optionally, a media row limit. The form has two fields.
Input fields
| Field | Type | What it does |
|---|---|---|
startUrls | array of URL objects | Adds public Tumblr post, blog, or archive URLs. A post URL checks that post; a blog or archive URL discovers public posts and their media. |
maxItems | integer | Sets the maximum number of media rows saved across all submitted URLs. Leave it empty to return all available results until the source is exhausted. Use a small value for a short test run. |
Input example
This example is copied from the public input of a successful current-beta run:
{"startUrls": [{"url": "https://www.tumblr.com/pears-palette/773661808796090368/an-important-psa-to-remember-id-in-alt"},{"url": "https://staff.tumblr.com/"}],"maxItems": 25}
🧾 Output
The output panel links to the default dataset. Each saved row has the same shape. Optional fields can be null or may be missing when Tumblr does not provide them.
Output fields
| Field | Type | What it does |
|---|---|---|
results | string | Opens the default dataset view for the media rows from this run. |
inputUrl | string | The public Tumblr URL submitted for the run that led to this row. |
blogName | string or null | The Tumblr blog name for the post, when available. |
blogTitle | string or null | The display title of the Tumblr blog, when available. |
postId | string or null | The canonical Tumblr post ID, when available. |
postUrl | string | The canonical public Tumblr post URL. |
shortUrl | string or null | The short Tumblr link for the post, when available. |
postType | string or null | Tumblr's post type, when available. |
postSummary | string or null | The summary text provided for the post, when available. |
captionText | string or null | Text included with the media in the post, when available. |
tags | array of strings | Tags attached to the Tumblr post. |
publishedAt | string or null | The publication time reported by Tumblr, when available. |
noteCount | integer or null | The total note count reported for the post, when available. |
likeCount | integer or null | The like count reported for the post, when available. |
reblogCount | integer or null | The reblog count reported for the post, when available. |
replyCount | integer or null | The reply count reported for the post, when available. |
mediaIndex | integer | The one-based position of this media item in its post. |
mediaCountInPost | integer | The number of media items found in the post. |
mediaType | string | The extracted media type: image, video, audio, or unknown. |
mimeType | string or null | The MIME type reported or inferred for the media, when available. |
extension | string or null | The file extension reported or inferred for the media, when available. |
width | integer or null | The media width in pixels, when available. |
height | integer or null | The media height in pixels, when available. |
durationSeconds | number or null | The media duration in seconds, when available. |
altText | string or null | Accessibility text provided for the media, when available. |
thumbnailUrl | string or null | The source thumbnail URL, when available. |
directMediaUrl | string | The direct source URL for opening the media on Tumblr. |
mediaVariants | array of objects | Available source size or format variants for the media. |
mediaVariants[].url | string | The direct source URL for this media variant. |
mediaVariants[].width | integer or null | The variant width in pixels, when available. |
mediaVariants[].height | integer or null | The variant height in pixels, when available. |
mediaVariants[].mimeType | string or null | The MIME type for this variant, when available. |
mediaVariants[].extension | string or null | The file extension for this variant, when available. |
mediaVariants[].isCropped | boolean | Whether Tumblr marks this variant as cropped. |
Example media row
This complete row is from a successful run on the current beta build:
{"inputUrl": "https://www.tumblr.com/tumblr/826859445410742272","blogName": "tumblr","blogTitle": "tumblr dot com","postId": "826859445410742272","postUrl": "https://tumblr.tumblr.com/post/826859445410742272/21-years-of-move-along","shortUrl": "https://tmblr.co/Zw4uDSjvc4ZYua00","postType": "regular","postSummary": "21 years of Move Along 🖤 @allamericanrejectsofficial","captionText": "21 years of Move Along 🖤 @allamericanrejectsofficial","tags": ["the all american rejects","move along","dirty little secret","artists on tumblr","music on tumblr","2000s","2000s aesthetic","2000s nostalgia","gif edit","tiktok"],"publishedAt": "2026-09-04 20:43:36 GMT","noteCount": 265,"likeCount": 205,"reblogCount": 24,"replyCount": 36,"mediaIndex": 1,"mediaCountInPost": 1,"mediaType": "video","mimeType": "video/mp4","extension": "mov","width": 1080,"height": 1920,"durationSeconds": 17,"altText": null,"thumbnailUrl": "https://44.media.tumblr.com/d373626f6a9a3e8aef6a9cae5e6a0fdf/057e31326cbf2ef3-a9/s1080x1920_f1/e500043b52d237dbd106261d41cfed13e3f964a3.jpg","directMediaUrl": "https://64.media.tumblr.com/d373626f6a9a3e8aef6a9cae5e6a0fdf/057e31326cbf2ef3-a9/s720/d99390d16d69f97f36d94e82713806aa4c796001.mov","mediaVariants": [{"url": "https://64.media.tumblr.com/d373626f6a9a3e8aef6a9cae5e6a0fdf/057e31326cbf2ef3-a9/s720/d99390d16d69f97f36d94e82713806aa4c796001.mov","width": 1080,"height": 1920,"mimeType": "video/mp4","extension": "mov"}]}
💳 Pricing
This Actor uses pay-per-event pricing. One event is charged for each direct media link saved as a dataset row. A run that saves no media rows does not create this event. The current event price is $0.00265 per saved media row.
🔌 Integrations
Use the Apify Console to run the Actor and export the default dataset as JSON, CSV, Excel, or XML. Use the Apify API to start runs and read the saved rows, or use Apify schedules and webhooks for repeat workflows.
❓ FAQ
Does the Actor download media files?
No. It returns direct source media links that stay at Tumblr. It does not copy or transform the files.
What happens when a post has several media items?
The Actor saves one row for each media item. mediaIndex shows the item's position in the post, and mediaCountInPost shows the total found.
What happens when maxItems is empty?
The Actor returns all available results until the source is exhausted. Use a number when you want a smaller run.
Can it read private or login-only Tumblr content?
No. It handles public post, blog, and archive URLs only. It does not log in or bypass private access.
Can I use a blog or archive URL?
Yes. The Actor discovers public posts from the submitted blog or archive URL and saves media rows until maxItems is reached, if you set it.
Can I submit several Tumblr URLs?
Yes. Add multiple public post, blog, or archive URLs in startUrls; maxItems applies across the submitted URLs.
Does it search Tumblr by keyword or tag?
No. Submit the public Tumblr targets you want to process. Keyword, tag, and general Tumblr search are outside this Actor.
Why is a field empty?
Tumblr may not expose every post or media field. Optional values can be null or absent, while postUrl and directMediaUrl are required output fields.
📝 Changelog
v1.0 (06-09-2026)
- Retries temporary Tumblr access failures and continues with other public targets when one target is unavailable.
- Lets you leave
maxItemsempty to collect all available media rows until the source is exhausted.
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
- Telegram Media Downloader for direct media links and post details from public Telegram posts and channels.
- Facebook Media Downloader for source media links from known public Facebook videos, reels, and photos.
- Twitter Media Scraper for public Twitter/X image, video, and GIF links with post context.
- Pinterest Video Downloader for video and image links from public Pinterest pins.
- Reddit Media Downloader for source-hosted media links and post context from public Reddit URLs.
Made with ❤️ by Maxime Dupré