# Just Eat UK Restaurant Scraper (`khadinakbar/just-eat-restaurant-scraper`) Actor

Permission-required scraper for public Just Eat UK restaurant listings. Use an authorized area or restaurant URL or a UK postcode; returns restaurant, cuisine, rating, delivery and availability fields. No login or bypass behavior.

- **URL**: https://apify.com/khadinakbar/just-eat-restaurant-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 restaurant returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Just Eat UK Restaurant Scraper

Extract structured restaurant listing data from authorized public Just Eat UK area or restaurant pages. It returns restaurant names, cuisine labels, ratings, delivery details, availability, and other fields that the page exposes.

Use it for permitted market research, supplier coverage audits, or location-level restaurant analysis. Do not use it for customer data, logged-in pages, order flows, menus, or to evade Just Eat security controls.

### Important authorization requirement

Just Eat UK’s terms state that its website must not be misused, including by scraping. Run this actor only where you have documented permission from Just Eat and comply with applicable terms, robots directives, and law. The actor deliberately has no login flow, CAPTCHA solving, fingerprint spoofing, or bot-protection bypass; a block becomes an honest `UPSTREAM_FAILED` result.

### Input

Provide either a UK postcode such as `SW1A 1AA` or an authorized `https://www.just-eat.co.uk/` area or restaurant URL. `maxResults` defaults to 50 and caps output at 500 rows. Requests are serialized and delayed by at least two seconds.

