# Fragrantica.com Scraper (`lexis-solutions/fragrantica`) Actor

Scrape fragrance data from Fragrantica - including perfume names, brands, notes, ratings, reviews, and images. Ideal for market research, catalog building, and trend analysis. Fast, structured, and customizable extraction from a leading perfume community.

- **URL**: https://apify.com/lexis-solutions/fragrantica.md
- **Developed by:** [Lexis Solutions](https://apify.com/lexis-solutions) (community)
- **Categories:** Developer tools, E-commerce, Other
- **Stats:** 420 total users, 7 monthly users, 99.3% runs succeeded, 12 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$29.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period. You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🌸 Fragrantica Search Scraper

![Fragrantica Scraper](https://i.ibb.co/499WjHV/fragrantica-cover.png)

This actor is designed to scrape **Fragrantica.com**, the world’s most popular perfume encyclopedia, focusing specifically on **search results for perfumes**. It allows you to retrieve structured data such as perfume names, brands, notes, and more from search pages—ideal for market analysis, competitive research, or fragrance discovery.

***

### ✅ Key Features

- Scrapes Fragrantica **search result pages** for perfumes
- Retrieves perfume **names, brands, notes, launch year, votes**, and **ratings**
- Supports custom search queries
- Extracts **pagination data** automatically
- Output is returned in a **structured JSON format** suitable for processing or storing in databases

***

### 🌍 Why Is This Actor Important?

Fragrantica is one of the most comprehensive and authoritative online resources for perfumes and user reviews. However, it does not offer a public API for accessing perfume listings and search results in bulk. This actor solves that limitation by automating the data extraction process in a reliable and scalable way.

***

### 👤 Who Is This Actor Suitable For?

- **Fragrance enthusiasts** who want to analyze or explore perfumes by keyword
- **E-commerce platforms** comparing perfume offerings and reviews
- **Market researchers** conducting competitive analysis in the fragrance industry
- **Developers and data scientists** building perfume recommendation systems

***

> **💡 Side Note:**\
> For best results and to avoid potential blocking, always utilize **residential proxies** before running this actor. This ensures more reliable data extraction from Fragrantica.

***

### 📥 Input Schema

The actor expects a simple JSON input:

```json
{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/search/?query=Avon"
    },
    {
      "url": "https://www.fragrantica.com/perfume/Avon/Secret-Fantasy-10907.html?__cf_chl_tk=gCZ6FiGWtzJflYqcL98JQJW7EBIdRnRknALsxqxqnl8-1750280791-1.0.1.1-Z32OMSG_xEnUBC97bCY0aMJduIHLpDw90DZ0dalQTpk"
    }
  ],
  "query": "khamra",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "allReviews": true,
  "maxItemsReviews": 200,
  "omitFields": ["reviews", "images"]
}
```

#### 📝 Input Parameters

| Parameter            | Type           | Required | Description                                                                                                                                               |
| -------------------- | -------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | Array          | No       | Array of URLs to start scraping from                                                                                                                      |
| `query`              | String         | No       | Search query for perfumes                                                                                                                                 |
| `maxItems`           | Number         | Yes      | Maximum number of perfumes to scrape                                                                                                                      |
| `proxyConfiguration` | Object         | No       | Proxy configuration settings                                                                                                                              |
| `allReviews`         | Boolean        | No       | Whether to scrape all reviews (default: false)                                                                                                            |
| `maxItemsReviews`    | Number         | No       | Maximum number of reviews to scrape per perfume (only used when `allReviews` is true)                                                                     |
| `omitFields`         | Array (string) | No       | Output field names to skip entirely (no DOM work for those slices; no review pagination when `reviews` is omitted). Unknown names are ignored and logged. |

> **💡 Important Notes:**
>
> - Either `query` or `startUrls` must be provided for the scraper to run
> - `maxItemsReviews` is only useful when `allReviews` is set to `true`
> - When `allReviews` is `true`: The scraper will fetch reviews from multiple pages (pagination) up to the `maxItemsReviews` limit
> - When `allReviews` is `false`: Only reviews from the first page will be collected

#### `omitFields` — supported output keys

Use exact names below (same as dataset / JSON output properties). Omitting a field removes it from the pushed item.

`id`, `title`, `url`, `description`, `primaryImageUrl`, `images`, `brandName`, `brandUrl`, `brandLogo`, `mainAccords`, `pros`, `cons`, `pyramid`, `perfumeRating`, `bestRating`, `ratingCount`, `reviewCount`, `longevityBreakout`, `longevityAverage`, `longevitySum`, `longevityMax`, `sillageBreakout`, `sillageAverage`, `sillageSum`, `sillageMax`, `priceValueBreakout`, `priceValueAverage`, `priceValueSum`, `priceValueMax`, `ratingBreakout`, `ratingAverage`, `ratingSum`, `ratingMax`, `seasonBreakout`, `gender`, `genderBreakout`, `genderSum`, `genderMax`, `relationBreakout`, `relationSum`, `relationMax`, `thisPerfumeRemindsMeOf`, `perfumers`, `peopleWhoLikeThisAlsoLike`, `reviews`

***

### 📤 Output Schema

Each object represents a single perfume from the search results with relevant metadata with the following structure:

```json
{
  "id": "10907",
  "url": "https://www.fragrantica.com/perfume/Avon/Secret-Fantasy-10907.html?__cf_chl_tk=gCZ6FiGWtzJflYqcL98JQJW7EBIdRnRknALsxqxqnl8-1750280791-1.0.1.1-Z32OMSG_xEnUBC97bCY0aMJduIHLpDw90DZ0dalQTpk",
  "title": "Secret Fantasy Avon perfume - a fragrance for women 2010",
  "description": "Secret Fantasy by Avon is a Floral Fruity fragrance for women. Secret Fantasy was launched in 2010. Top notes are Big Strawberry, Pineapple, Apple and Watery Notes; middle notes are Lilac, Jasmine and Freesia; base notes are White Musk, Sandalwood and Amber. Secret Fantasy is a sweet blend of innocent red fruits, pineapple, feminine jasmine, lilac, velvety white musk, amber and warm sandalwood. Available as 50ml EDT.Read about this perfume in other languages: Deutsch, Español, Français, Čeština, Italiano, Русский, Polski, Português, Ελληνικά, 汉语, Nederlands, Srpski, Română, العربية, Українська, Монгол, עברית.",
  "primaryImageUrl": "https://fimgs.net/mdimg/perfume-thumbs/375x500.10907.jpg",
  "images": [
    "https://fimgs.net/mdimg/perfume-social-cards/en-p_c_10907.jpeg",
    "https://fimgs.net/mdimg/secundar/o.12986.jpg",
    "https://fimgs.net/mdimg/secundar/o.12987.jpg"
  ],
  "brandName": "Avon",
  "brandUrl": "https://www.fragrantica.com/designers/Avon.html",
  "brandLogo": "https://fimgs.net/mdimg/dizajneri/m.7.jpg",
  "mainAccords": [
    {
      "accord": "fruity",
      "color": "Pale Red",
      "rgb": "rgb(242, 114, 115)",
      "hex": "#f27273",
      "value": 100
    },
    {
      "accord": "sweet",
      "color": "Raw Sienna",
      "rgb": "rgb(205, 137, 55)",
      "hex": "#cd8937",
      "value": 75.819142056478
    },
    {
      "accord": "fresh",
      "color": "Sushi",
      "rgb": "rgb(145, 176, 70)",
      "hex": "#91b046",
      "value": 59.855612240825
    },
    {
      "accord": "floral",
      "color": "Medium Purple",
      "rgb": "rgb(169, 119, 188)",
      "hex": "#a977bc",
      "value": 51.338171540801
    },
    {
      "accord": "aquatic",
      "color": "Spray",
      "rgb": "rgb(104, 188, 194)",
      "hex": "#68bcc2",
      "value": 47.424971856962
    }
  ],
  "pros": [
    {
      "label": "Bright fruity sweetness",
      "like": 3,
      "dislike": 0,
      "score": 6,
      "userVote": 0
    },
    {
      "label": "Cute and simple bottle",
      "like": 3,
      "dislike": 0,
      "score": 6,
      "userVote": 0
    }
  ],
  "cons": [
    {
      "label": "Smells synthetic to some noses",
      "like": 2,
      "dislike": 0,
      "score": 4,
      "userVote": 0
    },
    {
      "label": "May not last long, generous application needed for prolonged longevity",
      "like": 1,
      "dislike": 0,
      "score": 2,
      "userVote": 0
    }
  ],
  "pyramid": {
    "type": "full",
    "topNotes": [
      {
        "name": "Big Strawberry",
        "img": "https://fimgs.net/mdimg/sastojci/t.261.jpg",
        "url": "https://www.fragrantica.com/notes/Strawberry-261.html"
      },
      {
        "name": "Pineapple",
        "img": "https://fimgs.net/mdimg/sastojci/t.170.jpg",
        "url": "https://www.fragrantica.com/notes/Pineapple-170.html"
      },
      {
        "name": "Apple",
        "img": "https://fimgs.net/mdimg/sastojci/t.146.jpg",
        "url": "https://www.fragrantica.com/notes/Apple-146.html"
      },
      {
        "name": "Watery Notes",
        "img": "https://fimgs.net/mdimg/sastojci/t.370.jpg",
        "url": "https://www.fragrantica.com/notes/Water-370.html"
      }
    ],
    "middleNotes": [
      {
        "name": "Lilac",
        "img": "https://fimgs.net/mdimg/sastojci/t.152.jpg",
        "url": "https://www.fragrantica.com/notes/Lilac-152.html"
      },
      {
        "name": "Jasmine",
        "img": "https://fimgs.net/mdimg/sastojci/t.14.jpg",
        "url": "https://www.fragrantica.com/notes/Jasmine-14.html"
      },
      {
        "name": "Freesia",
        "img": "https://fimgs.net/mdimg/sastojci/t.94.jpg",
        "url": "https://www.fragrantica.com/notes/Freesia-94.html"
      }
    ],
    "baseNotes": [
      {
        "name": "White Musk",
        "img": "https://fimgs.net/mdimg/sastojci/t.4.jpg",
        "url": "https://www.fragrantica.com/notes/Musk-4.html"
      },
      {
        "name": "Sandalwood",
        "img": "https://fimgs.net/mdimg/sastojci/t.33.jpg",
        "url": "https://www.fragrantica.com/notes/Sandalwood-33.html"
      },
      {
        "name": "Amber",
        "img": "https://fimgs.net/mdimg/sastojci/t.54.jpg",
        "url": "https://www.fragrantica.com/notes/Amber-54.html"
      }
    ]
  },
  "longevityBreakout": [
    {
      "very weak": 77
    },
    {
      "weak": 163
    },
    {
      "moderate": 124
    },
    {
      "long lasting": 28
    },
    {
      "eternal": 14
    }
  ],
  "longevityAverage": 2.3571,
  "longevitySum": 406,
  "longevityMax": 163,
  "sillageBreakout": [
    {
      "intimate": 164
    },
    {
      "moderate": 192
    },
    {
      "strong": 29
    },
    {
      "enormous": 31
    }
  ],
  "sillageAverage": 1.8245,
  "sillageSum": 416,
  "sillageMax": 192,
  "priceValueBreakout": [
    {
      "way overpriced": 3
    },
    {
      "overpriced": 5
    },
    {
      "ok": 28
    },
    {
      "good value": 61
    },
    {
      "great value": 62
    }
  ],
  "priceValueAverage": 4.0943,
  "priceValueSum": 159,
  "priceValueMax": 62,
  "perfumeRating": 3.55,
  "ratingBreakout": [
    {
      "hate": 7
    },
    {
      "dislike": 286
    },
    {
      "ok": 45
    },
    {
      "like": 553
    },
    {
      "love": 166
    }
  ],
  "ratingAverage": 3.5535,
  "ratingSum": 1057,
  "ratingMax": 553,
  "bestRating": 5,
  "ratingCount": 1057,
  "reviewCount": 91,
  "gender": "female",
  "genderBreakout": {
    "female": 150,
    "femaleUnisex": 5,
    "unisex": 1,
    "male": 0,
    "maleUnisex": 0
  },
  "genderSum": 156,
  "genderMax": 150,
  "thisPerfumeRemindsMeOf": [
    {
      "id": 56433,
      "title": "Barbie Pink Kiss",
      "brand": "Avon",
      "gender": "female",
      "url": "https://www.fragrantica.com/undefined",
      "image": "https://fimgs.net/mdimg/perfume/s.56433.jpg"
    },
    {
      "id": 59751,
      "title": "Espelho Secreto",
      "brand": "O Boticário",
      "gender": "female",
      "url": "https://www.fragrantica.com/undefined",
      "image": "https://fimgs.net/mdimg/perfume/s.59751.jpg"
    }
  ],
  "seasonBreakout": {
    "winter": 161,
    "spring": 309,
    "summer": 268,
    "autumn": 133,
    "day": 451,
    "night": 101
  },
  "relationBreakout": {
    "have": 698,
    "had": 1275,
    "want": 228
  },
  "relationSum": 2201,
  "relationMax": 1275,
  "perfumers": ["Cecile Matton", "Julie Masse"],
  "peopleWhoLikeThisAlsoLike": [
    {
      "url": "https://www.fragrantica.com/perfume/Avon/Far-Away-4908.html",
      "brand": "Avon",
      "title": "Far Away Avon",
      "image": "https://fimgs.net/mdimg/perfume-thumbs/s.4908.jpg"
    },
    {
      "url": "https://www.fragrantica.com/perfume/Britney-Spears/Fantasy-600.html",
      "brand": "Britney Spears",
      "title": "Fantasy Britney Spears",
      "image": "https://fimgs.net/mdimg/perfume-thumbs/s.600.jpg"
    }
  ],
  "reviews": [
    {
      "name": "itsmaria",
      "published": "2025-09-24",
      "comment": "Simple y tiene un aroma juvenil. No está mal, es rico. Si no te gustan los perfumes empalagosos, este no es para ti.",
      "votes": {
        "rating": 4,
        "winter": 0,
        "spring": 0,
        "summer": 0,
        "autumn": 0,
        "day": 1,
        "night": 0,
        "longevity": 2,
        "sillage": 1,
        "gender": "female",
        "relation": "have"
      }
    },
    {
      "name": "yastirik",
      "published": "2024-12-13",
      "comment": "Secret Fantasy grew up and became La Vie Est Belle L'elixir. Also both of them remind each other of BBW' Butterfly🦋",
      "votes": {
        "rating": 0,
        "winter": 0,
        "spring": 0,
        "summer": 0,
        "autumn": 0,
        "day": 0,
        "night": 0,
        "longevity": 0,
        "sillage": 0,
        "gender": null,
        "relation": null
      }
    }
  ]
}
```

Output notes:

- `mainAccords` now includes color metadata for each accord: `color`, `rgb`, and `hex`.
- `pyramid.type` can be `full` (split into `topNotes`, `middleNotes`, `baseNotes`) or `single`.
- When `pyramid.type` is `single`, notes are returned in `pyramid.allNotes`.

### Need to scrape other data sources?

Explore related actors on Apify:

- [Notino Scraper](https://apify.com/lexis-solutions/notino-scraper) - Perfume and beauty products marketplace
- [Bath and Body Works](https://apify.com/lexis-solutions/bath-and-body-works) - Fragrance and body care products
- [Poshmark Scraper](https://apify.com/lexis-solutions/poshmark-scraper) - Fashion marketplace listings
- [ShopGoodwill Scraper](https://apify.com/lexis-solutions/shopgoodwill-scraper) - Online auction marketplace
- [Groupon Scraper](https://apify.com/lexis-solutions/groupon) - Deals and marketplace
- [Alibaba Scraper](https://apify.com/lexis-solutions/alibaba-scraper) - B2B marketplace
- [Companies House UK Scraper](https://apify.com/lexis-solutions/companies-house-uk-scraper) - UK company registry data

***

👀 p.s.

Got feedback or need an extension?

Lexis Solutions is a [certified Apify Partner](https://apify.com/partners/find). We can help you with custom solutions or data extraction projects.

Contact us over [Email](mailto:scraping@lexis.solutions) or [LinkedIn](https://www.linkedin.com/company/lexis-solutions)

### Support Our Work 💝

If you're happy with our work and scrapers, you're welcome to leave us a company review [here](https://apify.com/partners/find/lexis-solutions/review) and leave a review for the scrapers you're subscribed to. It will take you less than a minute but it will mean a lot to us!

Image Credit: https://www.fragrantica.com

# Actor input Schema

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

URLs to scrape

## `query` (type: `string`):

Query to search for perfumes in Fragrantica

## `maxItems` (type: `integer`):

The maximum number of items to fetch

## `allReviews` (type: `boolean`):

Get all reviews

## `maxItemsReviews` (type: `integer`):

Optional limit for reviews to fetch when all reviews is enabled. Leave empty to keep loading until Fragrantica has no more reviews.

## `omitFields` (type: `array`):

Optional list of output field names to skip. Unknown names are ignored. See README for supported names.

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

Your proxy configuration from Apify

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/search/?query=Avon"
    }
  ],
  "maxItems": 20,
  "allReviews": false,
  "omitFields": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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/search/?query=Avon"
        }
    ],
    "omitFields": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lexis-solutions/fragrantica").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/search/?query=Avon" }],
    "omitFields": [],
}

# Run the Actor and wait for it to finish
run = client.actor("lexis-solutions/fragrantica").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/search/?query=Avon"
    }
  ],
  "omitFields": []
}' |
apify call lexis-solutions/fragrantica --silent --output-dataset

```

## MCP server setup

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

```

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/GlGmZPWAe5pkbfXa2/builds/iIwP2ZVBju0FqnN0X/openapi.json
