{
  "openapi": "3.0.1",
  "info": {
    "title": "Naver Shopping Scraper",
    "description": "Scrape Naver Shopping products by keyword or search URL: price, discount, rating, reviews, store, delivery, category. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "2cSEAWatqupJupBmF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~naver-shopping-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-naver-shopping-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/nice_dev~naver-shopping-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-naver-shopping-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/nice_dev~naver-shopping-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-naver-shopping-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": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "Naver Shopping search URLs (`https://search.shopping.naver.com/ns/search?query=노트북&sort=REVIEW`): the keyword, the sort order and the filters the Actor understands in the URL are kept, pagination is automatic. When this list is not empty, **Search keyword** and **More search keywords** are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Free-text search, exactly as typed on Naver Shopping. Korean keywords return far more products than English ones (e.g. `노트북` rather than `laptop`)."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword. Added to **Search keyword**; products found by several searches are saved once.",
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "default": []
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of products to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max products per search",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Cap for EACH search (keyword or search URL), so that the first search cannot use up the whole **Max products** budget. 0 = no per-search cap.",
            "default": 0
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "REL",
              "LOW_PRICE",
              "HIGH_PRICE",
              "REVIEW",
              "RECENT",
              "PURCHASE"
            ],
            "type": "string",
            "description": "Order of the search results, as on Naver Shopping. Each order reaches a different set of products (Naver shows at most 10,000 products per search and per order). `Newest` reaches only the recent products, a much shorter list than the other orders (about 15,000 instead of 3 million for 노트북).",
            "default": "REL"
          },
          "combineSorts": {
            "title": "Go beyond 10,000 products per keyword",
            "type": "boolean",
            "description": "Naver stops a search at 10,000 products. When a search reaches that limit before your caps, the Actor reads the same keyword again in the other sort orders, one after the other, and keeps only the products not seen yet. With a **Max price** the Lowest price order is read right after your own sort order and, once it passes your price, nothing more is read (likewise **Min price** with Highest price). Each product is still saved only once, even when several orders find it.",
            "default": true
          },
          "brandIds": {
            "title": "Brand IDs",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Only products of these Naver brand numbers (Naver's own brand filter, sent to Naver). The number is the `brandIds` value of a filtered Naver Shopping URL.",
            "items": {
              "type": "string",
              "pattern": "^\\s*\\d{1,12}\\s*$"
            },
            "default": []
          },
          "makerIds": {
            "title": "Manufacturer IDs",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Only products of these Naver manufacturer numbers (Naver's own manufacturer filter, sent to Naver). The number is the `makerIds` value of a filtered Naver Shopping URL.",
            "items": {
              "type": "string",
              "pattern": "^\\s*\\d{1,12}\\s*$"
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price (KRW)",
            "minimum": 0,
            "maximum": 10000000000,
            "type": "integer",
            "description": "Only products from this price in Korean won, read on the price after discount. With the **Highest price** order, the search stops once a whole results page is clearly below it."
          },
          "maxPrice": {
            "title": "Max price (KRW)",
            "minimum": 0,
            "maximum": 10000000000,
            "type": "integer",
            "description": "Only products up to this price in Korean won, read on the price after discount. With the **Lowest price** order, the search stops once a whole results page is clearly above it."
          },
          "categories": {
            "title": "Categories",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Only products in one of these Naver Shopping categories, at any level: the category number (`50000151`) or its Korean name (`노트북`, `화장품/미용`). Empty = all categories.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "minRating": {
            "title": "Min rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Only products rated at least this (out of 5). 4.8 or more also uses Naver's own 'rating 4.8+' filter. Products without reviews are left out."
          },
          "minReviews": {
            "title": "Min reviews",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Only products with at least this many reviews."
          },
          "freeDeliveryOnly": {
            "title": "Free delivery only",
            "type": "boolean",
            "description": "Only products shipped for free.",
            "default": false
          },
          "fastDeliveryOnly": {
            "title": "Fast delivery only",
            "type": "boolean",
            "description": "Only products with Naver's fast delivery (same-day delivery or a guaranteed arrival date).",
            "default": false
          },
          "brandStoresOnly": {
            "title": "Brand stores only",
            "type": "boolean",
            "description": "Only products sold in an official Naver Brand Store.",
            "default": false
          },
          "certifiedStoresOnly": {
            "title": "Certified stores only",
            "type": "boolean",
            "description": "Only products of stores certified by Naver (official mall, certified mall).",
            "default": false
          },
          "privateSellersOnly": {
            "title": "Individual sellers only",
            "type": "boolean",
            "description": "Only products sold by individuals (not by a registered business).",
            "default": false
          },
          "excludeIndividualSellers": {
            "title": "Exclude individual sellers",
            "type": "boolean",
            "description": "Drop the products sold by individuals: businesses only.",
            "default": false
          },
          "excludeOverseas": {
            "title": "Exclude overseas products",
            "type": "boolean",
            "description": "Drop the products shipped from abroad (direct purchase).",
            "default": false
          },
          "stores": {
            "title": "Stores",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Only products of these stores: store name as shown on Naver, store ID (`hanloven`) or store address (`samsung_mall`, `https://smartstore.naver.com/samsung_mall`). With the `rank` field, this tracks where a store sits for a keyword.",
            "items": {
              "type": "string",
              "maxLength": 200
            },
            "default": []
          },
          "targetProductIds": {
            "title": "Product IDs to track",
            "maxItems": 500,
            "uniqueItems": true,
            "type": "array",
            "description": "Only these products: Naver product number (`nvMid`, the `id` field) or store product number (`productId`). With the `rank` field, this tracks where your product sits for a keyword.",
            "items": {
              "type": "string",
              "pattern": "^\\s*\\d{1,20}\\s*$"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the products whose title contains one of these words (case ignored).",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "onlyNew": {
            "title": "Only new products",
            "type": "boolean",
            "description": "Skip the products that a previous run (same **Memory key**) already delivered: they are not saved and not charged. First run = everything is new.",
            "default": false
          },
          "includePriceChanges": {
            "title": "Also products whose price changed (paid option)",
            "type": "boolean",
            "description": "With **Only new products**: also return the products already delivered whose price went up or down since the last run, with the previous price, the change in % and the price history of your runs. Charged per changed product (event `price-change`).",
            "default": false
          },
          "minPriceChangePercent": {
            "title": "Minimum price change (%)",
            "minimum": 0,
            "maximum": 90,
            "type": "number",
            "description": "With **Also products whose price changed**: a product comes back only if its price after discount moved by at least this many % since the last time it was delivered. Under this %, the move is neither returned nor charged. 0 = every change, down to 1 won.",
            "default": 1
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new products**. Give each schedule / task its own key (e.g. `laptops-daily`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every product again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the site in any 60 seconds, all of them counted: every results page of 100 products. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 120
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. The default 400 means at most 150 requests a minute; Naver turns away an address that sends about 2 requests a second without a pause. 0 = no gap.",
            "default": 400
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}