{
  "openapi": "3.0.1",
  "info": {
    "title": "Nykaa Scraper: Beauty Products, Prices, Reviews",
    "description": "Scrape Nykaa categories, brand pages, searches or product links with no login. Get price, MRP, discount, rating, stock, offers, every shade with its own price and stock, ingredients and verified reviews. Export JSON, CSV or Excel, schedule a price watch, pay per product.",
    "version": "0.1",
    "x-build-id": "5AduY1cDdEVeFsfIu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~nykaa-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-nykaa-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/automation_craft~nykaa-scraper/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-nykaa-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/automation_craft~nykaa-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-nykaa-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": {
          "searchTerms": {
            "title": "Search words",
            "type": "array",
            "description": "Words to search on Nykaa, one search per entry (vitamin c serum, kajal waterproof, maybelline). Nykaa sends broad words and brand names to its own category or brand page (lipstick goes to Lips, maybelline to the Maybelline New York brand page); that page is then read, and the coverage row says so. Each search delivers up to Max products per search.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Nykaa links",
            "type": "array",
            "description": "Links copied from nykaa.com: a category page (https://www.nykaa.com/makeup/lips/lipstick/c/249), a brand page (https://www.nykaa.com/brands/lakme/c/604), a search page (https://www.nykaa.com/search/result/?q=niacinamide), with the filters, sort and page number Nykaa put in the link, or a product page (https://www.nykaa.com/nykaa-so-creme-creamy-matte-lipstick/p/683166, a skuId in it reads that shade) or its reviews page. Tracking parts such as utm_source are ignored. Through the API, give each link as {\"url\": \"...\"}.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "productIds": {
            "title": "Product ids",
            "type": "array",
            "description": "Nykaa product ids (the number after /p/ in a product link, as in nykaa.com/.../p/683166) or shade ids. Read 20 at a time; an id Nykaa does not have gets a free status row. Product ids and product page links count together: at most 5,000 products a run.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Whole category pages to read: pick from the list, or type a Nykaa category id (the number after /c/ in a category link, as in nykaa.com/makeup/lips/lipstick/c/249).",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "makeup",
                "lips",
                "lipstick",
                "liquid_lipstick",
                "lip_gloss",
                "face_makeup",
                "foundation",
                "concealer",
                "face_primer",
                "compact",
                "blush",
                "setting_spray",
                "eyes",
                "kajal",
                "eyeliner",
                "mascara",
                "eyeshadow",
                "nails",
                "nail_polish",
                "makeup_tools_brushes",
                "skin",
                "face_wash",
                "cleansers",
                "serums",
                "moisturizers",
                "face_moisturizer_day_cream",
                "night_cream",
                "sun_care",
                "face_sunscreen",
                "toners_mists",
                "face_masks",
                "sheet_masks",
                "lip_balm",
                "eye_care",
                "body_care",
                "body_lotions_creams",
                "hair_care",
                "shampoo",
                "conditioner",
                "hair_oil",
                "hair_serum",
                "hair_color",
                "hair_dryers",
                "fragrance",
                "women_perfumes",
                "men_perfumes",
                "men_deodorants",
                "mens_grooming",
                "beard_care",
                "men_face_wash",
                "men_trimmers",
                "bath_body",
                "shower_gels_body_wash",
                "mom_baby",
                "luxe_makeup",
                "luxe_skin",
                "luxe_fragrance"
              ]
            }
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Only these brands, written as Nykaa lists them in its brand filter (Lakme, Maybelline New York, Nykaa Cosmetics). Several brands match any of them. A brand Nykaa does not list for a page is noted on that page's coverage row; when it lists none of them, that page delivers nothing and is free.",
            "items": {
              "type": "string"
            }
          },
          "filters": {
            "title": "Other Nykaa filters",
            "type": "array",
            "description": "Any other filter of Nykaa's filter panel, one per entry as \"<filter name>: <value>\" (Skin type: Oily, Concern: Acne & Blemishes, Gender: Female, Color: Red, Finish: Matte, Ingredient: Niacinamide, Country Of Origin: Korea (the Republic of)). The same filter name twice matches either value. Names and values are matched against the page's own filter panel; a filter with no listed value makes that page deliver nothing, free.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (INR)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only products priced at or above this many rupees (Nykaa's price filter, and checked on every row)."
          },
          "maxPrice": {
            "title": "Maximum price (INR)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Only products priced at or below this many rupees (Nykaa's price filter, and checked on every row)."
          },
          "minDiscount": {
            "title": "Minimum discount",
            "enum": [
              "0",
              "10",
              "20",
              "30",
              "40",
              "50",
              "60",
              "70"
            ],
            "type": "string",
            "description": "Only products discounted by at least this percent, one of Nykaa's own steps (checked on every row)."
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Only products rated at least this many stars (Nykaa's rating filter, and checked on every row)."
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "default",
              "customer_top_rated",
              "new_arrival",
              "discount",
              "price_low_to_high",
              "price_high_to_low",
              "name"
            ],
            "type": "string",
            "description": "Nykaa's order. default is Nykaa's own: popularity on category and brand pages, relevance on searches."
          },
          "excludeSponsored": {
            "title": "Leave out sponsored products",
            "type": "boolean",
            "description": "Nykaa mixes paid placements into its default order (flagged isSponsored on each row). Turn this on to leave them out, free. They are always left out when a filter is set that a row cannot be checked against (skin type, concern and the like).",
            "default": false
          },
          "expandSubcategories": {
            "title": "Expand subcategories",
            "type": "boolean",
            "description": "When a category or brand page (or a search Nykaa sends to one) stops at Max products per search or at Nykaa's own limit of 10,000 products, read each of its direct subcategories too, with the same filters and start page, each with its own cap and coverage row (a product found twice is delivered once).",
            "default": false
          },
          "maxItemsPerSearch": {
            "title": "Max products per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most products one search, category, brand page or link delivers (1 to 10,000, Nykaa's own limit per search and order). The form starts at 10; an API call that leaves it out gets 100."
          },
          "maxItems": {
            "title": "Max products in all",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "The most products the whole run delivers (inputs are read in order). Leave empty for no total cap."
          },
          "startPage": {
            "title": "Start page",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Start each search or page at this page of Nykaa's results (1 to 500, 20 products a page); the pages before it are not read."
          },
          "maxPagesPerSearch": {
            "title": "Max pages per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "The most result pages one search, category or brand page reads (1 to 500, 20 products a page). Leave empty to stop only at Max products per search."
          },
          "includeDetails": {
            "title": "Product details",
            "type": "boolean",
            "description": "Add each product's full product page (the Product detail event): every shade or size with its own price, MRP, stock, SKU, GTIN and expiry, description, ingredients, how to use, highlights, country of origin, manufacturer, packer and importer, seller, expiry, return policy, the star breakdown, Nykaa's review summary and topics, offers, images and videos. The row then shows the page's own price, stock and rating.",
            "default": false
          },
          "pincode": {
            "title": "Delivery pincode",
            "type": "string",
            "description": "An Indian pincode (six digits, 400001). With Product details on, each product's details carry whether Nykaa ships it there, the city and state, and whether cash on delivery is available."
          },
          "includeReviews": {
            "title": "Reviews",
            "type": "boolean",
            "description": "Add each product's verified reviews as rows of their own (the Review event): rating, title, text, shade, reviewer name, photos, likes, the reviewer's skin or hair profile and the date. Nykaa shows verified buyers' reviews only.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 1200,
            "type": "integer",
            "description": "The most reviews delivered per product (1 to 1,200; Nykaa shows at most 40 pages of 50 per product and order, often fewer). Default 20."
          },
          "reviewsSort": {
            "title": "Review order",
            "enum": [
              "most_useful",
              "most_helpful",
              "newest",
              "positive_first",
              "negative_first"
            ],
            "type": "string",
            "description": "Nykaa's review orders: most useful (default), most helpful, newest, positive first, negative first."
          },
          "reviewsRating": {
            "title": "Review stars",
            "enum": [
              "all",
              "1",
              "2",
              "3",
              "4",
              "5"
            ],
            "type": "string",
            "description": "all (default), or only reviews with this many stars."
          },
          "reviewsWithPhotosOnly": {
            "title": "Only reviews with photos",
            "type": "boolean",
            "description": "Only reviews that carry the buyer's photos.",
            "default": false
          },
          "reviewsStartPage": {
            "title": "Review start page",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Start each product's reviews at this page of Nykaa's review list (1 to 40, 50 reviews a page); the pages before it are not read. Default 1."
          },
          "includePersonalData": {
            "title": "Include personal data",
            "type": "boolean",
            "description": "Off by default. Turn on to add, on review rows, the reviewer's profile picture link and Nykaa's pseudonymous reviewer id (both null when off; the reviewer's name, which Nykaa shows with every review, is always delivered). You are responsible for using personal data lawfully, GDPR and India's DPDP Act included.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "A name for a memory this Actor keeps between runs (one per name, per Actor). With it, a scheduled run delivers and charges only products and reviews it has not delivered before (mode new_only), or watches product links and ids for price and stock changes (mode changes)."
          },
          "monitorMode": {
            "title": "Monitor mode",
            "enum": [
              "new_only",
              "changes"
            ],
            "type": "string",
            "description": "new_only (default): only products and reviews not delivered before under this name. changes: every product link or id is read each run and delivered as one Product check row with its price, MRP and stock, the previous values and what changed since the last run (with Product details on, every shade's price and stock is watched too)."
          },
          "resetMonitor": {
            "title": "Reset the monitor",
            "type": "boolean",
            "description": "Forget what the monitor delivered before and start again from this run.",
            "default": false
          },
          "maxRequestRetries": {
            "title": "Tries per request",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many times in all a call Nykaa did not answer is tried, the first try included (1 to 5, default 3). A refused door is replaced at once and does not count."
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "How long one call to Nykaa may take before it is asked again on another door (5 to 60, default 15). A door that runs into it, or answers two calls slower than 8 seconds, is replaced."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Default: the run's own address first (Nykaa answered it on all but 1 of 262 platform runs; a refusal moves the run to the next door), then Apify datacenter sessions on networks Nykaa lets in, then Apify residential India. Turn the Apify proxy off to use the run's own address only (a refusal or a slow answer there ends the run, partial), or give your own proxy links."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}