Naver Map Scraper $1💰 Places, Menus, Reviews avatar

Naver Map Scraper $1💰 Places, Menus, Reviews

Pricing

from $1.00 / 1,000 place results

Go to Apify Store
Naver Map Scraper $1💰 Places, Menus, Reviews

Naver Map Scraper $1💰 Places, Menus, Reviews

From $1/1K. Scrape Naver Map places by keyword or URL: names, categories, ratings, phones, addresses, GPS, menus, opening hours, facilities, subway and bus transit, photos, plus visitor and blog reviews. 70+ fields, full pagination, three sort orders, fast and low cost.

Pricing

from $1.00 / 1,000 place results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

6 minutes ago

Last modified

Share

Naver Map Scraper

Extract structured place data from Naver Map (map.naver.com), Korea's most-used maps and local search service. Search by keyword or paste place URLs, and get names, categories, ratings, phone numbers, addresses, GPS coordinates, menus, opening hours, facilities, nearby subway and bus stops, photos, and both visitor and blog reviews. Paginates each keyword to its full result count.

Why this scraper

  • 70+ fields per place, far more than list-only alternatives: GPS, place id, road and lot addresses, virtual phone, facilities, payment options, transit, photos, and reviews.
  • Three input shapes: keyword search, a pasted place URL (including short naver.me links), and a pasted search URL.
  • Full pagination: every keyword walks to its complete result set (often thousands of places), not just the first page.
  • Three sort orders: relevance, distance (nearest first), and popularity.
  • Menus, opening hours, and facilities extracted from the full place page.
  • Visitor reviews (star rating, text, author, visit date, photos, keyword tags) and blog reviews (title, body, link, author, thumbnail).
  • Fast and cheap: the default connection works on every Apify plan, so a trial run costs almost nothing.

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

FieldExample
name"Sample Dumpling House"
category"Korean restaurant"
businessCategory"restaurant"
placeId"00000001"
placeUrl"https://map.naver.com/p/entry/place/00000001"
latitude37.5000
longitude127.0000
phone"+820000000000"
virtualPhone"+820000000000"
address"Sample-dong 000-0"
roadAddress"Sample-ro 000"
fullAddress"Seoul Sample-gu Sample-dong 000-0"
visitorReviewScore4.4
visitorReviewCount0
totalReviewCount0
blogCafeReviewCount0
distance"120m"
imageUrls["https://example.com/photo-000.jpg"]
conveniences["Parking", "Wi-Fi"]
paymentInfo["Card", "Mobile pay"]
openingHours{ ... structured hours ... }
menus[ { "name": "Sample Menu", "price": "0", "images": [] } ]
subwayStations[ { "displayName": "Sample Station", "nearestExit": "0", "walkTime": 2 } ]
busStations[ { "name": "Sample Stop", "walkTime": 1 } ]
topPhotos["https://example.com/photo-000.jpg"]
blogReviews[ { "title": "Sample blog title", "url": "https://example.com/blog/000" } ]
visitorReviews[ { "rating": 5, "body": "Sample review text", "authorNickname": "user000" } ]
searchKeyword"dumpling house"

How to use

Pick a mode, then fill in the matching section. Examples:

Basic keyword search (fast, list only)

{
"mode": "search",
"keywords": ["만두집"],
"includeDetails": false,
"maxItems": 20
}

Keyword search with full details and reviews

{
"mode": "search",
"keywords": ["강남 카페"],
"sort": "popular",
"includeDetails": true,
"includeReviews": true,
"maxReviews": 30,
"maxItems": 50
}

Nearest places to a point

{
"mode": "search",
"keywords": ["카페"],
"sort": "distance",
"searchCoordinates": "37.4979,127.0276",
"maxItems": 30
}

Specific place and search URLs

{
"mode": "url",
"startUrls": [
"https://m.place.naver.com/restaurant/00000001/home",
"https://map.naver.com/p/search/서울 호텔"
],
"includeDetails": true,
"maxItems": 40
}

Input parameters

