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

1

Bookmarked

13

Total users

1

Monthly active users

18 days ago

Last modified

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.

FieldExample
name"Sample Dumpling House"
category / businessCategory"Korean restaurant" / "restaurant"
placeId / id"11724463"
placeUrl"https://map.naver.com/p/entry/place/11724463"
latitude / longitude37.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"
visitorReviewScore4.4
visitorReviewCount / totalReviewCount / blogCafeReviewCount128 / 340 / 212
distancedistance from the search centre, when returned by the source
imageUrls / imageCountlist of photo URLs / photo count
conveniences["Parking", "Wi-Fi"] (when place details are on)
paymentInfo["Card", "Mobile pay"] (when place details are on)
openingHoursstructured hours (when place details are on)
menus[{ "name": "Sample Menu", "price": "8000" }] (when place details are on)
subwayStations / busStationsnearest stops with walk time (when place details are on)
topPhotoslist of photo URLs (when place details are on)
blogReviewstitle, body, link, author, thumbnail (when place details are on)
visitorReviewsrating, 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

  1. Pick a mode: search (enter keywords) or url (paste Naver Map place or search URLs, including short naver.me links).
  2. In search mode, enter one or more keywords, and turn on Include place details and Include visitor reviews for full records.
  3. Set Max records to control run size and cost, then click Start.
  4. 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 ApifyClient
client = 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 different stateKey value names or shares a monitoring baseline explicitly. Each place is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), or, once a run has fully scanned the tracked search with emitExpired on, EXPIRED. REAPPEARED can only occur after that: a place must first have been marked EXPIRED by a previous complete, emitExpired run before a later sighting of it can classify as REAPPEARED. With emitExpired off (the default), places are never marked gone, so REAPPEARED will not appear. With Incremental mode off entirely, output is exactly as a normal run.
  • Turning on incrementalMode together with resumeFromRunId when that search already has saved incremental state stops the run with a message: remove one of the two, or set a different stateKey to 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.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you have not authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to 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

ParameterTypeDefaultDescription
modestringsearchsearch runs the keywords entered below; url scrapes the pasted URLs instead.
keywordsarray["만두집"]Search terms for search mode. Each keyword returns one results page from Naver, see "What a keyword search actually returns" above.
sortstringrelevancerelevance, distance, or popular. Accepted, but not currently applied to search-mode results: results always follow Naver's own relevance ranking for the query.
searchCoordinatesstringnone (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.
startUrlsarraynone (prefill: one sample search URL)Naver Map place or search URLs, including short naver.me links, for url mode.
includeDetailsbooleantrueFetch 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.
includeReviewsbooleanfalseCollect paginated visitor (star) reviews per place, up to Max reviews per place.
maxReviewsinteger20Upper bound on visitor reviews collected per place when Include visitor reviews is on. 0 disables review collection.
maxItemsinteger20Stop 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.
proxyobjectApify Proxy, datacenter tierConnection settings.
maxResidentialMBinteger0Only 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.
resumeFromRunIdstring(none)Continue one interrupted run: paste a previous run or dataset id to skip places already collected there.
incrementalModebooleanfalseTrack this search across scheduled runs; classify each place against a saved baseline (see "Resume and recurring updates" above).
stateKeystring(none, auto-derived from the search and settings)Name or share an incremental-mode baseline.
emitUnchangedbooleanfalseAlso return (and bill) places unchanged since the last run.
emitExpiredbooleanfalseAlso return (and bill) places no longer found, only once a run fully scans the tracked search.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which item pages are created.
maxNotifyListingsinteger50Cap 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.

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...

👉 Browse all abotapi scrapers

💬 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.