# Google Food API > Source: https://scrape.do/documentation/google-scraper-api/food/ Fetch Google Food online-ordering providers for restaurants as structured JSON The Google Food API returns the online-ordering providers shown on a restaurant's Google "Order online" page. One request returns both the pickup and delivery lists as structured JSON, so you do not need to render the page or make separate requests for each fulfillment mode. > [!NOTE] > **Credit Usage:** Each successful request costs **10 credits**. For bulk processing, use the [Async API with plugins](/documentation/async-api/plugins/). ## Key Features - **Pickup and delivery in one response**: `pickup[]` and `delivery[]` are returned together, in Google's display order. - **Ordering deep links**: each provider includes its Google Food ordering URL when available. - **Provider metadata**: names, logos, ETA labels, fee labels, and preferred-by-business flags are parsed into clean fields. - **Google entity IDs**: pass a restaurant `mid` as `/g/...`, `/m/...`, or a bare Google entity ID such as `11x38c65wl`. - **Localized availability**: use `gl`, `hl`, and `google_domain` to request regional provider lists. - **No browser rendering**: Scrape.do fetches and parses the provider shelf directly. --- ## Endpoint ``` GET https://api.scrape.do/plugin/google/food ``` --- ## Request Parameters ### Required | Parameter | Type | Description | |-----------|------|-------------| | `token` | string | Your Scrape.do API authentication token | | `mid` | string | Restaurant Google entity ID, for example `/g/11x38c65wl`. Bare IDs such as `11x38c65wl` are accepted and normalized to `/g/11x38c65wl` | ### Localization | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `gl` | string | `us` | Country code, for example `us`, `gb`, `ca`, or `au` | | `hl` | string | `en` | Language code, for example `en`, `es`, or `fr` | | `google_domain` | string | `google.com` | Google domain to query, for example `google.co.uk` | --- ## Example Usage ### Restaurant Providers ```bash curl "https://api.scrape.do/plugin/google/food?mid=/g/11x38c65wl&gl=us&token=$TOKEN" ``` ### Bare Entity ID ```bash curl "https://api.scrape.do/plugin/google/food?mid=11kskr5rtl&gl=us&token=$TOKEN" ``` --- ## Response ### Top-Level Shape ```json { "search_parameters": { ... }, "restaurant": { "name": "Fortuna NYC" }, "pickup": [ ... ], "delivery": [ ... ] } ``` `pickup` and `delivery` are always arrays. When Google does not show providers for a fulfillment mode, that field is returned as an empty array instead of `null`. ### `search_parameters` ```json { "engine": "google_food", "type": "choose_provider", "mid": "/g/11x38c65wl", "gl": "us", "hl": "en" } ``` ### `restaurant` Restaurant metadata exposed by Google for the order-online page. ```json { "name": "Fortuna NYC" } ``` | Field | Type | Description | |-------|------|-------------| | `name` | string | Restaurant name as displayed by Google | ### `pickup[]` / `delivery[]` Each entry is one ordering provider. ```json { "name": "Online Ordering by DoorDash", "order_url": "https://order.online/store/-33601791/?delivery=true&hideModal=true&utm_source=gfo&rwg_token=AE37R_...", "image": "https://lh3.googleusercontent.com/lHbUaJLjsUBai5bzcmTAVueYBjuXwDO_...", "time": "Delivers in 29 min", "fees": ["Service fee 10%", "Delivery fee $3.99"], "preferred_by_business": false } ``` | Field | Type | Description | |-------|------|-------------| | `name` | string | Provider name as displayed, for example `Uber Eats`, `Sauce`, or `Online Ordering by DoorDash` | | `order_url` | string | Provider ordering deep link. Pickup entries usually include `pickup=true`; delivery entries usually include `delivery=true` or a delivery path | | `image` | string | Provider logo URL. Omitted when Google does not supply one | | `time` | string | ETA label, for example `Ready in 11 min` or `Delivers in 30-45 min`. Omitted when unavailable | | `fees` | string[] | Fee labels shown under the provider, for example `["No fee"]` or `["Delivery fee $1.99", "Service fee may apply"]`. Omitted when none are shown | | `preferred_by_business` | boolean | `true` when Google marks the provider as preferred by the business. Omitted or `false` otherwise | > [!WARNING] > **Ordering links are short-lived.** `order_url` values can contain single-use Google Food tokens. Use them promptly instead of caching them long term. --- ## Notes - One request returns both pickup and delivery provider lists. - Provider order, ETAs, fees, and availability can vary by `gl`, `hl`, restaurant, and Google's current inventory. - Empty provider lists usually mean Google does not show online ordering for that mode, the `mid` is invalid, or the restaurant is temporarily unavailable for ordering. - `mid` must identify a Google entity with a `/g/` or `/m/` style ID after normalization. --- ## Error Handling ```json { "error": "error message" } ``` ### Common Errors | Status | Error | Description | |--------|-------|-------------| | `400` | `token is required` | Missing API token | | `400` | `mid is required (e.g. /g/11x38c65wl)` | Missing restaurant entity ID | | `400` | `mid is not a valid Google entity id (e.g. /g/11x38c65wl)` | `mid` is not a `/g/` or `/m/` entity ID after normalization | | `400` | `invalid google_domain` | Unrecognized Google domain | | `502` | `request failed` | Upstream fetch failed. Retry the request | | `502` | `failed to parse food providers` | Google returned no provider list for the supplied restaurant or page shape. Verify the `mid` and retry | | `500` | `internal server error` | Transient server error. Retry the request | ---