Fragrantica Perfume Scraper — Notes, Accords, Votes & Reviews
Pricing
from $0.77 / 1,000 perfume profiles
Fragrantica Perfume Scraper — Notes, Accords, Votes & Reviews
Extract Fragrantica perfume profiles: note pyramid, accords, perfumers, ratings, and full community votes for longevity, sillage, seasons, gender and price value. Similar perfumes, pros and cons, optional reviews. Search, filters or URLs. 23 languages.
Pricing
from $0.77 / 1,000 perfume profiles
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
7 days ago
Last modified
Categories
Share
Fragrantica Perfume Scraper

Extract perfume profiles from Fragrantica.com: the full note pyramid, main accords with strength, perfumers, ratings, and the complete community votes for longevity, sillage, seasons, gender and price value. Search by keyword, filter by brand, note, perfumer, gender, year or rating, or paste any Fragrantica URL. Reviews are optional. No API key required.
Why this scraper?
🗳️ The full community votes
Every vote breakdown Fragrantica shows on a perfume page: longevity (very weak to eternal), sillage (intimate to enormous), price value, winter/spring/summer/autumn, day/night, gender (female to male) and how many members have, had or want the perfume. Each comes with its vote counts, total and average.
🌸 Complete scent profile
Top, middle and base notes with note IDs, links and relative weight, flat note lists for perfumes without a pyramid, main accords with strength and colour, fragrance family, perfumers, launch year, awards and description.
🔎 Search and filters that match the site
Keyword search, brands, notes (all must be present), perfumers, gender, launch year range, minimum rating, minimum number of votes and niche brands only. Large brands are collected in full, past Fragrantica's own 1,000-result search limit.
🔗 Related perfumes and opinions
The "This perfume reminds me of" list with yes and no votes for each match, and Fragrantica's summarised pros and cons with agree and disagree counts.
📊 Exact popularity data
Exact review counts per language (not the rounded number on the page), the rating distribution from 1 to 5 stars, popularity scores, the date of the latest review and a 29-day visitor trend.
💬 Reviews with reviewer votes
Optional review records: text, date, author name, whether it is a recent or a popular positive or negative review, and the votes that reviewer cast for the perfume.
🌍 23 language editions
English, German, Spanish, French, Italian, Dutch, Polish, Portuguese, Romanian, Czech, Hungarian, Swedish, Turkish, Greek, Russian, Ukrainian, Serbian, Mongolian, Hebrew, Arabic, Japanese, Chinese and Korean. Notes, accords, descriptions and reviews come in the chosen language.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | array | [] | Keywords to search: a perfume name, brand or collection. Each query runs separately. |
startUrls | array | [] | Fragrantica perfume, designer, note, perfumer or search URLs. Designer, note and perfumer pages return every perfume listed under them. |
brands | array | [] | Only perfumes from these brands. Names are matched to Fragrantica's spelling. |
notes | array | [] | Only perfumes that contain all of these notes (English names). |
perfumers | array | [] | Only perfumes by one of these perfumers. |
gender | string | "any" | any, female, male or unisex. |
yearFrom | integer | 0 | Only perfumes launched in or after this year. 0 means no limit. |
yearTo | integer | 0 | Only perfumes launched in or before this year. 0 means no limit. |
minRating | string | "any" | Minimum average rating: any, 3, 3.5, 4 or 4.5. |
minVotes | integer | 0 | Minimum number of rating votes. |
nicheOnly | boolean | false | Only perfumes from niche brands. |
scrapeDetails | boolean | true | On: full perfume profiles. Off: faster, cheaper listing records with search data only. |
includeCommunityVotes | boolean | true | Adds the vote breakdowns, similar perfumes and pros and cons. Turn off for faster runs without these fields. |
includeReviews | boolean | false | Also save reviews as separate records. |
maxReviewsPerPerfume | integer | 20 | Maximum reviews per perfume. 0 means all reviews on the page (up to about 210). |
language | string | "en" | Fragrantica language edition. |
maxResults | integer | 20 | Maximum number of perfumes across all inputs. Reviews do not count. 0 means no limit. |
proxyConfiguration | object | Apify Proxy | Proxy settings. The default works; change only if you have a reason to. |
With no search, filter or URL, the actor searches "Sauvage" as an example.
Output schema
The dataset holds three record types, marked by recordType. Fields the source does not publish for a perfume are returned as null or an empty list rather than omitted.
Perfume profile (recordType: "perfume")
| Field | Type | Description |
|---|---|---|
recordType | string | Always perfume. |
perfumeId | integer | Fragrantica perfume ID. |
url | string | Perfume page URL in the chosen language edition. |
language | string | Language edition code, e.g. en. |
name | string | Perfume name. |
brand | string | Brand (designer) name. |
brandUrl | string | Brand page URL. |
fullTitle | string | Page title as shown, e.g. "Coco Mademoiselle Chanel for women". |
gender | string | female, male or unisex. |
genderLabel | string | Gender label as shown on the page, in the chosen language. |
year | integer | Launch year (null if unknown). |
collection | string | Collection the perfume belongs to (null if none). |
fragranceFamily | string | Fragrance family, e.g. "Oriental Floral" (English, German, Italian and Spanish editions; null if not classified). |
ratingValue | number | Average rating out of 5 (null when nobody has rated it). |
ratingCount | integer | Number of rating votes. |
ratingDistribution | object | Votes per star, keys 1 to 5 (null without community votes). |
reviewsCount | integer | Exact number of reviews across all language editions. |
reviewsByLanguage | object | Exact review count per language code. |
popularityScore | integer | Fragrantica popularity score. |
recentPopularityScore | integer | Popularity score over the recent period. |
lastReviewAt | string | ISO date and time of the most recent review (null if none). |
mainAccords | array | Main accords: name, strength (0–100, relative to the strongest), color. |
notesTop | array | Top notes: name, noteId, url, imageUrl, weight (0–1, relative prominence). |
notesMiddle | array | Middle (heart) notes, same shape as notesTop. |
notesBase | array | Base notes, same shape as notesTop. |
notesUnsorted | array | Notes of perfumes without a pyramid, same shape. |
hasPyramid | boolean | Whether the notes are split into top, middle and base. |
allNotes | array | All note names in one list. |
perfumers | array | Perfumers: name, url (empty if not credited). |
voteDataAvailable | boolean | Whether the community vote fields below were collected. |
longevity | object | votes (veryWeak, weak, moderate, longLasting, eternal), average (1–5), total. |
sillage | object | votes (intimate, moderate, strong, enormous), average (1–4), total. |
priceValue | object | votes (wayOverpriced, overpriced, ok, goodValue, greatValue), average (1–5), total. |
genderVotes | object | votes (female, moreFemale, unisex, moreMale, male), total. |
seasonVotes | object | Votes for winter, spring, summer, autumn, day, night. |
ownership | object | Members who have, had or want the perfume. |
similarPerfumes | array | "Reminds me of" matches: perfumeId, name, brand, gender, url, imageUrl, votesYes, votesNo. |
pros | array | Summarised pros: text, shortText, votesYes, votesNo (English edition only). |
cons | array | Summarised cons, same shape as pros (English edition only). |
awards | array | Awards the perfume won (empty if none). |
shopOffers | array | Shop offers listed on the page: shop, itemCount, priceMin, priceMax, currency, approximate (empty if none). |
descriptionHtml | string | Fragrantica's description as HTML. |
descriptionText | string | Description as plain text. |
descriptionMarkdown | string | Description as Markdown. |
imageUrl | string | Bottle image, 375 × 500. |
imageUrlLarge | string | Large bottle image. |
alternativeNames | array | Names in other scripts: language, name. |
languageUrls | object | URLs of the same perfume in the other language editions, by language code. |
visitorTrend | array | Daily page visitors over the last 29 days. |
reviewsScraped | integer | Number of review records saved for this perfume in this run. |
sourceMode | string | How the perfume was found: search, filter, designer, note, perfumer or url. |
searchQuery | string | Search query that found it (null for other modes). |
position | integer | Position in the search or listing results. |
source | string | Always fragrantica.com. |
scrapedAt | string | ISO timestamp of extraction. |
contentHash | string | Hash of the key values, for change detection between runs. |
Review (recordType: "review", with includeReviews: true)
| Field | Type | Description |
|---|---|---|
recordType | string | Always review. |
reviewId | integer | Fragrantica review ID. |
perfumeId | integer | ID of the perfume reviewed. |
perfumeName | string | Perfume name. |
brand | string | Brand name. |
perfumeUrl | string | Perfume page URL. |
url | string | Direct link to the review. |
language | string | Language edition code. |
reviewCategory | string | recent, popularPositive or popularNegative. |
authorName | string | Reviewer's display name. |
datePublished | string | Review date, YYYY-MM-DD. |
reviewText | string | Review text. |
reviewerVotes | object | The reviewer's own votes: rating, longevity, sillage, gender, ownership, seasons (null where the reviewer did not vote). |
reviewerSignaturePerfume | string | URL of the perfume the reviewer shows as their signature (null if none). |
source | string | Always fragrantica.com. |
scrapedAt | string | ISO timestamp of extraction. |
Listing (recordType: "perfume-listing", with scrapeDetails: false)
| Field | Type | Description |
|---|---|---|
recordType | string | Always perfume-listing. |
perfumeId | integer | Fragrantica perfume ID. |
name | string | Perfume name. |
brand | string | Brand name. |
url | string | Perfume page URL. |
slug | string | URL path of the perfume, e.g. Dior/Sauvage. |
gender | string | female, male or unisex. |
year | integer | Launch year (null if unknown). |
collection | string | Collection (null if none). |
ratingValue | number | Average rating out of 5, four decimals. |
ratingCount | integer | Number of rating votes. |
reviewsCount | integer | Exact review count across all languages. |
reviewsByLanguage | object | Review count per language code. |
popularityScore | integer | Popularity score. |
recentPopularityScore | integer | Recent popularity score. |
compoundPopularityScore | integer | Combined popularity score. |
lastReviewAt | string | ISO date and time of the latest review (null if none). |
alternativeNames | array | Names in other scripts: language, name. |
imageUrl | string | Bottle image. |
thumbnailUrl | string | Small bottle image. |
language | string | Language edition code. |
sourceMode | string | How the perfume was found. |
searchQuery | string | Search query that found it (null for other modes). |
position | integer | Position in the results. |
source | string | Always fragrantica.com. |
scrapedAt | string | ISO timestamp of extraction. |
Example record
{"recordType": "perfume","perfumeId": 31861,"url": "https://www.fragrantica.com/perfume/Dior/Sauvage-31861.html","language": "en","name": "Sauvage","brand": "Dior","brandUrl": "https://www.fragrantica.com/designers/Dior.html","fullTitle": "Sauvage Dior for men","gender": "male","genderLabel": "for men","year": 2015,"collection": "Sauvage Collection","fragranceFamily": "Aromatic Fougere","ratingValue": 3.8496,"ratingCount": 34238,"ratingDistribution": {"1": 1869,"2": 4572,"3": 3592,"4": 11011,"5": 13194},"reviewsCount": 6770,"reviewsByLanguage": {"en": 4154,"ru": 664,"es": 640,"pt": 628,"sr": 160,"pl": 145,"it": 144},"popularityScore": 120540,"recentPopularityScore": 29848,"lastReviewAt": "2026-07-20T05:34:50.000Z","mainAccords": [{"name": "fresh spicy","strength": 100,"color": "#83C928"},{"name": "amber","strength": 70.85,"color": "#bc4d10"},{"name": "citrus","strength": 69.42,"color": "#F9FF52"}],"notesTop": [{"name": "Calabrian bergamot","noteId": 75,"url": "https://www.fragrantica.com/notes/Bergamot-75.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.75.jpg","weight": 1},{"name": "Pepper","noteId": 158,"url": "https://www.fragrantica.com/notes/Pepper-158.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.158.jpg","weight": 1}],"notesMiddle": [{"name": "Sichuan Pepper","noteId": 213,"url": "https://www.fragrantica.com/notes/Sichuan-Pepper-213.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.213.jpg","weight": 0.9567},{"name": "Lavender","noteId": 1,"url": "https://www.fragrantica.com/notes/Lavender-1.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.1.jpg","weight": 0.9232}],"notesBase": [{"name": "Ambroxan","noteId": 563,"url": "https://www.fragrantica.com/notes/Ambroxan-563.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.563.jpg","weight": 1},{"name": "Cedar","noteId": 41,"url": "https://www.fragrantica.com/notes/Cedar-41.html","imageUrl": "https://fimgs.net/mdimg/sastojci/t.41.jpg","weight": 0.8356}],"notesUnsorted": [],"hasPyramid": true,"allNotes": ["Calabrian bergamot","Pepper","Sichuan Pepper","Lavender","Pink Pepper","Vetiver","Patchouli","Geranium","elemi","Ambroxan","Cedar","Labdanum"],"perfumers": [{"name": "François Demachy","url": "https://www.fragrantica.com/noses/Fran%C3%A7ois_Demachy.html"}],"voteDataAvailable": true,"longevity": {"votes": {"veryWeak": 534,"weak": 938,"moderate": 6705,"longLasting": 10519,"eternal": 1820},"average": 3.5924,"total": 20516},"sillage": {"votes": {"intimate": 1336,"moderate": 8342,"strong": 8958,"enormous": 1746},"average": 2.5453,"total": 20382},"priceValue": {"votes": {"wayOverpriced": 1227,"overpriced": 4460,"ok": 7561,"goodValue": 1936,"greatValue": 425},"average": 2.7355,"total": 15609},"genderVotes": {"votes": {"female": 150,"moreFemale": 39,"unisex": 576,"moreMale": 2700,"male": 13468},"total": 16933},"seasonVotes": {"winter": 10249,"spring": 15159,"summer": 14118,"autumn": 14014,"day": 15021,"night": 13704},"ownership": {"have": 55004,"had": 19230,"want": 13209},"similarPerfumes": [{"perfumeId": 43402,"name": "Luna Rossa Carbon Eau de Toilette","brand": "Prada","gender": "male","url": "https://www.fragrantica.com/perfume/Prada/Luna-Rossa-Carbon-Eau-de-Toilette-43402.html","imageUrl": "https://fimgs.net/mdimg/perfume/s.43402.jpg","votesYes": 2195,"votesNo": 506}],"pros": [{"text": "Good projection","shortText": null,"votesYes": 1678,"votesNo": 107}],"cons": [{"text": "In-your-face aroma chemicals","shortText": null,"votesYes": 1199,"votesNo": 501}],"awards": [],"shopOffers": [],"descriptionHtml": "<p><b>Sauvage</b> by <b>Dior</b> is a Aromatic Fougere fragrance for men. <b>Sauvage</b> was launched in 2015. ...</p>","descriptionText": "Sauvage by Dior is a Aromatic Fougere fragrance for men. Sauvage was launched in 2015. The nose behind this fragrance is François Demachy. Top notes a ...","descriptionMarkdown": "**Sauvage** by **Dior** is a Aromatic Fougere fragrance for men. **Sauvage** was launched ...","imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/375x500.31861.jpg","imageUrlLarge": "https://fimgs.net/mdimg/perfume/o.31861.jpg","alternativeNames": [{"language": "ar","name": "ديور سوفاج"},{"language": "gr","name": "Ντιόρ Σοβάζ"}],"languageUrls": {"de": "https://www.fragrantica.de/Parfum/Dior/Sauvage-31861.html","es": "https://www.fragrantica.es/perfume/Dior/Sauvage-31861.html"},"visitorTrend": [2252,2303,2362,2448,2453],"reviewsScraped": 0,"sourceMode": "search","searchQuery": "Sauvage","position": 1,"source": "fragrantica.com","scrapedAt": "2026-09-19T13:34:08.225Z","contentHash": "aeb07ffe1ddb2dc8"}
Examples
Search for perfumes by name, with reviews:
{"searchQueries": ["Baccarat Rouge 540", "Aventus"],"includeReviews": true,"maxReviewsPerPerfume": 10,"maxResults": 20}
Top-rated niche perfumes with oud from recent years:
{"notes": ["Oud"],"nicheOnly": true,"yearFrom": 2022,"minRating": "4","minVotes": 300,"maxResults": 100}
Every perfume of a brand or perfumer from a Fragrantica URL:
{"startUrls": [{ "url": "https://www.fragrantica.com/designers/Maison-Francis-Kurkdjian.html" },{ "url": "https://www.fragrantica.com/noses/Alberto_Morillas.html" }],"maxResults": 0}
Fast catalogue feed of a brand, search data only, in German:
{"brands": ["Lattafa"],"scrapeDetails": false,"language": "de","maxResults": 0}
💰 Pricing
$0.79 per 1,000 perfume profiles — you only pay for records that are saved. Failed retries are never charged.
| Perfume profiles | Cost |
|---|---|
| 100 | ~$0.08 |
| 1,000 | ~$0.79 |
| 10,000 | ~$7.90 |
| 100,000 | ~$79.00 |
| Record type | Price per 1,000 |
|---|---|
| Perfume profile | $0.79 |
| Review | $0.39 |
| Listing (search data only) | $0.29 |
Each run also carries a start fee of $0.001 per GB of memory: $0.008 at the default 8 GB, $0.001 for listing runs on 1 GB.
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.77 per 1,000 profiles, $0.37 per 1,000 reviews and $0.27 per 1,000 listings. Use Max perfumes and Max reviews per perfume to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 20 full profiles | under 1 minute |
| 100 full profiles | about 2 minutes |
| 1,000 full profiles | 15–20 minutes |
| 1,000 listings | under 30 seconds |
Known limitations
- Pros and cons are published on the English edition only; other editions return empty lists.
- Fragrance family is read from the English, German, Italian and Spanish descriptions; other editions return null.
- Reviews are limited to those shown on the perfume page: about 200 of the most recent plus the most popular positive and negative ones.
- Fragrantica's per-note votes ("main notes according to your votes") are not included.
Technical details
- Source: fragrantica.com and its 22 other language editions
- Coverage: over 140,000 perfumes, searchable by name, brand, note, perfumer, gender, year and rating
- Memory: 8 GB default for full profiles with community votes; 1 GB is enough for listings or profiles without votes
- Retry: automatic retry on network errors with exponential backoff and session rotation
Rate this actor
If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl