Tumblr Post Search Scraper avatar

Tumblr Post Search Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Tumblr Post Search Scraper

Tumblr Post Search Scraper

Search public Tumblr posts by keyword with top or recent results, text, media, tags and engagement counts.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

ScrapingMonkey

ScrapingMonkey

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Find public Tumblr posts by search query and export each result as a separate row. Tumblr Post Search Scraper supports top and recent results with text, tags, dates, media references, visible counts and author context.

Discover relevant posts before selecting records for deeper review or adding them to a research dataset.

At a glanceDetails
📥 InputSearch keywords or public Tumblr post search URLs.
📤 OutputOne post per success row, with source input retained
📄 PaginationpagesPerSearch is a result-page budget per query. mode selects top or recent; neither setting guarantees every matching post on Tumblr.
🔐 Login requiredNo
⚡ ProcessingUp to 5 HTTP requests concurrently with automatic retries
💾 DeliveryOne Apify dataset view, useful flat columns and complete nested JSON

What the Tumblr Post Search scraper collects 🔎

The Actor follows Tumblr’s text-search results. It keeps actual post records, excludes non-post modules and preserves the selected search source.

Data can include:

  • Post IDs, canonical links, source blog, publication dates and tags
  • Available text, summaries, content blocks
  • Image variants, video references and link previews when present
  • Visible note, like, reblog and reply counts when supplied
  • Original and parent reblog references, with the available reblog trail
Search modeResult
topThe website’s ranked search results
recentThe website’s recent-results mode

How to collect post search results from Tumblr 🚀

  1. Enter one or more supported inputs in inputList.
  2. Set the result-page budget for each input.
  3. Start the Actor.
  4. Open the Posts dataset view and review the individual records.
  5. Export the dataset or retrieve it from your application.
{
"inputList": [
"art"
],
"mode": "top",
"pagesPerSearch": 1
}

pagesPerSearch is a result-page budget per query. mode selects top or recent; neither setting guarantees every matching post on Tumblr.

Tumblr post search results data and complete output 📦

FieldTypeMeaning
statusstringResult status: success or failed.
inputstringOriginal submitted input.
idstring or nullIdentifier of this object, preserved as a string.
urlstring or nullPublic source URL for this object.
blog_namestring or nullName of the blog associated with this post or trail entry.
blog_uuidstring or nullUUID of the blog associated with this post or trail entry.
blog_titlestring or nullAvailable title of the source blog.
blog_urlstring or nullPublic URL of the source blog.
blog_avatar_urlstring or nullAvailable avatar URL of the source blog.
post_typestring or nullPost type supplied by Tumblr; content blocks describe the actual components.
original_typestring or nullOriginal post-type value when supplied by Tumblr.
summarystring or nullPublic post summary returned by Tumblr.
textstring or nullCombined available text from the reblog trail and the current post.
tagsarray or nullAvailable tag values associated with the post or interaction.
published_atstring or nullPublication time in an ISO-formatted date string when supplied.
timestampinteger or nullSource Unix timestamp in seconds; fractional precision is retained when supplied.
note_countinteger or nullPublic combined note count; not a guarantee of retrievable interaction records.
like_countinteger or nullPublic like count supplied for the post.
reblog_countinteger or nullPublic reblog count supplied for the post.
reply_countinteger or nullPublic reply count supplied for the post.
is_nsfwboolean or nullSource NSFW flag when supplied.
is_blazedboolean or nullSource flag indicating that the post is marked as blazed.
mediaarray or nullAvailable media renditions and posters from the post and its reblog trail.
media[].typestring or nullObject or content type supplied or normalized for this record.
media[].rolestring or nullMedia role: a main media rendition or a poster image.
media[].urlstring or nullPublic source URL for this object.
media[].widthinteger or nullAvailable image or media width in pixels.
media[].heightinteger or nullAvailable image or media height in pixels.
media[].mime_typestring or nullSource media MIME type when supplied.
contentarray or nullAvailable structured content blocks retained in the parent record.
content[].typestring or nullObject or content type supplied or normalized for this record.
content[].textstring or nullAvailable text retained for this record.
content[].subtypestring or nullContent-block subtype when supplied, such as a text presentation style.
content[].urlstring or nullPublic source URL for this object.
content[].data_jsonstring or nullComplete source content block serialized as a JSON string.
trailarray or nullAvailable reblog-trail entries, preserving blog, post and content references.
trail[].blog_namestring or nullName of the blog associated with this post or trail entry.
trail[].blog_uuidstring or nullUUID of the blog associated with this post or trail entry.
trail[].blog_urlstring or nullPublic URL of the source blog.
trail[].post_idstring or nullSource post ID associated with this interaction or trail entry.
trail[].textstring or nullAvailable text retained for this record.
trail[].contentarray or nullAvailable structured content blocks retained in the parent record.
trail[].content[].typestring or nullObject or content type supplied or normalized for this record.
trail[].content[].textstring or nullAvailable text retained for this record.
trail[].content[].subtypestring or nullContent-block subtype when supplied, such as a text presentation style.
trail[].content[].urlstring or nullPublic source URL for this object.
trail[].content[].data_jsonstring or nullComplete source content block serialized as a JSON string.
reblogged_from_idstring or nullImmediate source-post ID of the reblog when supplied.
reblogged_from_namestring or nullImmediate source blog name of the reblog when supplied.
reblogged_from_urlstring or nullImmediate source-post URL of the reblog when supplied.
reblogged_root_idstring or nullRoot or original post ID of the reblog when supplied.
reblogged_root_namestring or nullRoot or original blog name of the reblog when supplied.
reblogged_root_urlstring or nullRoot or original post URL of the reblog when supplied.

