Tumblr Post Detail Scraper avatar

Tumblr Post Detail Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
Tumblr Post Detail Scraper

Tumblr Post Detail Scraper

Fetch a Tumblr post by URL or 'blog/id' shorthand.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

Farhan Febrian Nauval

Farhan Febrian Nauval

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Fetch a single public Tumblr post by URL or blog/post_id shorthand — full post body, blog info, note count, tags, and timestamp — as clean structured JSON. Works out of the box without setup.

Why use this actor

  • No setup required — works anonymously, no account or API key needed. Optionally paste a free key for richer fields.
  • Full post body — text paragraphs, photos, quotes, links, audio, video, and answer posts returned with HTML body content for text/answer posts and direct media URLs for photo/video posts.
  • Note count and tags — see how viral a post is and which tags drove discovery, in one record.
  • Blog metadata bundled in — every result carries the originating blog's name and URL so you do not need a second call.
  • All Tumblr URL flavours supported — full URLs (https://staff.tumblr.com/post/813992302192263168) or the shorthand blog/post_id.
  • Stable JSON output suitable for pipelines, spreadsheets, and databases — every row carries _input, _source, _scrapedAt envelope fields so you can join results back to your input list.

How it works

  1. You provide a list of Tumblr posts — full URLs or blog/post_id shorthand. Optionally include a Tumblr API key for richer data.
  2. The actor reads each post — using the official Tumblr v2 API if a key was provided, otherwise the public anonymous endpoint — and assembles a flat JSON record.
  3. Results stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers or rotating IPs — all handled internally.

Setup (optional) — get your free Tumblr API key for richer fields

The actor runs without any key. If you want richer fields (avatar URL, NSFW flag, reblog tree, additional metadata), register a Tumblr v2 API consumer key — it is free, instant, and takes about 2 minutes:

  1. Go to tumblr.com/oauth/apps and sign in with any Tumblr account.
  2. Click Register application, fill in any name and a URL.
  3. Copy the OAuth Consumer Key that appears for your new app.
  4. Paste it into the apiKey field on the input form (or set the TUMBLR_API_KEY environment variable).

The registration is instant — there is no review queue, and the key has no per-key cost.

Input

{
"posts": [
"staff/813992302192263168",
"engineering/770213847934976000"
],
"apiKey": "",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["DATACENTER"]
}
}
FieldTypeDescription
postsarrayList of Tumblr posts to scrape. Each item may be a full URL (https://blog.tumblr.com/post/123) or the shorthand blog/post_id (e.g. staff/813992302192263168).
apiKeystringOptional Tumblr v2 API consumer key for richer fields. Leave blank for anonymous mode (still returns post body, tags, note count, timestamp).
proxyConfigurationobjectApify Proxy settings. Datacenter proxy is sufficient for the Tumblr API.

Output

Input: staff/813992302192263168

{
"_input": "staff/813992302192263168",
"_blog": "staff",
"_postId": "813992302192263168",
"_source": "S1-api",
"_scrapedAt": "2026-05-18T11:22:30.481922+00:00",
"type": "text",
"is_blocks_post_format": true,
"blog_name": "staff",
"blog": {
"name": "staff",
"title": "Tumblr Staff",
"url": "https://staff.tumblr.com/",
"description": "The official Tumblr blog."
},
"id": 813992302192263168,
"post_url": "https://staff.tumblr.com/post/813992302192263168",
"slug": "the-new-creator-tools",
"timestamp": 1776283552,
"date": "2026-04-12 14:25:52 GMT",
"state": "published",
"format": "html",
"note_count": 3421,
"tags": ["announcement", "creators", "tools"],
"summary": "The new creator tools",
"content": [
{ "type": "text", "subtype": "heading1", "text": "The new creator tools" },
{ "type": "text", "text": "Today we're rolling out...", "formatting": [{"start": 0, "end": 5, "type": "bold"}] }
],
"trail": [
{
"blog": { "name": "engineering", "title": "Tumblr Engineering" },
"post": { "id": "770213847934976000" },
"content_raw": "<p>Originally posted by @engineering...</p>",
"content": "Originally posted by @engineering...",
"is_root_item": true
}
],
"reblog": { "comment": "", "tree_html": "" },
"can_like": true,
"can_reblog": true,
"can_reply": true,
"display_avatar": true
}
FieldTypeDescription
_inputstringThe post identifier exactly as you supplied it. Use this to join results back to your input list.
_blogstringThe blog name parsed from your input.
_postIdstringThe numeric post ID parsed from your input.
_sourcestringInternal tag for the path used to fetch the record. S1-api means the official Tumblr v2 API path was used.
_scrapedAtstringISO-8601 UTC timestamp when the record was scraped.
typestringPost type: text, photo, quote, link, chat, audio, video, or answer.
is_blocks_post_formatbooleantrue if the post uses Tumblr's new block-based format (most modern posts).
blog_namestringSlug of the blog that owns the post.
blogobjectOriginating blog metadata: name, title, url, description.
idintegerNumeric post ID.
post_urlstringCanonical post URL.
slugstringURL slug fragment after the post ID.
timestampintegerUnix timestamp of the original publish time.
datestringHuman-readable publish time in GMT.
statestringPublish state — usually published.
formatstringLegacy format flag (html or markdown).
note_countintegerTotal notes (likes + reblogs + replies).
tagsarrayList of tag strings the author attached to the post.
summarystringShort summary Tumblr generates for previews.
contentarrayArray of content blocks. Each block has a type (text, image, link, audio, video, quote, poll) and type-specific fields. Text blocks include optional formatting ranges for bold/italic/links.
trailarrayThe reblog tree, oldest-first. Each entry has the original blog, post reference, the content they added, and is_root_item: true for the original post.
reblogobjectTop-level reblog commentary (comment, tree_html) attached by the current post's author.
can_like / can_reblog / can_replybooleanEngagement flags the API reports for the viewer context.

Error envelope

If a post is missing, the blog is private, or the API key is invalid, the actor returns a structured error instead of crashing:

{
"_input": "staff/813992302192263168",
"_blog": "staff",
"_postId": "813992302192263168",
"_source": "S1-api",
"_scrapedAt": "2026-05-18T11:20:42.702805+00:00",
"_error": "fetch_failed",
"_errorDetail": "TUMBLR_API_KEY not configured"
}

Common _error values:

ValueMeaning
invalid_inputThe input string did not match a known post URL or blog/id shorthand.
not_foundThe post does not exist or is on a private blog.
fetch_failedAPI call failed — most often missing apiKey (401) or rate limit.

Filter on _error to triage failed rows.

Pricing

This actor is billed per result: $2.50 per 1,000 posts (Tier 2). Each successful post = 1 result. Errors (not-found, fetch-failed) are not billed.

Other Sosmed Actors

PlatformActorBest for
TumblrTumblr Blog ScraperBulk posts from a blog, filtered by tag or type
MediumMedium Post Detail ScraperFull article text + claps + author
SubstackSubstack Post Detail ScraperNewsletter post body + paywall flag
MastodonMastodon Status Detail ScraperSingle fediverse status + reblog chain
BlueskyBluesky Post Detail Scraperatproto post + thread context
ThreadsThreads Post Detail ScraperSingle Threads post + replies count

Browse the full catalog at apify.com/xtracto.

Notes

  • Content blocks vary by post type. Text posts give text blocks; photo posts give image blocks with media[] URL variants; video posts give video blocks with embed metadata; answer posts include the asking_name and the question body. Always check type before reading type-specific fields.
  • Reblog tree depth. The trail array can be long for viral posts (50+ entries). The first entry (is_root_item: true) is the original post; subsequent entries are reblogs in chronological order.
  • Counters are eventually-consistent. note_count may lag the live total by a few minutes.
  • Legacy vs blocks format. Posts older than 2019 may have is_blocks_post_format: false and a flat body / caption HTML field instead of the structured content array. Newer posts always use blocks.
  • Rate limits. Tumblr enforces approximately 1,000 requests per hour per consumer key. For large jobs, register multiple keys or enable Apify Proxy rotation.