{
  "openapi": "3.0.1",
  "info": {
    "title": "YesStyle Scraper - K-Beauty, Fashion, Prices & Reviews",
    "description": "Scrape YesStyle products by keyword or URL. Extract prices, discounts, ratings, stock, images, categories, variants and customer reviews across K-beauty, fashion and lifestyle. Incremental mode tracks daily changes.",
    "version": "1.0",
    "x-build-id": "14gy72cd31NdGJIj7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~yesstyle-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-yesstyle-com-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/abotapi~yesstyle-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-yesstyle-com-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/abotapi~yesstyle-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-yesstyle-com-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Choose 'search' to run one or more keywords through YesStyle's own search, or 'url' to scrape pasted links: product pages, browse (list.html) pages and search pages are all accepted.",
            "default": "search"
          },
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Only used when mode = search, ignored in url mode. One or more keywords, for example sheet mask, anua serum, korean dress.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort keywords by",
            "enum": [
              "bestsellers",
              "new_arrivals",
              "price_low_high",
              "price_high_low",
              "best_value",
              "availability",
              "discount_high_low"
            ],
            "type": "string",
            "description": "Search mode only. Sort order applied to keyword searches, using the store's own sort codes. Pasted links in URL mode always keep their own ordering.",
            "default": "bestsellers"
          },
          "urls": {
            "title": "YesStyle links",
            "type": "array",
            "description": "Only used when mode = url, ignored in search mode. Paste product page links, browse links (brand/category listings) or search links from yesstyle.com.",
            "default": [
              "https://www.yesstyle.com/en/aplb-glutathione-niacinamide-sheet-mask-25ml/info.html/pid.1124536886",
              "https://www.yesstyle.com/en/info.html/pid.1124536886",
              "https://www.yesstyle.com/en/list.html?q=sheet+mask",
              "https://www.yesstyle.com/en/list.html?q=sheet+mask&bpt=48&sb=141&pn=2",
              "https://www.yesstyle.com/zh-CN/list.html?q=serum",
              "https://www.yesstyle.com/en/beauty-sheet-masks/list.html/bcc.15554_bpt.46",
              "https://www.yesstyle.com/en/beauty-sheet-masks/list.html/bcc.15554_bpt.46?pn=2&sb=158",
              "https://www.yesstyle.com/en/anua/list.html/bpt.299_bid.325602"
            ],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price",
            "type": "string",
            "description": "Both modes. Keep only products priced at or above this value (in the storefront currency your run reads). Leave empty for no lower bound."
          },
          "maxPrice": {
            "title": "Maximum price",
            "type": "string",
            "description": "Both modes. Keep only products priced at or below this value. Leave empty for no upper bound."
          },
          "featured": {
            "title": "Featured collections",
            "type": "array",
            "description": "Both modes. Keep only products inside the store's own featured collections, such as Vegan, Cruelty-free, Clearance or Flash Sales. Pick several to require all of them. Leave empty for no collection filter.",
            "items": {
              "type": "string",
              "enum": [
                "81",
                "112",
                "80",
                "10",
                "55",
                "1",
                "53",
                "40",
                "23",
                "110",
                "61",
                "91",
                "12",
                "13",
                "70",
                "102",
                "96",
                "84",
                "85",
                "2",
                "30",
                "108",
                "22",
                "33",
                "32",
                "67"
              ],
              "enumTitles": [
                "Trending New",
                "Weekly Hero",
                "New Picks",
                "New Items 24-hr Sale",
                "New In This Week",
                "Just Arrived",
                "Hot Trends",
                "Top Picks",
                "Flash Sales",
                "Mini-Size Exclusives",
                "Value & Gift Sets",
                "Twin Packs & Bundle Sets",
                "South Korean Brands",
                "Japanese Brands",
                "Chinese Cosmetics",
                "Southeast Asian Beauty",
                "Western Beauty",
                "C-Beauty Picks",
                "C-Beauty Sale",
                "In-stock Items",
                "Clearance",
                "Rock-Bottom Prices",
                "Cruelty-free",
                "Vegan",
                "Mini & Travel Sizes",
                "Warehouse Sale"
              ]
            }
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Both modes. Keep only products the product page marks as in stock. Needs Fetch product details enabled.",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch product details",
            "type": "boolean",
            "description": "Read each product's own page for the description, availability, condition, selected variant, full image set and category trail. Costs one Detail enrichment unit per product returned.",
            "default": true
          },
          "fetchReviews": {
            "title": "Fetch customer reviews",
            "type": "boolean",
            "description": "Attach the product's customer reviews to its record as a nested list. Costs one Review enrichment unit per review attached. Reviews are only read for products actually returned.",
            "default": true
          },
          "reviewSort": {
            "title": "Review sort",
            "enum": [
              "relevant",
              "newest",
              "highest",
              "helpful"
            ],
            "type": "string",
            "description": "Both modes. Which reviews come first, using the store's own review orderings.",
            "default": "relevant"
          },
          "reviewFilter": {
            "title": "Review filter",
            "enum": [
              "all",
              "five_star",
              "four_star",
              "three_star",
              "two_star",
              "one_star",
              "positive",
              "negative",
              "photo",
              "video"
            ],
            "type": "string",
            "description": "Both modes. Which reviews the store includes, using its own review filters.",
            "default": "all"
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "maximum": 1000,
            "type": "integer",
            "description": "Both modes. Stop reading a product's reviews after this many. Use 0 to read every review the store returns for the product, up to 1000 per product.",
            "default": 20
          },
          "maxItems": {
            "title": "Max products",
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many products. The run ends cleanly once the cap is reached. Values of 0 or above 100000 are treated as 100000.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per listing",
            "type": "integer",
            "description": "Walk at most this many result pages per keyword or listing. Leave empty or 0 for the built-in limit of 1000 pages."
          },
          "proxy": {
            "title": "Connection",
            "type": "object",
            "description": "Apify Proxy is enabled by default on the residential pool, which reads the store most cleanly; datacenter exits read most pages, but some exits get a refusal page and the request is retried on a fresh exit. The exit country decides the regional storefront and currency (US default)."
          },
          "resumeFromRunId": {
            "title": "Resume from run ID",
            "type": "string",
            "description": "Continue an interrupted run: paste a previous run's ID (or a dataset ID) from this account and every product it already collected is skipped."
          },
          "incrementalMode": {
            "title": "Incremental mode",
            "type": "boolean",
            "description": "Track the same search or links across scheduled runs and return only what changed: NEW, UPDATED, UNCHANGED (suppressed by default), REAPPEARED and EXPIRED products. The first run for a scope reports everything as NEW. UPDATED is decided by comparing the product's fields (price, original price, discount, availability, rating, review count, badges, descriptions, images and so on) with the last run; excluded from the comparison because they move without the product changing: scrape time, USD figures, bestseller ranks, deal-claimed percent, YesStyler count, brand statistics, shipping offer, delivery estimate, search keywords, review summary and search rank. Individual reviews are not compared; a new review shows up through the rating and review count. Edit the exclusions in Ignore fields.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Optional name for the incremental baseline. Runs sharing a state key share one baseline; leave empty to derive it from the search configuration automatically."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products",
            "type": "boolean",
            "description": "Also return products that did not change since the last incremental run (changeType UNCHANGED) instead of suppressing them.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products",
            "type": "boolean",
            "description": "After a complete scan, also return tracked products that are no longer in the results (changeType EXPIRED).",
            "default": false
          },
          "changeScope": {
            "title": "Change scope (incremental mode only)",
            "enum": [
              "all",
              "priceAndStock"
            ],
            "type": "string",
            "description": "What counts as a change in incremental mode. All fields (default): any product-level change except volatile fields (USD figures, rankings, shipping offer, search keywords, review summary) marks a product UPDATED. Price and availability only: just price, original price, discount, currency, availability, item status and the sellable flag mark UPDATED; description, images, badges and ratings never do.",
            "default": "all"
          },
          "compactUpdates": {
            "title": "Compact updated rows (incremental mode only)",
            "type": "boolean",
            "description": "Return UPDATED and EXPIRED rows as slim rows with ids, link, name, current price and availability, priceChanges (old and new values) and variantChanges (always an empty list, because YesStyle lists every variant as its own product). NEW rows stay complete. Compact rows carry no reviews or detail data, so no review or detail-enrichment charge applies to them.",
            "default": false
          },
          "expireAfterMissedScans": {
            "title": "Expire after missed scans (incremental mode only)",
            "minimum": 1,
            "type": "integer",
            "description": "With Emit expired products, mark a product EXPIRED only after it was missing from this many complete scans in a row (default 1). EXPIRED means the product is no longer in the results; it does not prove the product is unavailable, check availability for that.",
            "default": 1
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Advanced. Field names whose changes alone should not mark a product UPDATED (for example badges). Use a dotted path such as bundles.bundlePrice to ignore one key inside list items. The record's other fields still fingerprint normally.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "MCP connectors",
            "type": "array",
            "description": "Optional MCP connector IDs. Each returned product is also sent to the connector (for example a Notion database).",
            "items": {
              "type": "string"
            }
          },
          "notionParentPageUrl": {
            "title": "Notion parent page URL",
            "type": "string",
            "description": "Used with a Notion MCP connector: the parent page or database the product pages are created under."
          },
          "maxNotifyListings": {
            "title": "Max items sent to connectors",
            "type": "integer",
            "description": "Cap how many of the returned products are sent to MCP connectors.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}