text combines available text from the reblog trail and the current post. The content array preserves individual content blocks; each data_json string contains the complete source block, including type-specific image, video, link or poll data. The media array keeps available renditions and posters with their source context. IDs remain strings so large Tumblr identifiers retain their exact digits.

Every top-level output field appears in these complete examples. The success example is normalized from a public response; its values are a snapshot and can change. Nested arrays remain inside their parent result.

Complete representative success result:

{
"status": "success",
"input": "art",
"id": "826778959771467776",
"url": "https://corrodedparadox.tumblr.com/post/826778959771467776/close-enough",
"blog_name": "corrodedparadox",
"blog_uuid": "t:LclTodO_DGy5K09lChT73w",
"blog_title": "CREATE OR DIE",
"blog_url": "https://corrodedparadox.tumblr.com/",
"blog_avatar_url": "https://64.media.tumblr.com/9daddcf59640e91570569210df3f47c4/6170feade85cc179-78/s512x512u_c1/58086291ebeb631876909ece1d070636af8bda31.pnj",
"post_type": "blocks",
"original_type": "regular",
"summary": "Close enough",
"text": "Close enough ",
"tags": [
"my art",
"digital art",
"digital painting",
"artists on tumblr",
"surreal art",
"art",
"deer",
"my son",
"lamb"
],
"published_at": "2026-09-03T23:24:19Z",
"timestamp": 1788477859,
"note_count": 64072,
"like_count": 48598,
"reblog_count": 15396,
"reply_count": 78,
"is_nsfw": false,
"is_blazed": false,
"media": [
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s2048x3072/e4952bbe2b9c2dff3d10710d9bf8b26f53761d9f.pnj",
"width": 1572,
"height": 2048,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s1280x1920/956876a9d9386de231fc09ec2eae0bd7c7e2ead8.pnj",
"width": 1280,
"height": 1668,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s640x960/b70511a15004cb3982a835958ed580a1526c3ce2.pnj",
"width": 640,
"height": 834,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s540x810/303d2687034f367fa5ac7b7361c4423a7f02c279.pnj",
"width": 540,
"height": 704,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s500x750/06eafc252ac671ae51e85194edf48ea2434421fe.pnj",
"width": 500,
"height": 651,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s400x600/b9c5f77ab10e0959a49e7c6d5d2304c10b0cfb12.pnj",
"width": 400,
"height": 521,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s250x400/e4bd8aebb585c8408c98b888a685d2803865aee7.pnj",
"width": 250,
"height": 326,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s250x250_c1/1475131e251fb85760fecd98fdd3fd055ff2a17a.pnj",
"width": 250,
"height": 250,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s100x200/0b120ac3b14494f8f263d8085bbb5434dac853b3.pnj",
"width": 100,
"height": 130,
"mime_type": "image/png"
},
{
"type": "image",
"role": "media",
"url": "https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s75x75_c1/7dd935bbcda6e82eb11fcf29f3009caf443cdd64.pnj",
"width": 75,
"height": 75,
"mime_type": "image/png"
}
],
"content": [
{
"type": "image",
"text": null,
"subtype": null,
"url": null,
"data_json": "{\"type\":\"image\",\"media\":[{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":1572,\"height\":2048,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s2048x3072/e4952bbe2b9c2dff3d10710d9bf8b26f53761d9f.pnj\",\"hasOriginalDimensions\":true},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":1280,\"height\":1668,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s1280x1920/956876a9d9386de231fc09ec2eae0bd7c7e2ead8.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":640,\"height\":834,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s640x960/b70511a15004cb3982a835958ed580a1526c3ce2.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":540,\"height\":704,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s540x810/303d2687034f367fa5ac7b7361c4423a7f02c279.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":500,\"height\":651,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s500x750/06eafc252ac671ae51e85194edf48ea2434421fe.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":400,\"height\":521,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s400x600/b9c5f77ab10e0959a49e7c6d5d2304c10b0cfb12.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":250,\"height\":326,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s250x400/e4bd8aebb585c8408c98b888a685d2803865aee7.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":250,\"height\":250,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s250x250_c1/1475131e251fb85760fecd98fdd3fd055ff2a17a.pnj\",\"cropped\":true},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":100,\"height\":130,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s100x200/0b120ac3b14494f8f263d8085bbb5434dac853b3.pnj\"},{\"mediaKey\":\"67230a3cf6a48d44fd707c899cb4d7f5:5d836d085e5a2d83-a6\",\"type\":\"image/png\",\"width\":75,\"height\":75,\"url\":\"https://64.media.tumblr.com/67230a3cf6a48d44fd707c899cb4d7f5/5d836d085e5a2d83-a6/s75x75_c1/7dd935bbcda6e82eb11fcf29f3009caf443cdd64.pnj\",\"cropped\":true}],\"colors\":{\"c0\":\"000705\",\"c1\":\"050d05\",\"c2\":\"01090d\",\"c3\":\"22161d\",\"c4\":\"ab9173\"},\"altText\":\"A digital painting of a small white cervinae standing in the middle of a rainy window. There is an outline of a bigger deer around it that looks like rain streaks on the window \"}"
},
{
"type": "text",
"text": "Close enough ",
"subtype": null,
"url": null,
"data_json": "{\"type\":\"text\",\"text\":\"Close enough \"}"
}
],
"trail": [],
"reblogged_from_id": null,
"reblogged_from_name": null,
"reblogged_from_url": null,
"reblogged_root_id": null,
"reblogged_root_name": null,
"reblogged_root_url": null
}

