Tumblr Media Scraper avatar

Tumblr Media Scraper

Pricing

$2.65 / 1,000 media links

Go to Apify Store
Tumblr Media Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

0

Monthly active users

8 days ago

Last modified

Share

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.

📦 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

  1. Add one or more public Tumblr post, blog, or archive URLs.
  2. Leave maxItems empty to return all available results until the source is exhausted, or set a limit for a smaller run.
  3. Start the run and open the results link to view the dataset.
  4. 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

FieldTypeWhat it does
startUrlsarray of URL objectsAdds public Tumblr post, blog, or archive URLs. A post URL checks that post; a blog or archive URL discovers public posts and their media.
maxItemsintegerSets 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

FieldTypeWhat it does
resultsstringOpens the default dataset view for the media rows from this run.
inputUrlstringThe public Tumblr URL submitted for the run that led to this row.
blogNamestring or nullThe Tumblr blog name for the post, when available.
blogTitlestring or nullThe display title of the Tumblr blog, when available.
postIdstring or nullThe canonical Tumblr post ID, when available.
postUrlstringThe canonical public Tumblr post URL.
shortUrlstring or nullThe short Tumblr link for the post, when available.
postTypestring or nullTumblr's post type, when available.
postSummarystring or nullThe summary text provided for the post, when available.
captionTextstring or nullText included with the media in the post, when available.
tagsarray of stringsTags attached to the Tumblr post.
publishedAtstring or nullThe publication time reported by Tumblr, when available.
noteCountinteger or nullThe total note count reported for the post, when available.
likeCountinteger or nullThe like count reported for the post, when available.
reblogCountinteger or nullThe reblog count reported for the post, when available.
replyCountinteger or nullThe reply count reported for the post, when available.
mediaIndexintegerThe one-based position of this media item in its post.
mediaCountInPostintegerThe number of media items found in the post.
mediaTypestringThe extracted media type: image, video, audio, or unknown.
mimeTypestring or nullThe MIME type reported or inferred for the media, when available.
extensionstring or nullThe file extension reported or inferred for the media, when available.
widthinteger or nullThe media width in pixels, when available.
heightinteger or nullThe media height in pixels, when available.
durationSecondsnumber or nullThe media duration in seconds, when available.
altTextstring or nullAccessibility text provided for the media, when available.
thumbnailUrlstring or nullThe source thumbnail URL, when available.
directMediaUrlstringThe direct source URL for opening the media on Tumblr.
mediaVariantsarray of objectsAvailable source size or format variants for the media.
mediaVariants[].urlstringThe direct source URL for this media variant.
mediaVariants[].widthinteger or nullThe variant width in pixels, when available.
mediaVariants[].heightinteger or nullThe variant height in pixels, when available.
mediaVariants[].mimeTypestring or nullThe MIME type for this variant, when available.
mediaVariants[].extensionstring or nullThe file extension for this variant, when available.
mediaVariants[].isCroppedbooleanWhether 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 maxItems empty 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 🫡

Made with ❤️ by Maxime Dupré