The Most Comprehensive Beauty Products API
Query normalized beauty products and ingredient records with exact on-label ingredient order, research-backed irritancy and comedogenicity ratings, chemical identifiers, and clean product images.
Data updated as at 17 August 2026. See what changed.
Free testing tier · Paid plans from $40/month · 10,000 calls included · Cancel anytime
{
"results": [
{
"id": "a4e268cd-65f6-5115-97ca-833d91773500",
"brand": "The Ordinary",
"name": "Niacinamide Powder",
"category": "skincare",
"image_url": "https://images.thebeautyapi.com/a4e268cd-65f6-5115-97ca-833d91773500.jpg"
},
{
"id": "06d9476a-397b-5f61-abc8-640b30a9ae23",
"brand": "The Ordinary",
"name": "Niacinamide 10% + Zinc 1%",
"category": "skincare",
"image_url": "https://images.thebeautyapi.com/06d9476a-397b-5f61-abc8-640b30a9ae23.jpg"
},
{
"id": "435e2da6-e868-5ecc-af76-2838c06259f0",
"brand": "The Ordinary",
"name": "Niacinamide 5% Face & Body Emulsion",
"category": "skincare",
"image_url": "https://images.thebeautyapi.com/435e2da6-e868-5ecc-af76-2838c06259f0.jpg"
},
{
"id": "f4966006-6f8d-55df-838c-024f508fb0b1",
"brand": "The Ordinary",
"name": "Niacinamide 5% Face And Body Emulsion",
"category": "skincare",
"image_url": "https://images.thebeautyapi.com/f4966006-6f8d-55df-838c-024f508fb0b1.jpg"
}
],
"pagination": { "page": 1, "has_more": false, "total": 4 }
}{
"id": "06d9476a-397b-5f61-abc8-640b30a9ae23",
"brand": "The Ordinary",
"name": "Niacinamide 10% + Zinc 1%",
"image_url": "https://images.thebeautyapi.com/06d9476a-397b-5f61-abc8-640b30a9ae23.jpg",
"category": "skincare",
"origin": "Canada",
"contains_fragrance": false,
"contains_drying_alcohol": false,
"contains_parabens": false,
"contains_sulfates": false,
"contains_silicones": false, "ingredients": [
{
"position": 0,
"label_name": "Aqua (Water)",
"concentration": null,
"id": "2ba7df6d-7d8a-5935-af3a-f0bb7f03fb53",
"name": "Water",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["solvent"],
"cas_number": "7732-18-5",
"ec_number": "231-791-2",
"ph_eur_name": "Aqua",
"iupac_name": null,
"other_names": "Aqua",
"category": null
},
{
"position": 1,
"label_name": "Niacinamide 10.0%",
"concentration": 10,
"id": "a1526dea-37d1-5904-9106-be583378339b",
"name": "Niacinamide",
"rating": "direct actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["smoothing"],
"cas_number": "98-92-0",
"ec_number": "202-713-4",
"ph_eur_name": "Nicotinamidum",
"iupac_name": "3-Pyridinecarboxamide",
"other_names": "vitamin B3, nicotinamide",
"category": null
},
{
"position": 2,
"label_name": "Pentylene Glycol",
"concentration": null,
"id": "d7d08541-900e-557b-9fb9-d831f90f2e40",
"name": "Pentylene Glycol",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["skin conditioning", "solvent"],
"cas_number": "5343-92-0",
"ec_number": "226-285-3",
"ph_eur_name": null,
"iupac_name": "1,2-Dihydroxypentane",
"other_names": null,
"category": null
},
{
"position": 3,
"label_name": "Zinc Pca 1.0%",
"concentration": 1,
"id": "5d56599a-2ec2-5c65-9c8d-c0abe86cdf8f",
"name": "Zinc Pca",
"rating": "supporting actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["humectant", "skin conditioning"],
"cas_number": "68107-75-5 / 15454-75-8",
"ec_number": "268-475-9 / 239-473-5",
"ph_eur_name": null,
"iupac_name": "Proline, 5-Oxo-, Zinc Salt",
"other_names": null,
"category": null
},
{
"position": 4,
"label_name": "Dimethyl Isosorbide",
"concentration": null,
"id": "2058a735-2ebb-594b-9d09-2d372a008cff",
"name": "Dimethyl Isosorbide",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["solvent", "viscosity controlling"],
"cas_number": "5306-85-4",
"ec_number": "226-159-8",
"ph_eur_name": null,
"iupac_name": "1,4:3,6-Dianhydro-2,5-Di-O-Methyl-D-Glucitol",
"other_names": null,
"category": null
},
{
"position": 5,
"label_name": "Tamarindus Indica Seed Gum",
"concentration": null,
"id": "efafc7e2-4f95-5560-ba43-6f4e2dcd4504",
"name": "Tamarindus Indica Seed Gum",
"rating": "supporting actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["emulsion stabilising", "viscosity controlling"],
"cas_number": "84961-62-6",
"ec_number": "284-651-8",
"ph_eur_name": null,
"iupac_name": null,
"other_names": "Tamarind Seed Gum",
"category": null
},
{
"position": 6,
"label_name": "Xanthan Gum",
"concentration": null,
"id": "43244e9c-efda-5f62-839d-609da98a5d1c",
"name": "Xanthan Gum",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["binding", "emulsifying", "emulsion stabilising", "gel forming", "skin conditioning", "surfactant", "viscosity controlling"],
"cas_number": "11138-66-2",
"ec_number": "234-394-2",
"ph_eur_name": "Gummi Xanthanum",
"iupac_name": null,
"other_names": null,
"category": null
},
{
"position": 7,
"label_name": "Isoceteth-20",
"concentration": null,
"id": "a0bcad8e-9389-5c60-bd35-a529ce1c4382",
"name": "Isoceteth-20",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["emulsifying", "surfactant"],
"cas_number": null,
"ec_number": null,
"ph_eur_name": null,
"iupac_name": null,
"other_names": null,
"category": null
},
{
"position": 8,
"label_name": "Ethoxydiglycol",
"concentration": null,
"id": "c995e7ef-6a2a-5be4-af64-6c2925670cd9",
"name": "Ethoxydiglycol",
"rating": null,
"irritancy": "0",
"comedogenicity": "0",
"functions": ["humectant", "perfuming", "solvent"],
"cas_number": "111-90-0",
"ec_number": "203-919-7",
"ph_eur_name": null,
"iupac_name": "2-(2-Ethoxyethoxy)Ethanol; Carbitol; Diethylene Glycol Monoethyl Ether; Degee",
"other_names": null,
"category": null
},
{
"position": 9,
"label_name": "Phenoxyethanol",
"concentration": null,
"id": "edd5187c-2ed4-5a71-b264-a28e67d9a58f",
"name": "Phenoxyethanol",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["preservative"],
"cas_number": "122-99-6",
"ec_number": "204-589-7",
"ph_eur_name": "Phenoxyethanolum",
"iupac_name": "2-Phenoxyethanol",
"other_names": null,
"category": null
},
{
"position": 10,
"label_name": "Chlorphenesin",
"concentration": null,
"id": "a5aa06d4-060a-5491-a997-0fb58903898a",
"name": "Chlorphenesin",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["antimicrobial", "preservative"],
"cas_number": "104-29-0",
"ec_number": "203-192-6",
"ph_eur_name": null,
"iupac_name": null,
"other_names": null,
"category": null
}
]
}{
"id": "06d9476a-397b-5f61-abc8-640b30a9ae23",
"brand": "The Ordinary",
"name": "Niacinamide 10% + Zinc 1%",
"image_url": "https://images.thebeautyapi.com/06d9476a-397b-5f61-abc8-640b30a9ae23.jpg",
"category": "skincare",
"origin": "Canada",
"contains_fragrance": false,
"contains_drying_alcohol": false,
"contains_parabens": false,
"contains_sulfates": false,
"contains_silicones": false, "ingredients": [
{
"position": 0,
"label_name": "Aqua (Water)",
"concentration": null,
"id": "2ba7df6d-7d8a-5935-af3a-f0bb7f03fb53",
"name": "Water",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["solvent"],
"cas_number": "7732-18-5",
"ec_number": "231-791-2",
"ph_eur_name": "Aqua",
"iupac_name": null,
"other_names": "Aqua",
"category": null
},
{
"position": 1,
"label_name": "Niacinamide 10.0%",
"concentration": 10,
"id": "a1526dea-37d1-5904-9106-be583378339b",
"name": "Niacinamide",
"rating": "direct actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["smoothing"],
"cas_number": "98-92-0",
"ec_number": "202-713-4",
"ph_eur_name": "Nicotinamidum",
"iupac_name": "3-Pyridinecarboxamide",
"other_names": "vitamin B3, nicotinamide",
"category": null
},
{
"position": 2,
"label_name": "Pentylene Glycol",
"concentration": null,
"id": "d7d08541-900e-557b-9fb9-d831f90f2e40",
"name": "Pentylene Glycol",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["skin conditioning", "solvent"],
"cas_number": "5343-92-0",
"ec_number": "226-285-3",
"ph_eur_name": null,
"iupac_name": "1,2-Dihydroxypentane",
"other_names": null,
"category": null
},
{
"position": 3,
"label_name": "Zinc Pca 1.0%",
"concentration": 1,
"id": "5d56599a-2ec2-5c65-9c8d-c0abe86cdf8f",
"name": "Zinc Pca",
"rating": "supporting actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["humectant", "skin conditioning"],
"cas_number": "68107-75-5 / 15454-75-8",
"ec_number": "268-475-9 / 239-473-5",
"ph_eur_name": null,
"iupac_name": "Proline, 5-Oxo-, Zinc Salt",
"other_names": null,
"category": null
},
{
"position": 4,
"label_name": "Dimethyl Isosorbide",
"concentration": null,
"id": "2058a735-2ebb-594b-9d09-2d372a008cff",
"name": "Dimethyl Isosorbide",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["solvent", "viscosity controlling"],
"cas_number": "5306-85-4",
"ec_number": "226-159-8",
"ph_eur_name": null,
"iupac_name": "1,4:3,6-Dianhydro-2,5-Di-O-Methyl-D-Glucitol",
"other_names": null,
"category": null
},
{
"position": 5,
"label_name": "Tamarindus Indica Seed Gum",
"concentration": null,
"id": "efafc7e2-4f95-5560-ba43-6f4e2dcd4504",
"name": "Tamarindus Indica Seed Gum",
"rating": "supporting actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["emulsion stabilising", "viscosity controlling"],
"cas_number": "84961-62-6",
"ec_number": "284-651-8",
"ph_eur_name": null,
"iupac_name": null,
"other_names": "Tamarind Seed Gum",
"category": null
},
{
"position": 6,
"label_name": "Xanthan Gum",
"concentration": null,
"id": "43244e9c-efda-5f62-839d-609da98a5d1c",
"name": "Xanthan Gum",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["binding", "emulsifying", "emulsion stabilising", "gel forming", "skin conditioning", "surfactant", "viscosity controlling"],
"cas_number": "11138-66-2",
"ec_number": "234-394-2",
"ph_eur_name": "Gummi Xanthanum",
"iupac_name": null,
"other_names": null,
"category": null
},
{
"position": 7,
"label_name": "Isoceteth-20",
"concentration": null,
"id": "a0bcad8e-9389-5c60-bd35-a529ce1c4382",
"name": "Isoceteth-20",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["emulsifying", "surfactant"],
"cas_number": null,
"ec_number": null,
"ph_eur_name": null,
"iupac_name": null,
"other_names": null,
"category": null
},
{
"position": 8,
"label_name": "Ethoxydiglycol",
"concentration": null,
"id": "c995e7ef-6a2a-5be4-af64-6c2925670cd9",
"name": "Ethoxydiglycol",
"rating": null,
"irritancy": "0",
"comedogenicity": "0",
"functions": ["humectant", "perfuming", "solvent"],
"cas_number": "111-90-0",
"ec_number": "203-919-7",
"ph_eur_name": null,
"iupac_name": "2-(2-Ethoxyethoxy)Ethanol; Carbitol; Diethylene Glycol Monoethyl Ether; Degee",
"other_names": null,
"category": null
},
{
"position": 9,
"label_name": "Phenoxyethanol",
"concentration": null,
"id": "edd5187c-2ed4-5a71-b264-a28e67d9a58f",
"name": "Phenoxyethanol",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["preservative"],
"cas_number": "122-99-6",
"ec_number": "204-589-7",
"ph_eur_name": "Phenoxyethanolum",
"iupac_name": "2-Phenoxyethanol",
"other_names": null,
"category": null
},
{
"position": 10,
"label_name": "Chlorphenesin",
"concentration": null,
"id": "a5aa06d4-060a-5491-a997-0fb58903898a",
"name": "Chlorphenesin",
"rating": null,
"irritancy": null,
"comedogenicity": null,
"functions": ["antimicrobial", "preservative"],
"cas_number": "104-29-0",
"ec_number": "203-192-6",
"ph_eur_name": null,
"iupac_name": null,
"other_names": null,
"category": null
}
]
}{
"id": "a1526dea-37d1-5904-9106-be583378339b",
"name": "Niacinamide",
"rating": "direct actives",
"irritancy": null,
"comedogenicity": null,
"functions": ["smoothing"],
"cas_number": "98-92-0",
"ec_number": "202-713-4",
"ph_eur_name": "Nicotinamidum",
"iupac_name": "3-Pyridinecarboxamide",
"other_names": "vitamin B3, nicotinamide",
"category": null
}Paste this into your CLAUDE.md, AGENTS.md or editor rules and your agent calls the API correctly without reading the docs. Also at https://thebeautyapi.com/agent.md.
Show the 23 lines ▾Hide ▴
# The Beauty API: instructions for coding agents
Base URL: https://api.thebeautyapi.com/v1 (JSON over HTTPS)
Auth: send the header x-api-key: $BEAUTY_API_KEY on every /v1 request. Keep the key in an environment variable, never in code or in this file.
Reference: https://thebeautyapi.com/docs.md | Spec: https://api.thebeautyapi.com/openapi.json | Keys: https://thebeautyapi.com/dashboard
## Endpoints
- Health: GET /health (no key)
- Search products: GET /v1/products/search?q=&page=
- Filter products: GET /v1/products?category=&brand=&origin=&fragrance_free=&alcohol_free=¶ben_free=&sulfate_free=&silicone_free=&has_ingredient=&excludes_ingredient=&page=
- Get a product: GET /v1/products/{id}
- Barcode lookup: GET /v1/products/barcode/{barcode} (barcode plans only)
- Batch products: POST /v1/products/batch (body {"ids": [uuid, ...]}, max 50)
- Search ingredients: GET /v1/ingredients/search?q=&page=
- Get an ingredient: GET /v1/ingredients/{id}
## Rules
1. Find a product with search, then fetch the full record with GET /v1/products/{id}. Search and filter return slim records (id, brand, name, category, image_url); detail, batch and barcode return the full record with the ingredient list in on-label order.
2. Every word in q must appear in the product's brand or name, in any order. Send the brand plus the distinctive part of the name ("CeraVe Moisturizing Cream"), never a full retail title. Case, accents and punctuation are ignored; the last word may be partial.
3. When pagination.total is 0 the response carries a no_match object: drop the word no_match.hint names and retry. An empty result does not mean the brand is missing.
4. Pages hold 20 results; page runs 1 to 51 and anything higher returns 400. Read pagination.total and pagination.has_more; above 1,020 matches, narrow with filters instead of paging.
5. Batch takes up to 50 ids and is billed per item (50 ids = 50 calls); unknown ids come back as null in the same positions.
6. Errors are JSON {statusCode, error, message} and message says what to change. 403 is a missing or revoked key, or a plan without barcode lookup. 429 is the rate limit; no rate-limit headers are sent, so back off exponentially.
7. Barcodes are a lookup key, not a field: no response lists a product's codes. image_url can be null.
The API
Structured Access to the Entire Catalog
A uniform JSON interface over our INCI-mapped catalog with API key auth and versioned paths. No vendor SDK required.
GET /v1/products/search
Search
Search across brand and product names, returning slim records built for result lists.
GET /v1/products
Filter & Discover
Filter using product category, brand, origin, five formulation flags, and ingredient inclusion/exclusion in a single request.
GET /v1/products/{id}
Full Product Record
The complete ingredient list in exact on-label order, with functional classes, irritancy and comedogenicity ratings, and CAS, EC, IUPAC, and Ph. Eur. identifiers.
POST /v1/products/batch
Batch Retrieval
Up to 50 complete records in one request, returned in the same order as the ids you sent.
GET /v1/ingredients/{id}
Ingredient Science
22,000 normalized ingredient records: functional classes, irritancy and comedogenicity ratings, and CAS, EC, IUPAC, and Ph. Eur. identifiers.
GET image_url
Clean Product Images
Professional, white-background product photographs. Reference them directly in your UI.
Trusted by data scientists across the world
Hugging Face

