ulta.com APIulta.com ↗
Access Ulta Beauty product catalog data via API: search products, browse categories, get ingredients, pricing, and customer reviews from PowerReviews.
curl -X GET 'https://api.parse.bot/scraper/05c4d11c-559b-4def-a722-d169488a2138/search_products?query=mascara' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for products by keyword on Ulta.com. Returns up to 64 products per request with pricing, ratings, and product URLs.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword (e.g. 'mascara', 'moisturizer', 'lipstick') |
{
"type": "object",
"fields": {
"products": "array of product objects with productId, skuId, brandName, productName, listPrice, salePrice, discount, rating, reviewCount, imageUrl, productUrl, sponsored, promoText, variantLabel",
"totalResults": "integer total number of matching products"
},
"sample": {
"data": {
"products": [
{
"skuId": "2522828",
"rating": 4,
"discount": null,
"imageUrl": "https://media.ultainc.com/i/ulta/2522828",
"brandName": "Benefit Cosmetics",
"listPrice": "$29.00",
"productId": "xlsImpprod17501079",
"promoText": "Free Gift with purchase",
"salePrice": null,
"sponsored": false,
"productUrl": "https://www.ulta.com/p/badgal-bang-volumizing-mascara-xlsImpprod17501079?sku=2522828",
"productName": "BADgal BANG! Volumizing Mascara",
"reviewCount": 4892,
"variantLabel": "4 colors"
}
],
"totalResults": 387
},
"status": "success"
}
}About the ulta.com API
The Ulta Beauty API covers 4 endpoints that expose product catalog data from ulta.com, including real-time pricing, ingredients, usage instructions, and customer reviews. Using search_products, you can query the full catalog by keyword and get up to 64 results per request with brand name, list price, sale price, rating, and review count. The get_product_details endpoint adds full ingredient lists, how-to instructions, and markdown-formatted descriptions for any product ID.
Catalog Search and Category Browsing
The search_products endpoint accepts a query string (e.g. 'mascara', 'moisturizer') and returns an array of product objects alongside a totalResults count. Each product object includes productId, skuId, brandName, productName, listPrice, salePrice, discount, rating, reviewCount, and an image URL. The browse_category endpoint works the same way but navigates by category_path — for example /shop/skin-care/moisturizers or /shop/makeup/face/foundation — making it straightforward to enumerate an entire product segment without guessing search terms.
Product Detail Data
get_product_details takes a product_id obtained from either search or browse and returns the full data record: brand, price, salePrice, rating, reviewCount, a markdown details description, howToUse instructions, and a full ingredients string. Enhanced content from Syndigo is included where available. This is the endpoint to use when building ingredient checkers, product comparison tools, or retail feed integrations.
Customer Reviews
get_product_reviews retrieves PowerReviews data for any product_id. The response includes a paging object with total_results, pages_total, page_size, current_page_number, and next_page_url for cursor-style pagination. The results array contains a rollup with aggregate rating summary, a rating histogram, and featured faceoff reviews, plus an array of individual review objects. The limit parameter controls page size.
- Build an ingredient safety checker using the
ingredientsfield fromget_product_details. - Track price drops across a category by polling
browse_categoryforlistPriceandsalePricechanges. - Aggregate PowerReviews sentiment data using the rating histogram and review text from
get_product_reviews. - Populate a beauty product comparison table with brand, price, rating, and reviewCount from
search_products. - Sync an affiliate product feed by iterating category paths through
browse_categoryto collectproductIdandimagefields. - Surface how-to content for a beauty app using the
howToUsefield returned byget_product_details. - Monitor discount depth across a skincare category using the
discountfield in browse or search results.
| 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 | 250 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 Ulta Beauty have an official developer API?+
What does get_product_reviews return beyond a star rating?+
rollup object containing the aggregate average rating, a per-star histogram, and featured faceoff reviews (best/worst). It also returns an array of individual reviews with their own metadata. Pagination is handled via the paging object, which includes next_page_url so you can walk through all pages for high-review-count products.Does the API return inventory or in-store availability data?+
listPrice, salePrice, discount) but do not expose store-level inventory counts or in-store availability status. The API covers product catalog and review data. You can fork it on Parse and revise to add an inventory or store-locator endpoint if that data surface is needed.How many products are returned per search or category request, and can I paginate?+
search_products and browse_category return up to 64 products per request along with a total count (totalResults or total). Currently the endpoints do not expose an explicit page or offset parameter. You can fork the API on Parse and revise it to add offset or page parameters if deeper pagination is required.Does the API return shade or variant-level SKU data for multi-variant products?+
skuId per product object, representing a default or primary SKU. Variant-level shade enumeration and per-SKU pricing differences are not currently exposed. You can fork the API on Parse and revise get_product_details to return the full variant and shade list.