Catalog coverage · ulta
Catalog coverage · ulta
Search products from ulta.com and retrieve product details as JSON through StoreRouter’s API. Access prices, images, descriptions, and available variant data, plus enriched attributes for filtering.
Snapshot from . Counts are approximate and refresh about daily.
Developer quickstart
export OCTOGEN_PLATFORM_API_KEY="your-api-key". Requests use Authorization: Bearer; the SDKs read this variable automatically. Keep the key on your server.curl -sS https://api.storerouter.ai/v1/products/search \ -H "Authorization: Bearer $OCTOGEN_PLATFORM_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "catalogs": ["ulta"], "limit": 5 }'# Requires Python 3.11+ and uv; install from the public SDK repository:
# git clone https://github.com/octogen-ai/octogen-dev.git
# cd octogen-dev
# uv sync --project sdks/python
# Save this sample as search.py here, then run:
# uv run --project sdks/python python search.py
import asyncio
from octogen_ai_sdk import OctogenClient
async def main() -> None:
async with OctogenClient(base_url="https://api.storerouter.ai/v1") as client:
page = await client.search_products(
catalogs=["ulta"],
limit=5,
)
for product in page.items:
print(product.title, product.current_price, product.product_url)
asyncio.run(main())// Node.js 20+; install: npm install @octogen-ai/sdk
// Save this sample as search.mjs, then run: node search.mjs
import { OctogenClient } from "@octogen-ai/sdk";
const client = new OctogenClient({ baseUrl: "https://api.storerouter.ai/v1" });
const page = await client.searchProducts({
catalogs: ["ulta"],
limit: 5,
});
for (const product of page.items) {
console.log(product.title, product.currentPrice, product.productUrl);
}Indexed snapshot from this search, verified by URL lookup. Selected fields only; prices and availability may have changed since retrieval.
Loving Tan
Search finds indexed products by query and filters within this retailer’s catalog.Product URL lookup retrieves one product: index_only uses the index and returns 404 on a miss; auto checks the index before resolving a miss on demand. For a fresh page read where supported, use resolutionMode: "on_demand_only" with onDemandCachePolicy: "refresh". On-demand results may be partial and do not guarantee live price or availability.
Example product response
Inspect a product from the search example above, then retrieve its details through the API.
Indexed response retrieved . Price and availability reflect this response and may change.

