McDonalds API endpoint
Returns McDonald's restaurants near a latitude/longitude, in any of ten markets. Each restaurant carries its store id, name, street address, city, state, postal code, phone, coordinates, timezone, open status, today's dining and drive-thru hours, the full published week of hours, and McDonald's own amenity codes (for example DRIVETHRU, WIFI, MOBILEOFFERS, GIFTCARDS). A delivery deep link is included where McDonald's publishes one; note it points at a third-party delivery platform. A coordinate with no McDonald's nearby returns an empty list rather than an error. Set country to search outside the United States -- the locator covers more markets than the menu and item endpoints do, so a country valid here is not necessarily valid there.
/mcdonalds/restaurantsQuery parameters:
latitude (required) — search center latitude, e.g. 40.7128.longitude (required) — search center longitude, e.g. -74.0060.radius (optional, default 20, max 100) — search radius in miles.max_results (optional, default 10, max 50) — maximum restaurants to return.Response includes restaurants[], count, source_url, and fetched_at. Each restaurant has store_id, name, address, city, state, postal_code, telephone, latitude, longitude, timezone, open_status, today_hours, drive_thru_hours, hours[] (one entry per weekday, in weekday order), facilities[] (McDonald's own amenity codes such as DRIVETHRU, WIFI, MOBILEOFFERS, GIFTCARDS), and delivery_url.
delivery_url points at a third-party delivery platform, not a McDonald's-operated endpoint.
Markets:
country (optional, default us) — which market to search. One of us, gb, ca, au, de, ie, nz, ch, nl, se.McDonald's runs a different backend per market and does not serve all of them the same way, so the accepted set differs per endpoint. The locator covers all ten above; /mcdonalds/categories and /mcdonalds/menu cover eight; /mcdonalds/item covers seven. A country that is real but unsupported on a given endpoint is rejected with a message naming that endpoint's set, rather than silently falling back to the United States. The response echoes country.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| store_id | 10 | |
| name | 10 | “STRAND” and 9 other values |
| address | 10 | |
| city | 10 | WESTMINSTER (7), CITY OF WESTMINSTER (1), LAMBETH (1) and 1 more |
| postal_code | 10 | |
| telephone | 10 | “020 7930 7530” and 9 other values |
| latitude | 10 | |
| longitude | 10 | |
| timezone | 10 | (GMT) Greenwich Mean Time: Dubl… in all 10 |
| open_status | 10 | OPEN in all 10 |
| today_hours | 10 | “05:00 - 05:00” and 6 other values |
| hours | 10 | median 7 entries |
| facilities | 10 | median 13 entries |
| delivery_url | 10 | ubereats.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| latitude | number | Yes | Search center latitude | 40.7128 | |
| longitude | number | Yes | Search center longitude | -74.006 | |
| radius | integer | No | Search radius in miles, 1-100 (default 20) | 20 | |
| max_results | integer | No | Maximum restaurants to return, 1-50 (default 10) | 10 | |
| country | string | No | Market to search (default us). One of us, gb, ca, au, de, ie, nz, ch, nl, se. Allowed values: us, gb, ca, au, de, ie, nz, ch, nl, se. | us | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mcdonalds/restaurants?latitude=40.7128&longitude=-74.006&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"store_id": "10528",
"name": "160 BROADWAY",
"address": "160 Broadway",
"city": "New York",
"state": "NY",
"postal_code": "10038",
"telephone": "(212) 385-2066",
"latitude": 40.709438,
"longitude": -74.010086,
"timezone": "(GMT-05:00) Eastern Time (US & Canada)",
"open_status": "OPEN",
"today_hours": "00:00 - 00:00",
"hours": [
{
"day_of_week": "Monday",
"hours": "00:00 - 00:00"
}
],
"facilities": [
"GIFTCARDS",
"MOBILEOFFERS"
]
}
],
"count": 1,
"source_url": "https://www.mcdonalds.com/googleappsv2/geolocation?method=searchLocation",
"fetched_at": "2026-08-31T05:10:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/mcdonalds.restaurantsResponseDoc
| 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 | mcdonalds.RestaurantsResponse | No | ||||
| data.count | integer | No | 5 | |||
| data.country | string | No | us | Country echoes the market searched, so a response is self-describing when several markets are queried in one workflow. | ||
| data.fetched_at | string | No | ||||
| data.restaurants | array | No | ||||
| data.restaurants[].address | string | No | 160 Broadway | |||
| data.restaurants[].city | string | No | New York | |||
| data.restaurants[].delivery_url | string | No | DeliveryURL is the store's delivery deep link when one is published. Note McDonald's points this at a third-party delivery platform. | |||
| data.restaurants[].drive_thru_hours | string | No | ||||
| data.restaurants[].facilities | array | No | Facilities are McDonald's own amenity codes for the restaurant (e.g. GIFTCARDS, MOBILEOFFERS, DRIVETHRU, WIFI). | |||
| data.restaurants[].hours | array | No | Hours is the full week where McDonald's publishes it. | |||
| data.restaurants[].hours[].day_of_week | string | No | monday | |||
| data.restaurants[].hours[].hours | string | No | 00:00 - 00:00 | |||
| data.restaurants[].latitude | number | No | 40.709438 | |||
| data.restaurants[].longitude | number | No | -74.010086 | |||
| data.restaurants[].name | string | No | 160 BROADWAY | |||
| data.restaurants[].open_status | string | No | OPEN | |||
| data.restaurants[].postal_code | string | No | 10038 | |||
| data.restaurants[].state | string | No | NY | |||
| data.restaurants[].store_id | string | No | 10528 | |||
| data.restaurants[].telephone | string | No | (212) 385-2066 | |||
| data.restaurants[].timezone | string | No | ||||
| data.restaurants[].today_hours | string | No | TodayHours and DriveThruHours are the published windows for today. | |||
| data.source_url | string | No | ||||
| 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/mcdonalds/restaurants?latitude=40.7128&longitude=-74.006&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"