Openbeautyfacts APIworld.openbeautyfacts.org ↗
Search and discover cosmetic and beauty products by name or ingredient, accessing detailed information like INCI ingredient lists, product categories, and full product specifications. Browse beauty product categories and find exactly what you're looking for with comprehensive data on thousands of cosmetic items.
curl -X GET 'https://api.parse.bot/scraper/fb148a2a-3597-417d-9698-45cd8da23b99/search_products?page=1&query=shampoo' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace world-openbeautyfacts-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Open Beauty Facts SDK — bounded, re-runnable; every call capped."""
from parse_apis.world_openbeautyfacts_org_api import OpenBeautyFacts, ProductNotFound
client = OpenBeautyFacts()
# Search for products by keyword
for product in client.product_summaries.search(query="shampoo", limit=3):
print(product.product_name, product.brand, product.categories)
# Search by INCI ingredient
for product in client.product_summaries.search_by_ingredient(inci_name="aqua", limit=3):
print(product.product_name, product.brand)
# Navigate from summary to full detail
item = client.product_summaries.search(query="coconut", limit=1).first()
try:
detail = item.details()
print(detail.product_name, detail.ingredients_text, detail.labels)
except ProductNotFound as e:
print("not found:", e.barcode)
# List categories
for cat in client.categories.list(limit=3):
print(cat.name, cat.products)
print("exercised: product_summaries.search / product_summaries.search_by_ingredient / ProductSummary.details / categories.list")
Full-text search over beauty and cosmetic products by name, brand, or keyword. Results are paginated; each product includes name, brand, categories, country, INCI ingredient list, and product URL.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for paginated results (1-based). |
| queryrequired | string | Search term matching product name, brand, or keyword. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"count": "integer total number of matching products",
"products": "array of product summaries",
"page_size": "integer products per page",
"page_count": "integer total number of pages"
},
"sample": {
"data": {
"page": 1,
"count": 2438,
"products": [
{
"url": "https://world.openbeautyfacts.org/product/8001090662231/coconut-milk-herbal-essences",
"brand": "Herbal Essences",
"barcode": "8001090662231",
"countries": "Maroc",
"categories": "Soins cheveux, Shampoings",
"product_name": "Coconut Milk",
"ingredients_text": "Aqua, Sodium Laureth Sulfate"
}
],
"page_size": 24,
"page_count": 24
},
"status": "success"
}
}About the Openbeautyfacts API
The Openbeautyfacts API on Parse exposes 4 endpoints for the publicly available data on world.openbeautyfacts.org. Calls return JSON over HTTPS and are billed per successful response.
Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.