Open Beauty Facts Scraper — Cosmetics & Personal Care avatar

Open Beauty Facts Scraper — Cosmetics & Personal Care

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Open Beauty Facts Scraper — Cosmetics & Personal Care

Open Beauty Facts Scraper — Cosmetics & Personal Care

Scrape Open Beauty Facts by category, brand, or barcode. Extract ingredients, labels, countries, and images for cosmetics research, competitor analysis, and product databases. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Categories

Share

Open Beauty Facts Scraper — Cosmetics, Ingredients & Personal Care Data API

Scrape Open Beauty Facts — the world's largest open cosmetics database — by category, brand, or barcode. No API key, no login required.

What does Open Beauty Facts Scraper do?

Open Beauty Facts Scraper connects directly to world.openbeautyfacts.org, the collaborative, open-data cosmetics database that covers more than 250,000 personal care products worldwide. The actor uses the official Open Beauty Facts JSON API (v2) with a descriptive User-Agent and Apify datacenter proxies, so it runs fast, cheap, and reliably at scale.

In search mode, you supply one or more product categories (e.g., shampoos, face-creams, lipsticks) and optional brand filters (e.g., loreal, dove). The actor paginates the API at 100 products per page and pushes records until it hits your maxResults limit — or exhausts the catalogue. In product mode, you hand in a list of EAN/UPC barcodes and the actor fetches each product record individually. In category mode, you browse an entire category tree and get everything in it. Every run extracts barcode, product name, brand, category path, full ingredient list, labels (e.g., vegan, cruelty-free), period-after-opening, countries sold in, quantity/size, image URL, and the canonical product page URL.

Who is it for?

  • Cosmetics formulators who want competitive ingredient benchmarking across hundreds of SKUs.
  • E-commerce operators building or enriching product catalogues with real ingredient and label data.
  • Regulatory researchers tracking clean-beauty labels or country-specific availability.
  • Data scientists building ingredient safety models, allergen detectors, or sustainability scorers.
  • Beauty bloggers and journalists who need structured product data for reviews, roundups, or infographics.

Use cases

  • Extract all shampoos from a given brand and compare ingredient lists against competitors.
  • Build a database of "vegan" or "cruelty-free" certified products across multiple categories.
  • Monitor new product launches in a category by scheduling weekly runs and diffing the dataset.
  • Enrich an existing product catalogue using barcodes — fill in missing ingredient or label fields.
  • Research periods-after-opening (PAO) data across sunscreens or serums for safety reporting.

Why use Open Beauty Facts Scraper?

  • No API key required — Open Beauty Facts is public. Zero setup friction.
  • 11 structured fields per product — barcode, name, brands, categories, ingredients, labels, PAO, countries, quantity, image, URL.
  • Bulk extraction — paginate to thousands of results in a single run.
  • Three flexible modes — search by category/brand, look up individual barcodes, or browse entire category trees.
  • Export anywhere — CSV, JSON, Excel, XML via Apify dataset export. Pipe directly to Google Sheets, Airtable, or your database.
  • Pay-per-result pricing — you only pay for real product records pushed to the dataset.

What data can you extract?

The scraper returns one row per product with the following fields:

FieldTypeDescription
codestringEAN/UPC barcode (unique product identifier)
productNamestringProduct name as listed on the packaging
brandsstringBrand or brand group (comma-separated if multiple)
categoriesstringCategory path (e.g. "Shampoos, Hair care, Cosmetics")
ingredientsTextstringFull ingredient list (INCI notation)
labelsstringCertification/label tags (e.g. "en:vegan, en:cruelty-free")
periodsAfterOpeningstringPeriod after opening (PAO) — e.g. "12M" for 12 months
countriesstringCountries the product is sold in (comma-separated tags)
quantitystringPackage size/quantity (e.g. "300 ml", "50 g")
imageUrlstringProduct image URL (hosted on openbeautyfacts.org)
urlstringCanonical Open Beauty Facts product page URL

Real output example:

