Quick answer
The Naver Blog Search Scraper turns a Naver blog-tab search, in Korean or any UTF-8 keyword, into a deduplicated table of blog posts: post URL, blogId and logNo, title, snippet, blog name and URL, publish date, thumbnail and the Naver influencer profile when there is one. Naver has no public search API for its blog tab. Up to 50 keywords per run and up to 600 posts per keyword. Pricing is pay-per-result, $0.20 per run plus $0.002 per post, $2.20 per 1,000 posts.
Does Naver have a public blog search API?
Not for the search page you see in a browser. Results for something like 강릉 맛집 come from the blog tab of Naver's web search. The Actor reads that tab, skips ad cards, and returns only organic blog posts, with position counting the de-duplicated organic posts per keyword.
Why does page 2 need a token from page 1?
Only the first page of the blog tab is plain HTML. Every later page is a JSON response from a separate pager endpoint, and that endpoint is addressed by a loader object embedded in the page-1 source: a next-page URL plus an X-Prs-Query-Info header token. Request the pager URL without that header and you don't get the next page. And each response carries the URL of the page after it, so pages must be fetched in order, as a chain.
Naver's blog tab only serves page 1 as HTML. Pages 2 onward come from a pager URL that must be requested with a token header embedded in page 1.
So the Actor reads the loader URL and token out of the page-1 source, then walks the chain: each JSON envelope holds the next page's card HTML and the next URL, reused with the same token. Pages are paced 3.5 seconds apart. If the page-1 markup lacks the blog-tab marker, or a pager response isn't the expected JSON, that counts as a block and the session restarts rather than silently returning nothing.
What else we handle
-
Dedupe by
blogId+logNo, parsed from the post URL, within each keyword. - Restarts don't repeat rows. After a block the Actor opens a fresh session with the next browser fingerprint, replays the early pages to catch up, and emits only unseen posts, up to two restarts per keyword.
-
Dates are honest. An absolute date like
2026.07.24.becomes an ISOpublishedAt. A relative one like3주 전is kept aspublishedAtRelativeand not converted to a guess.publishedAtRawalways has the original text. - Ads are skipped, and cards without a usable post link, title or blog name are dropped.
What the Actor gives you
One row per post, 15 fields: query, position, postUrl, blogId, logNo, title, snippet, blogName, blogUrl, influencerUrl, publishedAtRaw, publishedAt, publishedAtRelative, thumbnailUrl and scrapedAt.
{
"query": "강릉 맛집",
"position": 1,
"postUrl": "https://blog.naver.com/104204303/224424493170",
"blogId": "104204303",
"logNo": "224424493170",
"title": "강릉 물회 맛집 장안횟집 풍자 또간집 미역국이 킥",
"blogName": "매아",
"blogUrl": "https://blog.naver.com/104204303",
"influencerUrl": "https://in.naver.com/104204303",
"publishedAtRaw": "2주 전",
"publishedAt": null,
"publishedAtRelative": "2주 전",
"scrapedAt": "2026-10-11T10:00:00Z"
}
Input: queries (1 to 50 keywords) and maxResultsPerQuery (default 60, up to 600).
Honest limitations 🚧
Blog tab only: no cafe, news or Knowledge-iN results, and no post bodies, comments or likes. Results follow Naver's default order, with no sort or date filter, and depend on the proxy exit region, so the same keyword can return a slightly different set from different regions. Depth is capped at 600 posts per keyword. A keyword with no matches is a successful run that costs only the start fee.
FAQ
Can I search in Korean?
Yes. Keywords are sent UTF-8 encoded, with a Korean Accept-Language.
Why do two keywords return the same post?
Rows are de-duplicated within a keyword, not across keywords. Each row carries its query so you can group as you like.
What about blocks and rate limits?
That's our job. We rotate Firefox browser fingerprints through curl-cffi, use a fresh Apify Proxy session on every restart, and retry with exponential backoff on 408, 429 and 5xx, honouring Retry-After, up to 5 attempts per request.
How does pricing work?
$0.20 per run plus $0.002 per post: $2.20 per 1,000 posts.
→ Naver Blog Search Scraper on Apify
Built by Devil Scrapes. We handle the pager tokens, the fingerprints and the retries, and we don't turn "3 weeks ago" into a date we can't prove. 😈
Top comments (0)