Vexaloom Labs

Naver Web, Blog, Cafe & News Results Scraper

Search Naver's web, blog, cafe, or news results for a Korean or any-language query, and get back title, URL, domain, snippet, and source name for each organic result, filterable by keyword or domain.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhich Naver result surface to collect.
searchQueriesarrayoptionalOne or more Korean or any-language queries, e.g. `비비바` or `서울 맛집`. Duplicates and blank entries are removed. (Legacy `searchQuery` and `query` keys are still accepted.)
maxItemsintegeroptionalHard cap on all normal result records across every query (error records are extra).
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhich Naver result surface to collect.
searchQueriesarrayoptionalOne or more Korean or any-language queries, e.g. `비비바` or `서울 맛집`. Duplicates and blank entries are removed. (Legacy `searchQuery` and `query` keys are still accepted.)
maxItemsintegeroptionalHard cap on all normal result records across every query (error records are extra).
maxItemsPerQueryintegeroptionalHard cap on normal result records produced by each query.
maxPagesPerQueryintegeroptionalPage ceiling for paginated modes (blog, cafe, news, image, video). Collection also stops when Naver runs out of results.
sortBystringoptionalRelevance or newest first. Applies to blog, cafe, news, image and video modes; web and integrated modes use Naver's default order.
dateRangestringoptionalOnly return results published inside this window. Applies to blog, cafe, news, image and video modes; web and integrated modes do not support a date filter.
includeAdsbooleanoptionalKeep paid blog placements and integrated-search ads, marked with `isAd`. (Blog and integrated modes.)
includeContentbooleanoptionalFetch the post or article body, inline images and author for blog and news results. One extra request per result; unavailable bodies are omitted. (Blog and news modes.)
includeSerpFeaturesbooleanoptionalInclude place cards and AI briefing blocks from the integrated results page, when Naver shows them. (Integrated mode.)
containsKeywordstringoptionalOnly keep results whose title, snippet, domain, source name, cafe name or suggestion contains this text (case-insensitive).
domainstringoptionalOnly keep results from this domain (exact host or suffix, e.g. `naver.com` or `blog.naver.com`).

Download the published input schema

