GrabFood Restaurants & Deals Scraper
Pricing
from $2.00 / 1,000 results
GrabFood Restaurants & Deals Scraper
Discover GrabFood restaurants across Southeast Asian cities — names, addresses, cuisines, star ratings and vote counts, delivery time and fee estimates, price level, open hours, current promos, and photos. Give it city names and cuisines; get one clean row per restaurant.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Discover GrabFood restaurants across Southeast Asian cities — with star ratings, review counts, delivery time and fee estimates, price level, cuisines, open hours, current promos, and photos. Give it city names and cuisine filters; get one clean row per restaurant, ready for spreadsheets, dashboards, or databases.
Why use this actor
- No account, no login, no API key — just enter one or more cities and run.
- Wide coverage — built-in support for major cities across Indonesia, Singapore, Malaysia, Thailand, the Philippines, Vietnam, Cambodia, and Myanmar (and any other GrabFood city via a simple override).
- Rich restaurant detail — name, full address, city, cuisines, star rating and review count, price level, delivery ETA and fee (including free-delivery / discounted fees), delivery/takeaway/dine-in options, open hours, and whether the restaurant is currently open.
- Deals built in — flags restaurants running a promo and captures the exact offer text (e.g. "55% off", "Rp15.000 off").
- Clean, structured output, automatic retries, runs on a schedule, exports to JSON / CSV / Excel. No scrapers or browsers to babysit.
How it works
- Enter one or more cities (e.g. Jakarta, Singapore, Bangkok).
- Optionally pick cuisine filters to widen or narrow the search — the actor fans out across each filter for better coverage.
- The actor discovers the restaurants delivering in each city and reads each one's public listing.
- Every restaurant becomes one row in your dataset, with ratings, delivery estimates, deals, and more.
You never manage scrapers, browsers, or blocks — just provide cities and read the results.
Input
{"mode": "feed","cities": ["Jakarta"],"cuisineAttributeIds": ["300017", "300088", "300051"],"includeDishMerchants": false,"maxItems": 100,"maxItemsPerCity": 200,"maxConcurrency": 3,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "ID"}}
| Field | Type | Description |
|---|---|---|
mode | string | feed — discover restaurants in a city. (Menu extraction is not available in this version.) |
cities | array of strings | City names to search. Built-in: Jakarta, Bandung, Surabaya, Medan, Yogyakarta, Bekasi, Semarang, Makassar, Singapore, Kuala Lumpur, Johor Bahru, Penang, Petaling Jaya, Bangkok, Chiang Mai, Manila, Cebu, Ho Chi Minh City, Hanoi, Phnom Penh, Yangon. |
cuisineAttributeIds | array of strings | Cuisine category IDs to fan out across. Defaults cover Indonesian/Local (300017), Western (300088), Chinese (300051). More IDs = more restaurants. |
includeDishMerchants | boolean | Also run a dish-based search for the same IDs. Off by default. |
citySlug | string | Optional. For a city not in the built-in list, GrabFood's city slug (e.g. kuala-lumpur). Use together with latlng. Applies to the first city. |
latlng | string | Optional. "latitude,longitude" near the city center (e.g. "-6.2,106.816"). Required when using citySlug. |
countryCode | string | Optional. Two-letter country code for the override (ID, SG, MY, TH, PH, VN, KH, MM). Defaults to ID. |
maxItems | integer | Cap on total restaurants across all cities. 0 = no cap. |
maxItemsPerCity | integer | Cap on restaurants per city (across all cuisine filters). |
maxConcurrency | integer | How many cities to process in parallel. Default 3. |
proxyConfiguration | object | Indonesian residential proxy is recommended and set by default. |
Output
One row per restaurant:
{"_input": "Jakarta","_scrapedAt": "2026-07-10T05:13:22Z","_source": "S1-cuisine","recordType": "MERCHANT","id": "IDGFSTI00003m21","name": "Ayam Geprek Qribo 'Qrispy Jumbo' - Manggarai Selatan","combined_address": "Jl. Manggis I No. 38, Manggarai Selatan, Tebet, Jakarta Selatan, JKT.S-TEBET, 12860","city": "Jakarta","cityId": 10,"countryCode": "ID","citySlug": "jakarta","attributeValueID": "300017","chainName": "Ayam Geprek Qribo 'Qrispy Jumbo'","branchName": "Manggarai Selatan","businessType": "FOOD","cuisine": ["Smashed Fried Chicken", "Fried Chicken"],"rating": 4.7,"vote_count": 4054,"priceTag": 1,"distanceInKm": 1.325,"estimatedDeliveryTime": 43,"estimatedDeliveryTimeRange": "From 43 mins","estimatedDeliveryFee": {"currency": { "code": "IDR", "symbol": "Rp", "exponent": 2 },"price": 600000,"priceDisplay": "Rp6.000","hasDiscountedPrice": true},"deliverBy": "GRAB","deliverOptions": "DELIVERY_TAKEAWAY_DINEIN","isOpen": true,"openDisplayedHours": "08:00-23:00","hasPromo": true,"promoText": "55% off","isIntegrated": true,"photoHref": "https://huawei-food-cms.grab.com/compressed_webp/merchants/IDGFSTI00003m21/hero/a925d9f1497f48ada46d44e6237c3b33_1631279202885028582.webp","iconHref": "https://huawei-food-cms.grab.com/compressed_webp/merchants/IDGFSTI00003m21/logo/04f6595d495940e3b5b8e3a09f9551e9_1650546847770907519.webp","branchCount": 0,"raw": { "…": "full original listing (address, merchantBrief, reviews, labels, media)" }}
| Field | Type | Description |
|---|---|---|
id | string | Restaurant ID on GrabFood. |
name | string | Restaurant name (branch included). |
combined_address | string | Full street address. |
city / cityId / countryCode / citySlug | string / number | Location of the restaurant. |
attributeValueID | string | The cuisine filter this restaurant was found under. |
chainName / branchName | string | Brand and branch names. |
cuisine | array | Cuisine tags. |
rating | number | Star rating (out of 5). |
vote_count | integer | Number of ratings. |
priceTag | integer | Price level (1 = cheapest). |
distanceInKm | number | Distance from the search point. |
estimatedDeliveryTime | integer | Delivery estimate in minutes. |
estimatedDeliveryTimeRange | string | Human-friendly delivery estimate. |
estimatedDeliveryFee | object | Delivery fee with currency, amount, display text, and whether it is discounted/free. |
deliverBy / deliverOptions | string | Who delivers and which fulfilment options are offered. |
isOpen / openDisplayedHours | boolean / string | Current open status and hours. |
hasPromo / promoText | boolean / string | Whether a deal is running and the offer text. |
photoHref / iconHref | string | Restaurant photo and logo. |
raw | object | The complete original listing for anything not flattened above. |
On failure the actor writes a row with _error and _errorDetail rather than silently skipping, and the run fails loudly if nothing could be collected.
Notes & limits
- Indonesian residential proxy is recommended (and set by default). For cities in other countries, pick a matching country for best reliability — some requests are rate limited per IP, so residential rotation helps.
- Coverage per city is broad but not exhaustive — GrabFood returns results ranked around a point in the city. Use several cuisine filters (and, for large cities, the coordinate override to sample different neighborhoods) to widen coverage.
maxItemsPerCitycaps how deep it goes. - Menu extraction is not available in this version. Per-restaurant menus sit behind a per-region sign-in that is heavily rate limited, so this release focuses on restaurant discovery (a menu tier may be added later).
- Cities not in the built-in list are easy to add: pass
citySlug+latlng(+countryCode). - Delivery fees are given as structured amounts (e.g.
600000with aRpcurrency and anexponentof 2 = Rp6.000) plus a ready-to-showpriceDisplay.
Other actors
Part of a food-delivery collection — see also the UberEats Menu Scraper and GoFood Merchants Scraper.