Discover/Ewg API
live

Ewg APIewg.org

Search for cosmetic ingredients and instantly access their safety ratings, health hazard scores, and potential concerns from EWG's trusted Skin Deep database. Get comprehensive ingredient information including alternative names, regulatory sources, and detailed safety assessments to make informed decisions about the products you use.

This API takes change requests — .
Endpoint health
monitored
get_ingredient
search_ingredients
Checks pendingself-healing
Endpoints
2
Updated
3h ago
This call costs1 credit / call— charged only on success
Try it
Page number for pagination (1-based).
Search query for ingredient name. Use '*' to list all ingredients.
api.parse.bot/scraper/47ae178e-a2f8-4985-9dac-c800f6eeabae/<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/47ae178e-a2f8-4985-9dac-c800f6eeabae/search_ingredients?page=1&search=retinol' \
  -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 ewg-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: EWG Skin Deep SDK — bounded, re-runnable; every call capped."""
from parse_apis.ewg_org_api import EWGSkinDeep, IngredientNotFound

client = EWGSkinDeep()

# Search for ingredients matching "retinol", cap at 3 results
for ingredient in client.ingredient_summaries.search(query="retinol", limit=3):
    print(ingredient.name, ingredient.score, ingredient.data_availability)

# Drill down into the first result's full details
item = client.ingredient_summaries.search(query="glycerin", limit=1).first()
if item:
    try:
        detail = item.details()
        print(detail.name, detail.score, detail.data_availability)
        print(detail.description)
        for concern in detail.common_concerns:
            print(concern.name, concern.level)
    except IngredientNotFound as e:
        print(f"Not found: {e.ingredient_id}")

print("exercised: ingredient_summaries.search, ingredient_summaries.details")
All endpoints · 2 totalmissing one? ·

Search the EWG Skin Deep database for cosmetic ingredients by name. Returns a paginated list of matching ingredients with their hazard scores and data availability ratings. Results are auto-iterated; use limit to cap total items fetched.

Input
ParamTypeDescription
pageintegerPage number for pagination (1-based).
searchstringSearch query for ingredient name. Use '*' to list all ingredients.
Response
{
  "type": "object",
  "fields": {
    "page": "current page number",
    "total": "total number of matching ingredients",
    "ingredients": "array of ingredient summaries with id, name, slug, score, score_min, data_availability, and url",
    "total_pages": "total number of pages available"
  },
  "sample": {
    "data": {
      "page": 1,
      "total": 74,
      "ingredients": [
        {
          "id": "705545",
          "url": "https://www.ewg.org/skindeep/ingredients/705545-RETINYL_PALMITATE_VITAMIN_A_PALMITATE/",
          "name": "RETINYL PALMITATE (VITAMIN A PALMITATE)",
          "slug": "RETINYL_PALMITATE_VITAMIN_A_PALMITATE",
          "score": 9,
          "score_min": 1,
          "data_availability": "Fair"
        },
        {
          "id": "706889",
          "url": "https://www.ewg.org/skindeep/ingredients/706889-RETINOL_VITAMIN_A/",
          "name": "RETINOL (VITAMIN A)",
          "slug": "RETINOL_VITAMIN_A",
          "score": 9,
          "score_min": 1,
          "data_availability": "Good"
        }
      ],
      "total_pages": 7
    },
    "status": "success"
  }
}

About the Ewg API

The Ewg API on Parse exposes 2 endpoints for the publicly available data on ewg.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.