Naver Map Scraper $1💰 Places, Menus, Reviews
Pricing
from $1.00 / 1,000 place results
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
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
2
Monthly active users
6 minutes ago
Last modified
Categories
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.
| Field | Example |
|---|---|
| name | "Sample Dumpling House" |
| category | "Korean restaurant" |
| businessCategory | "restaurant" |
| placeId | "00000001" |
| placeUrl | "https://map.naver.com/p/entry/place/00000001" |
| latitude | 37.5000 |
| longitude | 127.0000 |
| 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 |
| 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
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | "search" | "search" runs the keywords; "url" scrapes pasted URLs. |
| keywords | array | ["만두집"] | Search terms (search mode). Each is paginated to its full result count. |
| sort | string | "relevance" | "relevance", "distance" (nearest first), or "popular" (search mode). |
| searchCoordinates | string | central Seoul | Map centre "lat,lng" that biases results and powers distance sort. |
| startUrls | array | (none) | Naver Map place or search URLs, including short naver.me links (url mode). |
| includeDetails | boolean | true | Fetch the full place page (menus, hours, facilities, transit, photos, blog reviews). |
| includeReviews | boolean | false | Collect paginated visitor (star) reviews. |
| maxReviews | integer | 20 | Upper bound on visitor reviews collected per place. |
| maxItems | integer | 20 | Stop after this many places. 0 means no limit. |
| proxy | object | Apify datacenter | Connection settings. The default connection is the cheapest reliable option. |
| maxResidentialMB | integer | 0 | Residential traffic budget; after it, the run auto-downgrades to datacenter. 0 = no cap. |
| resumeFromRunId | string | (none) | Continue one interrupted run: paste a previous run/dataset ID to skip places it already collected. |
| incrementalMode | boolean | false | Recurring monitoring: remembers the previous run of the same search itself and returns only NEW/UPDATED/REAPPEARED places (see below). |
| stateKey | string | (auto) | Name an incremental-mode monitoring campaign, or share state across runs. Auto-derived from the search + settings when empty. |
| emitUnchanged | boolean | false | Incremental mode only: also return (and bill) places unchanged since the last run. |
| emitExpired | boolean | false | Incremental mode only: also return (and bill) places no longer found, once a run fully scans the tracked search. |
| mcpConnectors | array | (none) | Optional: pipe results into Notion, Linear, Airtable, or Apify apps. |
Resume & recurring updates
Two distinct features, both off by default:
resumeFromRunIdcontinues 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.incrementalModeis 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 withchangeType(NEW,UPDATED,UNCHANGED,REAPPEARED, orEXPIRED),changedFields,firstSeenAt, andlastSeenAt. By default only NEW/UPDATED/REAPPEARED places are returned; turn onemitUnchanged/emitExpiredto also get (and pay for) the rest. State is tracked per place id (id, the same value asplaceId), scoped to the search (mode, keywords/URLs, sort, search centre, and the detail/review toggles) — different searches never share state unless you set the samestateKeyexplicitly.EXPIREDrows 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.