```json
{
  "postalCodes": ["SW1A 1AA"],
  "maxResults": 50,
  "requestDelaySecs": 3,
  "responseFormat": "detailed",
  "respectSiteTerms": true
}
````

### Output

One dataset item represents one validated restaurant. Common fields include `name`, `restaurantUrl`, `cuisines`, `rating`, `reviewCount`, `deliveryFee`, `minimumOrder`, `deliveryEta`, `isOpen`, `sourceUrl`, and `scrapedAt`. Optional fields are explicitly `null` when unavailable; no values are inferred.

### Pricing

Pay per event + platform usage is intended for the deployed actor. The actor start event costs $0.00005, and each validated restaurant row costs $0.005. Platform compute and proxy usage are additional. The code only charges after a record passes validation and is written to the dataset.

### Outcomes

Every run writes `OUTPUT` and `RUN_SUMMARY`. `COMPLETE`, `PARTIAL`, `VALID_EMPTY`, and `INVALID_INPUT` succeed with an explanation. When every authorized source is blocked or unavailable before any data is returned, the actor fails with `UPSTREAM_FAILED` rather than disguising a block as an empty result.

### API and MCP

Use the actor through the Apify API or Apify MCP after it is deployed. Start with one authorized postcode and a small `maxResults` limit; dataset rows can then be paged from the default dataset.

### Limitations

The Just Eat page structure, availability, delivery estimates, prices, and offers can change at any time. This actor is UK-only and intentionally does not claim menu extraction, historical completeness, or availability in every location.

# Actor input Schema

## `postalCodes` (type: `array`):

UK delivery-area postcodes to turn into Just Eat area URLs, for example \["SW1A 1AA"]. Use full UK postcodes only. The actor processes these only with your documented authorization and does not accept cities or non-UK postal codes.

## `startUrls` (type: `array`):

Authorized https://www.just-eat.co.uk/ area or restaurant URLs to extract. Example: https://www.just-eat.co.uk/area/sw1a-1aa. This is not for other delivery platforms, account pages, or URLs containing credentials.

## `maxResults` (type: `integer`):

Maximum validated restaurant rows to return across all inputs. The default is 50 and the maximum is 500. This is a result cap, not a page number or a request-concurrency setting.

## `requestDelaySecs` (type: `integer`):

Polite delay in seconds between distinct authorized source URLs. Defaults to 3 seconds and cannot be below 2 seconds. It is not a retry count and does not bypass rate limits or bot protection.

## `responseFormat` (type: `string`):

Choose concise for core restaurant, cuisine, rating and delivery fields, or detailed for address and coordinates too. Defaults to detailed. This does not request menus, customer data, or hidden fields.

## `respectSiteTerms` (type: `boolean`):

Must remain enabled to confirm you have documented authorization to collect the requested public Just Eat UK data. Defaults to true. It is not an opt-out for Just Eat terms, robots directives, or applicable law.

## Actor input object example

```json
{
  "postalCodes": [
    "SW1A 1AA"
  ],
  "startUrls": [
    "https://www.just-eat.co.uk/area/sw1a-1aa"
  ],
  "maxResults": 50,
  "requestDelaySecs": 3,
  "responseFormat": "detailed",
  "respectSiteTerms": true
}
```

# Actor output Schema

## `restaurants` (type: `string`):

No description

## `output` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postalCodes": [
        "SW1A 1AA"
    ],
    "maxResults": 50,
    "requestDelaySecs": 3,
    "responseFormat": "detailed",
    "respectSiteTerms": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/just-eat-restaurant-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postalCodes": ["SW1A 1AA"],
    "maxResults": 50,
    "requestDelaySecs": 3,
    "responseFormat": "detailed",
    "respectSiteTerms": True,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/just-eat-restaurant-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postalCodes": [
    "SW1A 1AA"
  ],
  "maxResults": 50,
  "requestDelaySecs": 3,
  "responseFormat": "detailed",
  "respectSiteTerms": true
}' |
apify call khadinakbar/just-eat-restaurant-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/just-eat-restaurant-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Just Eat UK Restaurant Scraper",
        "description": "Permission-required scraper for public Just Eat UK restaurant listings. Use an authorized area or restaurant URL or a UK postcode; returns restaurant, cuisine, rating, delivery and availability fields. No login or bypass behavior.",
        "version": "0.2",
        "x-build-id": "zwfBpbxJKdY1PqM35"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~just-eat-restaurant-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-just-eat-restaurant-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~just-eat-restaurant-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-just-eat-restaurant-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~just-eat-restaurant-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-just-eat-restaurant-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "postalCodes": {
                        "title": "UK postcodes",
                        "type": "array",
                        "description": "UK delivery-area postcodes to turn into Just Eat area URLs, for example [\"SW1A 1AA\"]. Use full UK postcodes only. The actor processes these only with your documented authorization and does not accept cities or non-UK postal codes.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Authorized Just Eat UK URLs",
                        "type": "array",
                        "description": "Authorized https://www.just-eat.co.uk/ area or restaurant URLs to extract. Example: https://www.just-eat.co.uk/area/sw1a-1aa. This is not for other delivery platforms, account pages, or URLs containing credentials.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxResults": {
                        "title": "Maximum restaurants",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum validated restaurant rows to return across all inputs. The default is 50 and the maximum is 500. This is a result cap, not a page number or a request-concurrency setting.",
                        "default": 50
                    },
                    "requestDelaySecs": {
                        "title": "Delay between sources (seconds)",
                        "minimum": 2,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Polite delay in seconds between distinct authorized source URLs. Defaults to 3 seconds and cannot be below 2 seconds. It is not a retry count and does not bypass rate limits or bot protection.",
                        "default": 3
                    },
                    "responseFormat": {
                        "title": "Response format",
                        "enum": [
                            "concise",
                            "detailed"
                        ],
                        "type": "string",
                        "description": "Choose concise for core restaurant, cuisine, rating and delivery fields, or detailed for address and coordinates too. Defaults to detailed. This does not request menus, customer data, or hidden fields.",
                        "default": "detailed"
                    },
                    "respectSiteTerms": {
                        "title": "Confirm authorization and terms compliance",
                        "type": "boolean",
                        "description": "Must remain enabled to confirm you have documented authorization to collect the requested public Just Eat UK data. Defaults to true. It is not an opt-out for Just Eat terms, robots directives, or applicable law.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
