food.grab.com APIfood.grab.com ↗
Search GrabFood restaurants by location and retrieve full menus with prices, categories, and modifier options via 2 structured API endpoints.
curl -X GET 'https://api.parse.bot/scraper/8c488b01-45f9-416b-a0f2-11dd465bf552/search_restaurants?KEYWORD=burger&keyword=burger&PAGE_SIZE=3&page_size=5&GUEST_TOKEN=REDACTED_TOKEN&guest_token=REDACTED_TOKEN' \ -H 'X-API-Key: $PARSE_API_KEY'
Search and list GrabFood restaurants by location with optional keyword filter. Returns paginated results with restaurant details including name, cuisine, rating, delivery fee, and location.
| Param | Type | Description |
|---|---|---|
| latlng | string | Latitude,longitude for location-based search (comma-separated, e.g. '-6.1767352,106.826504'). |
| offset | integer | Pagination offset (increment by page_size for next page). |
| keyword | string | Search keyword to filter restaurants by name or cuisine. |
| page_size | integer | Number of results per page. |
| guest_tokenrequired | string | Guest authentication JWT from browser sessionStorage('guest_token') on food.grab.com. Valid for 30 days. |
| country_code | string | ISO country code for the GrabFood region (e.g. 'ID' for Indonesia, 'SG' for Singapore, 'TH' for Thailand). |
{
"type": "object",
"fields": {
"offset": "integer current pagination offset",
"page_size": "integer page size used",
"restaurants": "array of restaurant objects with id, name, cuisine, rating, vote_count, distance_km, estimated_delivery_time, delivery_fee_display, photo_url, halal, promo, latitude, longitude",
"total_count": "integer total number of matching restaurants"
},
"sample": {
"data": {
"offset": 0,
"page_size": 5,
"restaurants": [
{
"id": "6-C7ACCXAKGAVXNA",
"name": "Wallace - Tangki",
"halal": true,
"promo": "Diskon Rp38.120",
"rating": 4.6,
"cuisine": [
"Ayam Goreng",
"Nasi Ayam"
],
"latitude": -6.147417791414867,
"longitude": 106.82382539472837,
"photo_url": "https://huawei-food-cms.grab.com/compressed_webp/merchants/6-C7ACCXAKGAVXNA/hero/bbad5422-247f-47fb-b58f-82ab1fd45aeb__store_cover__2025__05__28__05__55__02.webp",
"vote_count": 867,
"distance_km": 4.99,
"delivery_fee_display": "Rp11.000",
"estimated_delivery_time": 50
}
],
"total_count": 767
},
"status": "success"
}
}About the food.grab.com API
The GrabFood API provides 2 endpoints to query restaurants and menus across GrabFood-supported markets in Southeast Asia. Use search_restaurants to find and page through nearby restaurants with ratings, delivery fees, and estimated delivery times, then call get_merchant_menu with a merchant ID to retrieve every menu item—including prices, categories, availability flags, and modifier options—for that restaurant.
Restaurant Search
The search_restaurants endpoint accepts a latlng parameter (latitude/longitude, comma-separated) and an optional keyword to filter by restaurant name or cuisine type. Results are paginated via offset and page_size. Each restaurant object in the restaurants array includes id, name, cuisine, rating, vote_count, distance_km, estimated_delivery_time, and delivery_fee_display. The total_count field tells you how many records match so you can calculate how many pages to fetch. A country_code parameter (e.g. SG, TH, ID) scopes results to the correct regional GrabFood instance.
Merchant Menu Retrieval
Once you have a merchant id from search results, pass it as merchant_id to get_merchant_menu. The response returns menu_items—an array covering every item across all categories—with fields like name, description, category, price_display, price_minor_unit, discounted_price_disp, and available. The menu_categories array lists category names in order, and total_menu_items gives the total item count. The address and cuisine fields on the response describe the merchant itself.
Authentication and Coverage
Both endpoints require a guest_token—a JWT retrieved from sessionStorage on food.grab.com in any modern browser. Tokens are valid for 30 days. The API covers GrabFood markets where the service operates, including Indonesia, Singapore, Thailand, and other Southeast Asian countries. The latlng parameter drives location context for both search and menu requests, so accurate coordinates are important for correct delivery fee and availability data.
- Aggregate restaurant listings and delivery fees across multiple GrabFood cities for a price-comparison dashboard.
- Build a menu database by iterating
search_restaurantsresults and callingget_merchant_menufor each merchant ID. - Track rating and
vote_countchanges for specific restaurants over time to monitor reputation trends. - Identify which cuisines and restaurants are available near a given latitude/longitude for a delivery coverage map.
- Extract discounted item prices (
discounted_price_dispvsprice_display) to surface deals across restaurants. - Populate a food-ordering assistant with structured category and modifier data from
menu_itemsfor a given merchant. - Analyze estimated delivery times and
delivery_fee_displayacross a city grid to study logistics patterns.
| 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 GrabFood have an official public developer API?+
What does `search_restaurants` return beyond a restaurant name and rating?+
id (needed for menu lookups), cuisine type, vote_count, distance_km from the supplied coordinates, estimated_delivery_time, and delivery_fee_display. The total_count field on the response lets you paginate through all matching results using offset and page_size.Does `get_merchant_menu` return modifier groups or add-on options for menu items?+
menu_items array includes modifier options at the item level. Full nested modifier-group structures (e.g. size choices, toppings with sub-options and min/max selection rules) are included where the merchant has configured them.Is order placement or cart management supported?+
search_restaurants and menu retrieval via get_merchant_menu. Order creation, cart management, and checkout are not exposed. You can fork this API on Parse and revise it to add those endpoints if your use case requires transactional capabilities.How current is the menu and pricing data?+
latlng and merchant_id. Menu availability (available field per item) and pricing can vary by time of day or merchant configuration, so results should be treated as point-in-time. There is no built-in caching layer between your call and the source.