Cult Beauty APIcultbeauty.co.uk ↗
Access Cult Beauty's product catalog, brand directory, customer reviews, sale items, and new arrivals via 8 structured API endpoints.
What is the Cult Beauty API?
The Cult Beauty API covers 8 endpoints for searching and browsing cultbeauty.co.uk — returning product titles, SKUs, pricing, ingredients, variant stock status, loyalty points, and Bazaarvoice-sourced customer reviews. get_product_details delivers the deepest single-product payload, including content blocks broken out by type (ingredients, synopsis, whyChoose), cross-sell recommendations, and an "other customers bought" array. Brand discovery, category browsing, sale listings, and new arrivals are each served by dedicated endpoints.
curl -X GET 'https://api.parse.bot/scraper/8544425d-fdf5-4620-bd73-9b4fa05a9c08/search_products?page=1&query=elemis' \ -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 cultbeauty-co-uk-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.
from parse_apis.cult_beauty_api import CultBeauty, Brand
client = CultBeauty()
# Search for products by keyword
for product in client.products.search(query="vitamin c serum", limit=5):
print(product.title, product.sku)
print(product.review_summary.average_score, product.review_summary.total)
print(product.cheapest_variant.price.price.display_value)
# Browse new arrivals
for product in client.products.new_arrivals(limit=3):
print(product.title, product.brand.name)
# Construct a brand and list its products
elemis = client.brand(slug="elemis")
for product in elemis.products(limit=3):
print(product.title, product.cheapest_variant.in_stock)
# List all brands
for brand in client.brands.list(limit=10):
print(brand.name, brand.slug)
# Fetch reviews via sub-resource navigation
for product in client.products.search(query="elemis cleanser", limit=1):
for review in product.reviews.list(offset=0):
print(review.user_nickname, review.rating, review.title)
Full-text search over Cult Beauty's product catalog. Returns products matching the query with full details including pricing, variants, reviews summary, and content. Supports pagination via page number. Multi-word queries are handled via a GraphQL fallback when the HTML search page redirects.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number to retrieve. |
| queryrequired | string | Search query string (e.g. 'elemis', 'vitamin c serum'). |
{
"type": "object",
"fields": {
"items": "array of product objects with title, sku, brand, price, images, reviews, variants, and content"
},
"sample": {
"data": {
"items": [
{
"sku": 17738286,
"url": "/p/elemis-pro-collagen-body-cleansing-balm-75ml/17738286/",
"brand": {
"name": "Elemis"
},
"title": "Elemis Pro-Collagen Body Cleansing Balm 75ml",
"reviews": {
"total": 22,
"averageScore": 5
},
"cheapestVariant": {
"sku": 17738286,
"price": {
"rrp": {
"amount": "18.0",
"currency": "GBP",
"displayValue": "£18.00"
},
"price": {
"amount": "18.0",
"currency": "GBP",
"displayValue": "£18.00"
}
},
"inStock": true
}
}
]
},
"status": "success"
}
}About the Cult Beauty API
Product Search and Detail
search_products accepts a query string and an optional page integer, returning an items array where each object carries title, sku, brand, price, images, reviews (summary), variants, and content. For richer per-product data, pass the full product page URL to get_product_details, which returns the same core fields plus a structured content array segmented into named blocks (ingredients, synopsis, whyChoose), a cheapestVariant object with pricing and loyalty points, and both recommendations and otherCustomersBought arrays for cross-sell analysis.
Browsing by Category and Brand
get_category_products takes a category_path string such as /c/skin-care/moisturisers/ and an optional page number, returning paginated product listings in the same items schema. Brand-level browsing starts with get_brand_list, which returns all brands as name, slug, and url — no parameters needed. Feed any brand_slug (e.g. charlotte-tilbury) into get_brand_products to get paginated results for that brand.
Reviews, Sale, and New Arrivals
get_product_reviews queries Bazaarvoice for a given product_id (the SKU integer from search or detail results), with limit and offset for pagination. Each review object includes Id, Rating, Title, ReviewText, UserNickname, SubmissionTime, and syndication metadata, alongside top-level TotalResults and HasErrors flags. get_sale_products returns on-sale items with both a discounted price and an rrp field for markdown calculations. get_new_arrivals surfaces Cult Beauty's "What's New" section with the same paginated items structure.
The Cult Beauty API is a managed, monitored endpoint for cultbeauty.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cultbeauty.co.uk 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 cultbeauty.co.uk 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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track price drops on sale products by comparing
priceagainstrrpfromget_sale_products. - Build an ingredient scanner by extracting the
ingredientsblock fromget_product_detailscontent arrays. - Monitor new product launches by polling
get_new_arrivalsand diffing against a stored SKU list. - Aggregate Bazaarvoice review sentiment across a brand's catalog using
get_product_reviewswith SKUs fromget_brand_products. - Construct a brand directory with product counts by combining
get_brand_listandget_brand_productspagination totals. - Compare cross-sell recommendations across competing products using the
recommendationsandotherCustomersBoughtfields fromget_product_details. - Build category-level price benchmarking tools using
get_category_productswith paths like/c/make-up/lips/.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Cult Beauty have an official developer API?+
What does get_product_reviews return, and how do I paginate through all reviews for a product?+
Results array of review objects — each with Id, Rating, Title, ReviewText, UserNickname, and SubmissionTime — alongside TotalResults, Limit, Offset, and HasErrors. Increment offset by Limit on each call until your accumulated results equal TotalResults. The product_id parameter is the numeric SKU returned by search_products or get_product_details.Can I filter products by ingredient, skin type, or other attributes within a category?+
get_category_products and search_products endpoints do not accept attribute filter parameters — browsing is by category path or free-text query only. Product-level ingredient data is available in the content array on get_product_details. You can fork this API on Parse and revise it to add attribute filtering as an endpoint if you need server-side faceted results.Does the API expose wish lists, user accounts, or order history?+
How fresh is the pricing and stock data returned by the endpoints?+
cheapestVariant object in get_product_details includes stock status, so availability reflects what Cult Beauty's site shows at call time. High-frequency polling across many SKUs should account for the API's rate limits.