{
"code": "7350160451512",
"productName": "Citrus Shampoo",
"brands": "Blixt",
"categories": "Shampoos",
"ingredientsText": "Aqua (Water), Ammonium Lauryl Sulfate, Sodium Chloride, Parfum (Fragrance), Cocamidopropyl Betaine, Coco-Glucoside, Benzyl Alcohol, Sodium Benzoate, Sodium Cocoamphoacetate, Potassium Sorbate, Citric Acid, Propylene Glycol, Laminaria Digitata Extract, Limonene, Linalool",
"labels": "en:no-parabens",
"periodsAfterOpening": "12M",
"countries": "en:norway",
"quantity": "300ml",
"imageUrl": "https://images.openbeautyfacts.org/images/products/735/016/045/1512/front_en.5.400.jpg",
"url": "https://world.openbeautyfacts.org/product/7350160451512"
}

How to use

Option A — Search by category and/or brand

  1. Open the actor's Input tab.
  2. Set Mode to search.
  3. Enter one or more Categories (e.g., shampoos, face-creams, moisturizers).
  4. Optionally add Brands to narrow results (e.g., loreal, garnier).
  5. Set Max Results (e.g., 500) and click Run.

Input example:

{
"mode": "search",
"categories": ["shampoos", "conditioners"],
"brands": ["dove"],
"maxResults": 300,
"proxyConfiguration": { "useApifyProxy": true }
}

Option B — Look up products by barcode

  1. Set Mode to product.
  2. Enter your list of Barcodes (EAN-13 or UPC-A).
  3. Click Run — each barcode fetches exactly one product record.

Input example:

{
"mode": "product",
"barcodes": ["7350160451512", "3600550195132", "4066447909746"],
"proxyConfiguration": { "useApifyProxy": true }
}

Option C — Browse an entire category

  1. Set Mode to category.
  2. Enter the Categories you want to fully download.
  3. Set Max Results or leave at 0 for all available.

Input example:

{
"mode": "category",
"categories": ["lipsticks"],
"maxResults": 0,
"proxyConfiguration": { "useApifyProxy": true }
}

Input parameters

ParameterTypeDefaultDescription
modestring"search"Scraping mode: "search", "product", or "category"
categoriesarray["shampoos"]Product categories to search or browse
brandsarray[]Filter by brand (search mode only)
barcodesarray[]EAN/UPC barcodes to look up (product mode)
maxResultsinteger200Maximum products to return. Set 0 for all.
proxyConfigurationobjectdatacenterApify proxy settings

Full input JSON:

{
"mode": "search",
"categories": ["shampoos"],
"brands": [],
"barcodes": [],
"maxResults": 200,
"proxyConfiguration": { "useApifyProxy": true }
}

Output example

{
"code": "3600550195132",
"productName": "Shampoing Expert Force",
"brands": "Frank Provost",
"categories": "Shampoos",
"ingredientsText": "Aqua, Sodium Laureth Sulfate, Cocamidopropyl Betaine, Glycerin, ...",
"labels": "en:without-parabens",
"periodsAfterOpening": "24M",
"countries": "en:switzerland, en:france",
"quantity": "250 ml",
"imageUrl": "https://images.openbeautyfacts.org/images/products/360/055/019/5132/front_fr.3.400.jpg",
"url": "https://world.openbeautyfacts.org/product/3600550195132"
}

Tips for best results

  • Use specific categories — Open Beauty Facts follows a taxonomy (e.g., face-creams rather than creams). Browse the site to confirm category slugs.
  • Combine category + brand filters in search mode to get focused, high-quality datasets.
  • Set maxResults to 0 only if you need the full catalogue — it can reach tens of thousands of records per category.
  • Barcode mode is fastest — if you already have EAN codes, product mode avoids pagination overhead entirely.
  • Schedule weekly runs in search/category mode to track new product launches or updated ingredient lists.
  • Export to CSV or Excel from the dataset for spreadsheet analysis or CRM import.
  • Null fields are normal — Open Beauty Facts is community-maintained; some products have missing ingredient or label data.
  • Combine with Open Food Facts Scraper if you also need food/supplement data — same platform, different domain.
  • Filter by country after extraction using the countries field to build region-specific product lists.
  • Long ingredient textsingredientsText can be several hundred characters; plan your storage/display accordingly.

Integrations