$21.00In stock
Sizes: 5.0 oz, 16.0 oz
#### Benefits - Prevents shade fade - Defends against damaging environmental aggressors - Helps to maintain vibrancy and shine for up to 7 weeks #### Key Ingredients - Lime Caviar - Copper encapsulating molecules - Histidine - Vitamin E Item 2541258
Source product pageProduct content returned by the lookup API, ready for a product page.
JSON response excerpt
{
"source": "indexed",
"catalogKey": "ulta",
"product": {
"title": "Invigo Brilliance Mask For Normal Hair",
"brand": null,
"productUrl": "https://www.ulta.com/p/invigo-brilliance-mask-normal-hair-pimprod2003699",
"currentPrice": 21,
"currency": "USD",
"inStock": true,
"description": "#### Benefits - Prevents shade fade - Defends against damaging environmental aggressors - Helps to maintain vibrancy and shine for up to 7 weeks #### Key Ingredients - Lime Caviar - Copper encapsulating molecules - Histidine - Vitamin E Item 2541258",
"primaryImage": {
"url": "https://media.ultainc.com/i/ulta/2541258?w=2048&h=2048",
"cdnUrl": "https://cdn.octogen.ai/7c2001e9fe4d7c2125423a9337210c3e/a6d6658881b010034aea10ce56de6d70.webp?request_id=d5dec139-2fd0-41e6-8bec-b637216d3c5f",
"width": 2048,
"height": 2048,
"sizeBytes": 279128,
"mimeType": "image/webp"
},
"details": {
"materials": [
"Aqua/Water/Eau",
"Stearyl Alcohol",
"Cetyl Alcohol",
"Behenamidopropyl Dimethylamine",
"Bis-Aminopropyl Dimethicone",
"Glutamic Acid",
"Fragrance/Parfum",
"Benzyl Alcohol",
"Phenoxyethanol",
"Glycerin",
"Methylparaben",
"Tocopheryl Acetate",
"Propylparaben",
"Limonene",
"Histidine",
"EDTA",
"Sodium Chloride",
"Citric Acid",
"Linalool",
"Hexyl Cinnamal",
"Microcitrus Australasica Fruit Extract."
],
"fit": [],
"dimensions": null,
"patterns": []
}
}
}StoreRouter classification and attributes. Use attribute_handles as search facet values.
JSON response excerpt
{
"source": "indexed",
"catalogKey": "ulta",
"product": {
"enrichment": {
"type": "hair mask",
"category_path": [
"Beauty",
"Hair Care",
"Treatments & Solutions",
"Hair Masks, Oils & Serums"
],
"styles": null,
"attributes": {
"Package type": [
"Jar"
],
"Product form": [
"Cream"
],
"Treatment type": [
"Topical"
],
"Suitable for hair type": [
"Dyed",
"Fine",
"Normal"
],
"Constitutive ingredients": [
"Alcohol",
"Fruit Extracts",
"Glycerin",
"Vitamin E",
"Water"
]
},
"attribute_handles": {
"package_type": [
"package_type__jar"
],
"product_form": [
"product_form__cream"
],
"treatment_type": [
"treatment_type__topical"
],
"suitable_for_hair_type": [
"suitable_for_hair_type__dyed",
"suitable_for_hair_type__fine",
"suitable_for_hair_type__normal"
],
"constitutive_ingredients": [
"constitutive_ingredients__alcohol",
"constitutive_ingredients__fruit_extracts",
"constitutive_ingredients__glycerin",
"constitutive_ingredients__vitamin_e",
"constitutive_ingredients__water"
]
}
}
}
}curl -sS https://api.storerouter.ai/v1/products/lookup \
-H "Authorization: Bearer $OCTOGEN_PLATFORM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.ulta.com/p/invigo-brilliance-mask-normal-hair-pimprod2003699",
"resolutionMode": "index_only"
}'Selected response fields are shown. API documentation
Catalog
Attributes
Each attribute below is a search facet: the bar shows the share of Ulta Beauty products that have it, and each value shows the share tagged with that value. A product can have several values, so these can add up to more than 100%.
Product form
product_form
Constitutive ingredients
constitutive_ingredients
Package type
package_type
Product certifications & standards
product_certifications_standards
Product color
color
Makeup features
makeup_features
Skin care effect
skin_care_effect
Cosmetic finish
cosmetic_finish
Pattern
pattern
Suitable for hair type
suitable_for_hair_type
Suitable for skin type
suitable_for_skin_type
| Field | Facet name | Source | Coverage | Values |
|---|---|---|---|---|
| Activewear | is_activewear | Merchant data | 100% | 1 |
| Product color | color | Merchant data | 23% | 3 |
| Color family | color_family | Merchant data | 23% | 2 |
| Category at depth 0 | category_path.depth_0 | StoreRouter enrichment | 100% | 2 |
| Category at depth 1 | category_path.depth_1 | StoreRouter enrichment | 100% | 5 |
| Category at depth 2 | category_path.depth_2 | StoreRouter enrichment | 100% | 10 |
| Category at depth 3 | category_path.depth_3 | StoreRouter enrichment | 92% | 10 |
| Age Group | age_groups | StoreRouter enrichment | 69% | 1 |
| Gender | gender | StoreRouter enrichment | 69% | 2 |
| Product form | product_form | StoreRouter enrichment | 54% | 4 |
| Category at depth 4 | category_path.depth_4 | StoreRouter enrichment | 39% | 5 |
| Constitutive ingredients | constitutive_ingredients | StoreRouter enrichment | 31% | 6 |
| Package type | package_type | StoreRouter enrichment | 31% | 5 |
| Product certifications & standards | product_certifications_standards | StoreRouter enrichment | 31% | 9 |
| Makeup features | makeup_features | StoreRouter enrichment | 23% | 5 |
| Skin care effect | skin_care_effect | StoreRouter enrichment | 23% | 8 |
| Cosmetic finish | cosmetic_finish | StoreRouter enrichment | 15% | 3 |
| Dispenser type | dispenser_type | StoreRouter enrichment | 15% | 2 |
| Pattern | pattern | StoreRouter enrichment | 15% | 3 |
| Suitable for hair type | suitable_for_hair_type | StoreRouter enrichment | 15% | 6 |
| Suitable for skin type | suitable_for_skin_type | StoreRouter enrichment | 15% | 4 |
| Treatment type | treatment_type | StoreRouter enrichment | 15% | 1 |
| Application area | application_area | StoreRouter enrichment | 8% | 1 |
| Category at depth 5 | category_path.depth_5 | StoreRouter enrichment | 8% | 1 |
| Cosmetic function | cosmetic_function | StoreRouter enrichment | 8% | 1 |
| Fabric | fabric | StoreRouter enrichment | 8% | 1 |
| Base Notes | fragrance_base_notes | StoreRouter enrichment | 8% | 3 |
| Fragrance Family | fragrance_family | StoreRouter enrichment | 8% | 2 |
| Heart Notes | fragrance_heart_notes | StoreRouter enrichment | 8% | 3 |
| Fragrance Notes | fragrance_notes | StoreRouter enrichment | 8% | 7 |
| Top Notes | fragrance_top_notes | StoreRouter enrichment | 8% | 3 |
| Hair care finish | hair_care_finish | StoreRouter enrichment | 8% | 1 |
| Hair styling tool features | hair_styling_tool_features | StoreRouter enrichment | 8% | 2 |
| Lip gloss effect | lip_gloss_effect | StoreRouter enrichment | 8% | 1 |
| Mascara effect | mascara_effect | StoreRouter enrichment | 8% | 3 |
| Material | material | StoreRouter enrichment | 8% | 1 |
| Power source | power_source | StoreRouter enrichment | 8% | 1 |
| Scent | scent | StoreRouter enrichment | 8% | 2 |
| Skin tone | skin_tone | StoreRouter enrichment | 8% | 2 |
| Skin undertone | skin_undertone | StoreRouter enrichment | 8% | 2 |
| Sustainability Features | sustainability_features | StoreRouter enrichment | 8% | 1 |
| Tan type | tan_type | StoreRouter enrichment | 8% | 1 |
| Canonical brand name | brand_name | Brand | 46% | 6 |
Data
For agents
Every facet name and value on this page, ready for an agent or a script.
Are you an AI agent? Fetch https://storerouter.ai/llms.txt to learn how to get product data from StoreRouter, and how to make a storefront's products readable by agents.
One API key gives your agent search, product lookup, and similar-item results across every store StoreRouter indexes.
Get an API key