{
  "openapi": "3.0.1",
  "info": {
    "title": "Oliveyoung Review Scraper — K-Beauty, No 100 Cap [💰 $3/1K]",
    "description": "Scrape Olive Young reviews from both stores — Korea (oliveyoung.co.kr) and Olive Young Global. Goes past the 100-review page cap: 500 per sort on the Korean store, thousands on Global. 20+ fields: text, rating, date, photos, repurchase flags, helpful votes, reviewer skin profile in English.",
    "version": "0.1",
    "x-build-id": "bBlCBFh8LvbysxSqe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cocomoon~oliveyoung-review-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cocomoon-oliveyoung-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/cocomoon~oliveyoung-review-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cocomoon-oliveyoung-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/cocomoon~oliveyoung-review-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cocomoon-oliveyoung-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",
        "required": [
          "products"
        ],
        "properties": {
          "products": {
            "title": "Products",
            "type": "array",
            "description": "Product numbers or product page URLs from either store — mix them freely.<br><b>Korean store</b> (oliveyoung.co.kr): <code>A000000262413</code> or a URL with <code>goodsNo=...</code> — also the <code>goodsNo</code> field of my <a href='https://apify.com/cocomoon/oliveyoung-scraper' target='_blank'>Olive Young Scraper</a>.<br><b>Global store</b> (global.oliveyoung.com): <code>GA230518746</code> or a URL with <code>prdtNo=...</code> — also the <code>productNo</code> field of my <a href='https://apify.com/cocomoon/oliveyoung-global-scraper' target='_blank'>Olive Young Global Scraper</a>.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "DATETIME_DESC",
              "USEFUL_SCORE_DESC",
              "RECOMMENDED_DESC",
              "RATING_DESC",
              "RATING_ASC",
              "DATETIME_ASC"
            ],
            "type": "string",
            "description": "Order in which reviews are collected (same options as the Olive Young site). On the Global store, \"Most useful\" and \"Most helpful votes\" are both the site's \"Most Helpful\" sort.",
            "default": "DATETIME_DESC"
          },
          "reviewType": {
            "title": "Review filter",
            "enum": [
              "ALL",
              "PHOTO",
              "MONTHLY",
              "REPURCHASE"
            ],
            "type": "string",
            "description": "Collect all reviews, or only photo reviews, one-month-use reviews, or repurchase reviews. The one-month-use and repurchase filters exist on the Korean store only — Global store products are skipped when one of them is selected.",
            "default": "ALL"
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "type": "integer",
            "description": "Cap the number of reviews collected for each product. Korean store: Olive Young requires a login beyond the first 500 reviews of each sort/filter combination, so one run returns at most 500 per product there unless you turn on <b>Deep collect</b> below. Global store: no such limit found.",
            "default": 100
          },
          "maxItems": {
            "title": "Max reviews in total",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of reviews to scrape across all products.",
            "default": 1000
          },
          "deepCollect": {
            "title": "Deep collect (Korean store): go past 500 reviews per product",
            "type": "boolean",
            "description": "Olive Young's Korean store shows only the first 500 reviews of each sort order without login. Turn this on and the Actor walks the product through all five sort orders (and, when the filter is \"All reviews\", the photo / one-month-use / repurchase filters), removes duplicates and returns every unique review it finds — about 1,500–1,800 for a product with tens of thousands of reviews. Your chosen sort runs first; each row's <code>sortBy</code> shows which sort it came from. Raise <b>Max reviews per product</b> above 500 to benefit. No effect on Global store products, which have no such limit.",
            "default": false
          },
          "since": {
            "title": "Only reviews since (new reviews only)",
            "type": "string",
            "description": "Collect only reviews written on or after this point, newest first, and stop paging as soon as older reviews appear — ideal for scheduled runs. A date <code>2026-10-01</code>, a period counted back from today in Korean time (<code>1d</code>, <code>7d</code>, <code>2w</code>, <code>1m</code>), or <code>lastRun</code> = only reviews newer than what the previous run of this Actor returned for the product (the Actor remembers the newest review of each product between runs). Leave empty to collect from the top of the chosen sort. When set, Sort and Deep collect are ignored."
          },
          "includeProductStats": {
            "title": "Include product rating stats",
            "type": "boolean",
            "description": "Add the product's total review count, average rating and 1–5 star distribution to every review (one extra request per product).",
            "default": true
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Olive Young's review API blocks most datacenter IPs after a few requests, so the default is Apify <b>residential proxy located in Korea</b> — tested to pass reliably. Keep it unless you have your own Korean proxies.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}