# Fragrantica Designers Scraper (`aboo.script/fragrantica-designers-scraper`) Actor

\[💰$4 / 1K] ⚡ Fast Fragrantica designers scraper that works on Cloudflare-protected pages. No login, no API key. One row per perfume brand: country, parent company, website, description, perfume counts, launch years, perfumers and collections. By brand name, country, owner or industry URL.

- **URL**: https://apify.com/aboo.script/fragrantica-designers-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Stats:** 3 total users, 2 monthly users, 85.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Fragrantica Designers Scraper

![Fragrantica Designers Scraper](https://i.postimg.cc/yxg2JMrB/image.png)

**Fragrantica Designers Scraper** extracts perfume brands (designers) from [Fragrantica](https://www.fragrantica.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste a brand page, the designer index, or a country, parent company, or industry page, or just type a brand name, and get one row per brand with its country, parent company, website, description, perfume counts, launch years, perfumers, and collections. No account or login required.

### Introduction

[Fragrantica](https://www.fragrantica.com/) is the largest online perfume encyclopedia, with more than 140,000 perfumes from over 8,000 brands, from luxury fashion houses to small niche and indie perfumers. Each brand page shows where the brand comes from, who owns it, its official website, and its full fragrance catalog.

This actor turns those brand pages into a ready-to-use dataset, one brand per row, so you can map the perfume market, build lead lists of fragrance brands, or follow how brand catalogs grow. You can run it once, schedule it to run regularly, or connect it to your own tools.

### What data can you extract from Fragrantica?

- 🏷️ Brand name, Fragrantica ID, logo, and a direct link to the brand page
- 🌍 Country of origin and main activity (Fragrances, Fashion, Cosmetics, Celebrity, Niche perfumes, and more), with links to their Fragrantica pages
- 🏢 Parent company (for example LVMH, Coty, or Puig) and its Fragrantica page
- 🔗 Official brand website
- ✨ Niche designer, celebrity brand, and natural perfumery flags
- 📝 Brand description and history as plain text
- 🔢 Total number of perfumes, current and discontinued perfumes, and perfumes for women, men, and unisex
- 📅 Year of the first and the latest perfume
- 👃 Perfumers the brand has worked with
- 🗂️ Collections with their link and number of perfumes
- 🧴 Optional full perfume list: name, link, ID, year, gender, image, number of reviews, collection, and whether it is discontinued

### Use Cases

- 📈 **Market research**: see which brands come from which countries, who owns them, and how big their catalogs are.
- 🕵️ **Competitor monitoring**: follow the brands of a parent company or an industry and see how many new perfumes they launch.
- 🤝 **Lead generation**: build a list of fragrance brands with their official websites, for example every niche brand from France.
- 🗂️ **Database building**: create your own brand directory linked to Fragrantica perfume and brand pages.
- 🤖 **AI and automation**: feed clean, structured data into spreadsheets, dashboards, or AI workflows.

### How to scrape Fragrantica designers step by step

1. Paste one or more Fragrantica URLs into **Start URLs**, or type brand names into **Search brands**.
2. Set **Maximum number of designers** to how many brands you want per URL or per search.
3. Turn on **Include the full perfume list** if you also want every perfume of each brand.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Fragrantica pages to scrape. Supported pages:
  - A brand page, for example `https://www.fragrantica.com/designers/Dior.html`
  - The designer index: `https://www.fragrantica.com/designers/` (most popular brands) or the alphabetical pages `https://www.fragrantica.com/designers-1/` to `https://www.fragrantica.com/designers-11/`
  - A country page, for example `https://www.fragrantica.com/country/France.html`
  - A parent company page, for example `https://www.fragrantica.com/parent-company/LVMH.html`
  - An industry page, for example `https://www.fragrantica.com/industry/Niche+perfumes.html`
  - The overview pages `https://www.fragrantica.com/country/`, `https://www.fragrantica.com/parent-company/`, and `https://www.fragrantica.com/industry/`, which go through every country, parent company, or industry in the order Fragrantica shows them
- **Search brands**: brand names to search on Fragrantica, one per line. Each search is scraped separately, best matches first.
- **Maximum number of designers**: how many brands to collect for each start URL or search. Set `0` to get every brand.
- **Include the full perfume list**: adds every perfume of the brand to each row. Off by default, because large brands have more than a thousand perfumes. Counts and collections are always included.
- **Proxy configuration**: Apify Proxy is on by default and works well. Fragrantica blocks many IP addresses, so keep a proxy enabled.

You can use start URLs, brand searches, or both in the same run.

### Input Examples

Scrape the brands of a parent company:

```json
{
  "startUrls": [{ "url": "https://www.fragrantica.com/parent-company/LVMH.html" }],
  "maxResults": 5,
  "includePerfumes": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Search brands by name:

```json
{
  "searchQueries": ["Lattafa"],
  "maxResults": 5,
  "includePerfumes": false,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each brand is saved as one item in the dataset. Here is an example of a single item with **Include the full perfume list** turned on (lists shortened):

```json
{
  "url": "https://www.fragrantica.com/designers/Dior.html",
  "id": 160,
  "name": "Dior",
  "logoUrl": "https://fimgs.net/mdimg/dizajneri/o.160.jpg",
  "country": "France",
  "countryUrl": "https://www.fragrantica.com/country/France.html",
  "mainActivity": "Fashion",
  "mainActivityUrl": "https://www.fragrantica.com/industry/Fashion.html",
  "website": "https://www.dior.com/",
  "parentCompany": "LVMH",
  "parentCompanyUrl": "https://www.fragrantica.com/parent-company/LVMH.html",
  "isNiche": false,
  "isCelebrity": false,
  "isNaturalPerfumery": false,
  "description": "Fashion designer Christian Dior was born in France and rose to prominence in the fashion world with the creation of the \"New Look\"—voluminous dresses that emphasized a woman's curvy feminine shape.\n\nDior's fashion background included workin...",
  "perfumeCount": 333,
  "currentPerfumeCount": 319,
  "discontinuedPerfumeCount": 14,
  "womenPerfumeCount": 203,
  "menPerfumeCount": 60,
  "unisexPerfumeCount": 70,
  "firstPerfumeYear": 1947,
  "latestPerfumeYear": 2026,
  "perfumers": [
    "Francis Kurkdjian",
    "Edmond Roudnitska",
    "Beatrice Piquet",
    "Paul Vacher",
    "Pierre Bourdon"
  ],
  "collections": [
    {
      "name": "Cruise Collection",
      "url": "https://www.fragrantica.com/designers/Dior.html#Cruise-Collection",
      "perfumeCount": 5
    },
    {
      "name": "Dior Addict Collection",
      "url": "https://www.fragrantica.com/designers/Dior.html#Dior-Addict-Collection",
      "perfumeCount": 22
    }
  ],
  "perfumes": [
    {
      "url": "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html",
      "id": 31861,
      "name": "Sauvage",
      "year": 2015,
      "gender": "male",
      "imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/m.31861.jpg",
      "reviewCount": 4250,
      "collection": "Sauvage Collection",
      "isDiscontinued": false
    },
    {
      "url": "https://www.fragrantica.com/perfume/Dior/Dolce-Vita-Parfum-33769.html",
      "id": 33769,
      "name": "Dolce Vita Parfum",
      "year": 1994,
      "gender": "female",
      "imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/m.33769.jpg",
      "reviewCount": 6,
      "collection": null,
      "isDiscontinued": true
    }
  ]
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Only Fragrantica.com (English) pages listed under **Input** are supported. Perfume pages, news, and other URLs are skipped with a warning.
- A brand page lists every perfume of the brand, so no perfumes are cut off, even for brands with more than a thousand perfumes.
- A brand search returns at most 1,000 brands. To get every brand, use the alphabetical index pages `/designers-1/` to `/designers-11/` (about 8,400 brands in total).
- If a brand page no longer exists, Fragrantica sends you to its homepage; such URLs are skipped with a warning.
- Perfumers are listed by name, exactly as Fragrantica writes them, and can include fragrance companies.
- Some brands have no description, no website, no parent company, or no known launch years; those fields are `null`. A perfume without a known year has `year: null`.
- Fragrantica does not show an average rating per brand, so the dataset does not include one.
- **Works on Cloudflare-protected pages.** Keep Apify Proxy enabled for stable runs.

### Why use the Fragrantica Designers Scraper?

- 🏢 **One row per brand**: brand data, not perfume rows, ready for market maps and lead lists.
- 🌍 **Many ways to start**: a single brand, the full index, a country, a parent company, an industry, or a brand name.
- 🧹 **Clean data**: numbers are real numbers, flags are true/false, links are full URLs, and text is free of HTML.
- 💸 **Pay for what you need**: set a limit per URL or search, and add the full perfume list only when you need it.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many brands can I scrape?

Set any number in **Maximum number of designers**, or `0` for no limit. The alphabetical index pages together cover every brand on Fragrantica.

#### Do I need a Fragrantica account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every day, week, or month, and track new brands and new perfume launches.

#### Can I request a new feature or filter?

Yes. Right now the actor supports start URLs and brand searches. If you need other inputs, such as filtering brands by country or niche status in a search, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. If you need the whole Fragrantica brand database in one go, a private or custom actor can deliver it. Use the contact details below.

### Need to scrape other perfume data?

- [Fragrantica Scraper](https://apify.com/aboo.script/fragrantica-scraper): perfume details from Fragrantica, including the notes pyramid, accords, perfumers, ratings, and community votes.
- [Fragrantica Reviews Scraper](https://apify.com/aboo.script/fragrantica-reviews-scraper): perfume reviews from Fragrantica, one row per review with the reviewer's rating, longevity, sillage, and season votes.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Fragrantica](https://www.fragrantica.com/)

# Actor input Schema

## `startUrls` (type: `array`):

Fragrantica designer pages (https://www.fragrantica.com/designers/<Brand>.html), the designer index (/designers/ or /designers-1/ to /designers-11/), country, parent company or industry pages (/country/France.html, /parent-company/LVMH.html, /industry/Fashion.html), or their overview pages (/country/, /parent-company/, /industry/).

## `searchQueries` (type: `array`):

Brand names to search on Fragrantica, for example Chanel or Lattafa. Each query is scraped separately, best matches first.

## `maxResults` (type: `integer`):

Maximum number of designers to scrape per start URL or search query. Set 0 to get every designer.

## `includePerfumes` (type: `boolean`):

Add every perfume of the brand (name, year, gender, image, review count, collection, discontinued) to each row. Large brands have more than a thousand perfumes, so rows get big. Counts and collections are always included.

## `proxyConfiguration` (type: `object`):

Fragrantica blocks many IP addresses. Apify Proxy (datacenter) works well.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/parent-company/LVMH.html"
    }
  ],
  "searchQueries": [
    "Lattafa"
  ],
  "maxResults": 5,
  "includePerfumes": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.fragrantica.com/parent-company/LVMH.html"
        }
    ],
    "searchQueries": [
        "Lattafa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/fragrantica-designers-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.fragrantica.com/parent-company/LVMH.html" }],
    "searchQueries": ["Lattafa"],
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/fragrantica-designers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/parent-company/LVMH.html"
    }
  ],
  "searchQueries": [
    "Lattafa"
  ]
}' |
apify call aboo.script/fragrantica-designers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/fragrantica-designers-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oOMGtW5EEmpQTBwru/builds/0K7lbzgyRuODvIA6Z/openapi.json
