Fragrantica Scraper

5/5 ยท 1 review on Apify View on Apify โ†—Checked 2026-11-12
EXAMPLE OUTPUT

See the data

Saved sample
urlhttps://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html
product_id611
nameCoco Mademoiselle Chanel
sku611
brandChanel
categoryOriental Floral
main_imagehttps://fimgs.net/mdimg/perfume-thumbs/375x500.611.jpg
images[ "https://fimgs.net/mdimg/perfume-thumbs/375x500.611.jpg" ]
descriptionCoco Mademoiselle by Chanel is a Oriental Floral fragrance for women. Coco Mademoiselle was launched in 2001. The nose behind this fragrance is Jacques Polge.
description_html<p><strong>Coco Mademoiselle</strong> by <strong>Chanel</strong> is a Oriental Floral fragrance for women. Coco Mademoiselle was launched in 2001.</p><p>The nose behind this fragrance is Jacques Polge.</p>
attributes{ "audience": "for women", "launch year": 2001 }
rating_value4.1
review_count33212
canonical_urlhttps://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html
scraped_at2026-08-14T20:35:00.000Z
audiencefor women
brand_urlhttps://www.fragrantica.com/designers/Chanel.html
fragrance_familyOriental Floral
launch_year2001
main_accords[ "citrus", "woody", "patchouli" ]
top_notes[ "Orange", "Mandarin Orange" ]
middle_notes[ "Rose" ]
base_notes[ "Patchouli", "Vanilla" ]

Collect structured perfume encyclopedia data from Fragrantica perfume, brand and category URLs. Very high data coverage: up to 24 fields are available for each product.

Issues and feature requests

If you encounter an issue or need a field added, open an issue on the Actor page or write to hello@123webdata.com.

For custom requirements, you can also reach out to us by filling this form.

Output Example (simplified)

The overview shows the most useful fields in a table. Product images are displayed as thumbnails when the website provides them.

Image Product URL Product ID Product name Brand Scraped at
https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html 611 Coco Mademoiselle Chanel Chanel 2026-08-14T20:35:00.000Z

How to scrape supported list pages

This Actor accepts individual product links in productUrls. It accepts category pages and brand pages in categoryUrls.

  1. Open a supported list page in your browser.
  2. Choose a category and open a brand page you need.
  3. Copy the final URL from the address bar and paste it into categoryUrls.

The Actor follows the products shown on that page.

Add one or more List URLs to scrape. categoryUrls is labelled List URLs in the Console and accepts category pages and brand pages.

Scrape Fragrantica Brand Pages

Pass a brand page URL and the Actor collects the products listed for that brand. Example: https://www.fragrantica.com/designers/Dior.html

Scrape Fragrantica Category Pages

Pass a category URL and the Actor collects every product listed in that category. Example: https://www.fragrantica.com/whats-new/

The scrapeProductDetails option (labelled Include product details) decides what each List URL produces. When it is enabled, the Actor visits each product page and returns the full detail records; when it is disabled, the Actor returns one list-level record per product card with the fields that are always included.

Features

  • Scrapes detailed perfume information from Fragrantica product pages
  • Accepts individual product URLs and category pages and brand pages
  • Lets you limit the number of saved products and choose whether to continue through additional result pages
  • Returns structured designer details, main accords, fragrance notes, and ratings for viewing, export, and analysis

Pricing

This Actor uses pay-per-event pricing. Its running costs are included.

  • Actor start: $0.02 once per run โ€” One fixed charge for starting a run.
  • Result: $0.00089 each ($0.89 per 1,000) โ€” A product record collected directly from a supported list page.
  • Product detail: $0.00199 each ($1.99 per 1,000) โ€” A full product record collected from its product page.

The start charge applies once per run. Each saved product is charged either as a Result or a Product detail, never both.

Results in one run Result Product detail
100 $0.11 $0.22
1,000 $0.91 $2.01

Apify's Free plan currently includes $5 in monthly usage credits. If the full $5 is available for this Actor, one run covers about 5,595 Results or 2,502 Product details. Other Apify usage reduces the available credit.

Input

The Actor accepts the following input parameters:

Field Type Description
productUrls array Product URLs to scrape
categoryUrls array Supported list pages: category pages and brand pages
maxResultsPerScrape integer Maximum number of product records to save
usePagination boolean Whether to continue through additional result pages
scrapeProductDetails boolean If the Include product details option is enabled, the Actor visits each product page for the full detail record; if it is disabled, the Actor returns one list-level result record per product card. Both field lists are in "What data you get in each mode" below.

What data you get in each mode

Every saved product is stored as one record. scrapeProductDetails decides which mode you receive; the lists below name every field each mode can return. A field is empty when the website does not show that information.

Result

A list-level product record with 12 declared fields:

url, product_id, name, sku, brand, audience, launch_year, comment_count, main_image, images, canonical_url, scraped_at

