{
  "openapi": "3.0.1",
  "info": {
    "title": "Naver Map Scraper - Places, Reviews, Menus, Photos & Phones",
    "description": "Scrape Naver Map (Korea) places by keyword, area or link: phone, address, coordinates, hours, menus with prices, website, Instagram, rating and review counts, plus visitor reviews, blog reviews and photos. Area sweep past 300. From $0.40 per 1,000 places, no start fee.",
    "version": "0.1",
    "x-build-id": "iyvIlfSk2WpuruaDj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/topapi~naver-map-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-topapi-naver-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/topapi~naver-map-scraper/runs": {
      "post": {
        "operationId": "runs-sync-topapi-naver-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/topapi~naver-map-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-topapi-naver-map-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "searchKeywords": {
            "title": "🔎 Search keywords",
            "type": "array",
            "description": "What you would type into Naver Map, e.g. \"강남 맛집\", \"홍대 카페\", \"부산 호텔\", \"서초구 치과\". Korean gives the richest results; English works too. Naver serves up to 300 places per keyword - use an area sweep below for more.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "🔗 Place links or ids",
            "type": "array",
            "description": "Naver Map place links (map.naver.com/p/entry/place/1501340733), m.place / pcmap.place links, short naver.me links, bare place ids, or a Naver Map search link (runs as a keyword).",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerKeyword": {
            "title": "Max places per keyword",
            "minimum": 0,
            "type": "integer",
            "description": "Places to deliver per keyword (or per area sweep). Naver serves 300 per keyword; an area sweep goes past that. 0 = no limit.",
            "default": 100
          },
          "maxItems": {
            "title": "Max places in total",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on places for the whole run, across all keywords and links. 0 = no cap."
          },
          "searchCoordinates": {
            "title": "📍 Search around a point",
            "type": "string",
            "description": "\"latitude,longitude\", e.g. \"37.4979,127.0276\" (Gangnam Station). Naver ranks places around it and adds each place's distance. With a radius below, it is the centre of an area sweep."
          },
          "searchRadiusKm": {
            "title": "Area sweep radius (km)",
            "minimum": 0,
            "maximum": 20,
            "type": "number",
            "description": "With search coordinates: collect every matching place within this radius (max 20 km). Dense areas are split into smaller cells until each is under Naver's 300 cap."
          },
          "boundingBox": {
            "title": "Area sweep box",
            "type": "string",
            "description": "Instead of a radius: two corners as four numbers, e.g. \"37.49,127.02,37.51,127.04\" (lat,lng,lat,lng). Every matching place inside is collected."
          },
          "sortBy": {
            "title": "Sort",
            "enum": [
              "relevance",
              "distance",
              "reviews",
              "saved"
            ],
            "type": "string",
            "description": "Naver's ranking. Nearest ranks from the search coordinates (or the area the keyword names). Most saved and most reviewed apply to restaurants and cafes.",
            "default": "relevance"
          },
          "businessType": {
            "title": "Business type",
            "enum": [
              "place",
              "restaurant",
              "cafe",
              "hospital",
              "hairshop",
              "beauty",
              "accommodation",
              "attraction",
              "pharmacy",
              "pet"
            ],
            "type": "string",
            "description": "Optional: narrow the search to one of Naver's place types."
          },
          "openNow": {
            "title": "Open now",
            "type": "boolean",
            "description": "Only places open right now (Korea time). Restaurants, cafes, clinics."
          },
          "open24h": {
            "title": "Open 24 hours",
            "type": "boolean",
            "description": "Only places open around the clock (restaurants; clinics with 24-hour care)."
          },
          "delivery": {
            "title": "Delivery",
            "type": "boolean",
            "description": "Only places that deliver. Restaurants."
          },
          "takeout": {
            "title": "Takeout",
            "type": "boolean",
            "description": "Only places offering takeaway. Restaurants."
          },
          "acceptsReservations": {
            "title": "Takes reservations",
            "type": "boolean",
            "description": "Only places bookable through Naver (restaurants, clinics, salons)."
          },
          "naverPay": {
            "title": "Naver Pay",
            "type": "boolean",
            "description": "Only places accepting Naver Pay."
          },
          "hasCoupon": {
            "title": "Has a coupon",
            "type": "boolean",
            "description": "Only places with a current Naver coupon."
          },
          "newlyOpened": {
            "title": "Newly opened",
            "type": "boolean",
            "description": "Only places Naver marks as newly opened."
          },
          "wheelchairAccessible": {
            "title": "Wheelchair entrance",
            "type": "boolean",
            "description": "Only places with a step-free entrance."
          },
          "michelinOnly": {
            "title": "Michelin Guide only",
            "type": "boolean",
            "description": "Only places listed in the Michelin Guide."
          },
          "menuKeyword": {
            "title": "Menu keyword",
            "type": "string",
            "description": "Only places whose menu matches this word, e.g. \"피자\" (pizza). Restaurants and cafes."
          },
          "extraFilters": {
            "title": "Other Naver filters",
            "type": "object",
            "description": "Advanced: any other Naver list filter as key/value, e.g. {\"department\": \"피부과\"} for clinics or {\"filterSpecialist\": \"true\"}."
          },
          "includeDetails": {
            "title": "📋 Place details",
            "type": "boolean",
            "description": "Adds the place page's record: opening hours by day (breaks, last order), full menu with prices, homepage / Instagram / blog links, amenities, parking, payment methods, description, keywords, subway and bus access, review statistics and themes, Michelin, TV appearances, booking link. Charged as place-details.",
            "default": true
          },
          "includeEnglish": {
            "title": "English names and addresses",
            "type": "boolean",
            "description": "Adds nameEn, categoryEn, addressEn - Naver's own English versions - next to the Korean fields. No extra charge."
          },
          "includeReviews": {
            "title": "⭐ Visitor reviews",
            "type": "boolean",
            "description": "One row per visitor review: text, rating, author, visit and write dates, voted keywords, visit tags, photos, owner reply, receipt check. Charged per review."
          },
          "maxReviewsPerPlace": {
            "title": "Max reviews per place",
            "minimum": 0,
            "type": "integer",
            "description": "Visitor reviews per place (Naver serves 50 a page with no upper limit).",
            "default": 50
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "newest",
              "recommended"
            ],
            "type": "string",
            "description": "Newest first lets a schedule or a date limit stop early.",
            "default": "newest"
          },
          "reviewsSince": {
            "title": "Reviews since",
            "type": "string",
            "description": "Only reviews (and blog reviews) written on or after this day, e.g. 2026-09-01."
          },
          "onlyNewReviews": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "For scheduled runs: reviews an earlier run with the same input (or the same monitoring state key) already returned are skipped - not returned, not charged."
          },
          "includeBlogReviews": {
            "title": "📝 Blog and cafe reviews",
            "type": "boolean",
            "description": "One row per Naver Blog / Cafe post about the place: title, text excerpt, author, date, link, thumbnails, 내돈내산 flag. Naver shows about 100 per place. Charged per post."
          },
          "maxBlogReviewsPerPlace": {
            "title": "Max blog reviews per place",
            "minimum": 0,
            "type": "integer",
            "description": "Blog / cafe posts per place.",
            "default": 20
          },
          "onlyOwnMoneyBlogReviews": {
            "title": "Only self-paid (내돈내산) blog reviews",
            "type": "boolean",
            "description": "Naver's own filter for posts the writer paid for themselves (not sponsored)."
          },
          "includePhotos": {
            "title": "📷 Photos",
            "type": "boolean",
            "description": "One row per photo or video: full-size URL, size, source (owner, visitor review, clip), author, date. Charged per photo."
          },
          "maxPhotosPerPlace": {
            "title": "Max photos per place",
            "minimum": 0,
            "type": "integer",
            "description": "Photos per place.",
            "default": 20
          },
          "photoSource": {
            "title": "Photo source",
            "enum": [
              "all",
              "business",
              "visitor",
              "clip"
            ],
            "type": "string",
            "description": "Which photos to collect.",
            "default": "all"
          },
          "withPhoneOnly": {
            "title": "Only places with a phone",
            "type": "boolean",
            "description": "Skip places with no phone number (own or Naver's 0507 virtual number)."
          },
          "withWebsiteOnly": {
            "title": "Only places with a website",
            "type": "boolean",
            "description": "Skip places with no homepage, Instagram or blog link. Reads the place details (charged as place-details on the places kept)."
          },
          "minRating": {
            "title": "Minimum rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Skip places whose visitor rating is below this (0-5). Places without a rating are skipped too."
          },
          "minReviews": {
            "title": "Minimum visitor reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Skip places with fewer visitor reviews."
          },
          "addressContains": {
            "title": "Address must contain",
            "type": "array",
            "description": "Keep only places whose address contains one of these, e.g. \"역삼동\" or \"강남구\". Naver pads a district search with places from neighbouring areas; this drops them before the charge.",
            "items": {
              "type": "string"
            }
          },
          "categoryContains": {
            "title": "Category must contain",
            "type": "array",
            "description": "Keep only places whose Naver category contains one of these, e.g. \"카페\", \"치과\".",
            "items": {
              "type": "string"
            }
          },
          "monitoringMode": {
            "title": "Monitoring mode",
            "type": "boolean",
            "description": "Later runs with the same input return only places that are new or changed (name, category, address, phone, homepage, hours, menu) since the last run, with changeType and changedFields. Review counts and \"open now\" are ignored."
          },
          "emitUnchanged": {
            "title": "Also return unchanged places",
            "type": "boolean",
            "description": "In monitoring mode, return unchanged places too (charged)."
          },
          "monitoringStateKey": {
            "title": "Monitoring state key",
            "type": "string",
            "description": "Optional name for the remembered state (default: derived from the input). Use one key per tracked list."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Naver answers without a proxy; a proxy you set is tried first."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Requests to Naver at the same time. The actor slows down by itself when Naver asks it to (HTTP 429).",
            "default": 8
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}