menupages.com APImenupages.com ↗
Access full restaurant menus from MenuPages via 2 endpoints. Get categories, items with prices, descriptions, and modifier groups for any Grubhub-listed restaurant.
curl -X GET 'https://api.parse.bot/scraper/55cbca2b-9d74-4752-9abd-feb18551c984/get_menu?restaurant_id=%3Crestaurant_id%3E' \ -H 'X-API-Key: $PARSE_API_KEY'
Get the full menu for a restaurant including all categories, items, prices, and modifiers/customization options. Returns restaurant info alongside the complete menu structure.
| Param | Type | Description |
|---|---|---|
| restaurant_id | string | Grubhub restaurant ID. |
{
"type": "object",
"fields": {
"categories": "array of category objects each containing id, name, item_count, and items array",
"restaurant": "object containing id, name, address, phone, cuisines, logo_url, latitude, longitude",
"total_items": "integer count of all menu items",
"total_categories": "integer count of menu categories"
},
"sample": {
"data": {
"categories": [
{
"id": "2019114",
"name": "Ceviches",
"items": [
{
"id": "23493433",
"name": "Ceviche de Aji Amarillo or Traditional",
"tags": [],
"price": {
"currency": "USD",
"amount_cents": 1111,
"amount_dollars": 11.11
},
"popular": false,
"category": "Ceviches",
"available": true,
"image_url": "https://media-cdn.grubhub.com/image/upload/awcahxog0wciotht6auf.jpg",
"modifiers": [
{
"id": "8977941",
"name": "Choose a style",
"options": [
{
"id": "1344127647",
"name": "Ceviche Traditional",
"price": {
"currency": "USD",
"amount_cents": 0,
"amount_dollars": 0
},
"default": false,
"available": true
}
],
"required": true,
"max_selections": 1,
"min_selections": 1
}
],
"description": "White fish, cancha, choclo, sweet potato in your choice of leche de tigre: traditional or aji amarillo."
}
],
"item_count": 5
}
],
"restaurant": {
"id": "337444",
"name": "1111 Peruvian Bistro",
"phone": "7866159633",
"address": {
"zip": "33130-5401",
"city": "Miami",
"state": "FL",
"street": "1111 SW 1st Ave Ste 106"
},
"cuisines": [
"Asian",
"Dinner",
"Latin American"
],
"latitude": "25.763151",
"logo_url": "https://res.cloudinary.com/grubhub/image/upload/v1471360634/ss03fqzrj78bckxgz8uv.png",
"longitude": "-80.194576"
},
"total_items": 47,
"total_categories": 9
},
"status": "success"
}
}About the menupages.com API
The MenuPages API provides structured menu data across 2 endpoints, covering restaurant info, menu categories, individual items, and modifier groups. Call get_menu to retrieve a restaurant's complete menu structure — including all categories and items with prices — or use get_menu_item to fetch a single item's full modifier tree by item ID. Both endpoints work off Grubhub restaurant IDs and return consistently shaped JSON.
What the API Returns
The get_menu endpoint takes a restaurant_id (Grubhub format) and returns the complete menu for that restaurant. The response includes a restaurant object with fields like name, address, phone, cuisines, logo_url, latitude, and longitude, alongside a categories array. Each category contains an id, name, item_count, and a nested items array. Summary counts via total_items and total_categories are included at the top level for quick inspection.
Item-Level Detail
The get_menu_item endpoint accepts an item_id (obtainable from categories[*].items[*].id in the get_menu response) and an optional restaurant_id. It returns a single item with fields including name, description, price (as both amount_cents and amount_dollars with currency), available, popular, category, image_url, and tags. The modifiers array is where customization data lives: each modifier group carries id, name, min_selections, max_selections, required, and an options array, which captures the full set of choices a diner would see at ordering time.
Data Coverage and Identifiers
Both endpoints are anchored to Grubhub restaurant IDs, which matches MenuPages' underlying catalog since the platform is powered by Grubhub. The get_menu response is the natural starting point — retrieve the full menu structure first, then use item IDs from that response to drill into get_menu_item for richer modifier detail. Items carry an available boolean, so filtering for orderable items is straightforward without secondary requests.
- Build a restaurant menu browser that displays categorized items with prices and images using
get_menucategory and item fields. - Populate a delivery integration with modifier groups and option selections from
get_menu_itemto replicate the full customization flow. - Aggregate menu data across multiple restaurants by looping
get_menucalls and comparing item prices or cuisine types. - Flag out-of-stock or unavailable items using the
availableboolean on each menu item. - Identify popular items across a restaurant's menu using the
popularflag returned byget_menu_item. - Geocode restaurant locations using
latitudeandlongitudefrom therestaurantobject for map-based discovery tools. - Analyze modifier complexity (number of modifier groups, required vs. optional) to compare restaurant ordering experiences.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does MenuPages have an official developer API?+
What does `get_menu_item` return that `get_menu` does not?+
get_menu returns items with basic fields like name and price but does not expand modifier groups. get_menu_item returns the full modifiers array for a single item, including each modifier group's min_selections, max_selections, required flag, and the complete options list — detail needed to reconstruct the ordering UI.Can I search for restaurants by name or location through this API?+
Does the API return user reviews or ratings for menu items or restaurants?+
How current is the menu data — does item availability update in real time?+
available boolean reflects the status at the time of the request, but MenuPages menus can lag behind live ordering system changes. Treat availability as a cached signal rather than a guaranteed real-time inventory check, especially for restaurants that frequently 86 items.