{
  "openapi": "3.0.1",
  "info": {
    "title": "Fragrantica Perfume Scraper",
    "description": "[No hidden charges] - Scrape perfumes from Fragrantica (fragrantica.com): name, brand, year, gender, rating, fragrance family, main accords, note pyramid, and perfumers. Use perfume, designer or note pages. Export JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "pfUhXbTr9B3eJevwU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/confidential_gnat~fragrantica-perfume-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-confidential_gnat-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/confidential_gnat~fragrantica-perfume-scraper/runs": {
      "post": {
        "operationId": "runs-sync-confidential_gnat-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/confidential_gnat~fragrantica-perfume-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-confidential_gnat-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": {
          "startUrls": {
            "title": "Fragrantica URLs",
            "type": "array",
            "description": "Perfume pages, or designer and note pages. A perfume page returns that perfume; a designer or note page returns the perfumes listed on it. Example: https://www.fragrantica.com/designers/Chanel.html. Any language edition works.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "scrapeDetails": {
            "title": "Open each perfume page (full profile)",
            "type": "boolean",
            "description": "On: every perfume page is opened for notes, accords, perfumers, rating and description. Off: fast listing records only (name, year, gender, image, link). Gender, rating and vote filters need this on.",
            "default": true
          },
          "cacheProjectName": {
            "title": "Cache project name",
            "type": "string",
            "description": "Use the same name on each scheduled run to get only new perfumes. Perfumes already saved under that name are skipped, not charged and not counted towards Max perfumes per URL. Each record gets changeType: new. Leave empty to turn the cache off."
          },
          "maxItems": {
            "title": "Max perfumes per URL",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum perfumes saved for each start URL or brand. Reviews do not count towards this limit.",
            "default": 5
          },
          "brands": {
            "title": "Brands",
            "type": "array",
            "description": "Brand names to scrape, spelled as on Fragrantica, for example Chanel or Maison Francis Kurkdjian. Each brand returns the perfumes listed on its designer page.",
            "items": {
              "type": "string"
            }
          },
          "gender": {
            "title": "Gender",
            "enum": [
              "any",
              "female",
              "male",
              "unisex"
            ],
            "type": "string",
            "description": "Only perfumes Fragrantica lists for this gender. Filters apply to the perfumes found on designer and note pages; perfume pages you paste are always saved.",
            "default": "any"
          },
          "yearFrom": {
            "title": "Launched from (year)",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Only perfumes launched in or after this year. Example: 2020."
          },
          "yearTo": {
            "title": "Launched until (year)",
            "minimum": 1700,
            "maximum": 2100,
            "type": "integer",
            "description": "Only perfumes launched in or before this year. Example: 2025."
          },
          "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. Useful to skip obscure entries. Example: 500."
          },
          "language": {
            "title": "Language edition",
            "enum": [
              "en",
              "de",
              "es",
              "fr",
              "it",
              "nl",
              "pl",
              "pt",
              "ro",
              "cs",
              "hu",
              "sv",
              "tr",
              "el",
              "ru",
              "uk",
              "mn",
              "he",
              "ja",
              "ko"
            ],
            "type": "string",
            "description": "Fragrantica edition used for brand names given above. Descriptions come in that language. Start URLs keep the edition they were copied from.",
            "default": "en"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Choose your own proxies if you want to; the scraper also runs without any proxy setup.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}