Product detail

A full product record with 24 declared fields:

url, product_id, name, sku, brand, category, main_image, images, description, description_html, attributes, rating_value, review_count, canonical_url, scraped_at, audience, brand_url, fragrance_family, launch_year, comment_count, main_accords, top_notes, middle_notes, base_notes

Output Example (full)

The Actor stores one structured record per product. Card-only records contain only fields available on the list; detail-only fields are omitted.

{
  "url": "https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html",
  "product_id": "611",
  "name": "Coco Mademoiselle Chanel",
  "sku": "611",
  "brand": "Chanel",
  "category": "Oriental Floral",
  "main_image": "https://fimgs.net/mdimg/perfume-thumbs/375x500.611.jpg",
  "images": [
    "https://fimgs.net/mdimg/perfume-thumbs/375x500.611.jpg"
  ],
  "description": "Coco Mademoiselle by Chanel is a Oriental Floral fragrance for women. Coco Mademoiselle was launched in 2001.\n\nThe nose behind this fragrance is Jacques Polge.",
  "description_html": "<p><strong>Coco Mademoiselle</strong> by <strong>Chanel</strong> is a Oriental Floral fragrance for women. Coco Mademoiselle was launched in 2001.</p><p>The nose behind this fragrance is Jacques Polge.</p>",
  "attributes": {
    "audience": "for women",
    "launch year": 2001
  },
  "rating_value": 4.1,
  "review_count": 33212,
  "canonical_url": "https://www.fragrantica.com/perfume/Chanel/Coco-Mademoiselle-611.html",
  "scraped_at": "2026-08-14T20:35:00.000Z",
  "audience": "for women",
  "brand_url": "https://www.fragrantica.com/designers/Chanel.html",
  "fragrance_family": "Oriental Floral",
  "launch_year": 2001,
  "main_accords": [
    "citrus",
    "woody",
    "patchouli"
  ],
  "top_notes": [
    "Orange",
    "Mandarin Orange"
  ],
  "middle_notes": [
    "Rose"
  ],
  "base_notes": [
    "Patchouli",
    "Vanilla"
  ]
}

Use Cases

  • Compare perfume accords and note pyramids
  • Study designer catalogs and launch years
  • Build fragrance research datasets

You might also like

Integrate with AI and automation

Use with AI through MCP

Connect your AI assistant to the Apify MCP server. It can discover and run Actors, then access the results in the same conversation. For example, ask your assistant to scrape a list of products from Fragrantica, compare prices, or summarize the collected data.

Run on a schedule

After one successful run, use Apify Schedules to repeat the same task hourly, daily, weekly, or with a custom cron schedule. Saved tasks are useful when you want to keep the same URLs and settings for every run.

Connect with n8n

Create an n8n account and add the verified Apify node to a workflow. Choose Run an Actor and Get Dataset when the workflow should start this Actor, wait for completion, and receive the product rows for the next node. See the Apify integration for n8n.

Connect with Make

Create a Make account and add the Apify Run an Actor module. Follow it with Get Dataset Items to pass the product rows to Google Sheets, a database, email, or another Make module. For longer runs, use Watch Actor Runs followed by Get Dataset Items.

Read the Make integration guide.

