Whataburger API endpoint
Returns one page of Whataburger's sitemap-declared store index -- about 3,950 URLs at time of writing. Unlike some other store locators in this API, Whataburger publishes a single flat sitemap file rather than a sharded index. Each entry carries a kind: "store" is a restaurant's canonical detail page, "curbside" and "delivery" are separate pages Whataburger publishes for that same restaurant's curbside or delivery service, and "directory" is a state- or city-level listing page with no address of its own. Filter with kind to enumerate one page variant. A page past the end returns an empty list rather than an error, so a caller can walk to exhaustion.
/whataburger/sitemapReturns one page of Whataburger's sitemap-declared store index — about 3,950 URLs at time of writing. Unlike Subway and Jimmy John's, Whataburger publishes a single flat sitemap.xml file, not a sharded index, so there is no shard parameter here.
store — a restaurant's canonical detail pagecurbside — a separate page Whataburger publishes for that same restaurant's curbside servicedelivery — a separate page Whataburger publishes for that same restaurant's delivery servicedirectory — a state- or city-level listing page with no address of its ownQuery parameters:
page (optional, default 1) — 1-based page.page_size (optional, default 100, max 500) — entries per page.kind (optional) — filter by page kind. One of store, curbside, delivery, directory. Default all.Response includes entries[], count, total, page, total_pages, source_url, and fetched_at. Each entry has url, path (the value /api/v1/whataburger/store takes), kind, and store_number (only present for the short-permalink Curbside/Delivery variants, e.g. 1197C.html).
| Field | Filled in, of 40 checked | Values in the sample |
|---|---|---|
| url | 40 | locations.whataburger.com |
| path | 40 | “al/alabaster/1101-1st-st-s.html” and 39 other values |
| kind | 40 | store in all 40 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| page | integer | No | 1-based page (default 1) | 1 | |
| page_size | integer | No | Entries per page, 1-500 (default 100) | 100 | |
| kind | string | No | Filter by page kind. One of store, curbside, delivery, directory. Default all. Allowed values: store, curbside, delivery, directory. | store | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/whataburger/sitemap?page=1&kind=store" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"entries": [
{
"url": "https://locations.whataburger.com/tx/abilene/1625-tx-hwy-351.html",
"path": "tx/abilene/1625-tx-hwy-351.html",
"kind": "store"
}
],
"count": 1,
"total": 1583,
"page": 1,
"total_pages": 159,
"source_url": "https://locations.whataburger.com/sitemap.xml",
"fetched_at": "2026-09-01T17:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/whataburger.sitemapResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | whataburger.SitemapResponse | No | ||||
| data.count | integer | No | 100 | |||
| data.entries | array | No | ||||
| data.entries[].kind | string | No | store | Kind classifies the page: "store" is the canonical restaurant page, "curbside"/"delivery" are separate Yext entities for the same restaurant's curbside or delivery service, and "directory" is a state- or city-level listing page with no address of its own. | ||
| data.entries[].path | string | No | tx/abilene/1625-tx-hwy-351.html | Path is the locator path, the value /whataburger/store takes. | ||
| data.entries[].store_number | string | No | 1197 | StoreNumber is only derivable from the short-permalink Curbside/ Delivery variants (e.g. "1197C.html"); it is empty for every other kind, since Whataburger's canonical and long-form variant paths use a street-name slug instead of a numeric id. | ||
| data.entries[].url | string | No | ||||
| data.fetched_at | string | No | ||||
| data.page | integer | No | 1 | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 3955 | |||
| data.total_pages | integer | No | 40 | |||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/whataburger/sitemap?page=1&kind=store" \
-H "x-api-key: $CRAWLORA_API_KEY"