Discover/Open Beauty Facts API
live

Open Beauty Facts APIworld.openbeautyfacts.org

Search beauty products, look up INCI ingredient lists by barcode, and browse cosmetic categories via the Open Beauty Facts API. 4 endpoints.

This API takes change requests — .
Endpoint health
verified 4d ago
search_products
get_product_detail
list_categories
search_by_ingredient
4/4 passing latest checkself-healing
Endpoints
4
Updated
19d ago

What is the Open Beauty Facts API?

The Open Beauty Facts API gives developers access to cosmetic and beauty product data across 4 endpoints, covering full-text product search, barcode lookup, ingredient-based filtering, and category taxonomy. The get_product_detail endpoint returns up to 9 structured fields per product — including the full INCI ingredient list, brand, labels, country of origin, and an image URL — identified by EAN-13 barcode.

This call costs2 credits / call— charged only on success
Try it
Page number for paginated results (1-based).
Search term matching product name, brand, or keyword.
api.parse.bot/scraper/fb148a2a-3597-417d-9698-45cd8da23b99/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

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")
All endpoints · 4 totalmissing one? ·

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.

Input
ParamTypeDescription
pageintegerPage number for paginated results (1-based).
queryrequiredstringSearch term matching product name, brand, or keyword.
Response
{
  "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 Open Beauty Facts API

Endpoints and Data Coverage

The API exposes four endpoints against the Open Beauty Facts database. search_products accepts a query string and returns paginated summaries including product name, brand, categories, country, and INCI ingredient text. get_product_detail accepts a barcode (EAN-13 or similar) and returns a single product record with fields: product_name, brand, categories, ingredients_text, labels, countries, image_url, url, and barcode. If the barcode is absent from the database, the endpoint returns input_not_found.

Ingredient and Category Search

search_by_ingredient filters products by a specific INCI ingredient name. The inci_name parameter is matched as a tag — case-insensitive, with spaces normalized to hyphens — so 'sodium laureth sulfate' and 'Sodium Laureth Sulfate' resolve identically. Results follow the same paginated shape as search_products: count, page, page_count, page_size, and a products array. list_categories returns the full category taxonomy — skin care, hair care, makeup, hygiene, and others — with each entry carrying an id, name, url, and products count. The endpoint returns 100 categories per page.

Pagination Behavior

All four endpoints that return lists use 1-based page numbering. Every paginated response includes page, page_count, page_size, and count so callers can determine total results and iterate without a separate metadata request. The search_products and search_by_ingredient endpoints share the same response envelope, making it straightforward to handle both with a single response parser.

Reliability & maintenanceVerified

The Open Beauty Facts API is a managed, monitored endpoint for world.openbeautyfacts.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when world.openbeautyfacts.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official world.openbeautyfacts.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
4d ago
Latest check
4/4 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build an ingredient safety checker that uses search_by_ingredient to find all products containing a flagged INCI compound.
  • Populate a product catalog by looking up cosmetics via get_product_detail with known EAN-13 barcodes.
  • Create a category browser that lists all cosmetic taxonomy nodes and their product counts via list_categories.
  • Match a scanned barcode to a product's full INCI ingredient list and labels for a cosmetics scanner app.
  • Aggregate brand coverage data by querying search_products with brand names and counting matching results.
  • Filter products by country of origin using the countries field returned by get_product_detail.
  • Cross-reference a product's categories and ingredients_text fields to audit formulation trends across a category.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Open Beauty Facts have an official developer API?+
Yes. Open Beauty Facts publishes an official REST API documented at https://wiki.openfoodfacts.org/API (the beauty facts variant shares the same API structure). The Parse API surfaces the most commonly used endpoints in a normalized form with consistent response shapes and pagination metadata.
What does `get_product_detail` return when a barcode isn't in the database?+
The endpoint returns input_not_found. It does not throw an HTTP error. Callers should check for this value before attempting to read product fields from the response.
How does ingredient matching work in `search_by_ingredient`?+
The inci_name parameter is matched as a tag: the value is lowercased and spaces are replaced with hyphens before lookup. For example, 'Sodium Laureth Sulfate' is treated the same as 'sodium-laureth-sulfate'. Partial substring matches within ingredient text are not supported by this endpoint — the match is tag-based.
Can I filter `search_products` results by category, country, or label?+
Not currently. search_products accepts only a free-text query and an optional page parameter. Structured filters like category ID, country, or label are not exposed as inputs. You can fork this API on Parse and revise it to add a filtered-search endpoint that accepts those parameters.
Does the API expose nutritional or allergen data beyond the INCI ingredient text?+
Not currently. The available product fields cover ingredients_text, labels, categories, brand, countries, image_url, and product_name. Structured allergen flags, toxicity scores, or per-ingredient hazard data are not part of any response. You can fork this API on Parse and revise it to add an endpoint that surfaces those fields if they exist in the source database.
Page content last updated . Spec covers 4 endpoints from world.openbeautyfacts.org.
Related APIs in HealthcareSee all →
incibeauty.com API
Search cosmetic ingredients and products to discover detailed formulation data, safety ratings, and usage statistics. Browse expert editorial dossiers on cosmetic topics, explore the most popular ingredients used across the beauty industry, and retrieve recently referenced items for quick lookup.
incidecoder.com API
Search cosmetic products and ingredients, get detailed analysis of their safety and composition, and decode ingredient lists to understand what's in your beauty products. Find similar products and explore comprehensive ingredient databases to make informed decisions about the cosmetics you use.
paulaschoice.com API
Search and explore Paula's Choice skincare products with detailed ingredient lists, allergen information, and skin type recommendations all in one place. Find best sellers, look up specific ingredient details, and discover products organized by category to build your perfect skincare routine.
theordinary.com API
Browse and search The Ordinary's complete product catalog by category or ingredients. View detailed product information including formulas and key actives, apply filters by product type, concern, or ingredient, and read customer reviews to compare and evaluate products.
cosdna.com API
Search cosmetic products and ingredients to view detailed safety information, supplier data, and community reviews all in one place. Analyze ingredient lists to understand product composition and access the latest cosmetics forum discussions and user feedback.
sephora.com API
Search and browse Sephora's product catalog to find detailed information about beauty items, including specifications, customer reviews, Q&A discussions, pricing, and real-time availability. Filter products by category or brand, and access comprehensive brand listings to discover exactly what you're looking for.
cultbeauty.co.uk API
Browse and search Cult Beauty's product catalog by category or brand, view detailed product information including ingredients and loyalty points, and read customer reviews. Discover new arrivals, sale items, and filter products to find exactly what you're looking for.
ecco-verde.it API
Browse and search the Ecco Verde natural beauty catalogue. Retrieve full product details including ingredients (INCI), variants, and attributes; search by keyword; explore products by category or brand; and fetch personalised product recommendations.