Input schema
{
  "title": "Fragrantica Scraper Input",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "productUrls": {
      "title": "Product URLs",
      "type": "array",
      "description": "Add one or more product page URLs to scrape. Example product URLs:\n\n- https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html",
      "prefill": [
        "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html"
      ],
      "default": [],
      "editor": "stringList"
    },
    "categoryUrls": {
      "title": "List URLs",
      "type": "array",
      "description": "Add one or more List URLs to scrape.\n\nSupported page types with examples:\n\n- Brand page: https://www.fragrantica.com/designers/Dior.html\n- Category page: https://www.fragrantica.com/whats-new/\n\nLeave blank if using direct product URLs instead.\n\nThe `scrapeProductDetails` option (labelled Include product details) decides what each List URL produces. When it is enabled, the Actor visits each product page and returns the full detail records; when it is disabled, the Actor returns one list-level record per product card with the fields that are always included.",
      "prefill": [
        "https://www.fragrantica.com/whats-new/",
        "https://www.fragrantica.com/designers/Dior.html"
      ],
      "default": [],
      "editor": "stringList"
    },
    "maxResultsPerScrape": {
      "title": "Maximum results",
      "type": "integer",
      "description": "Maximum number of product records to save.",
      "default": 20,
      "minimum": 1,
      "maximum": 100000
    },
    "usePagination": {
      "title": "Use pagination",
      "type": "boolean",
      "description": "If this option is enabled and a List URL has more than one page, the Actor continues through the following pages until it reaches the Maximum results limit. If the option is disabled, the Actor only scrapes the first page of each List URL.",
      "prefill": false,
      "default": true
    },
    "scrapeProductDetails": {
      "title": "Include product details",
      "type": "boolean",
      "default": true,
      "description": "If this option is enabled, the Actor visits each product page and adds the full product details to every record. If it is disabled, the Actor returns one list-level result record per product card.\n\nFields that are always included:\n\n- `url`\n- `product_id`\n- `name`\n- `sku`\n- `brand`\n- `audience`\n- `launch_year`\n- `comment_count`\n- `main_image`\n- `images`\n- `canonical_url`\n- `scraped_at`\n\nFields that are only added when this option is enabled (set to true), and not added when it is disabled:\n\n- `category`\n- `description`\n- `description_html`\n- `attributes`\n- `rating_value`\n- `review_count`\n- `brand_url`\n- `fragrance_family`\n- `main_accords`\n- `top_notes`\n- `middle_notes`\n- `base_notes`"
    }
  }
}
Output schema
{
  "actorSpecification": 1,
  "fields": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "url": {
        "type": [
          "string",
          "null"
        ],
        "format": "uri"
      },
      "product_id": {
        "type": [
          "string",
          "null"
        ],
        "description": "Stable source-side product identifier."
      },
      "name": {
        "type": [
          "string",
          "null"
        ]
      },
      "sku": {
        "type": [
          "string",
          "null"
        ]
      },
      "brand": {
        "type": [
          "string",
          "null"
        ]
      },
      "category": {
        "type": [
          "string",
          "null"
        ]
      },
      "main_image": {
        "type": [
          "string",
          "null"
        ],
        "format": "uri"
      },
      "images": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "uri"
        }
      },
      "description": {
        "type": [
          "string",
          "null"
        ]
      },
      "description_html": {
        "type": [
          "string",
          "null"
        ],
        "description": "Sanitized rich-text product description with structural HTML only."
      },
      "attributes": {
        "type": "object",
        "description": "Additional source product attributes."
      },
      "rating_value": {
        "type": [
          "number",
          "null"
        ]
      },
      "review_count": {
        "type": [
          "integer",
          "null"
        ]
      },
      "canonical_url": {
        "type": [
          "string",
          "null"
        ],
        "format": "uri"
      },
      "scraped_at": {
        "type": "string",
        "format": "date-time"
      },
      "audience": {
        "type": [
          "string",
          "null"
        ],
        "description": "Audience wording shown in the perfume heading."
      },
      "brand_url": {
        "type": [
          "string",
          "null"
        ],
        "format": "uri",
        "description": "Fragrantica designer-page URL."
      },
      "fragrance_family": {
        "type": [
          "string",
          "null"
        ],
        "description": "Fragrance family stated in the product prose."
      },
      "launch_year": {
        "type": [
          "integer",
          "null"
        ],
        "description": "Source-stated launch year."
      },
      "comment_count": {
        "type": [
          "integer",
          "null"
        ],
        "minimum": 1,
        "description": "Positive comment count shown on a Fragrantica list card; omitted when the card UI hides zero."
      },
      "main_accords": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Ordered main accords displayed by Fragrantica."
      },
      "top_notes": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Top-note names in the source pyramid."
      },
      "middle_notes": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Middle-note names in the source pyramid."
      },
      "base_notes": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Base-note names in the source pyramid."
      }
    },
    "required": [
      "url",
      "name"
    ]
  },
  "views": {
    "overview": {
      "title": "Overview",
      "transformation": {
        "fields": [
          "main_image",
          "url",
          "product_id",
          "name",
          "brand",
          "scraped_at"
        ]
      },
      "display": {
        "component": "table",
        "properties": {
          "main_image": {
            "label": "Image",
            "format": "image"
          },
          "url": {
            "label": "Product URL",
            "format": "link"
          },
          "product_id": {
            "label": "Product ID",
            "format": "text"
          },
          "name": {
            "label": "Product name",
            "format": "text"
          },
          "brand": {
            "label": "Brand",
            "format": "text"
          },
          "scraped_at": {
            "label": "Scraped at",
            "format": "datetime"
          }
        }
      }
    },
    "allFields": {
      "title": "All fields",
      "description": "Every stored field.",
      "transformation": {
        "fields": [
          "url",
          "product_id",
          "name",
          "sku",
          "brand",
          "category",
          "main_image",
          "images",
          "description",
          "description_html",
          "attributes",
          "rating_value",
          "review_count",
          "canonical_url",
          "scraped_at",
          "audience",
          "brand_url",
          "fragrance_family",
          "launch_year",
          "comment_count",
          "main_accords",
          "top_notes",
          "middle_notes",
          "base_notes"
        ]
      },
      "display": {
        "component": "table"
      }
    }
  }
}
CUSTOM REQUIREMENTS

Need something different?

Tell us the website, fields, and delivery format you need. Weโ€™ll reply by email.