ParameterTypeDefaultDescription
modestring"search""search" runs the keywords; "url" scrapes pasted URLs.
keywordsarray["만두집"]Search terms (search mode). Each is paginated to its full result count.
sortstring"relevance""relevance", "distance" (nearest first), or "popular" (search mode).
searchCoordinatesstringcentral SeoulMap centre "lat,lng" that biases results and powers distance sort.
startUrlsarray(none)Naver Map place or search URLs, including short naver.me links (url mode).
includeDetailsbooleantrueFetch the full place page (menus, hours, facilities, transit, photos, blog reviews).
includeReviewsbooleanfalseCollect paginated visitor (star) reviews.
maxReviewsinteger20Upper bound on visitor reviews collected per place.
maxItemsinteger20Stop after this many places. 0 means no limit.
proxyobjectApify datacenterConnection settings. The default connection is the cheapest reliable option.
maxResidentialMBinteger0Residential traffic budget; after it, the run auto-downgrades to datacenter. 0 = no cap.
resumeFromRunIdstring(none)Continue one interrupted run: paste a previous run/dataset ID to skip places it already collected.
incrementalModebooleanfalseRecurring monitoring: remembers the previous run of the same search itself and returns only NEW/UPDATED/REAPPEARED places (see below).
stateKeystring(auto)Name an incremental-mode monitoring campaign, or share state across runs. Auto-derived from the search + settings when empty.
emitUnchangedbooleanfalseIncremental mode only: also return (and bill) places unchanged since the last run.
emitExpiredbooleanfalseIncremental mode only: also return (and bill) places no longer found, once a run fully scans the tracked search.
mcpConnectorsarray(none)Optional: pipe results into Notion, Linear, Airtable, or Apify apps.

Resume & recurring updates

Two distinct features, both off by default:

  • resumeFromRunId continues ONE interrupted crawl. Paste a previous run ID or dataset ID and this run skips every place id it already collected — no duplicates, no re-charging.
  • incrementalMode is for scheduling this actor daily or weekly against the same search. The actor remembers the previous run itself (no id to paste) and tags every place with changeType (NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED), changedFields, firstSeenAt, and lastSeenAt. By default only NEW/UPDATED/REAPPEARED places are returned; turn on emitUnchanged/emitExpired to also get (and pay for) the rest. State is tracked per place id (id, the same value as placeId), scoped to the search (mode, keywords/URLs, sort, search centre, and the detail/review toggles) — different searches never share state unless you set the same stateKey explicitly. EXPIRED rows are only emitted once a run fully scans its tracked search (not when Max records capped it, Resume was used, or a search could not be reached), so a partial run never wrongly marks a place as gone.

Visitor review counts, ratings, and new reviews are real, live data — incremental mode reports them as UPDATED like any other change, it does not filter them out.

Send results into your apps (MCP connectors)

Optionally mirror results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the mcpConnectors input. For Notion, also set notionParentPageUrl. The connector receives a condensed, human-readable summary per item (a title plus key fields), while the complete record always stays in the Apify dataset. Leaving mcpConnectors empty skips the export entirely and never changes the dataset output.

Output example

Sample shape, values are illustrative placeholders, not from a live listing.

{
"recordType": "place",
"id": "00000001",
"placeId": "00000001",
"name": "Sample Dumpling House",
"category": "Korean restaurant",
"businessCategory": "restaurant",
"placeUrl": "https://map.naver.com/p/entry/place/00000001",
"latitude": 37.5000,
"longitude": 127.0000,
"distance": "120m",
"phone": "+820000000000",
"virtualPhone": "+820000000000",
"address": "Sample-dong 000-0",
"roadAddress": "Sample-ro 000",
"fullAddress": "Seoul Sample-gu Sample-dong 000-0",
"visitorReviewScore": 4.4,
"visitorReviewCount": 0,
"totalReviewCount": 0,
"blogCafeReviewCount": 0,
"imageUrls": ["https://example.com/photo-000.jpg"],
"conveniences": ["Parking", "Wi-Fi"],
"paymentInfo": ["Card"],
"openingHours": null,
"menus": [{ "name": "Sample Menu", "price": "0", "recommend": false, "images": [] }],
"subwayStations": [{ "displayName": "Sample Station", "nearestExit": "0", "walkTime": 2, "walkingDistance": 130 }],
"busStations": [{ "name": "Sample Stop", "walkTime": 1, "walkingDistance": 20 }],
"topPhotos": ["https://example.com/photo-000.jpg"],
"blogReviews": [{ "title": "Sample blog title", "url": "https://example.com/blog/000", "authorName": "blogger000" }],
"visitorReviews": [{ "rating": 5, "body": "Sample review text", "authorNickname": "user000", "visited": "0.0" }],
"searchKeyword": "dumpling house"
}

Plan requirement

The default connection works on every Apify plan, including the free tier. Residential connections are optional and only useful if the default is ever blocked; pick a country of KR if you enable them. Korean text (keywords, names, addresses, reviews) is fully supported in both input and output.