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

\[💰$2.5 / 1K] ⚡ Fast Fragrantica scraper that works on Cloudflare-protected pages. No login, no API key. Scrape by keyword or URL: search, brand, perfumer, note, What's New, Pulse, Awards. Get notes pyramid, accords, ratings, longevity, sillage, season/gender votes, pros/cons, similar perfumes.

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

## Pricing

from $1.75 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper

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

**Fragrantica Scraper** extracts perfume data from [Fragrantica](https://www.fragrantica.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste any Fragrantica URL (search, brand, perfumer, note, What's New, Pulse, Awards, or a single perfume) or type a few keywords, and get the full notes pyramid, main accords, perfumers, rating, longevity, sillage, season and gender votes, pros and cons, and similar perfumes for every result. No account or login required.

### Introduction

[Fragrantica](https://www.fragrantica.com/) is the largest online perfume encyclopedia, with more than 140,000 fragrances, millions of community reviews, and detailed votes on how each scent performs. Perfume shops, brands, bloggers, and fragrance app developers use its data to understand notes, trends, and what people really think about a perfume.

This actor collects the same public information you see in your browser and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Fragrantica?

- 🧴 Perfume name, brand, gender, launch year, collection, and fragrance group
- 🏢 Brand details: logo, country, parent company, category, and main activity
- 🌸 Main accords with strength and color, plus top, middle, and base notes with links and images
- 👃 Perfumers with profile links and photos
- ⭐ Rating, number of votes, and number of reviews (English and all languages)
- 📊 Community votes: rating, longevity, sillage, price value, gender, when to wear (season, day, night), and "I have it / I had it / I want it"
- 👍 Pros and cons with agree and disagree votes
- 🔁 "This perfume reminds me of" with votes, "People who like this also like", and other perfumes from the same collection
- 🏆 Awards mentioned on the perfume page and Fragrantica Awards rankings (category, rank, votes)
- 🖼️ Main image, community photos, and videos
- 🌍 Alternative names in other languages, popularity scores, and the date of the latest review

### Use Cases

- 📈 **Market research**: track which notes, accords, and fragrance groups are popular each year.
- 🕵️ **Competitor monitoring**: follow new launches of any brand and see how the community rates them.
- 🛍️ **E-commerce enrichment**: add notes pyramids, accords, and longevity data to your product pages and "shop by scent" filters.
- 🗂️ **Database building**: create your own perfume catalog with brand, perfumer, and note relations.
- 🤖 **AI and automation**: feed clean, structured data into recommendation engines, dashboards, or AI workflows.

### How to scrape Fragrantica step by step

1. Paste one or more Fragrantica URLs into **Start URLs**, or type keywords into **Search queries**.
2. Optionally set the search filters (sort order, gender, launch years, minimum votes, designers, perfumers, notes, fragrance groups) for your search queries.
3. Set **Maximum number of results** to how many perfumes you want per URL or per query.
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 URLs to scrape. Supported pages:
  - Search pages, with or without a keyword, for example `https://www.fragrantica.com/search/?dizajner=Chanel&spol=female`. Every filter you set on the search page (designer, gender, year range, perfumer, notes, fragrance group, country, brand type, collection, popularity, minimum votes) is kept.
  - Single perfume pages, for example `https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html`.
  - Designer (brand) pages, for example `https://www.fragrantica.com/designers/Amouage.html`.
  - Perfumer pages, for example `https://www.fragrantica.com/noses/Alberto_Morillas.html`.
  - Note pages, for example `https://www.fragrantica.com/notes/Agarwood-Oud-114.html`.
  - Fragrance group pages, for example `https://www.fragrantica.com/groups/aromatic+fougere.html`.
  - Country, parent company, and industry pages, for example `https://www.fragrantica.com/country/France.html`. You get the perfumes of all brands listed there.
  - What's New (`https://www.fragrantica.com/whats-new/`): the latest perfumes added to Fragrantica, great for tracking new releases.
  - Fragrantica Pulse (`https://www.fragrantica.com/pulse/`): perfumes trending this week.
  - Fragrantica Awards by year, for example `https://www.fragrantica.com/awards2025/`: the top 10 of every perfume category.
- **Search queries**: keywords to search on Fragrantica (perfume name, brand, or note), one per line. Each query is scraped separately.
- **Maximum number of results**: how many perfumes to collect for each start URL or search query.
- **Sort by**, **Gender**, **Launched from year**, **Launched until year**, **Minimum number of votes**, **Designers**, **Perfumers**, **Notes**, **Fragrance groups**: filters for search queries. Start URLs keep their own filters.
- **Proxy configuration**: Apify Proxy is on by default because Fragrantica limits how many pages one IP address can open. Keep it on for stable results.

You can use start URLs, search queries, or both in the same run.

### Input Examples

Scrape the perfumes of a brand:

```json
{
  "startUrls": [{ "url": "https://www.fragrantica.com/designers/Amouage.html" }],
  "maxResults": 5,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Search by keywords:

```json
{
  "searchQueries": ["vanilla"],
  "maxResults": 5,
  "sortBy": "popular",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each perfume is saved as one item in the dataset. Here is an example of a single item (long lists are shortened):

```json
{
  "url": "https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html",
  "id": 611,
  "name": "Coco Mademoiselle",
  "fullName": "Coco Mademoiselle Chanel for women",
  "brand": "Chanel",
  "brandUrl": "https://www.fragrantica.com/designers/Chanel.html",
  "brandLogoUrl": "https://fimgs.net/mdimg/dizajneri/m.30.jpg",
  "brandCountry": "France",
  "brandParentCompany": "Chanel",
  "brandCategory": null,
  "brandMainActivity": "Fashion",
  "gender": "female",
  "releaseYear": 2001,
  "collection": "Coco Mademoiselle",
  "fragranceGroup": "Oriental Floral",
  "description": "Coco Mademoiselle by Chanel is a Oriental Floral fragrance for women. Coco Mademoiselle was launched in 2001. The nose behind this fragrance is Jacques Polge. T...",
  "imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/375x500.611.jpg",
  "rating": 4.1,
  "ratingCount": 33568,
  "reviewCount": 2407,
  "reviewCountAllLanguages": 5425,
  "popularity": 109832,
  "recentPopularity": 11815,
  "lastReviewAt": "2026-09-30T02:55:50.000Z",
  "mainAccords": [
    { "name": "citrus", "strength": 100, "backgroundColor": "#F9FF52", "textColor": "#000000" },
    { "name": "woody", "strength": 63.06, "backgroundColor": "#774414", "textColor": "#FFFFFF" }
  ],
  "topNotes": [
    { "name": "Orange", "url": "https://www.fragrantica.com/notes/Orange-80.html", "imageUrl": "https://fimgs.net/mdimg/sastojci/t.80.jpg" }
  ],
  "middleNotes": [
    { "name": "Turkish Rose", "url": "https://www.fragrantica.com/notes/Rose-105.html", "imageUrl": "https://fimgs.net/mdimg/sastojci/t.105.jpg" }
  ],
  "baseNotes": [
    { "name": "Patchouli", "url": "https://www.fragrantica.com/notes/Patchouli-34.html", "imageUrl": "https://fimgs.net/mdimg/sastojci/t.34.jpg" }
  ],
  "notes": [
    { "name": "Orange", "url": "https://www.fragrantica.com/notes/Orange-80.html", "imageUrl": "https://fimgs.net/mdimg/sastojci/t.80.jpg" }
  ],
  "perfumers": [
    { "name": "Jacques Polge", "url": "https://www.fragrantica.com/noses/Jacques_Polge.html", "imageUrl": "https://frgs.me/mdimg/nosevi/fit.134.jpg" }
  ],
  "ratingVotes": [
    { "label": "love", "votes": 15188 },
    { "label": "like", "votes": 11824 },
    { "label": "ok", "votes": 1917 },
    { "label": "dislike", "votes": 4108 },
    { "label": "hate", "votes": 531 }
  ],
  "longevityScore": 3.85,
  "longevityVotes": [
    { "label": "very weak", "votes": 287 },
    { "label": "weak", "votes": 614 },
    { "label": "moderate", "votes": 3423 },
    { "label": "long lasting", "votes": 5208 },
    { "label": "eternal", "votes": 3551 }
  ],
  "sillageScore": 2.71,
  "sillageVotes": [
    { "label": "intimate", "votes": 821 },
    { "label": "moderate", "votes": 4533 },
    { "label": "strong", "votes": 5364 },
    { "label": "enormous", "votes": 2364 }
  ],
  "priceValueScore": 2.56,
  "priceValueVotes": [
    { "label": "way overpriced", "votes": 980 },
    { "label": "overpriced", "votes": 2251 },
    { "label": "ok", "votes": 3117 },
    { "label": "good value", "votes": 663 },
    { "label": "great value", "votes": 193 }
  ],
  "genderVotes": [
    { "label": "female", "votes": 6473 },
    { "label": "more female", "votes": 884 },
    { "label": "unisex", "votes": 314 },
    { "label": "more male", "votes": 30 },
    { "label": "male", "votes": 64 }
  ],
  "whenToWearVotes": [
    { "label": "winter", "votes": 7579 },
    { "label": "spring", "votes": 9393 },
    { "label": "summer", "votes": 5313 },
    { "label": "fall", "votes": 8817 },
    { "label": "day", "votes": 10903 },
    { "label": "night", "votes": 7384 }
  ],
  "ownershipVotes": [
    { "label": "I have it", "votes": 38330 },
    { "label": "I had it", "votes": 19447 },
    { "label": "I want it", "votes": 20076 }
  ],
  "pros": [{ "text": "Long lasting", "agree": 692, "disagree": 40 }],
  "cons": [{ "text": "Commonly worn by many people", "agree": 481, "disagree": 147 }],
  "remindsMeOf": [
    {
      "url": "https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-Eau-de-Toilette-612.html",
      "id": 612,
      "name": "Coco Mademoiselle Eau de Toilette",
      "brand": "Chanel",
      "gender": "female",
      "imageUrl": "https://fimgs.net/mdimg/perfume/s.612.jpg",
      "score": 1434,
      "votesYes": 1606,
      "votesNo": 172
    }
  ],
  "peopleAlsoLike": [
    {
      "url": "https://www.fragrantica.com/perfume/Chanel/Coco-Noir-15963.html",
      "id": 15963,
      "name": "Coco Noir",
      "brand": "Chanel",
      "imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/s.15963.jpg"
    }
  ],
  "collectionPerfumes": [
    {
      "url": "https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-Intense-48310.html",
      "id": 48310,
      "name": "Coco Mademoiselle Intense",
      "brand": "Chanel",
      "imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/s.48310.jpg"
    }
  ],
  "awards": ["FiFi Award Best National Advertising Campaign / TV 2008"],
  "awardRankings": [],
  "alternativeNames": [{ "language": "JA", "name": "シャネル ココ マドモアゼル" }],
  "photos": ["https://fimgs.net/photogram/p1200/xt/2o/4L5UqIaB5UqDczD9.jpg"],
  "videos": ["https://www.youtube.com/watch?v=aRV-2_Un-kk"]
}
```

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

### Notes

- Fragrantica shows at most 1,000 results for one search, brand, perfumer, note, group, or country page. To get more, split a broad search into smaller ones, for example by launch year, gender, or designer.
- What's New lists the latest 1,000 perfumes, Pulse the 300 trending perfumes of the past 7 days, and Awards pages the top 10 of every perfume category (2018 to 2025).
- Only www.fragrantica.com is supported. Regional editions in other languages, the accords and ingredients search tools, and other page types are skipped.
- Each perfume is saved once per run, even when it appears in several start URLs or queries.
- New perfumes without votes return `null` for rating and scores, and their vote lists show 0 votes.
- `awardRankings` is filled only for perfumes scraped from an Awards page; `awards` lists awards mentioned on the perfume page.
- Reviews are not included, only their counts.

### Why use the Fragrantica Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🛡️ **Works on Cloudflare-protected pages**: perfume, brand, and perfumer pages load reliably.
- 🎯 **Keeps your filters**: paste any Fragrantica search URL and get exactly what you see there.
- 🧭 **Many entry points**: search, brand, perfumer, note, fragrance group, country, What's New, Pulse, and Awards pages in one actor.
- 🧹 **Clean data**: numbers are real numbers, dates use one standard format, and vote charts come with their labels.
- 💸 **Pay for what you need**: set a result limit per URL or query and keep every run small and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many results can I scrape?

You can set any number in **Maximum number of results**. The actor keeps going until it reaches your limit or runs out of results. See **Notes** for the limits set by 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 track new perfume releases?

Yes. Schedule a run with the What's New URL or a brand URL, and you get the newest perfumes every time.

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

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh data automatically.

#### Why are some fields empty?

Some perfumes simply do not show every piece of information, for example a perfumer, a collection, or a notes pyramid. When a field is not available on the website, it is returned as `null` or an empty list.

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

Yes. If you need other filters or page types, such as reviews, other language editions, or other Pulse time ranges, 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 perfume database without the 1,000 results limit, a private actor can be built for you. Use the contact details below.

***

**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 URLs to start with: search (with any filters), perfume, designer, perfumer, note, fragrance group, country, parent company, industry, What's New, Pulse or Awards (for example /awards2025/) pages.

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

Keywords to search on Fragrantica (perfume name, brand or note). Each query is scraped separately and uses the filters below.

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

Maximum number of perfumes to scrape per start URL or search query.

## `sortBy` (type: `string`):

Sort order for search queries. Start URLs keep their own order.

## `gender` (type: `array`):

Only perfumes for these genders. Applies to search queries only.

## `yearFrom` (type: `integer`):

Only perfumes launched in or after this year. Applies to search queries only.

## `yearTo` (type: `integer`):

Only perfumes launched in or before this year. Applies to search queries only.

## `minVotes` (type: `integer`):

Only perfumes with at least this many community votes. Applies to search queries only.

## `designers` (type: `array`):

Only perfumes from any of these brands, written as on Fragrantica (for example "Chanel"). Applies to search queries only.

## `perfumers` (type: `array`):

Only perfumes made by any of these perfumers (for example "Alberto Morillas"). Applies to search queries only.

## `notes` (type: `array`):

Only perfumes that contain any of these notes (for example "Vanilla"). Applies to search queries only.

## `fragranceGroups` (type: `array`):

Only perfumes from any of these olfactory groups (for example "Oriental Vanilla"). Applies to search queries only.

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

Proxy settings. Apify Proxy is on by default because Fragrantica limits how many pages one IP address can open.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/designers/Amouage.html"
    }
  ],
  "searchQueries": [
    "vanilla"
  ],
  "maxResults": 5,
  "sortBy": "popular",
  "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/designers/Amouage.html"
        }
    ],
    "searchQueries": [
        "vanilla"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/fragrantica-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/designers/Amouage.html" }],
    "searchQueries": ["vanilla"],
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/fragrantica-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/designers/Amouage.html"
    }
  ],
  "searchQueries": [
    "vanilla"
  ]
}' |
apify call aboo.script/fragrantica-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/fragrantica-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/fPsmJFKzLsKIUzbQ2/builds/wB6yRpy6WM7off9Dd/openapi.json