Connect this actor to your workflow in minutes:

  • Google Sheets — use Apify's native Google Sheets integration to sync the dataset into a spreadsheet automatically after each run.
  • Slack — configure a webhook to send a Slack message when the run completes (e.g., "500 new shampoo records ready").
  • Zapier / Make (Integromat) — trigger downstream automations: push products to Airtable, send to Mailchimp, or update a Shopify catalogue.
  • Webhooks — Apify can POST the run results to any URL on completion. Use this to feed your own API or database pipeline.
  • Schedules — set a cron schedule (daily, weekly) to keep your dataset fresh without manual intervention.

API usage

cURL:

curl -X POST \
"https://api.apify.com/v2/acts/logiover~open-beauty-facts-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","categories":["shampoos"],"maxResults":200}'

Node.js (Apify client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover~open-beauty-facts-scraper').call({
mode: 'search',
categories: ['face-creams', 'moisturizers'],
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover~open-beauty-facts-scraper").call(
run_input={"mode": "search", "categories": ["lipsticks"], "maxResults": 300}
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Got {len(items)} products")

Use with AI agents (MCP)

This actor is compatible with the Apify MCP Server, which lets AI agents like Claude or GPT-4 call it as a tool directly. An agent can run: "Get me 200 shampoo products from Open Beauty Facts, then summarize which brands have the most vegan-labeled items" — the MCP tool call triggers the actor, waits for results, and feeds the structured JSON directly back into the agent's context for analysis, summarization, or further processing.

FAQ

Does this actor require an API key?

No. Open Beauty Facts is a public, open-access database. No registration, no API key, no login of any kind is required.

How many products does Open Beauty Facts have?

The database contains more than 250,000 cosmetics and personal care products contributed by a global community. Coverage is strongest for European brands (especially French, German, and UK markets) but includes products from over 180 countries.

How deep does pagination go?

The API supports up to 10,000 records per search query. For very large categories (e.g., shampoos has 1,700+ items), the actor paginates automatically at 100 per page until it reaches your maxResults or the dataset end.

What happens if a product returns null fields?

Open Beauty Facts is community-contributed, so some records are incomplete. Null fields (ingredientsText, labels, quantity) are expected and normal — the row is still pushed with the available data.

Can I filter by country?

The API doesn't directly support a country filter in search mode. Instead, set a high maxResults, then filter the output dataset by the countries field after extraction.

Why does the actor sometimes return fewer results than expected?

If a category name is misspelled or doesn't exist in the Open Beauty Facts taxonomy, the API returns 0 results. Check the correct slug by browsing the site (e.g., face-creams, not face cream).

How fast is a run?

A run returning 200 products typically completes in under 2 minutes with datacenter proxies. Larger runs (1,000+ records) take proportionally longer due to pagination.

How do I export results to CSV or Excel?

After the run completes, open the dataset tab in Apify and click Export — CSV, JSON, Excel, and XML are all available without any extra configuration.

Is the data updated in real time?

Open Beauty Facts is continuously updated by contributors. Running the scraper weekly ensures you capture new additions. The url field links to the canonical page where you can see the last-edit timestamp.

Can I scrape by brand alone without specifying a category?

Yes. In search mode, leave categories empty and set only brands. The actor will search the full catalogue filtered by brand.

How often should I run it?

For catalogue monitoring (new products, ingredient updates), weekly runs are a good cadence. For one-off research projects, a single run is sufficient.

Yes. Open Beauty Facts runs on the same platform as Open Food Facts (openfoodfacts.org) but focuses exclusively on cosmetics and personal care products. The API structure is identical.

Open Beauty Facts publishes all data under the Open Database License (ODbL). The product data is community-contributed and explicitly intended for public use, research, and integration. This actor accesses only publicly available API endpoints, sends a descriptive User-Agent identifying the actor and its operator, and does not circumvent any access controls. Use of this actor and the resulting data is subject to the Open Beauty Facts Terms of Use and the ODbL license terms.

  • Open Food Facts Scraper — same platform, food and beverage products instead of cosmetics.
  • logiover/b2b-lead-scraper — extract business contact data by industry and country for outreach campaigns.
  • logiover/linkedin-company-scraper — scrape LinkedIn company pages without login for B2B intelligence.