Fragrantica Scraper: Perfume Notes, Accords, Votes & Reviews
Pricing
from $0.60 / 1,000 perfume profiles
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

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?
| Goal | How |
|---|---|
| Build a perfume recommendation or "smells like" app | Use mainAccords, the note pyramid with weight, and similarPerfumes with their votesYes / votesNo. |
| Enrich a perfume shop's catalogue | Paste 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 alternatives | Read each perfume's similarPerfumes: the "this perfume reminds me of" list that members vote on. |
| Track trends and launches | Filter by yearFrom and a note or fragrance family, schedule the run monthly, and compare ratingCount, popularityScore and recentPopularityScore. |
| Benchmark brands | Scrape 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 analysis | Turn on reviews, pick positive or negative ones, and feed reviewText and reviewerVotes to your NLP pipeline or an LLM. |
| Train or ground an AI model | Export the full catalogue as structured JSON: a ready-made dataset of 140,000+ perfumes with notes, accords and votes. |
How it compares
| What you need | This Actor | Typical Fragrantica scrapers |
|---|---|---|
| Full profiles per run | No cap: 12 workers on separate IPs, ~70 per minute | ~300, then Fragrantica blocks the IP; ~15 per minute |
| Results per search, brand or note | All 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 note | Rarely |
| Filters | Notes (all of), excluded notes, families, perfumers, brands, brand type, brand country, gender, years, rating, votes | Fewer or none |
| Sort | Popularity, rating, longevity, sillage | Popularity only |
| Shop prices, brand country, parent company | Yes | Rarely |
Quick start
- Click Try for free and sign in to Apify.
- Type a perfume name in Search queries, for example
Baccarat Rouge 540, or paste a Fragrantica URL. - For a first run, keep Max perfumes at
20. - 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.
| Field | What it does |
|---|---|
searchQueries | Perfume names, brands or collections, searched like on Fragrantica. Each query runs separately. |
startUrls | Fragrantica 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. |
maxResults | Maximum number of perfumes in total (reviews don't count). 0 means no limit. |
sortBy | popularity, rating, longevity or sillage. |
brands | Only these brands. Spelling is matched to Fragrantica's: maison francis finds Maison Francis Kurkdjian. |
notes / excludedNotes | Perfumes must contain all of notes and none of excludedNotes. |
fragranceFamilies | Olfactory families such as Chypre Floral, Woody Aromatic or Oriental Vanilla. |
perfumers | Only perfumes by these noses. |
gender | any, female, male or unisex. |
brandType | niche, designer (mainstream: not niche), celebrity or natural. |
brandCountries | The brand's home country, such as France or United Arab Emirates. |
yearFrom / yearTo | Launch year range. |
minRating / minVotes | Minimum average rating (3 to 4.5) and minimum number of rating votes. |
scrapeDetails | true (default): full profiles. false: fast, cheaper records from the search index only, thousands per minute. |
includeReviews | Also save reviews as separate records. |
maxReviewsPerPerfume | Reviews per perfume. 0 means all that visitors can see (~500). |
reviewTypes | Any of recent, positive, negative, collected in that order until the maximum is reached. |
language | Edition 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. |
proxyConfiguration | The 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")
| Group | Fields |
|---|---|
| Identity | perfumeId, url, language, name, brand, brandUrl, fullTitle, gender, genderLabel, year, collection, fragranceFamily, fragranceFamilyEnglish |
| Brand | brandCountry, brandParentCompany, nicheBrand |
| Ratings and popularity | ratingValue, ratingCount, ratingDistribution (votes per star), reviewsCount, reviewsCountInLanguage, reviewsByLanguage, popularityScore, recentPopularityScore, lastReviewAt |
| Scent | mainAccords (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 votes | longevity, sillage, priceValue (each votes, average, total), genderVotes, seasonVotes (winter, spring, summer, autumn, day, night), ownership (have, had, want) |
| Opinions | similarPerfumes (perfumeId, name, brand, gender, url, imageUrl, votesYes, votesNo), pros and cons (text, textEnglish, votesYes, votesNo) |
| Shopping | shopOffers (shop, itemCount, priceMin, priceMax, currency) |
| Content | descriptionHtml, descriptionText, descriptionMarkdown, imageUrl, imageUrlLarge, alternativeNames, languageUrls |
| Run | reviewsScraped, 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.
| Record | Price 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:
| Run | Time |
|---|---|
| 100 full profiles | about 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,perfumersandfragranceFamiliesuse English values (France, notFrankreich).
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.