Integration
How It Works
Create a key from your developer dashboard. Pass it in the header on your requests. Fuss-free integration.
Pick a plan, get your key
Subscribe from the dashboard and provision an API key in minutes. Up to 2 active keys per account. Create, reveal, and revoke at any time.
Subscription Pro · 100,000 calls/month
API key ····························9xYz · active
Send it as x-api-key: <your key>Call it from anything
Plain HTTPS and JSON from whatever stack you already run. Filters combine to answer real product questions in a single request, with pagination built in.
$ curl "https://api.thebeautyapi.com/v1/products?\
category=skincare&fragrance_free=true&page=1" \
-H "x-api-key: $BEAUTY_API_KEY"
{
"results": [ …20 products… ],
"pagination": { "page": 1, "has_more": true, "total": 44208 }
}Build what your users see
Render the response as live product UI with safety badges, ingredient ratings, conflict checks. The presentation layer is yours.
The Ordinary
Niacinamide 10% + Zinc 1%
Example UI rendered from one API response. The presentation layer is yours to design.
Coverage
Is Your Brand Covered?
We track more than 24,000 brands across 180,000 products, deepest in skincare. Check a brand and see what we hold, instantly.
Category mix
Approximate share of the catalogField-level fill rates (ratings, CAS/EC numbers, barcodes) are on the dataset page.
Who it’s for
Built For Teams That Ship Beauty Products
From recommendation models to formulation experts, teams use the same clean reference to skip months of data wrangling.
E-commerce & Retail
Enrich your storefront and search results using our beauty products data. Boost conversion and lower return rates with expert ingredient tooltips and safety badges.
What you'd build:
- Ingredient-rich product pages to generate free organic leads
- Meaningful product page with ingredient lists to increase conversions
- Comedogenicity & irritancy filtering for sensitive skin
- Trust signals & clean-beauty safety badges
Beauty-Tech Founders
Stop wasting months gathering data. Launch your routine-builder or skin-checker app on day one.
What you'd build:
- Ingredient conflict logic based on comprehensive INCI ingredients list
- Personalized routine builders using comedogenic & irritancy ratings
- Skin-type matching engines
- Filter-by-ingredient systems for 180,000 products
Market Research & R&D
Benchmark global formulations. Track ingredient trends across 180,000 beauty products and identify market gaps over the API or the licensed dataset.
What you'd build:
- Global competitor product benchmarking
- Ingredient & formulation trend analysis across 180,000 products
- AI & Machine Learning training to decode packaging-to-ingredient correlations
- High-accuracy computer vision models for automated retail audits
Bestiemybestie.io Beauty, decoded. Scan any cosmetic instantly for a clear safety score, personalized ingredient insights, and the evidence behind every finding. Know exactly what touches your skin.
The Beauty API provided a portion of the cosmetics product data used in Bestie. Their clean, well-structured product data helped broaden our catalog coverage. Grateful for their support!
API plans
Simple Monthly Pricing
Every plan includes the full catalog. Plans differ in included calls, rate limits, and barcode access.
Billed at the end of each month · Allowances reset at the start of each billing month · Cancel anytime
Sandbox
Testing and evaluation with barcode lookups.
- 100 API calls / month included
- Full product & ingredient data
- Barcode lookup (GTIN/UPC/EAN → product)
- Hard cap, no overage charges ever
Starter
Starter volume with barcode lookups.
- 10,000 API calls / month included
- Full product & ingredient data
- Barcode lookup (GTIN/UPC/EAN → product)
- Overage $0.02/call (batch: per item)
Sandbox
For testing and evaluation.
- 100 API calls / month included
- Full product & ingredient data
- Hard cap, no overage charges ever
- No barcode lookup (see the Barcode plans)
Starter
For prototypes and early integrations.
- 10,000 API calls / month included
- Full product & ingredient data
- Overage $0.02/call (batch: per item)
- No barcode lookup (see the Barcode plans)
The dataset
Get the Underlying Dataset
The same catalog is available as a one-time dataset snapshot in SQLite, CSV, and JSONL, with the full image archive, to host, query, and train on.
180,000 products · 180,000 images
The Complete Archive
180,000 normalized products, a full ingredient dictionary with functions and comedogenicity, and the complete product-image archive.
- 180,000 products, including brand, name, category, origin & safety flags
- Label-order ingredient list for every product, linked to the dictionary
- Normalized ingredient dictionary, including irritancy, comedogenicity, ratings, functions
- 180,000 product images (~18GB), ID-matched to product records
- GTIN barcodes (UPC/EAN, GTIN-14 form) on ~44% of products
- JSONL, SQLite and CSV formats
- Full schema documentation
Evaluate first
Try the data before you commit
Download a 1,000-product sample pack with the full schema, or check brand coverage on the dataset page.
CSV + JSONL + 1,000 images · No payment required
Questions
Frequently Asked Questions
The essentials below. See the full FAQ for coverage, usage, and dataset details.
How do I get access to the API?
Sign up on the dashboard, pick a plan, and create an API key. The whole thing takes a few minutes and every request then authenticates with an x-api-key header. The free Sandbox plan gives you 100 calls a month to evaluate the API against the full catalog. It is hard-capped and never auto-charges (a card is kept on file so you can upgrade in one click). Paid plans start at $40/month with 10,000 calls included, billed at the end of each month, cancel anytime. Endpoints, parameters and examples are in the docs.
How do API limits and overage work?
Every plan has a monthly call allowance: 100 calls on Sandbox, 10,000 on Starter and 100,000 on Pro. On paid plans, calls beyond the allowance are metered at $0.02 per call, so passing your allowance doesn't cut your traffic off (only an extreme-abuse ceiling of several times your allowance ever blocks requests). Your billing month starts on the day you subscribe; the plan fee and any overage are billed together at the end of each billing month, and the allowance resets at the start of each billing month. Usage is reported daily, so calls made on the last day of a billing month can occasionally land on the next month's invoice instead, where they count against that month's allowance first. On Sandbox, requests return 429 once you reach the cap, and nothing is ever charged. Rate limits are 5 requests/sec (burst 10) on Sandbox, 10 requests/sec (burst 20) on Starter plans and 25 requests/sec (burst 50) on Pro plans. Batch requests are billed per item, so a batch of 50 products counts as 50 calls towards your allowance and overage; rate limits and the Sandbox cap count requests, so that same batch is one request against those.
What is included in the dataset?
One snapshot, the whole catalog: 180,000 products with brand, product category, country of origin and formulation flags (fragrance, drying alcohol, parabens, sulfates, silicones); a label-order ingredient list for every product, linked through a product-to-ingredient link table to a normalized ingredient dictionary (functions, irritancy, comedogenicity, safety rating, chemical identifiers); GTIN barcodes where known; and the full product-image archive (~18GB, 180,000 images). Delivered as CSV, JSONL and SQLite with a complete data dictionary and schema guide.
What can I do with the dataset?
A dataset purchase is a snapshot of the catalog you can use indefinitely, including commercially. Load it into your own systems, build products and analyses on it, and show the product information to your end users, with product images ID-matched to every record for your own use. You may not redistribute, resell or publicly host the raw files (CSV, JSONL, SQLite, images) for third parties to download. Future versions are sold separately as differential refreshes.
Get started
The Definitive Beauty Products API
One key unlocks 180,000 normalized products, 22,000 ingredient records, and clean product images. Test free, or go to production from $40/month. Prefer the raw files? The dataset is available as a one-time snapshot, above.