Pricing
from $7.00 / 1,000 results
Grabfood Restaurant Scraper
Under maintenanceScrape GrabFood restaurants with full menus, prices, ratings, and delivery info across Vietnam, Singapore, Malaysia, Indonesia, Philippines, Cambodia, Myanmar. 97 city presets across 7 countries. Hex grid search for comprehensive city coverage. Export to JSON/CSV/Excel.
Pricing
from $7.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
32
Total users
10
Monthly active users
3 months ago
Last modified
Categories
Share
Extract restaurant listings, full menus with prices, ratings, and delivery info from GrabFood across 7 Asian countries โ Vietnam, Singapore, Malaysia, Indonesia, Philippines, Cambodia, and Myanmar.
Features
- Restaurant data โ name, cuisine tags, ratings, vote count, delivery fee, ETA, distance, address, coordinates, promo offers, halal status
- Full menu extraction โ item names, descriptions, prices (VND/local), categories, photos, availability, modifier groups (toppings, sizes)
- 7 countries supported โ Vietnam (34 provinces), Singapore, Malaysia, Indonesia, Philippines, Cambodia, Myanmar with city presets
- Hex grid search โ comprehensive city coverage using hexagonal grid pattern with automatic deduplication
- Keyword & cuisine filters โ search by keyword ("pho", "pizza") or filter by cuisine type
- Fast API-first approach โ captures auth token via Playwright, then bulk-fetches data via httpx (no browser scraping)
- Rate limiting โ configurable requests per second to avoid API throttling
Supported Countries & Cities
| Country | Cities |
|---|---|
| ๐ป๐ณ Vietnam | 34 provinces โ HCM, Hanoi, Da Nang, Hai Phong, Can Tho, Hue, and 28 more |
| ๐ธ๐ฌ Singapore | Singapore |
| ๐ฒ๐พ Malaysia | Kuala Lumpur, George Town, Johor Bahru, Ipoh, Kota Kinabalu, Kuching, Malacca |
| ๐ฎ๐ฉ Indonesia | Jakarta, Surabaya, Bandung, Medan, Semarang, Yogyakarta, Bali, Makassar |
| ๐ต๐ญ Philippines | Manila, Cebu, Davao, Quezon City |
| ๐ฐ๐ญ Cambodia | Phnom Penh, Siem Reap |
| ๐ฒ๐ฒ Myanmar | Yangon, Mandalay |
Use custom city with custom_latlng for any location not listed above.
How to Use
- Select country and city โ choose from presets or enter custom coordinates
- Set filters โ optional keyword search, cuisine filter, max restaurants
- Enable grid search (optional) โ for comprehensive area coverage
- Configure menu โ enable/disable full menu extraction
- Run โ the Actor captures an auth token, searches the GrabFood API, and pushes results to the dataset
Input Example
{"country":"VN","city":"ho_chi_minh","search_keyword":"","max_restaurants":50,"include_menu":true,"use_grid":false,"requests_per_second":2,"proxy_type":"none"}
Grid Search
For comprehensive city coverage, enable grid search. This generates a hexagonal pattern of search points:
{"country":"VN","city":"da_nang","use_grid":true,"grid_radius_km":8,"grid_step_km":3,"max_restaurants":500,"include_menu":true}
Grid search automatically deduplicates restaurants found from multiple points.
Output
Each restaurant in the dataset contains:
{"id":"5-C6JZJB3TAX43DA","name":"Katinat โ ฤแปng Khแปi 2","cuisine_tags":["Coffee","Milk Tea","Tea"],"rating":4.3,"vote_count":354,"delivery_fee":0,"delivery_eta_minutes":null,"distance_km":0.124,"is_open":true,"photo_url":"https://food-cms.grab.com/...","promos":[],"latitude":10.778,"longitude":106.701,"address":"Katinat โ ฤแปng Khแปi 2","minimum_order":0,"small_order_fee":0,"is_halal":false,"merchant_type":"","city":"ho_chi_minh","scraped_at":"2026-03-30T03:21:30.123456+00:00","menu_items":[{"name":"Cรณc Cรณc ฤรกc ฤรกc (L)","description":"Ambarella Juice With Arenga Pinnata","price":690,"original_price":null,"category":"For You","photo_url":"https://food-cms.grab.com/...","is_available":true,"modifier_groups":[{"name":"Topping","options":[{"name":"Trรขn Chรขu Bแบฏp","price":120},{"name":"Thแบกch Hแปng ฤร i","price":120}]}],"sold_count":null}],"total_menu_items":74,"menu_categories_count":5}
Output Fields
| Field | Type | Description |
|---|---|---|
id | string | GrabFood merchant ID |
name | string | Restaurant name |
cuisine_tags | string[] | Cuisine categories |
rating | float | Average rating (1-5) |
vote_count | int | Number of reviews |
delivery_fee | int | Delivery fee in local currency minor units |
delivery_eta_minutes | int | Estimated delivery time |
distance_km | float | Distance from search point |
is_open | bool | Currently accepting orders |
latitude / longitude | float | GPS coordinates |
address | string | Restaurant address |
minimum_order | int | Minimum order value |
is_halal | bool | Halal certified |
menu_items | array | Full menu (when include_menu is true) |
total_menu_items | int | Number of menu items |
scraped_at | string | ISO 8601 timestamp |
Cost Estimate
| Scenario | Restaurants | Menu | Memory | Est. Time | Est. Cost |
|---|---|---|---|---|---|
| Quick test | 3 | Yes | 2 GB | ~30s | ~$0.01 |
| Single city | 50 | Yes | 2 GB | ~3 min | ~$0.05 |
| City grid | 200 | Yes | 2 GB | ~10 min | ~$0.15 |
| Large city grid | 500 | Yes | 4 GB | ~25 min | ~$0.50 |
| No menu (faster) | 200 | No | 2 GB | ~3 min | ~$0.05 |
Costs depend on Apify platform pricing. Run a small test first and check compute units consumed.
Proxy
- Vietnam โ usually works without proxy (
none) - Other countries โ may require
residentialproxy if running from outside the target country - Custom proxy โ provide your own proxy URLs in the
proxy_urlsfield
Use Cases
- Market research โ analyze restaurant density, cuisine trends, pricing by area
- Competitor monitoring โ track menu changes, pricing, ratings over time
- Food delivery analytics โ delivery fees, ETAs, minimum orders across cities
- Location intelligence โ map restaurant distribution with GPS coordinates
FAQ
Q: Why is Thailand not supported?
A: GrabFood Thailand uses a different authentication flow that returns FW_ENDPOINT_FORBIDDEN. Other 7 countries use the same guest API.
Q: I'm getting 0 results for a non-VN country.
A: Try enabling residential proxy. GrabFood may geo-restrict API access based on your IP location.
Q: How does grid search work? A: It generates hexagonal grid points covering the city area. Each point triggers a search API call. Results are deduplicated by restaurant ID, so you get comprehensive coverage without duplicates.
Q: Can I scrape without menu data?
A: Yes โ set include_menu to false. This skips the per-restaurant detail API call and is significantly faster.
Q: What's the rate limit? A: Default is 2 requests/second. Lower it if you see errors; raise it (up to 10) for faster runs at your own risk.
