Grabfood Restaurant Scraper
Pricing
from $7.00 / 1,000 results
Grabfood Restaurant Scraper
Scrape 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
Crawl Smith
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
a day 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.