View complete JSON
{
  "description": "Search Naver web, blog, cafe, news, image, video, integrated and autocomplete results. Returns exact destination URLs, titles, snippets, dates, thumbnails and vertical-specific fields. No login, cookies or proxy setup required.",
  "properties": {
    "containsKeyword": {
      "description": "Only keep results whose title, snippet, domain, source name, cafe name or suggestion contains this text (case-insensitive).",
      "editor": "textfield",
      "title": "Result keyword filter",
      "type": "string"
    },
    "dateRange": {
      "default": "any",
      "description": "Only return results published inside this window. Applies to blog, cafe, news, image and video modes; web and integrated modes do not support a date filter.",
      "editor": "select",
      "enum": [
        "any",
        "1d",
        "1w",
        "1m",
        "6m",
        "1y"
      ],
      "enumTitles": [
        "Any time",
        "Past 24 hours",
        "Past week",
        "Past month",
        "Past 6 months",
        "Past year"
      ],
      "prefill": "any",
      "title": "Date range",
      "type": "string"
    },
    "domain": {
      "description": "Only keep results from this domain (exact host or suffix, e.g. `naver.com` or `blog.naver.com`).",
      "editor": "textfield",
      "title": "Domain filter",
      "type": "string"
    },
    "includeAds": {
      "default": true,
      "description": "Keep paid blog placements and integrated-search ads, marked with `isAd`. (Blog and integrated modes.)",
      "prefill": false,
      "title": "Include ads",
      "type": "boolean"
    },
    "includeContent": {
      "default": false,
      "description": "Fetch the post or article body, inline images and author for blog and news results. One extra request per result; unavailable bodies are omitted. (Blog and news modes.)",
      "prefill": false,
      "title": "Include full content",
      "type": "boolean"
    },
    "includeSerpFeatures": {
      "default": true,
      "description": "Include place cards and AI briefing blocks from the integrated results page, when Naver shows them. (Integrated mode.)",
      "prefill": false,
      "title": "Include SERP features",
      "type": "boolean"
    },
    "maxItems": {
      "default": 100,
      "description": "Hard cap on all normal result records across every query (error records are extra).",
      "maximum": 10000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "maxItemsPerQuery": {
      "default": 100,
      "description": "Hard cap on normal result records produced by each query.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items per query",
      "type": "integer"
    },
    "maxPagesPerQuery": {
      "default": 10,
      "description": "Page ceiling for paginated modes (blog, cafe, news, image, video). Collection also stops when Naver runs out of results.",
      "maximum": 50,
      "minimum": 1,
      "prefill": 1,
      "title": "Max pages per query",
      "type": "integer"
    },
    "mode": {
      "default": "webSearch",
      "description": "Which Naver result surface to collect.",
      "editor": "select",
      "enum": [
        "webSearch",
        "blogSearch",
        "cafeSearch",
        "newsSearch",
        "imageSearch",
        "videoSearch",
        "integratedSearch",
        "autocomplete"
      ],
      "enumTitles": [
        "Web documents",
        "Blog posts",
        "Cafe posts",
        "News articles",
        "Images",
        "Videos",
        "Integrated SERP blocks (web, place, AI briefing, ads)",
        "Autocomplete suggestions"
      ],
      "prefill": "webSearch",
      "title": "Search mode",
      "type": "string"
    },
    "searchQueries": {
      "default": [
        "비비바"
      ],
      "description": "One or more Korean or any-language queries, e.g. `비비바` or `서울 맛집`. Duplicates and blank entries are removed. (Legacy `searchQuery` and `query` keys are still accepted.)",
      "editor": "stringList",
      "prefill": [
        "비비바"
      ],
      "title": "Search queries",
      "type": "array"
    },
    "sortBy": {
      "default": "relevance",
      "description": "Relevance or newest first. Applies to blog, cafe, news, image and video modes; web and integrated modes use Naver's default order.",
      "editor": "select",
      "enum": [
        "relevance",
        "date"
      ],
      "enumTitles": [
        "Relevance",
        "Newest first"
      ],
      "prefill": "relevance",
      "title": "Sort results by",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Naver Search Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalDataset containing all collected Naver search results and any query error records.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Naver results across web, blog, cafe, news, image, video, integrated blocks and autocomplete — exact URLs, titles, snippets, dates, thumbnails, ranks and vertical-specific fields.",
  "properties": {
    "results": {
      "description": "Dataset containing all collected Naver search results and any query error records.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Naver search results",
      "type": "string"
    }
  },
  "title": "Naver SERP Harvester Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Naver search results",
      "transformation": {
        "fields": [
          "query",
          "resultType",
          "rank",
          "title",
          "url",
          "date",
          "sourceName"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Naver SERP Harvester: Web, Blog, Cafe, News, Image & Video

Search Naver and collect the exact results a Korean reader sees: web documents, blog posts, cafe posts, news articles, images, videos, integrated result blocks and autocomplete suggestions. Every row carries the query that produced it, its position, the result link, a clean title and a normalized publish date whenever Naver prints one, plus a vertical-specific set of fields. No login, cookies or proxy setup is required.

What this actor does

  • Eight modes: webSearch, blogSearch, cafeSearch, newsSearch, imageSearch, videoSearch, integratedSearch, autocomplete
  • Batch queries: pass one or many queries; duplicates and blank entries are removed, and the same result found twice is emitted once
  • Rank and provenance: every row has query, resultType, rank, page and the search page it came from
  • Filters: relevance or newest-first sorting, date windows, paid-result control, and optional full blog/news content
  • Clean output: exact destination URLs, normalized dates with a precision label, thumbnails, image dimensions, video duration and views, place details, and AI-briefing text and sources
  • Empty fields are omitted — you will not see nulls, empty strings or empty arrays in the dataset

Output per result

Every normal row:

  • recordType — searchResult; failed queries produce error
  • resultType — web, blog, cafe, news, image, video, place, aiBriefing, ad or suggestion
  • query, mode, rank, page
  • title, url, resultUrl (same value), domain, sourceName, snippet
  • thumbnailUrl
  • date — the raw date text Naver prints
  • publishedAt — ISO 8601 timestamp normalized to Korea time
  • publishedAtPrecision — exact, date or relative
  • publishedAtRaw — the date token used for normalization
  • serpUrl, sourceUrl — the search page that produced the row
  • scrapedAt — ISO 8601 collection timestamp

Mode-specific additions:

  • Web: isAiSource when the result is flagged as an AI source
  • Blog: blogId, logNo, isAd for paid placements
  • Cafe: cafeName, cafeUrl, articleId, tags[], commentCount
  • News: naverNewsUrl, pressUrl, officeId, articleId, section, sectionId, isRelated for cluster articles
  • Image: imageId (also imgId), imageUrl, originalUrl, width, height, section, author
  • Video: duration, durationSeconds, views, videoId, platform, profileUrl
  • Place: placeId, category, rating, reviewCount
  • AI briefing: aiBriefing with text, generatedAt and sources[] (each with title, URL, platform and publish time)
  • Autocomplete: suggestion, plus answer when Naver returns an answer box
  • Full content: content, contentLength, images[] when includeContent is on and the source exposes a body

A failed query adds one error row with recordType: "error", errorType, message, sourceUrl, scrapedAt and query.

Input

Field Type Default Description
mode string webSearch webSearch / blogSearch / cafeSearch / newsSearch / imageSearch / videoSearch / integratedSearch / autocomplete
searchQueries array ["비비바"] One or more Korean or any-language queries (legacy searchQuery and query keys are still accepted)
maxItems integer 100 Hard cap on all normal rows across every query (1–10,000)
maxItemsPerQuery integer 100 Hard cap per query (1–1,000)
maxPagesPerQuery integer 10 Page ceiling for paginated modes (1–50)
sortBy string relevance relevance or date; blog, cafe, news, image and video modes
dateRange string any any / 1d / 1w / 1m / 6m / 1y; blog, cafe, news, image and video modes
includeAds boolean true Keep paid blog placements and integrated-search ads, flagged isAd
includeContent boolean false Fetch blog/news bodies, authors and inline images (one extra request per result)
includeSerpFeatures boolean true Include place cards and AI briefings in integratedSearch
containsKeyword string – Keep results whose title, snippet, domain, source name, cafe name or suggestion contains this text
domain string – Keep results from this host or suffix, e.g. blog.naver.com

Example: newest blog posts with full bodies

{
    "mode": "blogSearch",
    "searchQueries": ["비비바", "서울 맛집"],
    "maxItems": 200,
    "maxItemsPerQuery": 100,
    "maxPagesPerQuery": 5,
    "sortBy": "date",
    "dateRange": "1m",
    "includeAds": false,
    "includeContent": true
}

Example: cafe discussion from the past week

{
    "mode": "cafeSearch",
    "searchQueries": ["제주도 여행"],
    "maxItems": 100,
    "sortBy": "date",
    "dateRange": "1w"
}

Example: news and image monitoring for a brand

{
    "mode": "newsSearch",
    "searchQueries": ["BTS", "삼성전자"],
    "maxItems": 300,
    "maxPagesPerQuery": 10,
    "sortBy": "date"
}

Example: integrated page with places and AI briefing

{
    "mode": "integratedSearch",
    "searchQueries": ["비트코인 전망"],
    "maxItems": 50,
    "includeAds": false,
    "includeSerpFeatures": true
}

Example: autocomplete ideas

{
    "mode": "autocomplete",
    "searchQueries": ["비비", "서울 맛집"],
    "maxItems": 20
}

Use cases

  • Korean SEO and rank tracking — record which pages and blogs rank for a query, in relevance or newest-first order, with stable ranks and exact URLs
  • Brand and news monitoring — batch a company or product name, restrict to a date window, and keep publisher, section, headline, snippet and publish time
  • Content and RAG datasets — collect full blog and news bodies with authors, images and normalized timestamps
  • Local and place research — pull the place pack from integrated results with ratings, review counts, categories and map links
  • Visual and video research — collect images with original dimensions and videos with duration, views, channel and platform
  • Keyword discovery — expand seed terms with Naver autocomplete suggestions

FAQ

Do I need a Naver account, cookies or a proxy? No. The actor collects public Naver result pages without login, cookies or any proxy configuration.

Why does webSearch return only a handful of rows? Naver's web-document section on the integrated page currently shows roughly 2–17 documents per query and does not paginate. Use integratedSearch to also capture places, ads and AI briefings, or the dedicated blog, cafe, news, image and video modes for deeper verticals.

How deep can the verticals go? It depends on the query. Broad Korean queries can return hundreds of blog, cafe, news, image or video rows; narrow or very recent queries return fewer. The actor stops when Naver runs out of results, when a page repeats, or when your maxPagesPerQuery / maxItems limits are reached. No rows are invented to fill a quota.

Are paid results included? Only when includeAds is on. Paid blog placements and integrated-search ads are marked isAd, and you can switch them off.

What does includeContent add? For blog and news rows it fetches the post or article body, inline image URLs, the author where available, and an exact publish time. Some posts are media-only or paywalled; those rows keep their card data and simply omit the missing content fields.

Why are some publish dates relative? Naver often prints labels such as 3주 전 or 11시간 전. Those rows keep the raw label in date / publishedAtRaw, get a computed publishedAt, and are marked publishedAtPrecision: "relative" so you can treat them differently from exact timestamps.

Why is there no cafe body or comment text? Naver does not expose cafe bodies or comment threads on public search pages. Cafe rows include the card fields Naver prints, including the comment count.

Why do some image links look like redirects? Naver's image tab returns signed bridge links for shopping and clip results. They are the official destination Naver serves at collection time; some merchant or short-link tokens expire later, so keep imageUrl / originalUrl when you need the media itself.

What is integratedSearch? It collects the blocks on Naver's main result page: web documents, paid ads, place cards and the AI briefing when Naver generates one. Place and AI rows can be turned off with includeSerpFeatures.

Can I search several queries at once? Yes. Each row records the query that found it, and a result found by two queries is emitted only once.

Is this affiliated with Naver? No. This is an independent actor that reads Naver's public search results; it is not endorsed by or affiliated with NAVER Corporation.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build Rd3z6T4JbPlEIBdK3. Documentation is regenerated from the default published build; private drafts are not included.