{
  "openapi": "3.0.1",
  "info": {
    "title": "Naver Map Scraper — Korean Places, Phone & Menus",
    "description": "Scrape Korean local businesses from Naver Map by keyword, category+location, or place URL/ID. Returns name, category, address, coordinates, phone, review counts, hours, and menus. HTTP-only, MCP-ready.",
    "version": "0.1",
    "x-build-id": "7D9tvoaqrkatzJcyV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/khadinakbar~naver-map-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-khadinakbar-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/khadinakbar~naver-map-scraper/runs": {
      "post": {
        "operationId": "runs-sync-khadinakbar-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/khadinakbar~naver-map-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-khadinakbar-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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Free-text Naver Map searches, one place list per query (e.g. \"강남 맛집\", \"홍대 카페\", \"Gangnam hair salon\"). Korean queries return the richest results because Naver Map is a Korean service. Leave empty if you are using the Category + Location fields or Place URLs instead. This is NOT a place URL — put URLs in the Place URLs field.",
            "items": {
              "type": "string"
            }
          },
          "placeType": {
            "title": "Place type / category route",
            "enum": [
              "restaurant",
              "beauty"
            ],
            "type": "string",
            "description": "Which Naver category route to search. \"restaurant\" is the broadest and covers food, cafes, bakeries, bars, and desserts — use it for most keyword searches. Pick \"beauty\" for hair salons, nail, and skincare. Applies to Search queries and Category + Location; ignored for Place URLs.",
            "default": "restaurant"
          },
          "location": {
            "title": "Location (for Category + Location mode)",
            "type": "string",
            "description": "A Korean area, district, or landmark to search within (e.g. \"강남구\", \"제주도\", \"Seoul Hongdae\"). Combined with the Category field and Place type into one Naver search. Leave empty if you already provide full Search queries. Example: \"성수동\"."
          },
          "category": {
            "title": "Category keyword (optional, pairs with Location)",
            "type": "string",
            "description": "A category or business keyword appended to Location, such as \"카페\", \"치과\", \"pilates\". Only used when Location is set. Leave empty to search the Location alone. Example: \"치과\"."
          },
          "startUrls": {
            "title": "Place URLs or IDs",
            "type": "array",
            "description": "Direct Naver place URLs or numeric place IDs to look up individually (e.g. \"https://m.place.naver.com/restaurant/1188590985/home\" or \"1188590985\"). Each returns one place record with best-effort menu/detail enrichment. Use this for single-place lookups; use Search queries for discovery. naver.me short links cannot be resolved — paste the expanded URL.",
            "items": {
              "type": "string"
            }
          },
          "enrichDetails": {
            "title": "Enrich with menus & details",
            "type": "boolean",
            "description": "When on, each place is enriched via Naver's place API with menus (name + price), extra images, and amenities on top of the always-returned base record. Adds a small per-place charge and a little run time. Turn off for the fastest, cheapest list-only scrape. Enrichment is best-effort and degrades gracefully if Naver blocks the detail API.",
            "default": true
          },
          "maxPlaces": {
            "title": "Max places",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Hard cap on total places scraped (and billed) across all queries and URLs in this run. Prevents runaway cost. Defaults to 100; maximum 2000. One Naver keyword search server-renders roughly 50-70 places.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Naver Map is geo-sensitive and blocks non-Korean datacenter IPs, so this defaults to Apify Residential proxies pinned to South Korea (KR). Leave the default unless you know what you are doing — changing it usually lowers success rate.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "KR"
            }
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}