Fragrantica Scraper — Perfume Profiles & Notes
Pricing
from $6.00 / 1,000 fragrantica perfume profile scrapeds
Fragrantica Scraper — Perfume Profiles & Notes
Extract structured Fragrantica perfume profiles with brand, perfumer, note pyramid, main accords, rating, launch year and source provenance. For use with Fragrantica's authorization.
Pricing
from $6.00 / 1,000 fragrantica perfume profile scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
What is Fragrantica Scraper — Perfume Profiles & Notes?
Fragrantica Scraper extracts structured perfume profiles from Fragrantica perfume-page URLs. Each dataset row is one fragrance with its name, brand and brand page, gender, fragrance family, launch year, credited perfumers, ordered main accords, top, middle and base notes, rating and rating count, editorial description, bottle image and source URL. Fragrance brands, retailers, catalog teams, trend researchers and AI agents use it to enrich product catalogs and compare scent profiles, for use with Fragrantica's authorization.
Why teams use it
- The full note pyramid.
topNotes,middleNotesandbaseNotesarrive as clean arrays, ready to compare or index. - Accords in order.
mainAccordskeeps Fragrantica's ranking, so the dominant character of a scent comes first. - Classification fields.
gender,fragranceFamilyandlaunchYearmake filtering and grouping simple. - Credits and ratings.
perfumers,ratingandratingCountsit beside the notes. - Provenance on every row.
sourceUrl,productIdandscrapedAttie each record back to its page.
Best fit for this Actor
- Designed for Fragrantica perfume pages under
/perfume/...htmlthat you are authorized to collect. - Best fit for catalog enrichment, assortment comparison by note or accord, trend analysis and building a fragrance knowledge base for search or RAG.
- Works with a list of known perfume URLs; keep a sheet of the fragrances you care about and paste their page links.
- When you want retail prices and listings for the same fragrances, continue with Sephora Product Scraper for those products.
Example workflow: enriching a fragrance catalog
A merchandising analyst at a perfume retailer starts with 40 Fragrantica URLs for the men's fragrances in her catalog. She sets maxResults to 40 and keeps useApifyProxy on. The dataset returns each fragrance's family, launch year, accords and full note pyramid. She joins the rows to her catalog by name, adds mainAccords as shopper-facing filters such as "citrus" and "woody", compares which notes are most common across bestsellers, then exports the enriched catalog to her product-information system.
Input
{"startUrls": [{ "url": "https://www.fragrantica.com/perfume/Aramis/Tuscany-Per-Uomo-123.html" }],"maxResults": 5,"proxyCountryCode": "US","useApifyProxy": true}
| Field | Type | What it controls |
|---|---|---|
startUrls | array | Fragrantica perfume-page URLs as { "url": "..." }. Each starts with /perfume/ and ends in .html. |
maxResults | integer | Perfume profiles saved in the run, 1 to 100. Default 5. |
proxyCountryCode | string | Residential proxy country: US, GB or DE. Default US. |
useApifyProxy | boolean | Route requests through Apify Residential Proxy. Default true, the right setting for cloud runs. |
Repeated URLs are merged before any request, so each perfume is collected once.
Output
One dataset row per perfume profile.
| Field | What it contains |
|---|---|
name, brand, brandUrl | Perfume name, designer and designer page |
productId, sourceUrl | Fragrantica perfume ID and page URL |
gender, fragranceFamily, launchYear | Classification and launch year |
perfumers | Credited perfumer or perfumers |
mainAccords | Main accords in Fragrantica's order |
topNotes, middleNotes, baseNotes | The note pyramid |
rating, ratingCount | Community rating and number of ratings |
description, imageUrl | Profile description and bottle image URL |
scrapedAt | Collection time in ISO 8601 |
{"sourceUrl": "https://www.fragrantica.com/perfume/Aramis/Tuscany-Per-Uomo-123.html","productId": "123","name": "Tuscany Per Uomo Aramis for men","brand": "Aramis","brandUrl": "https://www.fragrantica.com/designers/Aramis.html","gender": "men","fragranceFamily": "Aromatic Fougere","launchYear": 1984,"perfumers": ["Francis Deleamont"],"mainAccords": ["citrus", "aromatic", "fresh spicy", "anis", "woody", "leather", "soft spicy", "lavender", "warm spicy", "sweet"],"topNotes": ["Lemon", "Lavender", "Bergamot", "Lime"],"middleNotes": ["Anise", "Caraway", "Tarragon", "Orange Blossom"],"baseNotes": ["Leather", "Oakmoss", "Basil", "Sandalwood", "Patchouli", "Cinnamon", "Tonka Bean"],"rating": 4.33,"ratingCount": 1361,"description": "Tuscany Per Uomo by Aramis is a Aromatic Fougere fragrance for men. Tuscany Per Uomo was launched in 1984. The nose behind this fragrance is Francis Deleamont.","imageUrl": "https://fimgs.net/mdimg/perfume-thumbs/375x500.123.jpg","scrapedAt": "2026-10-01T01:44:33.926Z"}
A field shows null, or an empty array for notes and accords, when that profile page does not display it. Each run also writes OUTPUT and RUN_SUMMARY to the default key-value store with the run outcome, such as COMPLETE, PARTIAL or INVALID_INPUT.
Pricing
This Actor uses Pay per event plus Apify platform usage. The events are:
- Actor Start, once per run.
- Fragrantica Perfume Profile Scraped, once for each validated perfume profile saved to the dataset.
Worked example: five perfume URLs that all return profiles cost one Actor Start event plus five profile events, plus the residential proxy and compute usage of the run. maxResults caps the number of profile events. Check the live Pricing tab on this page for current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~fragrantica-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://www.fragrantica.com/perfume/Aramis/Tuscany-Per-Uomo-123.html"}], "maxResults": 1}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/fragrantica-scraper").call(run_input={"startUrls": [{"url": "https://www.fragrantica.com/perfume/Aramis/Tuscany-Per-Uomo-123.html"}],"maxResults": 1,})for perfume in client.dataset(run["defaultDatasetId"]).iterate_items():print(perfume["name"], perfume["fragranceFamily"], perfume["mainAccords"][:3])
Use it with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or another MCP client through Apify MCP, then ask:
Extract the Fragrantica profiles for these three perfume URLs and compare their note pyramids. Tell me which notes they share and which one leans most woody.
The agent reads profile rows with get-dataset-items, can cite sourceUrl and scrapedAt as provenance, and checks OUTPUT.outcome for the run result. Cost scales with saved profiles, and maxResults keeps the scope bounded.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A list of fragrance names | Open each on Fragrantica and copy its /perfume/...html URL | Valid inputs for every fragrance |
| A large catalog | Split into batches and set maxResults per batch | Predictable runs and spend |
| Regional site behavior | Choose proxyCountryCode GB or DE | Pages served from that region |
| Building filters | Use mainAccords and fragranceFamily as facets | Shopper-friendly scent categories |
| Comparing scents | Compare the three note arrays side by side | Clear overlap between fragrances |
Builder's note
I built this for catalog and research teams who need the note pyramid as data rather than as a picture on a page. I designed the parser around Fragrantica's visible headings and note links, and every record is validated before it is saved and charged, so a row in the dataset is always a complete profile. I kept the scope to perfume pages because I found a narrow, stable record is what downstream catalogs and agents rely on.
FAQ
Can I search Fragrantica by keyword?
The Actor works from perfume-page URLs. Find the fragrance on Fragrantica, copy its /perfume/...html link and add it to startUrls.
Does it collect community reviews?
It returns the profile's rating and rating count. Review text sits outside this Actor's profile scope.
Why is a field empty on one profile?
Some profiles leave out a perfumer credit, launch year or rating. The Actor keeps those fields null rather than guessing.
Responsible use
Run this Actor only where you have authorization from Fragrantica or another applicable legal basis to access and use the requested data, and keep storage and redistribution within your agreement, the site terms and applicable law. The Actor reads public perfume pages and uses no login. Fragrantica is a trademark of its owner, and this independent Actor is not affiliated with or endorsed by Fragrantica. For questions, open a ticket in the Issues tab.