Sephora API endpoint
Returns Sephora physical store locations near a coordinate (address, hours, BOPIS/curbside/same-day flags). Renders through a JS-executing browser backend, unlike every other Sephora endpoint -- the store-locator data call itself is plain HTTP, but it requires a per-visit access token minted by an endpoint gated behind a bot-management JS challenge, so responses may take longer.
/sephora/storesReturns Sephora physical store locations near a coordinate: address, hours, distance, and BOPIS/curbside/same-day-delivery availability flags.
Query parameters:
latitude: required, -90 to 90.longitude: required, -180 to 180.radius: optional, search radius in miles, 1 to 500, defaults to
50.limit: optional, max stores to return, 1 to 50, defaults to 10.Notable response behavior:
hours are Sephora's own display-formatted strings per day (e.g.
"10:00AM - 08:00PM"), plus the store's own IANA time zone./geocoding/* endpoints) if you have text input rather than coordinates.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| latitude | number | Yes | Latitude, -90 to 90 | 41.88325 | |
| longitude | number | Yes | Longitude, -180 to 180 | -87.6323879 | |
| radius | integer | No | 50 | Search radius in miles, 1 to 500, defaults to 50 | 50 |
| limit | integer | No | 10 | Max stores to return, 1 to 50, defaults to 10 | 10 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sephora/stores?latitude=41.88325&longitude=-87.6323879&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"latitude": 41.88325,
"longitude": -87.6323879,
"radius": 50,
"count": 1,
"stores": [
{
"store_id": "0662",
"store_type": "SEPHORA",
"display_name": "STATE STREET",
"distance_miles": 0.2,
"latitude": 41.88382,
"longitude": -87.62816,
"address": {
"address1": "108 N STATE ST",
"address2": "STE 134",
"city": "CHICAGO",
"state": "IL",
"postal_code": "60602-1609",
"country": "US",
"phone": "3122638688",
"mall_name": "BLOCK 37"
},
"hours": {
"monday": "10:00AM - 08:00PM",
"tuesday": "10:00AM - 08:00PM",
"wednesday": "10:00AM - 08:00PM",
"thursday": "10:00AM - 08:00PM",
"friday": "10:00AM - 08:00PM",
"saturday": "10:00AM - 08:00PM",
"sunday": "11:00AM - 06:00PM",
"time_zone": "America/Chicago"
},
"same_day_delivery_enabled": true,
"is_bopisable": true,
"is_online_reservation_enabled": true,
"url": "https://www.sephora.com/happening/stores/chicago-state-street"
}
],
"source_url": "https://www.sephora.com/gway/v1/dotcom-sys/stores?...",
"fetched_at": "2026-08-15T12:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/sephora.storesResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sephora.StoresResponse | No | ||||
| data.count | integer | No | ||||
| data.fetched_at | string | No | ||||
| data.latitude | number | No | 41.88325 | |||
| data.longitude | number | No | -87.6323879 | |||
| data.radius | integer | No | 50 | |||
| data.source_url | string | No | ||||
| data.stores | array | No | ||||
| data.stores[].address | sephora.StoreAddress | No | ||||
| data.stores[].address.address1 | string | No | ||||
| data.stores[].address.address2 | string | No | ||||
| data.stores[].address.city | string | No | ||||
| data.stores[].address.country | string | No | ||||
| data.stores[].address.mall_name | string | No | ||||
| data.stores[].address.phone | string | No | ||||
| data.stores[].address.postal_code | string | No | ||||
| data.stores[].address.state | string | No | ||||
| data.stores[].display_name | string | No | STATE STREET | |||
| data.stores[].distance_miles | number | No | 0.2 | |||
| data.stores[].hours | sephora.StoreHours | No | ||||
| data.stores[].hours.friday | string | No | ||||
| data.stores[].hours.monday | string | No | ||||
| data.stores[].hours.saturday | string | No | ||||
| data.stores[].hours.sunday | string | No | ||||
| data.stores[].hours.thursday | string | No | ||||
| data.stores[].hours.time_zone | string | No | America/Chicago | |||
| data.stores[].hours.tuesday | string | No | ||||
| data.stores[].hours.wednesday | string | No | ||||
| data.stores[].is_bopisable | boolean | No | ||||
| data.stores[].is_curbside_enabled | boolean | No | ||||
| data.stores[].is_online_reservation_enabled | boolean | No | ||||
| data.stores[].latitude | number | No | ||||
| data.stores[].longitude | number | No | ||||
| data.stores[].same_day_delivery_enabled | boolean | No | ||||
| data.stores[].store_id | string | No | 0662 | |||
| data.stores[].store_type | string | No | SEPHORA | |||
| data.stores[].url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/sephora/stores?latitude=41.88325&longitude=-87.6323879&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"