Grab All-in-One Api avatar

Grab All-in-One Api

Pricing

from $3.90 / 1,000 grabfood searches

Go to Apify Store
Grab All-in-One Api

Grab All-in-One Api

Grab All-in-One API is a unified REST endpoint for querying GrabFood and Grab data — restaurant search, nearby merchants, menu details, reviews, ride pricing, and nearby drivers

Pricing

from $3.90 / 1,000 grabfood searches

Rating

0.0

(0)

Developer

Romy

Romy

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

What does Grab All-in-One API do?

Grab All-in-One API is a unified REST endpoint for querying GrabFood and Grab data — restaurant search, nearby merchants, menu details, reviews, ride pricing, and nearby drivers — all from a single always-on API powered by Apify Standby.

No scraping setup required. Call the endpoint, get JSON back instantly.

Why use Grab All-in-One API?

  • All Grab data in one place — no need to manage 6 separate actors
  • Always-on — no cold start, responds in milliseconds
  • Standard REST — works with any language: curl, Python, JavaScript, Postman
  • Use cases: restaurant aggregators, delivery price comparison, driver availability monitoring, competitor research, food trend analysis

Endpoints

MethodPathDescriptionPrice
GET/grabfood/searchSearch restaurants by keyword + location$0.005/call
GET/grabfood/nearbyList all nearby restaurants at a location$0.005/call
GET/grabfood/detailGet full detail for one or more merchant IDs$0.015/call
GET/grabfood/reviewsGet customer reviews for a merchant$0.010/call
POST/grab/ride-priceGet fare quotes for one or more routes$0.010/call
GET/grab/driversGet nearby available drivers at a location$0.010/call
GET/grab/place-searchSearch/autocomplete places by keyword near a location$0.008/call
GET/grab/reverse-geocodeGet the nearest address/place for a coordinate$0.005/call

How to use

  1. Go to Apify Store and click Try for free
  2. The actor runs in Standby mode — it starts once and stays alive
  3. Call the API using your Apify token:
curl "https://romy--grab-api.apify.actor/grabfood/search?keyword=ayam+goreng&lat_lng=-6.1754,106.8272&max_items=10" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN"

Input (Query Parameters)

All responses follow this format:

{ "success": true, "data": [...], "count": 30, "nextCursor": "30", "hasMore": true }

Pass nextCursor as cursor in the next request to get the next page. When hasMore is false, you've reached the end. Each page = 1 API call = 1 charge.

GET /grabfood/search

ParamTypeDefaultDescription
keywordstringrequiredSearch keyword (e.g. "ayam goreng")
lat_lngstringJakarta centerCoordinates "lat,lng"
cursorstring"0"Pagination cursor from previous response

GET /grabfood/nearby

ParamTypeDefaultDescription
lat_lngstringJakarta centerCoordinates "lat,lng"
cursorstring"0"Pagination cursor from previous response

GET /grabfood/detail

ParamTypeDefaultDescription
merchant_idsstringrequiredComma-separated IDs, e.g. "ID-GF-xxx,ID-GF-yyy"
lat_lngstringJakarta centerCoordinates "lat,lng"

GET /grabfood/reviews

ParamTypeDefaultDescription
merchant_idstringrequiredSingle merchant ID
cursorstring""Pagination cursor from previous response
languagestringen-USReview language

POST /grab/ride-price

Body (JSON):

{
"routes": [
{
"origin": { "latitude": -6.1754, "longitude": 106.8272 },
"destination": { "latitude": -6.2088, "longitude": 106.8123 }
}
]
}

GET /grab/drivers

ParamTypeDefaultDescription
latnumberrequiredLatitude
lngnumberrequiredLongitude
service_idinteger97Grab service type ID

Search for a place by name/address near a location — useful for turning a place name into the lat_lng every other endpoint needs.

ParamTypeDefaultDescription
keywordstringrequiredPlace name or address, e.g. "Monas"
lat_lngstringJakarta centerCoordinates to search near, "lat,lng"

GET /grab/reverse-geocode

ParamTypeDefaultDescription
lat_lngstringrequiredCoordinates "lat,lng"

Output Example

{
"success": true,
"count": 2,
"data": [
{
"id": "6-C32KCBBWV3BDTT",
"address": { "name": "Popeyes Chicken - Skyline", "city": "Jakarta" },
"estimatedDeliveryTime": 30,
"merchantBrief": {
"cuisine": ["Western", "Fried Chicken"],
"halal": true,
"rating": 4.7,
"vote": 1200
}
}
]
}

Pricing

This Actor uses Pay Per Event billing — you only pay for successful API calls.

EndpointPrice per call
/grabfood/search$0.005
/grabfood/nearby$0.005
/grabfood/detail$0.015
/grabfood/reviews$0.010
/grab/ride-price$0.010
/grab/drivers$0.010
/grab/place-search$0.008
/grab/reverse-geocode$0.005

Example: 1,000 search calls = $5. Failed requests (4xx/5xx) are not charged. You get $5 free credit on signup.

Known limitations

  • Auth is a single, hardcoded personal account JWT (src/scrapers/grab.ts), not a device-only/anonymous credential. Every call to every endpoint authenticates as one specific Grab account — if that account gets flagged, rate-limited, or logged out by Grab, the whole API breaks for every caller at once until the token is replaced. This is the same risk category as Google Maps's ListPromotedPinAds (documented in google-maps-all-in-one-api's README) — it works today, but there's no fallback if the account goes bad.
  • GrabMart (grocery delivery) isn't exposed, despite the app having a parallel grabmart/* API namespace to GrabFood's (location-merchants, category-tree, etc.). Every shape tried (GET with query params, POST with a JSON body matching GrabFood's own pattern) returned 400/502 — the real request shape wasn't found in the time spent, and wasn't worth guessing further without a live traffic capture.
  • /grabfood/search/hints (autocomplete) and reviews/v1/merchants/review-summary (aggregate rating stats) aren't exposed — both return 200 with empty bodies regardless of parameter name/method tried; the real trigger condition wasn't identified.

FAQ

Does this work outside Indonesia? GrabFood is available across Southeast Asia — pass the correct lat_lng for your target city.

Is this official? No. This is an independent tool using Grab's internal API. Use responsibly and in accordance with Grab's Terms of Service.

Need a custom integration? Contact me at romysaputrasihanandaa@gmail.com or hire me on Fiverr.