Complete failed result:

{
"status": "failed",
"input": "invalid input",
"id": null,
"url": null,
"blog_name": null,
"blog_uuid": null,
"blog_title": null,
"blog_url": null,
"blog_avatar_url": null,
"post_type": null,
"original_type": null,
"summary": null,
"text": null,
"tags": null,
"published_at": null,
"timestamp": null,
"note_count": null,
"like_count": null,
"reblog_count": null,
"reply_count": null,
"is_nsfw": null,
"is_blazed": null,
"media": null,
"content": null,
"trail": null,
"reblogged_from_id": null,
"reblogged_from_name": null,
"reblogged_from_url": null,
"reblogged_root_id": null,
"reblogged_root_name": null,
"reblogged_root_url": null
}

A failed row preserves input, sets status to failed, and sets every other top-level field to null. The run log records the reason. Optional successful fields can be null or empty when Tumblr does not supply them. Object fields are exposed through useful columns in the single Posts view; arrays are not expanded into extra result rows.

Input requirements and pagination settings ⚙️

ParameterTypeRequiredDefaultRules
inputListarray of stringsYesNoneSearch keywords or public Tumblr post search URLs. At least 1 item.
modestringNo"top"Choose top or recent public posts. Both modes use the same result fields. Allowed values: top, recent.
pagesPerSearchintegerNo1Maximum result pages per input. Setup requests do not count as pages. Stops when the source has no next page or repeats a continuation. Actual rows per page can vary. Minimum 1.

Enter search queries or supported Tumblr search URLs. Select top for the website’s ranked results or recent for its recent-results mode.

Enter a query such as art, or a supported URL such as https://www.tumblr.com/search/art. A /search/art/recent URL selects recent mode even if the input setting is top. Queries must be nonblank and contain at most 256 characters. A blog-search or tag-feed URL is not a post-search input.

Duplicate normalized inputs are processed once. Within the collection for one source input, repeated records are removed while distinct interactions or objects remain separate. The same object returned for different source inputs retains its source relationship.

