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

\[💰$2 / 1K] ⚡ Fast Fragrantica reviews scraper that works on Cloudflare-protected pages. No login needed. One row per review from any perfume page or the latest reviews of the whole site, with date, keyword and positive/negative filters. Get text, author, rating, longevity, sillage, season, gender.

- **URL**: https://apify.com/aboo.script/fragrantica-reviews-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 $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 Reviews Scraper

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

**Fragrantica Reviews Scraper** extracts perfume reviews from [Fragrantica](https://www.fragrantica.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste a perfume page, or the latest reviews page of the whole site, and get one row per review with the review text, date, author, and the reviewer's own rating, longevity, sillage, season, and gender votes. No account needed to start.

### Introduction

[Fragrantica](https://www.fragrantica.com/) is the largest online perfume encyclopedia, with more than 140,000 perfumes and over 2.6 million reviews written by fragrance lovers. Its reviews show what real people think about a scent: how long it lasts, how strong it is, and when they like to wear it.

This actor turns those reviews into a ready-to-use dataset, one review per row, so you can analyze opinions about a perfume, follow what people write about new launches, or monitor every new review posted on the site. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Fragrantica?

- 📝 Review text (plain text, paragraphs kept), review ID, date and time, and a direct link to the review
- 🧴 Perfume name, brand, ID, page URL, and image
- 👤 Author username, profile URL, and avatar
- 💐 The perfume the author is currently wearing (name, brand, and URL)
- ❤️ The author's rating of the perfume (hate, dislike, ok, like, love)
- ⏳ The author's longevity and sillage votes, as numbers and labels
- 🌦️ Seasons and time of day the author picked (winter, spring, summer, fall, day, night)
- 🚻 The author's gender vote (female, more female, unisex, more male, male)
- 🛍️ Whether the author has, had, or wants the perfume
- 👍 Helpful and not helpful votes on the review

### Use Cases

- 📈 **Market research**: learn what people love or dislike about a perfume, a brand, or a new launch.
- 🕵️ **Brand monitoring**: collect every new review of your perfumes, or of your competitors, every day.
- 💬 **Sentiment analysis**: feed review text and ratings into sentiment or topic models.
- 🧪 **Product development**: find what people say about longevity, sillage, and seasons before you build a new scent.
- 🤖 **AI and automation**: send clean, structured reviews to spreadsheets, dashboards, or AI workflows.

### How to scrape Fragrantica reviews step by step

1. Paste one or more Fragrantica perfume pages, or the latest reviews page, into **Start URLs**.
2. Set **Maximum number of reviews** to how many reviews you want per URL.
3. Optionally pick a **Reviews tab**, a **Keyword**, or a date range with **Reviews from** and **Reviews up to**.
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**: the pages to scrape. Two kinds of pages are supported:
  - A perfume page, for example `https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html`: the reviews of that perfume, newest first.
  - The latest reviews page, `https://www.fragrantica.com/perfume-reviews/`: the newest reviews of all perfumes on Fragrantica, newest first, going back up to 7 days.
- **Maximum number of reviews**: how many reviews to collect for each start URL. Set `0` to get every review Fragrantica shows.
- **Reviews tab**: which reviews of a perfume page to scrape: **All reviews by date** (default), **Positive reviews**, or **Negative reviews** (the most popular positive or negative reviews). Applies to perfume pages only.
- **Keyword**: only reviews that mention a word or phrase, at least 3 characters (for example `longevity` or `vanilla`). On perfume pages it uses the Fragrantica review search; on the latest reviews page it checks the review text. It cannot be combined with the positive or negative tab.
- **Reviews from** and **Reviews up to**: only reviews written in this date range (UTC dates).
- **Cookies (optional)**: the cookies of your own logged-in Fragrantica account. They let the scraper see more reviews per perfume (see below).
- **Proxy configuration**: Apify Proxy is on by default, because Fragrantica limits how many pages one connection can open. Keep it on for stable runs.

#### How to get your Fragrantica cookies

Cookies are optional. Without them the scraper works as a guest, and Fragrantica shows up to about 300 reviews per perfume (about 100 for the positive tab, the negative tab, or a keyword). With the cookies of your own Fragrantica account it can collect up to about 1,200 reviews per perfume.

1. Log in to [Fragrantica](https://www.fragrantica.com/) in Chrome, Edge, or Firefox. A free account is enough.
2. Install the free **Cookie-Editor** extension ([Chrome / Edge](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm), [Firefox](https://addons.mozilla.org/firefox/addon/cookie-editor/)).
3. Open any Fragrantica page, click the Cookie-Editor icon, then click **Export** and choose **Export as JSON**. The cookies are copied to your clipboard.
4. Paste them into the **Cookies** field of this scraper and start the run.

Other formats work too: a `name=value; name2=value2` cookie string, the content of a `cookies.txt` file, or only the value of the `fragrantica_com_555` cookie.

Tips:

- Fragrantica limits how fast one account can load reviews, so with cookies the scraper slows down to about one page of 20 reviews every 10 seconds. A perfume with 1,200 reviews takes about 10 minutes.
- Use a secondary account if you plan to scrape a lot.
- Fragrantica cookies stay valid for about 2 weeks, or until you log out. Export them again when the run log says they have expired or are no longer logged in.
- Your cookies are stored encrypted and are only used to load Fragrantica reviews for your run.

### Input Examples

Scrape the newest reviews of a perfume and of the whole site:

```json
{
  "startUrls": [
    { "url": "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html" },
    { "url": "https://www.fragrantica.com/perfume-reviews/" }
  ],
  "maxResults": 5,
  "sentiment": "all",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Get every review posted on Fragrantica on one day:

```json
{
  "startUrls": [{ "url": "https://www.fragrantica.com/perfume-reviews/" }],
  "maxResults": 0,
  "dateFrom": "2026-10-12",
  "dateTo": "2026-10-12",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Find reviews of a perfume that talk about longevity, with your account for more results:

```json
{
  "startUrls": [{ "url": "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html" }],
  "maxResults": 100,
  "keyword": "longevity",
  "cookies": "<paste your cookies here>",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each review is saved as one item in the dataset. Here is an example of a single item:

```json
{
  "url": "https://www.fragrantica.com/perfume/Victoria-s-Secret/Bare-75277.html?ccid=3240817#focus-zone",
  "reviewId": 3240817,
  "perfumeId": 75277,
  "perfumeName": "Bare",
  "perfumeBrand": "Victoria's Secret",
  "perfumeUrl": "https://www.fragrantica.com/perfume/Victoria-s-Secret/Bare-75277.html",
  "perfumeImageUrl": "https://fimgs.net/mdimg/perfume/m.75277.jpg",
  "authorUsername": "Lilly5163*",
  "authorProfileUrl": "https://www.fragrantica.com/@lilly5163",
  "authorAvatarUrl": "https://fimgs.net/mdimg/avatari/m.2884317.jpg",
  "authorWearing": {
    "name": "Tease Candy Noir",
    "brand": "Victoria's Secret",
    "url": "https://www.fragrantica.com/perfume/Victoria-s-Secret/Tease-Candy-Noir-69446.html"
  },
  "reviewedAt": "2026-10-15T05:11:32.000Z",
  "reviewText": "My issue is that you cannot smell it after 10 minutes. Every single Bath and Body Works perfumes last longer than this fragrance.",
  "rating": 3,
  "ratingLabel": "ok",
  "longevity": 1,
  "longevityLabel": "poor",
  "sillage": 1,
  "sillageLabel": "soft",
  "genderVote": "more female",
  "seasons": ["winter", "spring", "summer", "fall"],
  "timeOfDay": ["day"],
  "ownership": "I have it",
  "helpfulVotes": 0,
  "notHelpfulVotes": 0
}
```

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

### Notes

- Only perfume pages and the latest reviews page are supported; other Fragrantica URLs (designers, notes, search) are skipped.
- Without cookies, Fragrantica shows up to about 300 reviews per perfume by date, about 100 for the positive or negative tab, and about 100 per keyword. With your account cookies it shows up to about 1,200 by date. To collect every review of Fragrantica at scale beyond these limits, contact aboo.script@gmail.com for a private or custom actor.
- The latest reviews page only goes back 7 days. Dates older than that return no results from that page.
- Authors often skip the votes, so rating, longevity, sillage, gender, seasons, and time of day are `null` or empty when the author did not vote.
- Helpful and not helpful vote counts are not shown for the newest 200 reviews of a perfume, so they are `null` for those reviews.
- Review dates on perfume pages are precise to the minute; reviews from the latest reviews page and later pages are precise to the second.
- Each review is saved once per start URL, even if it shows up again while the site is updating.

### Why use the Fragrantica Reviews Scraper?

- ✅ **No login needed**: start as a guest, and add your own cookies only when you need more reviews.
- 🛡️ **Works on Cloudflare-protected pages**: no browser setup on your side.
- 🗓️ **Monitor new reviews**: collect every review posted on Fragrantica in the last 7 days, for any date range, without knowing the perfumes in advance.
- 🔎 **Filters that matter**: positive or negative reviews, keyword, and date range.
- 🧹 **Clean data**: one row per review, real numbers, ISO dates, readable vote labels, and text free of HTML.
- 💸 **Pay for what you need**: set a review limit per URL and keep every run small and cheap.

### FAQ

#### How many reviews can I scrape?

You can set any number in **Maximum number of reviews**, or `0` for every review Fragrantica shows. See **Notes** for the limits set by Fragrantica.

#### Do I need a Fragrantica account?

No. The scraper works as a guest. A free Fragrantica account is only useful if you want more reviews per perfume: add its cookies as shown in **How to get your Fragrantica cookies**.

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

Yes. Schedule a daily run on the latest reviews page with **Reviews from** set to yesterday to collect every new review automatically.

#### Why are some fields empty?

Authors do not always vote on rating, longevity, sillage, or seasons, and some do not have an avatar. When something is not shown on Fragrantica, it is returned as `null` or an empty list.

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

Yes. Right now the scraper supports perfume pages, the latest reviews page, and the filters above. If you need other inputs, such as all reviews of a brand or a note, get in touch and they can be added.

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

Yes. The scraper can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. 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.

***

**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 perfume pages (https://www.fragrantica.com/perfume/<Brand>/<Name>-<id>.html) to scrape their reviews, and/or https://www.fragrantica.com/perfume-reviews/ for the latest reviews of all perfumes.

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

Maximum number of reviews to scrape per start URL. Set 0 to get every review Fragrantica shows.

## `sentiment` (type: `string`):

Which reviews tab of a perfume page to scrape: all reviews by date, or the most popular positive or negative reviews. Applies to perfume pages only.

## `keyword` (type: `string`):

Only reviews that mention this word or phrase (at least 3 characters). On perfume pages it uses the Fragrantica review search; on the latest reviews it checks the review text. Cannot be combined with the positive/negative tab.

## `dateFrom` (type: `string`):

Only reviews written on or after this date (UTC). The latest reviews of the whole site go back 7 days.

## `dateTo` (type: `string`):

Only reviews written on or before this date (UTC).

## `cookies` (type: `string`):

Cookies of your logged-in Fragrantica account. Without them Fragrantica shows up to about 300 reviews per perfume; with them up to about 1,200. Paste them in any format: JSON export from the Cookie-Editor extension, a 'name=value; ...' cookie string, a cookies.txt file, or only the value of the fragrantica_com_555 cookie. See the README for a step-by-step guide.

## `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/perfume/Dior/Sauvage-31861.html"
    },
    {
      "url": "https://www.fragrantica.com/perfume-reviews/"
    }
  ],
  "maxResults": 5,
  "sentiment": "all",
  "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/perfume/Dior/Sauvage-31861.html"
        },
        {
            "url": "https://www.fragrantica.com/perfume-reviews/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/fragrantica-reviews-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/perfume/Dior/Sauvage-31861.html" },
        { "url": "https://www.fragrantica.com/perfume-reviews/" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/fragrantica-reviews-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/perfume/Dior/Sauvage-31861.html"
    },
    {
      "url": "https://www.fragrantica.com/perfume-reviews/"
    }
  ]
}' |
apify call aboo.script/fragrantica-reviews-scraper --silent --output-dataset

```

## MCP server setup

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