ActorStack.dev

Naver's 300-result ceiling, and how to cover a city anyway

Every Naver query stops at 300 results regardless of what it claims to have matched. Coverage is a function of how you partition the map, not of how high you set a limit.

By Oswaldo Carabano7 min read

Short answer

Naver Place serves at most 300 results per query, no matter how many matches it reports. Raising `maxResults` past 300 does nothing for a single query; coverage comes from partitioning — more regions, narrower category terms — and the Actor's run log states the ceiling rather than letting you assume you swept a city.

Key points

  • 300 results per query is a hard ceiling set by Naver, not by the Actor.
  • Since the reported match count includes out-of-area padding, it cannot be used to estimate what you are missing.
  • Adding regions is the primary partition axis: two districts named explicitly beat one query that overflows.
  • Narrower category terms are the second axis — Korean has finer-grained business terms than English translations suggest.
  • The run log reports the ceiling and the dropped-padding count, so a partial sweep is visible in the output rather than inferred.
On this page6 sections

Naver serves at most 300 results per query. That number is not in any documentation, it is not affected by your input, and it is the single constraint that decides how a Korean local dataset has to be built.

The ceiling

Three hundred, per query, regardless of the match count Naver reports. Setting maxResults to 1,000 on a single query does nothing useful: the Actor cannot request a 301st result that Naver will not serve.

The Actor says so in the run log rather than letting a 300-row dataset imply that a district has exactly 300 businesses.

Why the match count cannot size the gap

On a normal capped source you would compute what you are missing: reported minus served. Here you cannot, because the reported count includes the padding. 638 reported against 162 in-area does not mean 476 dentists are missing; it means the count is measuring something else entirely.

Partitioning by region

The primary axis. Korean administrative divisions nest — 시/도, then 구/군, then 동 — so a query that overflows at city level can be split into districts, and a district that overflows into neighbourhoods.

one query per district instead of one per city
{
  "queries": ["치과"],
  "regions": [
    "서울 강남구", "서울 서초구", "서울 송파구",
    "서울 마포구", "서울 용산구", "서울 종로구"
  ],
  "maxResults": 1500
}

Each region gets its own query and its own ceiling, so six districts is up to 1,800 served results rather than 300. Deduplicate on place_id afterwards, because adjacent districts share padding.

Partitioning by term

The second axis, and often the better one. Korean business vocabulary is finer-grained than English translations suggest: a single English category maps to several Korean terms that Naver indexes separately.

So instead of one broad term that overflows, use two or three specific ones. This also improves precision — a narrow term returns fewer irrelevant businesses before any filtering.

The cost of partitioning

Effectively nothing. Billing is per delivered row, so six district queries returning 1,200 unique businesses cost the same as 1,200 businesses from one impossible query. What you pay extra is a handful of requests, and what you get is a dataset that is not silently truncated.

Verifying that a sweep is complete

Two checks, both from the run log:

  1. Did any query return exactly 300 in-area results? If so it was truncated. Split that region or narrow the term.
  2. What was the padding ratio? A very high ratio means the district genuinely has little supply, so the low row count is the answer rather than a failure.

Between those two you can tell the difference between “I covered this district” and “I hit a ceiling” — which is the distinction that most scraped datasets cannot make about themselves.

Frequently asked questions

Can I get more than 300 results from one Naver query?
No. It is Naver's ceiling. More coverage requires more queries — more regions, or narrower category terms.
How do I know if I missed businesses?
If a query returned exactly 300 in-area results, assume there are more and split it. If it returned fewer than 300 after filtering, you have the district for that term. The run log reports both the served count and the dropped padding.
Is it cheaper to run many narrow queries?
It costs the same per business, since billing is per delivered row. Narrow queries cost slightly more in requests and return far more unique businesses, which is a good trade.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 19 Aug 2026
    Naver Place Business & Reviews Scraper — Actor README and input schemaActorStack / Apify Store
A narrow Seoul street at night, lit by shopfront signage on both sides.
Naver PlaceGuide

Scrape Naver Place

Google Maps coverage in Korea is thin; Naver Place is where the data is. A walkthrough of querying it, and of the padding you have to remove before the results mean anything.

9 min
A Seoul street lined with restaurants, their Korean signs stacked up the building fronts.
Naver PlaceGuide

Korean search terms

Naver's search is Korean-first. The choice of term decides coverage more than any other input, and the region list decides whether the results are where you think they are.

6 min
A Seoul street lined with restaurants, their Korean signs stacked up the building fronts.
Naver PlaceExplainer

Reviews without identities

Every Naver review carries a nickname, a stable account id and a link to the reviewer's entire history. None of it is returned, and a test fails the build if it ever is.

7 min