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
1
Bookmarked
13
Total users
1
Monthly active users
18 days ago
Last modified
Categories
Share
Naver Map Scraper: Places, Ratings, Menus, and Reviews
Naver Map Scraper turns Naver Map into structured place data. Search by keyword or paste place and search URLs to 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 for businesses across Korea. Export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- 50+ fields per place. GPS coordinates, place id, road and lot addresses, virtual phone, facilities, payment options, transit stops, photos, and both review types.
- Two ways to find places. Search by keyword, or paste a Naver Map place or search URL, including short naver.me links.
- Optional full place-page enrichment. Menus, opening hours, facilities, payment methods, and nearby subway and bus stops, added with one extra request per place.
- Two kinds of reviews. Visitor star reviews (rating, text, author, visit date, photos, keyword tags) collected on demand, and blog reviews that arrive with the place details at no extra request.
- Built for monitoring. Incremental mode remembers a saved search across scheduled runs and tags every place as new, updated or unchanged, so a recurring run only bills for what changed.
- A cheap default connection. The standard connection tier works without extra setup, which keeps a trial run's cost low.
- Full Korean text support. Keywords, names, addresses, menus and reviews are read and returned in Korean without any special configuration.
Use Cases
- Local SEO and business audits: pull ratings, review counts, categories and contact details for every business matching a keyword or area.
- Sales and lead generation: build prospect lists of local businesses with phone numbers, addresses and review volume.
- Food delivery and dining apps: collect restaurant and cafe details, menus and opening hours for a city or neighborhood.
- Competitive and market research: track how a chain's locations, ratings and reviews change over time with Incremental mode.
- Real estate and travel planning: gather nearby points of interest, transit access and photos for a given area.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
name | "Sample Dumpling House" |
category / businessCategory | "Korean restaurant" / "restaurant" |
placeId / id | "11724463" |
placeUrl | "https://map.naver.com/p/entry/place/11724463" |
latitude / longitude | 37.5000 / 127.0000 |
address / roadAddress / fullAddress | "Sample-dong 000-0" / "Sample-ro 000" / "Seoul Sample-gu Sample-dong 000-0" |
phone / virtualPhone | "02-000-0000" / "0507-0000-0000" |
visitorReviewScore | 4.4 |
visitorReviewCount / totalReviewCount / blogCafeReviewCount | 128 / 340 / 212 |
distance | distance from the search centre, when returned by the source |
imageUrls / imageCount | list of photo URLs / photo count |
conveniences | ["Parking", "Wi-Fi"] (when place details are on) |
paymentInfo | ["Card", "Mobile pay"] (when place details are on) |
openingHours | structured hours (when place details are on) |
menus | [{ "name": "Sample Menu", "price": "8000" }] (when place details are on) |
subwayStations / busStations | nearest stops with walk time (when place details are on) |
topPhotos | list of photo URLs (when place details are on) |
blogReviews | title, body, link, author, thumbnail (when place details are on) |
visitorReviews | rating, text, author, visit date, photos, keyword tags (when Include visitor reviews is on) |
searchKeyword | "만두집" (search mode only) |
In Incremental mode, every record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields, firstSeenAt and lastSeenAt; a normal run's records do not include these four fields.
How to Use
- Pick a mode:
search(enter keywords) orurl(paste Naver Map place or search URLs, including short naver.me links). - In search mode, enter one or more keywords, and turn on Include place details and Include visitor reviews for full records.
- Set Max records to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Basic keyword search (fast, list only):
{"mode": "search","keywords": ["만두집"],"includeDetails": false,"maxItems": 20}
Keyword search with full details and reviews:
{"mode": "search","keywords": ["강남 카페"],"includeDetails": true,"includeReviews": true,"maxReviews": 30,"maxItems": 50}
Place and search URLs:
{"mode": "url","startUrls": ["https://m.place.naver.com/restaurant/11724463/home","https://map.naver.com/p/search/서울 호텔"],"includeDetails": true,"maxItems": 40}
Recurring monitoring with Incremental mode:
{"mode": "search","keywords": ["만두집"],"includeDetails": true,"incrementalMode": true,"maxItems": 0}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/naver-map-scraper").call(run_input={"mode": "search", "keywords": ["강남 카페"], "includeDetails": True})for place in client.dataset(run["defaultDatasetId"]).iterate_items():print(place["name"], place["visitorReviewScore"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/naver-map-scraper').call({ mode: 'search', keywords: ['강남 카페'], includeDetails: true });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
What a keyword search actually returns
Naver serves each keyword's results as one server-rendered results page, and this actor reads that page directly. A keyword returns at most one page of results, typically a few dozen places (up to about 50), not the full count the site might report for a broad query. Max records trims this list further, or leaves it as-is at 0; it does not open additional pages. For broad coverage of one area, use several specific keywords, or add place URLs directly in url mode.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every place it already collected there, so you don't pay twice. - Incremental mode (
incrementalMode) is for scheduling this actor against the same search. State is remembered automatically, keyed on the search (mode, keywords or URLs, sort, search centre, and the detail and review toggles); a differentstateKeyvalue names or shares a monitoring baseline explicitly. Each place is classifiedNEW,UPDATED(withchangedFields),UNCHANGED(suppressed and not billed unlessemitUnchangedis on), or, once a run has fully scanned the tracked search withemitExpiredon,EXPIRED.REAPPEAREDcan only occur after that: a place must first have been markedEXPIREDby a previous complete,emitExpiredrun before a later sighting of it can classify asREAPPEARED. WithemitExpiredoff (the default), places are never marked gone, soREAPPEAREDwill not appear. With Incremental mode off entirely, output is exactly as a normal run. - Turning on
incrementalModetogether withresumeFromRunIdwhen that search already has saved incremental state stops the run with a message: remove one of the two, or set a differentstateKeyto start a separate campaign.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset itself is never changed.
What gets written to the connector: a condensed, human-readable summary of each place, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search runs the keywords entered below; url scrapes the pasted URLs instead. |
keywords | array | ["만두집"] | Search terms for search mode. Each keyword returns one results page from Naver, see "What a keyword search actually returns" above. |
sort | string | relevance | relevance, distance, or popular. Accepted, but not currently applied to search-mode results: results always follow Naver's own relevance ranking for the query. |
searchCoordinates | string | none (code falls back to central Seoul when omitted) | Map centre as "lat,lng". Currently recorded only for Incremental mode's state scope; it is not sent to Naver and does not change which places are returned. |
startUrls | array | none (prefill: one sample search URL) | Naver Map place or search URLs, including short naver.me links, for url mode. |
includeDetails | boolean | true | Fetch the full place page per result: menus, opening hours, facilities, payment options, exact coordinates, nearby subway and bus stops, photos, and blog reviews. One extra request per place. |
includeReviews | boolean | false | Collect paginated visitor (star) reviews per place, up to Max reviews per place. |
maxReviews | integer | 20 | Upper bound on visitor reviews collected per place when Include visitor reviews is on. 0 disables review collection. |
maxItems | integer | 20 | Stop after this many places across the whole run. 0 means no limit, still bounded by however many results each keyword's or URL's own results page contains. |
proxy | object | Apify Proxy, datacenter tier | Connection settings. |
maxResidentialMB | integer | 0 | Only applies when the proxy group is RESIDENTIAL; caps list and detail traffic, not visitor-review requests. After this many MB, the run auto-downgrades to the datacenter tier. 0 means no cap. |
resumeFromRunId | string | (none) | Continue one interrupted run: paste a previous run or dataset id to skip places already collected there. |
incrementalMode | boolean | false | Track this search across scheduled runs; classify each place against a saved baseline (see "Resume and recurring updates" above). |
stateKey | string | (none, auto-derived from the search and settings) | Name or share an incremental-mode baseline. |
emitUnchanged | boolean | false | Also return (and bill) places unchanged since the last run. |
emitExpired | boolean | false | Also return (and bill) places no longer found, only once a run fully scans the tracked search. |
mcpConnectors | array | (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which item pages are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"recordType": "place","id": "11724463","placeId": "11724463","name": "Sample Dumpling House","category": "Korean restaurant","businessCategory": "restaurant","placeUrl": "https://map.naver.com/p/entry/place/11724463","latitude": 37.5000,"longitude": 127.0000,"distance": null,"phone": "02-000-0000","virtualPhone": "0507-0000-0000","address": "Sample-dong 000-0","roadAddress": "Sample-ro 000","fullAddress": "Seoul Sample-gu Sample-dong 000-0","visitorReviewScore": 4.4,"visitorReviewCount": 128,"totalReviewCount": 340,"blogCafeReviewCount": 212,"imageUrls": ["https://example.com/photo-000.jpg"],"conveniences": ["Parking", "Wi-Fi"],"paymentInfo": ["Card", "Mobile pay"],"openingHours": { "status": "Open", "description": "11:00 - 21:00" },"menus": [{ "name": "Sample Menu", "price": "8000", "recommend": false, "images": [] }],"subwayStations": [{ "displayName": "Sample Station", "nearestExit": "3", "walkTime": 2, "walkingDistance": 130 }],"busStations": [{ "name": "Sample Stop", "walkTime": 1, "walkingDistance": 20 }],"topPhotos": ["https://example.com/photo-001.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": "만두집"}
Plan Requirement
The default connection setting (Apify Proxy on the datacenter tier) works without any extra configuration and is the recommended default for this source. A residential connection is optional and only useful if the default is ever blocked; pick the RESIDENTIAL group under Connection and set a residential traffic budget to cap the extra cost. Visitor reviews (Include visitor reviews) are always fetched over a residential connection, whatever you pick here, and that traffic is not counted against the residential traffic budget; leave reviews off for the lowest-cost run. Korean text in keywords, names, addresses, menus and reviews is fully supported in both input and output.
FAQ
How much does it cost?
You pay per record returned by this actor. The Pricing tab on the actor page shows the current rates. Use Max records to cap the size, and therefore the cost, of any run.
Is it legal to scrape Naver Map?
This actor collects only publicly available place data. You are responsible for how you use it: follow Naver's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Photos and user-submitted reviews may carry their own rights beyond the underlying facts.
Can I get only new or changed places on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then tags every place NEW, UPDATED or UNCHANGED against the previous run of the same search, and unchanged places are not returned or billed unless you also turn on Emit unchanged.
What is the difference between Resume and Incremental mode?
Resume from a previous run continues ONE interrupted crawl: paste a run or dataset id and this run skips every place it already collected. Incremental mode is for running the same search again and again on a schedule: it remembers the previous run itself, with no id to paste, and classifies every place as new, updated, unchanged, reappeared or expired. Turning on Incremental mode together with a resumeFromRunId that already has saved state for the same search stops the run with a message asking you to remove one of the two.
Why did my run fail instead of returning an empty dataset?
A run fails when Naver's place search could not be reached for any keyword and no place URLs were given to fall back on, when the resumeFromRunId you pasted cannot be read, or when Incremental mode and Resume are combined for a search that already has saved state. A search that genuinely matches nothing, or an Incremental mode run where nothing changed since last time, still succeeds, it just returns zero records.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more Naver data?
Pair this actor with these related scrapers from the same team:
| 🧩 Naver Land Scraper Scrape structured property listings from Naver Land map URLs. Extract listing titles... | 🛒 Naver Shopping Scraper Scrape Naver Shopping products by Korean or English keyword, or by URL. Returns 190+... |
| 🛒 DoorDash Scraper Extract structured doordash.com data at scale. Search by keyword or paste store URLs to... | 📇 2GIS From $1/1K. Extract business and place data from 2GIS.com at scale. Get names, addresses... |
| 🛒 GrabFood Restaurant Scraper Scrape GrabFood restaurants across Southeast Asia, including SG, MY, TH, VN, PH, ID, KH... | ✈️ Viator Scraper Collect Viator.com tour and activity results from destinations, categories, search pages... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.