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

⚡ Fast Fragrantica news scraper that works on Cloudflare-protected pages. No login, no API key. One row per article: category, authors, date, full text, images, mentioned perfumes, brands, perfumers, all comments. By article, category or author URL, with a date filter for monitoring.

- **URL**: https://apify.com/aboo.script/fragrantica-news-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.80 / 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 News Scraper

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

**Fragrantica News Scraper** extracts news articles, fragrance reviews, and columns from [Fragrantica](https://www.fragrantica.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste an article, a news category, or an author page and get one row per article with its category, authors, publish date, full text, images, the perfumes, brands, and perfumers it mentions, and every reader comment. No account or login required.

### Introduction

[Fragrantica](https://www.fragrantica.com/) is the largest online perfume encyclopedia, and its news section publishes new launches, fragrance reviews, interviews, history columns, events, and giveaways every day, with an archive that goes back more than ten years. Readers discuss each article in the comments.

This Fragrantica scraper turns that news section into a ready-to-use dataset. Use it as a Fragrantica API alternative for news: monitor new articles about the brands you follow, collect launch announcements, or build a content and sentiment dataset from articles and comments.

### What data can you extract from Fragrantica news?

- 📰 Article title, ID, URL, and short summary
- 🗂️ Category (Fragrance News, Fragrance Reviews, New Fragrances, Columns, Interviews, and more) with a link to the category
- ✍️ Authors with their page, photo, role, and short bio
- 📅 Publish date in ISO 8601 format
- 📄 Full article text as plain text, split into paragraphs
- 🖼️ Main image and every image inside the article
- 🧴 Perfumes mentioned in the article, with their ID, URL, and brand page
- 🏷️ Brands and perfumers mentioned in the article
- 💬 Comment count and every visible comment and reply: author, profile, avatar, signature perfume, date, and text

### Use Cases

- 📈 **Media monitoring and PR**: track every article that mentions your brand or your competitors.
- 🚀 **Launch tracking**: collect new fragrance announcements as soon as they are published.
- 💬 **Sentiment analysis**: analyze what readers say about new releases in the comments.
- 🤖 **AI and content datasets**: train models or build knowledge bases on fragrance reviews and history articles.
- 🔎 **Market research**: see which brands and perfumes get the most coverage over time.

### How to scrape Fragrantica news step by step

1. Paste one or more Fragrantica news URLs into **Start URLs**.
2. Set **Maximum number of articles** to how many articles you want per URL.
3. Optionally set **Published after** to get only recent articles, and turn **Include comments** on or off.
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 news URLs to scrape. Supported pages:
  - A single article, such as `https://www.fragrantica.com/news/Creed-Iris-Debonair-Steel-Rebar-Wrapped-in-Silk-26340.html`.
  - A news category, such as `https://www.fragrantica.com/news/fragrance-news/`, `https://www.fragrantica.com/news/fragrance-reviews/`, `https://www.fragrantica.com/news/new-fragrances/`, or `https://www.fragrantica.com/news/1001-past-tales/`. You can find every category at the bottom of any Fragrantica article.
  - An author page, such as `https://www.fragrantica.com/news/author/Igor-Masyukov/`.
  - A later page of a category or author (for example `https://www.fragrantica.com/news/fragrance-news/50`) starts from that page.
- **Maximum number of articles**: how many articles to collect for each start URL. Set 0 to get every article of a category or author.
- **Published after**: only scrape articles of category and author pages published on or after this date. Leave it empty to get all articles.
- **Include comments**: add every comment and reply of the article. On by default.
- **Proxy configuration**: Fragrantica blocks many IP addresses. The default Apify Proxy works well.

Category and author pages are scraped from the newest article to the oldest.

### Input Examples

Scrape the latest fragrance news and reviews:

```json
{
  "startUrls": [
    { "url": "https://www.fragrantica.com/news/fragrance-news/" },
    { "url": "https://www.fragrantica.com/news/fragrance-reviews/" }
  ],
  "maxResults": 5,
  "includeComments": true,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Monitor new articles since a date:

```json
{
  "startUrls": [
    { "url": "https://www.fragrantica.com/news/new-fragrances/" }
  ],
  "maxResults": 0,
  "publishedAfter": "2026-10-01",
  "includeComments": true,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

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

```json
{
  "url": "https://www.fragrantica.com/news/FAIRIA-Jacaranda-When-Sydney-Turns-Purple-26341.html",
  "id": 26341,
  "title": "FAIRIA Jacaranda: When Sydney Turns Purple",
  "category": "Fragrance News",
  "categoryUrl": "https://www.fragrantica.com/news/fragrance-news/",
  "authors": [
    {
      "name": "Yi Shang (怡 商)",
      "url": "https://www.fragrantica.com/news/author/Yi-Shang/",
      "imageUrl": "https://fimgs.net/images/authors/t-16.jpg",
      "role": "Editor, Writer & Translator",
      "bio": "Yi Shang, known as Sofia by friends, studied Biochemistry, Humanities & Social Sciences at the postgraduate level (Unive..."
    }
  ],
  "publishedAt": "2026-10-13T00:00:00.000Z",
  "summary": "Floral, velvety and quietly alluring, Jacaranda is a purple haze drifting through Sydney in bloom. FAIRIA is set to launch their latest creation Jacaranda on 14th October, a new fragrance starting its...",
  "imageUrl": "https://fimgs.net/mdimg/vijesti/o.26341.2.jpg",
  "text": "FAIRIA is set to launch their latest creation Jacaranda on 14th October, a new fragrance starting its Luminous Series, inspired by Sydney’s fleeting springtime transformation under a canopy of purple blossoms.\n\nFor a few precious weeks each year, Sydney turns purple. Jacaranda trees burst into bloom...",
  "images": [
    "https://fimgs.net/himg/o.I44IOKJCiAd.png",
    "https://fimgs.net/himg/o.y4tZGriwJjJ.png"
  ],
  "mentionedPerfumes": [
    {
      "id": 144966,
      "name": "Jacaranda",
      "url": "https://www.fragrantica.com/perfume/Fairia/Jacaranda-144966.html",
      "brandUrl": "https://www.fragrantica.com/designers/Fairia.html"
    }
  ],
  "mentionedBrands": [
    {
      "name": "FAIRIA",
      "url": "https://www.fragrantica.com/designers/Fairia.html"
    }
  ],
  "mentionedPerfumers": [],
  "commentCount": 11,
  "comments": [
    {
      "id": 364077,
      "parentId": null,
      "author": "belleandblues",
      "authorUrl": "https://www.fragrantica.com/@belleandblues",
      "authorAvatarUrl": "https://fimgs.net/mdimg/avatari/m.831494.jpg",
      "signaturePerfume": "Love Spell Victoria's Secret",
      "signaturePerfumeUrl": "https://www.fragrantica.com/p/7988",
      "publishedAt": "2026-10-13T21:56:00.000Z",
      "text": "We have jacarandas all around Southern California. When they bloom, they do feel like a soft purple haze of blossoms. I think the notes here sound lovely and ma..."
    },
    {
      "id": 364061,
      "parentId": 364048,
      "author": "O-Carolina",
      "authorUrl": "https://www.fragrantica.com/@o.carolina",
      "authorAvatarUrl": "https://fimgs.net/mdimg/avatari/m.946187.jpg",
      "signaturePerfume": "Samsara Extrait Guerlain",
      "signaturePerfumeUrl": "https://www.fragrantica.com/p/25318",
      "publishedAt": "2026-10-13T17:00:00.000Z",
      "text": "It has no scent unfortunately."
    }
  ]
}
```

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

### Notes

- Only fragrantica.com news articles, news categories, and author pages are supported. Other URLs (for example perfume or brand pages, or `https://www.fragrantica.com/news/`, which has no article list) are skipped with a warning.
- Fragrantica has no search for news articles, so articles are collected from categories and author pages.
- The whole archive of a category or author can be scraped, back to the oldest article Fragrantica still lists (for example 2011 for Fragrance News).
- **Published after** applies to category and author pages. Article URLs you paste directly are always scraped.
- Older articles show only a publish day on Fragrantica, so their time is `00:00 UTC`. Newer articles and comments include the exact time.
- The comment count is the number Fragrantica shows, which also counts deleted or hidden comments, so the list of comments can be a little shorter.
- A comment reply has the ID of the comment it answers in `parentId`; top-level comments have `parentId: null`.
- An article reached from several start URLs (for example a category and an author page) is saved only once.
- Need every article of every category, or other data without these limits? Ask for a custom version using the contact below.

### Why use the Fragrantica News Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🛡️ **Works on Cloudflare-protected pages**: get results reliably with the default proxy settings.
- 💬 **Comments included**: every visible comment and reply in the same row as the article.
- 🧴 **Mentions as data**: the perfumes, brands, and perfumers of each article as clean lists with links.
- 📅 **Built for monitoring**: the date filter stops at the first older article, so scheduled runs stay fast and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many articles can I scrape?

As many as Fragrantica lists. Set **Maximum number of articles** to 0 to get every article of a category or an author.

#### 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.

#### How do I get only new articles?

Set **Published after** to a date and schedule the actor with Apify Schedules. Each run only collects the articles published on or after that date.

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

Yes. Right now the actor supports articles, categories, author pages, a date filter, and comments. If you need other inputs or data, 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. 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.
- [Fragrantica Designers Scraper](https://apify.com/aboo.script/fragrantica-designers-scraper): perfume brands from Fragrantica, with country, parent company, website, perfume counts, perfumers, and collections.
- [Fragrantica Perfumers Scraper](https://apify.com/aboo.script/fragrantica-perfumers-scraper): perfumers (noses) from Fragrantica, with their company, biography, and perfumes.
- [Fragrantica Notes Scraper](https://apify.com/aboo.script/fragrantica-notes-scraper): perfume notes from Fragrantica, with latin name, group, odor profile, perfume counts, and popular perfumes.

***

**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 news articles (https://www.fragrantica.com/news/Creed-Iris-Debonair-Steel-Rebar-Wrapped-in-Silk-26340.html), news categories (https://www.fragrantica.com/news/fragrance-news/), or author pages (https://www.fragrantica.com/news/author/Igor-Masyukov/). Category and author pages are scraped from newest to oldest.

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

Maximum number of articles to scrape per start URL. Set 0 to get every article of a category or author.

## `publishedAfter` (type: `string`):

Only scrape articles of category and author pages published on or after this date. Leave empty to get all articles.

## `includeComments` (type: `boolean`):

Add every comment and reply of the article (author, date, signature perfume, text).

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

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

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.fragrantica.com/news/fragrance-news/"
    },
    {
      "url": "https://www.fragrantica.com/news/fragrance-reviews/"
    }
  ],
  "maxResults": 5,
  "includeComments": true,
  "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/news/fragrance-news/"
        },
        {
            "url": "https://www.fragrantica.com/news/fragrance-reviews/"
        }
    ]
};

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

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

```

## MCP server setup

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