{
  "openapi": "3.0.1",
  "info": {
    "title": "Naver Place Review Scraper — Visitor & Blog Reviews",
    "description": "Naver Place Review Scraper for Korean businesses: search Naver Map by keyword or paste place links and get visitor reviews with stars, visit date, voted keywords and owner reply, plus Naver Blog and Cafe posts and a rating summary per place. Newest first, JSON or CSV.",
    "version": "0.0",
    "x-build-id": "EfbW2eWWl3K4h7bxI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~naver-place-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-naver-place-review-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/memo23~naver-place-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-naver-place-review-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/memo23~naver-place-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-naver-place-review-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": "Find places by keyword",
            "type": "array",
            "description": "What you would type into Naver Map's search box, one search per line, e.g. 강남 맛집 or 홍대 카페. The top places for each search are added to the run (see Places per keyword). Leave empty to use only the place links below.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxPlacesPerKeyword": {
            "title": "Places per keyword",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many of the top results to take from each keyword search, 1-50. Default 5. Runs on Apify's free plan take 2.",
            "default": 5
          },
          "placeUrls": {
            "title": "Place links or IDs",
            "type": "array",
            "description": "One place per line: a link from map.naver.com (/p/entry/place/<id>), pcmap.place.naver.com, m.place.naver.com or place.naver.com, or just the numeric place ID, e.g. 11571707. naver.me short links are skipped because they hide the ID; open them once and copy the full link. With no links and no keywords the actor runs on Gyeongbokgung Palace (11571707) as a demo.",
            "items": {
              "type": "string"
            }
          },
          "includeReviewStats": {
            "title": "Add a rating summary row per place",
            "type": "boolean",
            "description": "On (default): one extra row per place (reviewType place_stats) with the average rating, how many reviews gave each half-star score, and the keywords visitors voted for most. Summary rows are not billed.",
            "default": true
          },
          "includeBlogReviews": {
            "title": "Add Naver Blog and Cafe posts",
            "type": "boolean",
            "description": "On (default): also returns the Naver Blog and Naver Cafe posts that Naver lists on each place, one row each (reviewType blog) with title, text, link, author and date. Each post row is billed like a visitor review.",
            "default": true
          },
          "maxBlogReviewPages": {
            "title": "Blog pages per place (10 posts each)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Caps the blog posts kept per place in pages of 10, 1-100: 2 keeps up to 20 posts. Default 10. Naver itself only lists a limited number of posts per place. Runs on Apify's free plan keep 1 page.",
            "default": 10
          },
          "reviewSort": {
            "title": "Visitor review order",
            "enum": [
              "NEWEST",
              "RANKING"
            ],
            "type": "string",
            "description": "NEWEST (default): most recent reviews first, the right choice for monitoring. RANKING: the order Naver shows a visitor by default. Matters when you cap the count, because the cap keeps the first reviews in this order.",
            "default": "NEWEST"
          },
          "maxReviewPages": {
            "title": "Visitor review pages per place (50 each)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Visitor reviews are read 50 at a time. 1 page is about 50 reviews per place, 20 pages about 1,000. Reading stops early when a place runs out. Default 1. Not used when Visitor reviews per place is set. Runs on Apify's free plan read 1 page.",
            "default": 1
          },
          "maxReviews": {
            "title": "Visitor reviews per place (exact cap)",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "An exact number of visitor reviews per place, e.g. 120, instead of whole pages. When set, it replaces the page count above. Empty (default): the page count decides. Runs on Apify's free plan stop at 10."
          },
          "includeReviewPhotos": {
            "title": "Add photo links to visitor reviews",
            "type": "boolean",
            "description": "Off (default): each visitor review row has reviewPhotoCount only. On: reviewPhotos also lists the URLs of the images the visitor attached.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Places at once",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many places are scraped at the same time, 1-10. Default 5. Higher finishes long lists sooner; Naver is more likely to refuse requests at high values without a residential proxy.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: Apify Proxy. When no proxy group is picked, the actor uses the residential group, because Naver throttles datacenter traffic. You can choose another group or enter your own proxy URLs.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}