Grubhub API endpoint
Returns restaurants delivering to (or offering pickup at) a latitude/longitude, optionally filtered by keyword over restaurant names, cuisines and dishes. Each restaurant carries its id (the value every other Grubhub endpoint takes), name, full address with coordinates, phone, cuisines, star rating and rating count, Grubhub's 1-4 price tier, distance, open state, delivery and pickup fees and minimums, service fee, delivery and pickup time estimates, coupon availability and total menu item count. A location Grubhub does not serve returns an empty list rather than an error.
/grubhub/searchEach restaurant's restaurant_id is the value every other Grubhub endpoint takes.
Query parameters:
latitude (required) — search center latitude, e.g. 40.7128.longitude (required) — search center longitude, e.g. -74.0060.search (optional) — keyword over restaurant names, cuisines and dishes, e.g. pizza.order_method (optional, default delivery) — one of delivery, pickup.page_size (optional, default 20, max 50) — restaurants per page.page (optional, default 1) — 1-based page number.Response includes restaurants[], count, total_hits, page, total_pages, source_url, and fetched_at. Each restaurant has restaurant_id, name, address, city, state, postal_code, latitude, longitude, phone_number, cuisines[], rating (value, count), price_rating (Grubhub's 1-4 tier), distance_miles, open, delivery_fee, delivery_minimum, service_fee, delivery_time_minutes, pickup_time_minutes, offers_delivery, offers_pickup, coupons_available, total_offers, total_menu_items, logo_url, menu_path, and chain_name.
Money fields carry amount (minor units, i.e. cents), value (decimal), and currency.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| restaurant_id | 20 | |
| name | 20 | “sweetgreen” and 19 other values |
| address | 20 | |
| city | 20 | New York in all 20 |
| state | 20 | NY in all 20 |
| postal_code | 20 | |
| latitude | 20 | |
| longitude | 20 | |
| phone_number | 20 | 2,013,792,295 to 9,179,830,200, median 3,322,199,424 |
| cuisines | 20 | median 4 entries |
| rating | 20 | |
| price_rating | 20 | 1 to 3, median 2 |
| distance_miles | 20 | 0.1 to 0.31, median 0.21 |
| open | 20 | true in 20 of 20 |
| delivery_fee | 20 | |
| delivery_minimum | 20 | |
| delivery_time_minutes | 20 | 10 to 45, median 15 |
| pickup_time_minutes | 20 | 5 to 15, median 10 |
| offers_delivery | 20 | true in 20 of 20 |
| offers_pickup | 20 | true in 19 of 20 |
| coupons_available | 20 | true in 0 of 20 |
| logo_url | 20 | media-cdn.grubhub.com and 1 other host |
| menu_path | 20 | “sweetgreen-125-chambers-st-new-york” and 19 other values |
| chain_name | 10 | “Sweetgreen” and 9 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| latitude | number | Yes | Search center latitude | 40.7128 | |
| longitude | number | Yes | Search center longitude | -74.006 | |
| search | string | No | Keyword over restaurant names, cuisines and dishes | pizza | |
| order_method | string | No | One of delivery, pickup. Default delivery. Allowed values: delivery, pickup. | delivery | |
| page_size | integer | No | Restaurants per page, 1-50 (default 20) | 20 | |
| page | integer | No | 1-based page number (default 1) | 1 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/grubhub/search?latitude=40.7128&longitude=-74.006&order_method=delivery&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurants": [
{
"restaurant_id": "6238960",
"name": "7th Street Burger Financial District",
"address": "80 Nassau Street",
"city": "New York",
"state": "NY",
"postal_code": "10038",
"latitude": 40.70979309,
"longitude": -74.00793458,
"phone_number": "8772459368",
"cuisines": [
"American",
"Hamburgers"
],
"rating": {
"value": 4.98,
"count": 1424
},
"price_rating": 1,
"distance_miles": "0.23",
"open": true,
"delivery_fee": {
"amount": 0,
"value": 0,
"currency": "USD"
},
"delivery_time_minutes": 13,
"pickup_time_minutes": 10,
"offers_delivery": true,
"offers_pickup": true,
"coupons_available": false,
"logo_url": "https://media-cdn.grubhub.com/image/upload/v1747067564/pgyawxred5cf2dsmcmju.png",
"menu_path": "7th-street-burger-financial-district-80-nassau-street-new-york",
"chain_name": "7th Street Burger"
}
],
"count": 1,
"total_hits": 987,
"page": 1,
"total_pages": 50,
"source_url": "https://api-gtm.grubhub.com/restaurants/search",
"fetched_at": "2026-08-31T14:20:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/grubhub.searchResponseDoc
| 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 | grubhub.SearchResponse | No | ||||
| data.count | integer | No | 20 | |||
| data.fetched_at | string | No | ||||
| data.page | integer | No | 1 | |||
| data.restaurants | array | No | ||||
| data.restaurants[].address | string | No | 199 Water Street | |||
| data.restaurants[].chain_name | string | No | ||||
| data.restaurants[].city | string | No | New York | |||
| data.restaurants[].coupons_available | boolean | No | false | CouponsAvailable and TotalOffers describe promotions without reproducing their (volatile) terms. | ||
| data.restaurants[].cuisines | array | No | ||||
| data.restaurants[].delivery_fee | object | No | Delivery and pickup economics. | |||
| data.restaurants[].delivery_fee.amount | integer | No | 399 | |||
| data.restaurants[].delivery_fee.currency | string | No | USD | |||
| data.restaurants[].delivery_fee.value | number | No | 3.99 | |||
| data.restaurants[].delivery_minimum | grubhub.Money | No | ||||
| data.restaurants[].delivery_minimum.amount | integer | No | 399 | |||
| data.restaurants[].delivery_minimum.currency | string | No | USD | |||
| data.restaurants[].delivery_minimum.value | number | No | 3.99 | |||
| data.restaurants[].delivery_time_minutes | integer | No | 30 | |||
| data.restaurants[].distance_miles | string | No | 0.4 | DistanceMiles is the distance from the search coordinate. | ||
| data.restaurants[].latitude | number | No | ||||
| data.restaurants[].logo_url | string | No | ||||
| data.restaurants[].longitude | number | No | ||||
| data.restaurants[].menu_path | string | No | ||||
| data.restaurants[].name | string | No | NYC Bagel and Coffee House | |||
| data.restaurants[].offers_delivery | boolean | No | true | |||
| data.restaurants[].offers_pickup | boolean | No | true | |||
| data.restaurants[].open | boolean | No | true | |||
| data.restaurants[].phone_number | string | No | ||||
| data.restaurants[].pickup_time_minutes | integer | No | 15 | |||
| data.restaurants[].postal_code | string | No | 10038 | |||
| data.restaurants[].price_rating | number | No | 2 | PriceRating is Grubhub's 1-4 "$" tier. | ||
| data.restaurants[].rating | grubhub.Rating | No | ||||
| data.restaurants[].rating.count | integer | No | 65 | |||
| data.restaurants[].rating.value | number | No | 4.6 | |||
| data.restaurants[].restaurant_id | string | No | 14344720 | |||
| data.restaurants[].service_fee | grubhub.Money | No | ||||
| data.restaurants[].service_fee.amount | integer | No | 399 | |||
| data.restaurants[].service_fee.currency | string | No | USD | |||
| data.restaurants[].service_fee.value | number | No | 3.99 | |||
| data.restaurants[].state | string | No | NY | |||
| data.restaurants[].total_menu_items | integer | No | ||||
| data.restaurants[].total_offers | integer | No | ||||
| data.source_url | string | No | ||||
| data.total_hits | integer | No | 1457 | |||
| data.total_pages | integer | No | 73 | |||
| 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/grubhub/search?latitude=40.7128&longitude=-74.006&order_method=delivery&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"