Grab_search_restaurants
Search GrabFood restaurants. Filters are ANDed. Defaults to most rating votes (a rough popularity signal), or nearest first when near is set.
How to target a place:
city: Grab's service region, exact name (case-insensitive). Regions are coarse: "Jakarta" is all of Jabodetabek (incl. Bogor, Depok, Tangerang, Bekasi), "Bali" is the whole island. Call Grab_list_areas for the list.
area: substring of the full address, which holds street, kelurahan, kecamatan, kota and postcode, e.g. "Kemang", "Kebayoran Baru", "Denpasar", "Sleman". Also matches Grab's delivery zone label. Use this for neighbourhoods. It is a plain substring: "Kemang" also matches "Kemanggisan", so add a street or pair it with postcode or city.
postcode: prefix, e.g. "121" for South Jakarta 121xx.
near: lat/lng radius. Only Singapore and ~8% of Indonesian restaurants have coordinates; the rest never match.
cuisine matches Grab's cuisine labels by substring ("chicken" → Fried Chicken, Chicken Satay, …); matchedCuisines lists them. sellsItem finds restaurants with a menu item whose name contains the text (slower, ~1s); combined with alcohol true, that same item must match. rating is 0–5; restaurants without ratings sort last. Dietary flags come from Grab and are weak: isVegetarian is set on about half of all items, drinks included, so almost every restaurant "has a vegetarian item"; isAlcohol is set on only ~57k of 34M items, so also search item names ("bir", "beer", "wine", "arak").
Menu stats filters use figures precomputed per restaurant: minItems (menu size), medianPriceMin/Max (typical dish price in the local currency, so set country), ratios 0–1 as shares of the restaurant's items (minVegetarianRatio 0.5 = at least half its items are tagged vegetarian), minWeeklyOpenHours (168 = 24/7), joinedAfter/joinedBefore (oldest menu item, roughly when it joined Grab) and menuUpdatedAfter (newest menu item).
Coverage: ~1M restaurants: Indonesia 711k (164 Grab cities), Malaysia 119k, Vietnam 92k, Philippines 53k, Cambodia 15k, Singapore 4.5k, Myanmar 3k. Menus were fetched between Jun and Sep 2026 (fetchedAt per restaurant).
Returns { data, total, page, limit }. Each row includes a Grab url, openingHours ({ mon: "10:00-14:00, 17:00-22:00", … } in local time, closed days left out), and distanceKm when near is set.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Address substring: neighbourhood, kecamatan, kota, street. | |
| city | No | Grab city, exact name. See Grab_list_areas. | |
| near | No | Only restaurants within radiusKm of this point. | |
| page | No | ||
| chain | No | Chain name substring. | |
| limit | No | ||
| query | No | Substring on name or chain name. | |
| sortBy | No | ||
| alcohol | No | true = has an alcohol item, false = has none. | |
| country | No | ISO country code, uppercase. Only these countries have data. | |
| cuisine | No | Cuisine label substring. | |
| service | No | Not reported for Cambodia, Myanmar and ~10% of Indonesia. | |
| minItems | No | Minimum menu items. | |
| minVotes | No | ||
| postcode | No | Postcode prefix. | |
| minRating | No | ||
| sellsItem | No | Menu item name substring. | |
| sortOrder | No | ||
| joinedAfter | No | Oldest menu item created on/after this date (YYYY-MM-DD). | |
| joinedBefore | No | Oldest menu item created before this date (YYYY-MM-DD). | |
| medianPriceMax | No | Median item price, local currency. | |
| medianPriceMin | No | Median item price, local currency. | |
| minBadgedItems | No | Items with a Grab popularity badge (most ordered, most liked, signature dish). | |
| menuUpdatedAfter | No | Newest menu item created on/after this date (YYYY-MM-DD). | |
| minDiscountedRatio | No | Share of items on discount. | |
| minVegetarianRatio | No | Share of items tagged vegetarian. | |
| minWeeklyOpenHours | No | ||
| minAvgDiscountRatio | No | Average price cut on discounted items (0.25 = 25% off). | |
| minHealthTaggedRatio | No | Share of items with a health tag (low carb, high protein, …). |