Endpoint Playground
Lists Ulta Beauty's own storefront category navigation: department, group, name, and a URL usable directly as GET /ulta/category's own category parameter. Closes the discovery gap of not already knowing a category path. department, if set, filters to just that department's entries. group is empty for a department's own top-level link or a group's own heading link, and set to that group's name for the leaf categories nested under it. The exact same real category can legitimately appear more than once under a different department/group when the site's own navigation cross-lists it.
14 Oct 2026: 51 categories; 3 fields had a value in every checked item and 1 varied between items.
Sample value profiles: group: Face (12), Lips (8), Eyes (8) and 2 more; name: “Shop All Makeup & Nails” and 50 other values; url: ulta.com.
curl 'https://api.crawlora.net/api/v1/ulta/categories?department=makeup-nails' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| department | string | No | makeup-nails | Filter to one department |
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.ulta.com/",
"fetched_at": "2026-08-11T12:00:00Z",
"categories": [
{
"department": "makeup-nails",
"name": "All Makeup & Nails",
"url": "https://www.ulta.com/shop/makeup"
},
{
"department": "makeup-nails",
"name": "Eyes",
"url": "https://www.ulta.com/shop/makeup/eyes"
},
{
"department": "makeup-nails",
"group": "Eyes",
"name": "Mascara",
"url": "https://www.ulta.com/shop/makeup/eyes/mascara"
},
{
"department": "makeup-nails",
"group": "Face",
"name": "Tinted Moisturizer",
"url": "https://www.ulta.com/shop/skin-care/moisturizers/tinted-moisturizer"
}
]
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.