The first result page counts as page 1. Public-page preparation and metadata lookups do not consume result pages. Collection stops at your page budget or the end of the available list. A short page alone does not mean that the list has ended.

Tumblr post search results use cases 🎯

Topic discovery

Find source-linked posts for a topic and review their text, tags and authors.

Recent-content sampling

Use recent mode to collect a limited sample for an editorial watchlist.

Ranking comparisons

Run separate top and recent inputs and compare the returned records in your own analysis.

Pricing and saved-result behavior 💰

Check the Actor’s Pricing tab for the active pricing model and current rate. Store settings can change, so this README does not claim a fixed price or runtime.

Under dataset-item pricing:

  • Each successful result represents one post for its source input.
  • An invalid or unavailable input, an input with no accessible results, or an exhausted request can produce a failed row.
  • Retry attempts and supporting requests do not create extra dataset rows by themselves.
  • Nested media, profile information and other arrays remain part of their parent row.
  • A normal empty continuation after earlier successes creates no additional row.
  • Saved failed rows are not assumed to be free; check their treatment in the active pricing configuration.

More inputs and larger page budgets can produce more saved rows. Start with a small run and check actual usage before increasing the workload.

Tumblr post search results API 🔌

Replace $ACTOR_ID with the identifier shown in this Actor’s API tab and $APIFY_TOKEN with your Apify token.

curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"inputList":["art"],"mode":"top","pagesPerSearch":1}'

Download the dataset in JSON, CSV, Excel or other formats available in the Console, or retrieve it through the Apify API. Use schedules, webhooks and Apify integrations to connect results to Google Sheets, Make, Zapier, cloud storage or your own application. These connections are configured separately by the user.

Reliability, retries, and public-data limits ⚠️

Collection uses pure HTTP with up to five concurrent requests. Invalid syntax and confirmed missing, removed or unavailable targets stop without unnecessary retries. Temporary network or proxy failures, timeouts, blocking responses, malformed data, throttling and server errors allow up to five total attempts per request.

Successful earlier pages remain saved if a later request fails. A normal end after saved results is not retried. An input with no accessible results can receive a failed row; that alone does not prove that its underlying source does not exist. An exhausted later request can add a failed row while preserving previous output.

The available post formats include text, images, video, links and poll metadata. Poll vote totals and audio coverage are not promised. A reblog can have no new text while its content remains in the reblog trail. Media references are returned when available; media files are not downloaded and their links can expire. Search relevance and order are controlled by Tumblr. Tag feeds are a separate source and are collected by Tag Posts Scraper.

Tumblr controls public availability, ranking and optional fields. Result counts can be affected by duplicates, removed content and changes during a run. A page budget is a collection limit, not a promise of exhaustive coverage.

An invalid string within a valid input list does not stop other inputs. Invalid overall configuration, such as a non-string list item or a wrong page-count type, exits before source requests. Startup failures, unavailable dataset storage or an unrecoverable result-save error can still stop the whole run. A failed save is not retried as a new scraping request.

Frequently asked questions ❓

What is the difference between top and recent?

They select the corresponding Tumblr search mode. Top uses the website’s ranking; recent requests its recent-results order.

Is this the same as a tagged feed?

No. This Actor uses text search. Tag Posts Scraper collects the dedicated feed for a specific tag.

Does it keep the content of reblogs?

Yes. Available content and reblog-trail data remain in the parent post record. A post can legitimately have no new text of its own.

Does it require a Tumblr account or personal cookies?

No. You do not need to provide a Tumblr account, password or personal session cookie. Collection uses HTTP without opening a browser.

What happens to invalid or unavailable inputs?

Invalid individual inputs are recorded as failed without a source request. Confirmed missing or unavailable targets stop without unnecessary retries. Temporary failures allow up to five total attempts per request; other inputs and earlier saved results remain available.

Can I export results or run the same input again?

Yes. Export the default dataset or retrieve it through the Apify API. You can create an Apify schedule and connect completed runs to your own workflow.

For a reproducible issue, use the Actor’s Issues tab and provide the run ID, approximate time, a safe public input, expected behavior and actual result. Include the mode or page budget when relevant. Never share access tokens, personal cookies or proxy credentials.

Use public data responsibly and follow applicable privacy, copyright, contractual and platform requirements before storing, analyzing or redistributing collected information.