Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews avatar

Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews

Pricing

from $0.60 / 1,000 perfume profiles

Go to Apify Store
Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews

Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews

Scrape Fragrantica perfumes by name, brand, note, perfumer or URL. Get the note pyramid with vote weights, accords, longevity, sillage, season and gender votes, similar perfumes, pros and cons, shop prices and ~500 reviews each. No 300-profile or 1,000-result cap. 23 languages.

Pricing

from $0.60 / 1,000 perfume profiles

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Fragrantica Scraper: perfume notes, accords, community votes and reviews as clean data

Fragrantica Scraper: perfume notes, accords, community votes and reviews

Fragrantica Scraper turns Fragrantica, the largest perfume encyclopedia (140,000+ fragrances), into a clean dataset. Search by name, filter by brand, note, perfumer, fragrance family, gender, launch year or rating, or paste any Fragrantica URL. Each perfume comes back as one JSON record. It holds the note pyramid with the community's vote weight for each note, the main accords, the perfumers, and every community vote: rating, longevity, sillage, price value, seasons, day or night, gender and ownership. You also get the "reminds me of" perfumes, the summarized pros and cons, shop prices, and up to about 500 reviews per perfume.

  • The complete profile. Note pyramid with vote weights, accords with strength and color, perfumers, fragrance family, brand country and parent company, all vote breakdowns, similar perfumes with vote counts, pros and cons, shop offers, description, images, and links to all 23 language editions.
  • No 300-profile cap. Fragrantica allows each visitor about 12 page loads a minute. Scrapers that load pages from one IP stop after a few hundred profiles. This one spreads its requests over many proxy IPs and keeps each IP under the limit. 100 full profiles take about 1.5 minutes, and a whole brand or note runs in one go.
  • No 1,000-result cap. Fragrantica's search stops at 1,000 results. This Actor splits big result sets and keeps the sort order, so you can scrape an entire brand like Avon (1,385 perfumes), every perfume with oud, or the full catalogue.
  • ~500 reviews per perfume. Most scrapers return only the ~200 reviews on the perfume page. This one also collects the next 100 recent reviews and the 100 most popular positive and negative ones. Each comes with helpful votes and the reviewer's own longevity, sillage, season and gender votes.
  • Better filters than the website. Combine required notes, excluded notes, fragrance families, perfumers, brand type (niche, designer, celebrity), brand country, gender, launch years, minimum rating and minimum votes. Sort by popularity, rating, longevity or sillage.
  • 23 language editions. Note names, accords, descriptions, pros and cons and reviews come in the edition you pick, from English and German to Arabic, Japanese and Chinese.
  • Pay per result. No subscription, no Fragrantica account, no proxy setup. Export to JSON, CSV, Excel or Google Sheets, or call it from the API.

What can you do with Fragrantica data?

GoalHow
Build a perfume recommendation or "smells like" appUse mainAccords, the note pyramid with weight, and similarPerfumes with their votesYes / votesNo.
Enrich a perfume shop's cataloguePaste the Fragrantica URLs of your products, or search by name, and add notes, accords, longevity, sillage, seasons and descriptions to your product pages.
Find dupes and alternativesRead each perfume's similarPerfumes: the "this perfume reminds me of" list that members vote on.
Track trends and launchesFilter by yearFrom and a note or fragrance family, schedule the run monthly, and compare ratingCount, popularityScore and recentPopularityScore.
Benchmark brandsScrape a brand's whole line from its designer URL and compare ratings, longevity, price value and ownership (have / had / want) across products.
Sentiment and review analysisTurn on reviews, pick positive or negative ones, and feed reviewText and reviewerVotes to your NLP pipeline or an LLM.
Train or ground an AI modelExport the full catalogue as structured JSON: a ready-made dataset of 140,000+ perfumes with notes, accords and votes.

How it compares

