{
  "openapi": "3.0.1",
  "info": {
    "title": "Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews",
    "description": "Scrape Fragrantica perfumes by name, brand, note, perfumer or URL. Get the note pyramid with vote weights, accords, longevity, sillage, season and gender votes, similar perfumes, pros and cons, shop prices and ~500 reviews each. No 300-profile or 1,000-result cap. 23 languages.",
    "version": "0.0",
    "x-build-id": "gZpONXxag7ts5wyhS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/epicscrapers~fragrantica-perfume-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-epicscrapers-fragrantica-perfume-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/epicscrapers~fragrantica-perfume-scraper/runs": {
      "post": {
        "operationId": "runs-sync-epicscrapers-fragrantica-perfume-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/epicscrapers~fragrantica-perfume-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-epicscrapers-fragrantica-perfume-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": {
          "searchQueries": {
            "title": "🔎 Search queries",
            "type": "array",
            "description": "Perfume names, brands or collections to search for, like on Fragrantica's search page. Each query runs separately. Leave empty to scrape by URL or by filters only.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Fragrantica URLs",
            "type": "array",
            "description": "Paste Fragrantica pages from any language edition. A perfume page returns that perfume. A designer, note or perfumer page returns every perfume listed under it (no 1,000-result cap). A search page URL runs that search with its filters.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Max perfumes",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of perfumes across all queries, URLs and filters. Reviews don't count toward it. Set 0 for no limit: a whole brand, note or even the full catalogue of 140,000+ perfumes.",
            "default": 20
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "popularity",
              "rating",
              "longevity",
              "sillage"
            ],
            "type": "string",
            "description": "Order of search and filter results, as on Fragrantica's search page. Matters when Max perfumes is lower than the number of matches.",
            "default": "popularity"
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Only perfumes from any of these brands (designers). Spelling is matched to Fragrantica's, e.g. \"mfk\" won't work but \"maison francis\" finds Maison Francis Kurkdjian.",
            "items": {
              "type": "string"
            }
          },
          "notes": {
            "title": "Must contain all notes",
            "type": "array",
            "description": "Only perfumes that list every one of these notes, e.g. [\"Oud\", \"Rose\"]. English names, or names in the chosen language.",
            "items": {
              "type": "string"
            }
          },
          "excludedNotes": {
            "title": "Must not contain notes",
            "type": "array",
            "description": "Skip perfumes that list any of these notes, e.g. [\"Vanilla\"].",
            "items": {
              "type": "string"
            }
          },
          "fragranceFamilies": {
            "title": "Fragrance families",
            "type": "array",
            "description": "Only perfumes in any of these olfactory families, e.g. [\"Chypre Floral\", \"Woody Aromatic\", \"Oriental Vanilla\"].",
            "items": {
              "type": "string"
            }
          },
          "perfumers": {
            "title": "Perfumers (noses)",
            "type": "array",
            "description": "Only perfumes created by any of these perfumers, e.g. [\"Alberto Morillas\"].",
            "items": {
              "type": "string"
            }
          },
          "gender": {
            "title": "Gender",
            "enum": [
              "any",
              "female",
              "male",
              "unisex"
            ],
            "type": "string",
            "description": "Only perfumes Fragrantica lists for this gender.",
            "default": "any"
          },
          "brandType": {
            "title": "Brand type",
            "enum": [
              "any",
              "niche",
              "designer",
              "celebrity",
              "natural"
            ],
            "type": "string",
            "description": "Niche houses, mainstream designer houses (everything that isn't niche), celebrity brands or natural perfumery.",
            "default": "any"
          },
          "brandCountries": {
            "title": "Brand countries",
            "type": "array",
            "description": "Only perfumes from brands based in any of these countries, e.g. [\"France\", \"United Arab Emirates\"].",
            "items": {
              "type": "string"
            }
          },
          "yearFrom": {
            "title": "Launched from (year)",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "Only perfumes launched in or after this year. Leave empty for no limit."
          },
          "yearTo": {
            "title": "Launched until (year)",
            "minimum": 1000,
            "maximum": 2100,
            "type": "integer",
            "description": "Only perfumes launched in or before this year. Leave empty for no limit."
          },
          "minRating": {
            "title": "Minimum rating",
            "enum": [
              "any",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Only perfumes with at least this average community rating (out of 5).",
            "default": "any"
          },
          "minVotes": {
            "title": "Minimum rating votes",
            "minimum": 0,
            "type": "integer",
            "description": "Only perfumes rated by at least this many members. Skips obscure entries whose rating rests on a handful of votes."
          },
          "scrapeDetails": {
            "title": "Full perfume profiles",
            "type": "boolean",
            "description": "On: every perfume is opened for the full profile (notes with vote weights, accords, perfumers, all community votes, similar perfumes, pros and cons, shop prices, description). Off: fast, cheaper listing records from Fragrantica's search index (name, brand, year, gender, rating, review counts, popularity), thousands per minute.",
            "default": true
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Also save member reviews of each perfume as separate records (recordType \"review\"), with each reviewer's own votes. Needs full profiles.",
            "default": false
          },
          "maxReviewsPerPerfume": {
            "title": "Max reviews per perfume",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum reviews saved per perfume. Set 0 for all that Fragrantica shows to visitors: up to ~300 recent plus ~100 most popular positive and ~100 most popular negative.",
            "default": 20
          },
          "reviewTypes": {
            "title": "Review types",
            "type": "array",
            "description": "Which reviews to collect, in this order until the per-perfume maximum is reached: newest first, the most popular positive ones, the most popular negative ones.",
            "items": {
              "type": "string",
              "enum": [
                "recent",
                "positive",
                "negative"
              ],
              "enumTitles": [
                "Recent",
                "Most popular positive",
                "Most popular negative"
              ]
            },
            "default": [
              "recent",
              "positive",
              "negative"
            ]
          },
          "language": {
            "title": "Language edition",
            "enum": [
              "en",
              "de",
              "es",
              "fr",
              "it",
              "nl",
              "pl",
              "pt",
              "ro",
              "cs",
              "hu",
              "sv",
              "tr",
              "el",
              "ru",
              "uk",
              "sr",
              "mn",
              "he",
              "ar",
              "ja",
              "zh",
              "ko"
            ],
            "type": "string",
            "description": "Fragrantica edition to read. Note and accord names, gender labels, descriptions, pros and cons and reviews come in this language; each edition has its own reviews.",
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "The default Apify datacenter proxy works and is the cheapest. Each worker uses its own IP and keeps to Fragrantica's per-IP rate limit, so runs are not capped at a few hundred profiles.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}