What you needThis ActorTypical Fragrantica scrapers
Full profiles per runNo cap: 12 workers on separate IPs, ~70 per minute~300, then Fragrantica blocks the IP; ~15 per minute
Results per search, brand or noteAll of them (large sets are split)Up to 1,000
Reviews per perfume~500 (recent, popular positive, popular negative)~200
Note weights ("main notes according to your votes")Yes, per noteRarely
FiltersNotes (all of), excluded notes, families, perfumers, brands, brand type, brand country, gender, years, rating, votesFewer or none
SortPopularity, rating, longevity, sillagePopularity only
Shop prices, brand country, parent companyYesRarely

Quick start

  1. Click Try for free and sign in to Apify.
  2. Type a perfume name in Search queries, for example Baccarat Rouge 540, or paste a Fragrantica URL.
  3. For a first run, keep Max perfumes at 20.
  4. Click Start. When the run finishes, open the Output tab and export the data.
{
"searchQueries": ["Baccarat Rouge 540"],
"maxResults": 20
}

Input

Use any mix of search queries, URLs and filters. Filters narrow the search queries and the designer, note and perfumer URLs. With no query or URL, the filters search the whole catalogue.

FieldWhat it does
searchQueriesPerfume names, brands or collections, searched like on Fragrantica. Each query runs separately.
startUrlsFragrantica URLs from any language edition. A perfume page returns that perfume. A designer, note or perfumer page returns all of its perfumes. A search page URL runs that search with its filters.
maxResultsMaximum number of perfumes in total (reviews don't count). 0 means no limit.
sortBypopularity, rating, longevity or sillage.
brandsOnly these brands. Spelling is matched to Fragrantica's: maison francis finds Maison Francis Kurkdjian.
notes / excludedNotesPerfumes must contain all of notes and none of excludedNotes.
fragranceFamiliesOlfactory families such as Chypre Floral, Woody Aromatic or Oriental Vanilla.
perfumersOnly perfumes by these noses.
genderany, female, male or unisex.
brandTypeniche, designer (mainstream: not niche), celebrity or natural.
brandCountriesThe brand's home country, such as France or United Arab Emirates.
yearFrom / yearToLaunch year range.
minRating / minVotesMinimum average rating (3 to 4.5) and minimum number of rating votes.
scrapeDetailstrue (default): full profiles. false: fast, cheaper records from the search index only, thousands per minute.
includeReviewsAlso save reviews as separate records.
maxReviewsPerPerfumeReviews per perfume. 0 means all that visitors can see (~500).
reviewTypesAny of recent, positive, negative, collected in that order until the maximum is reached.
languageEdition to read: en, de, es, fr, it, nl, pl, pt, ro, cs, hu, sv, tr, el, ru, uk, sr, mn, he, ar, ja, zh, ko.
proxyConfigurationThe default Apify datacenter proxy works.

Output

The dataset holds three record types, marked by recordType. Missing values are null or an empty list, never left out, so every record of a type has the same columns.

Perfume profile (recordType: "perfume")

GroupFields
IdentityperfumeId, url, language, name, brand, brandUrl, fullTitle, gender, genderLabel, year, collection, fragranceFamily, fragranceFamilyEnglish
BrandbrandCountry, brandParentCompany, nicheBrand
Ratings and popularityratingValue, ratingCount, ratingDistribution (votes per star), reviewsCount, reviewsCountInLanguage, reviewsByLanguage, popularityScore, recentPopularityScore, lastReviewAt
ScentmainAccords (name, strength 0–100, color), notesTop, notesMiddle, notesBase, notesUnsorted (each note: name, ingredient, noteId, url, imageUrl, weight 0–1, voteScore), hasPyramid, allNotes, perfumers (name, url, imageUrl)
Community voteslongevity, sillage, priceValue (each votes, average, total), genderVotes, seasonVotes (winter, spring, summer, autumn, day, night), ownership (have, had, want)
OpinionssimilarPerfumes (perfumeId, name, brand, gender, url, imageUrl, votesYes, votesNo), pros and cons (text, textEnglish, votesYes, votesNo)
ShoppingshopOffers (shop, itemCount, priceMin, priceMax, currency)
ContentdescriptionHtml, descriptionText, descriptionMarkdown, imageUrl, imageUrlLarge, alternativeNames, languageUrls
RunreviewsScraped, sourceMode, searchQuery, position, source, scrapedAt, contentHash

contentHash changes when the rating, votes, notes or accords change, so you can spot updated perfumes between scheduled runs.

{
"recordType": "perfume",
"perfumeId": 31861,
"url": "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html",
"name": "Sauvage",
"brand": "Dior",
"brandCountry": "France",
"brandParentCompany": "LVMH",
"gender": "male",
"year": 2015,
"fragranceFamily": "Aromatic Fougere",
"ratingValue": 3.8474,
"ratingCount": 34752,
"ratingDistribution": { "1": 1904, "2": 4640, "3": 3670, "4": 11179, "5": 13359 },
"mainAccords": [
{ "name": "fresh spicy", "strength": 100, "color": "#83C928" },
{ "name": "amber", "strength": 70.84, "color": "#bc4d10" }
],
"notesTop": [
{
"name": "Calabrian bergamot",
"ingredient": "Bergamot",
"noteId": 75,
"url": "https://www.fragrantica.com/notes/Bergamot-75.html",
"imageUrl": "https://fimgs.net/mdimg/sastojci/t.75.jpg",
"weight": 0.804,
"voteScore": 4135
}
],
"perfumers": [{ "name": "François Demachy", "url": "https://www.fragrantica.com/noses/Fran%C3%A7ois_Demachy.html", "imageUrl": "https://frgs.me/mdimg/nosevi/fit.173.jpg" }],
"longevity": { "votes": { "veryWeak": 535, "weak": 945, "moderate": 6754, "longLasting": 10589, "eternal": 1821 }, "average": 3.5917, "total": 20644 },
"sillage": { "votes": { "intimate": 1341, "moderate": 8380, "strong": 9031, "enormous": 1753 }, "average": 2.546, "total": 20505 },
"seasonVotes": { "winter": 10399, "spring": 15355, "summer": 14300, "autumn": 14209, "day": 15205, "night": 13871 },
"ownership": { "have": 56013, "had": 19728, "want": 13463 },
"similarPerfumes": [
{ "perfumeId": 43402, "name": "Luna Rossa Carbon Eau de Toilette", "brand": "Prada", "votesYes": 2207, "votesNo": 507 }
],
"pros": [{ "text": "Good projection", "textEnglish": "Good projection", "votesYes": 1698, "votesNo": 109 }],
"cons": [{ "text": "In-your-face aroma chemicals", "textEnglish": "In-your-face aroma chemicals", "votesYes": 1222, "votesNo": 500 }]
}

Review (recordType: "review")

reviewId, perfumeId, perfumeName, brand, perfumeUrl, url, language, reviewCategory (recent, popularPositive, popularNegative), translatedFrom and originalReviewUrl (smaller editions also show reviews machine-translated from other editions; null for reviews written in the edition's language), authorName, authorUrl, authorAvatarUrl, datePublished, publishedAt, reviewText, reviewHtml, votesYes, votesNo, reviewerVotes (rating, longevity, sillage, priceValue, gender, ownership, seasons), reviewerSignaturePerfume, scrapedAt.

votesYes and votesNo (helpful votes) are filled for reviews beyond the first page; Fragrantica's page doesn't show them for the first ~210.

Listing (recordType: "perfume-listing", with scrapeDetails: false)

perfumeId, url, slug, name, brand, year, gender, collection, ratingValue, ratingCount, reviewsCount, reviewsCountInLanguage, reviewsByLanguage, popularityScore, recentPopularityScore, compoundPopularityScore, lastReviewAt, alternativeNames, imageUrl, imageUrlLarge, thumbnailUrl, language, sourceMode, searchQuery, position, source, scrapedAt.

Examples

Top-rated niche oud perfumes from recent years, without vanilla:

{
"notes": ["Oud"],
"excludedNotes": ["Vanilla"],
"brandType": "niche",
"yearFrom": 2020,
"minRating": "4",
"minVotes": 100,
"sortBy": "rating",
"maxResults": 100
}

A brand's whole line and a perfumer's work, from URLs:

{
"startUrls": [
{ "url": "https://www.fragrantica.com/designers/Maison-Francis-Kurkdjian.html" },
{ "url": "https://www.fragrantica.com/noses/Alberto_Morillas.html" }
],
"maxResults": 0
}

Negative reviews of best sellers, for sentiment analysis:

{
"searchQueries": ["Sauvage Dior", "Aventus Creed"],
"maxResults": 2,
"includeReviews": true,
"reviewTypes": ["negative"],
"maxReviewsPerPerfume": 0
}

Every perfume with at least one rating, as a fast feed in German:

{
"minVotes": 1,
"scrapeDetails": false,
"language": "de",
"maxResults": 0
}

Pricing

You pay only for the records saved. Platform usage and proxy are included.

RecordPrice per 1,000
Perfume profile$0.70 (down to $0.60 on higher Apify plans)
Review$0.30 (down to $0.25)
Listing (search index only)$0.20 (down to $0.15)

100 full profiles cost about $0.07, and 10,000 cost about $7. Set Max perfumes and Max reviews per perfume, or a spending limit on the run, to control the cost exactly.

Performance

Measured on Apify on 25 October 2026 with the default settings:

RunTime
100 full profilesabout 1.5 minutes
300 full profiles with up to 50 reviews each (9,053 reviews)about 6 minutes
1 perfume with all reviews (496)under 1.5 minutes
1,385 listings (a whole brand, search index only)about 20 seconds
16,000 listings (search index only)about 2 minutes

Reviews add a few requests per perfume when more than ~200 are wanted, so runs with many reviews per perfume take longer.

Known limitations

  • Pros and cons exist only for perfumes Fragrantica has summarized, mostly on the English edition.
  • Shop offers are the ones Fragrantica shows to US visitors, in USD.
  • Fragrantica shows visitors at most ~300 recent reviews and ~100 most popular positive and negative ones per perfume and edition; older reviews need a login and are not collected.
  • Sorting by longevity or sillage keeps Fragrantica's order for the first 1,000 results; beyond that, results come in batches.
  • Filters other than brands, notes, perfumers and fragranceFamilies use English values (France, not Frankreich).

For AI agents

Call epicscrapers/fragrantica-perfume-scraper with a minimal input:

{ "searchQueries": ["Baccarat Rouge 540"], "maxResults": 5 }

Each perfume is one item with recordType: "perfume". The key fields are name, brand, year, gender, ratingValue, ratingCount, mainAccords[].name, notesTop / notesMiddle / notesBase / notesUnsorted (name, weight), perfumers[].name, longevity.average (1–5), sillage.average (1–4), seasonVotes, similarPerfumes[].name, pros[].text, cons[].text and url. Add "includeReviews": true for review items (recordType: "review", reviewText, reviewerVotes). Use "scrapeDetails": false for fast lists of names, ratings and popularity.

FAQ

Do I need a Fragrantica account or API key? No. The Actor reads what Fragrantica shows to any visitor.

Can I scrape a perfume in another language? Yes. Set language, and paste URLs from any edition. Notes, accords, descriptions and reviews come in the chosen language; IDs are the same in all editions.

How do I keep my data up to date? Schedule the run (daily, weekly or monthly) in Apify and compare contentHash or ratingCount between runs.

Is it legal to scrape Fragrantica? The Actor collects publicly visible data. Reviews contain usernames, which are personal data in some jurisdictions; make sure your use complies with the laws that apply to you and with Fragrantica's terms.

Something not working, or a field you need? Open an issue on the Issues tab and it will be looked at quickly.