Deliveroo Scraper - Restaurants and Menu Prices avatar

Deliveroo Scraper - Restaurants and Menu Prices

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Deliveroo Scraper - Restaurants and Menu Prices

Deliveroo Scraper - Restaurants and Menu Prices

Extract Deliveroo restaurant listings, menu prices, and restaurant links from city, cuisine, brand, and zone pages. Choose a country site or submit URLs. Pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

12

Total users

5

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Deliveroo Scraper

Extract Deliveroo restaurant listings, menu prices, and restaurant links from city, cuisine, brand, and zone pages into rows you can export.

  • Discover restaurants serving a delivery location.
  • Collect restaurant details and optional, separately billed menu-item rows.
  • Keep restaurant identity, menu prices, and delivery-location context in separate fields.
  • Submit several Deliveroo URLs in one run.
  • Pay $3.00 per 1,000 delivered rows on the Free plan, plus the start fee.

What does Deliveroo Scraper do?

Deliveroo Scraper collects publicly reachable restaurant and menu information. Use it for menu comparisons, restaurant discovery, or repeated price checks. It is unofficial and is not affiliated with Deliveroo. It does not place orders or access private customer accounts.

  • Location search: restaurants uses a city, neighborhood, and delivery geohash.
  • Menu: menu returns a restaurant row. includeMenuItems adds individual menu-item rows; it is off by default and each added row costs the same as a restaurant row.
  • Page discovery: cities, cuisines, brands, and zones find restaurant links associated with the supplied page or slug.
  • Multiple URLs: startUrls accepts a list of Deliveroo links.

The input accepts market codes uk, ie, fr, be, it, es, nl, ae, kw, sg, and hk. These are selectable country sites, not a guarantee that every market or page currently returns data. Check a small input before relying on a market.

What data can you extract from Deliveroo?

Each row represents one entity. Restaurant listings, menu headers, and restaurant links found on discovery pages use rowType: "restaurant". Optional menu items use rowType: "menuItem". Available fields depend on the page.

Restaurant rows

FieldDescriptionExample
rowTypeEntity type.restaurant
idRow identifier; combine with the row type for deduplication.445581
nameRestaurant display name.Example Restaurant
urlDeliveroo restaurant link.https://deliveroo.co.uk/menu/london/islington/cay-tre
marketCountry-site code.uk
drnIdDeliveroo resource identifier, when supplied.445581
etaDisplayed delivery-time text.20–35 min
distanceDisplayed distance text.0.8 miles
searchGeohashDelivery query location, not restaurant coordinates.gcpvjmebpbm2
addressMerchant address, when a detail page supplies it.null
geoMerchant latitude and longitude, when supplied.null
detailEnrichedWhether additional restaurant details were obtained.true
leadAbsencesReasons contact or address fields are empty.{}
scrapedAtRow timestamp.2026-10-24T10:00:00+00:00
FieldDescriptionExample
rowTypeEntity type.menuItem
idItem identity including restaurant context when available.445581:item-1
nameMenu-item name.Vegetable noodles
descriptionItem description, when supplied.Noodles with vegetables
categoryNameMenu section.Main dishes
priceFormattedDisplay price, including currency formatting.£8.50
priceFractionalPrice in fractional currency units.850
availableAvailability flag supplied by the menu.true
restaurantIdParent restaurant identifier.445581
restaurantNameParent restaurant name.Example Restaurant
restaurantUrlParent restaurant link; not a product-specific link.https://deliveroo.co.uk/menu/london/islington/cay-tre
restaurantMarketParent restaurant's country site.uk

Menu-item rows also carry available parent address and location context. Merchant contact fields are not guaranteed. A delivery search point is never evidence of a restaurant's own coordinates.

How to scrape Deliveroo

  1. Open Deliveroo Scraper in Apify Console.
  2. Choose a target below and enter its URL or location fields.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and inspect the resulting rows and run messages.
  5. Download the dataset or read it through the API.

Empty input starts the London, Islington example from the form, limited to 3 rows. This example is billed normally. In auto mode, a filled target selects its matching mode. When targets compete, the priority is startUrls, menuUrl, restaurantSlug, brandSlug, zoneSlug, cuisineSlug, then location fields. Clear unrelated prefilled targets when choosing a different location-based mode.

Restaurants near a location

Fill citySlug, neighborhoodSlug, and geohash. Use the location values from a Deliveroo restaurant-list URL. A city alone selects city-page discovery rather than restaurants serving a precise address.

Restaurant menu

Fill menuUrl, or supply restaurantSlug with the correct city and neighborhood. Turn on includeMenuItems for prices. The restaurant row uses part of the same row limit as its menu items.

Cities

Fill citySlug alone. This discovers restaurant links from the city page and its available zone links; it is not a complete city restaurant census.

Cuisines

Fill cuisineSlug and preferably citySlug. Short cuisine names such as burger can resolve to burgers-takeaway. If the city is omitted, the input uses London; supply a matching city for another market.

Brands

Fill brandSlug from the relevant Deliveroo page. Results are restaurant links associated with that brand, not a guaranteed complete branch directory.

Zones

Fill zoneSlug from Deliveroo. Zone names identify delivery areas and are not interchangeable with arbitrary postal addresses.

Start URLs

Fill startUrls with restaurant-list, menu, city, cuisine, brand, or zone links. Each URL has its own row limit. Repeated entities can be deduplicated, so the final total can be smaller than the sum of the limits.

What to fill in

FieldWhat to enterDefault
modeauto, or one of the seven modes above.auto
startUrlsA list of Deliveroo page URLs.Empty
menuUrlOne full Deliveroo menu URL.Empty
restaurantSlugRestaurant identifier from its URL, not a display name.Empty
citySlugCity identifier such as london.Form prefill: london
neighborhoodSlugNeighborhood identifier such as islington.Form prefill: islington
geohashDelivery-location code from the restaurant-list URL.Form prefill: gcpvjmebpbm2
cuisineSlugCuisine identifier, such as burger.Empty in form
brandSlugBrand identifier, such as pizza-express.Empty
zoneSlugZone identifier, such as soho.Empty
marketCountry-site code.uk
localeAlternative name for the market setting; gb maps to uk.Empty
maxResultsMaximum rows per location or URL, from 1 to 500.70; form prefill: 3
includeMenuItemsAdd separately billed item rows from menu pages.false
maxMenuItemsPerRestaurantItem-row ceiling for one restaurant, from 0 to 200.25
enrichDetailsAdd available address and merchant details to restaurant rows.true
proxyCountryOptional two-letter country setting; normally leave unset.Derived from market

Automatic example:

{}

Restaurants:

{
"mode": "restaurants",
"citySlug": "london",
"neighborhoodSlug": "islington",
"geohash": "gcpvjmebpbm2",
"maxResults": 3
}

Menu:

{
"menuUrl": "https://deliveroo.co.uk/menu/london/islington/cay-tre",
"includeMenuItems": true,
"maxResults": 5
}

Cities:

{"mode": "cities", "citySlug": "london", "maxResults": 3}

Cuisines:

{"cuisineSlug": "burger", "citySlug": "london", "maxResults": 3}

Brands:

{"brandSlug": "pizza-express", "maxResults": 3}

Zones:

{"zoneSlug": "soho", "maxResults": 3}

Start URLs:

{
"startUrls": ["https://deliveroo.co.uk/cities/london/"],
"maxResults": 3
}

maxItems and limit are accepted aliases for maxResults. Unknown fields do not fail input resolution: close misspellings are corrected when recognized, and remaining unknown fields are ignored with a note. Invalid target inputs stop before collecting or charging rows, with a message such as INVALID_INPUT: startUrls — use Deliveroo links. The start fee can still apply.

The Actor writes INPUT_REPORT to the default key-value store before checking the resolved input. It records the chosen mode, example values filled, corrections, and ignored fields. Check it when the selected mode differs from what you intended.

Output example

Illustrative menu-item row; names, identifiers, and prices below are examples, not a live quotation:

{
"rowType": "menuItem",
"id": "445581:item-1",
"itemType": "menu_item",
"name": "Vegetable noodles",
"title": "Vegetable noodles",
"description": "Noodles with vegetables",
"categoryName": "Main dishes",
"priceFormatted": "£8.50",
"priceFractional": 850,
"available": true,
"restaurantId": "445581",
"restaurantName": "Example Restaurant",
"restaurantUrl": "https://deliveroo.co.uk/menu/london/islington/cay-tre",
"restaurantMarket": "uk",
"scrapedAt": "2026-10-24T10:00:00+00:00"
}

Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. JSON preserves nested address and merchant fields most directly.

Why use this Deliveroo scraper?

  • Row-based billing: the result charge applies to rows written to the dataset, not pages attempted. The start fee is separate.
  • Inspect partial results: returned partial results can be delivered with warnings. Rows already written remain in the dataset; stopping before delivery can leave no rows.
  • Traceable input: INPUT_REPORT explains how the request was understood, and failure summaries provide a reason.
  • Explicit missing values: unavailable contact details stay empty, with reasons where supplied.
  • Several inputs: submit multiple URLs instead of starting a separate run for each.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape Deliveroo?

The Actor uses pay-per-event pricing. Platform usage is included in these prices.

Apify planStart event per GB, minimum onePrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20

The default memory is 1024 MB, so the start fee is $0.005. Menu-item and restaurant rows have the same price. Detail enrichment does not have a separate event charge.

  • maxResults applies to each location or URL. It defaults to 70; larger requests are collected in parts of 70, up to the input maximum of 500.
  • Parent restaurant and menu-item rows share that limit. With maxResults: 5, a menu can deliver one restaurant row and at most four item rows.
  • The Free Apify plan is limited to 200 rows per run and 10 runs of this Actor. These limits are set by the publisher.
  • The whole run is also capped by Maximum cost per run, set with maxTotalChargeUsd in the API run options, not inside the Actor input.

Example: 3 delivered rows on the Free plan at 1024 MB cost 3 × $0.003 + $0.005 = $0.014. Five delivered rows, including menu items, cost $0.020. The row limit is a maximum, not a promise that enough matching restaurants exist.

What happens when the run timeout is too short

Some Deliveroo collections, such as several startUrls, a menu with includeMenuItems: true, or a large maxResults, can take longer than the run timeout you chose. In that case the run does not fail. It ends early with the status message "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." and shows as ABORTED for a while.

When the results are ready, the same run starts again by itself, reports "Resumed: delivering N rows.", writes the rows to the same dataset and finishes as SUCCEEDED. Rows that were already delivered are skipped, so no row is delivered or charged twice. You do not need to start another run.

  • This can happen at most 3 times per run. To avoid it, keep the default timeout of 3600 seconds.
  • The synchronous API endpoints (run-sync, run-sync-get-dataset-items) wait at most 300 seconds and can return an empty dataset while the run is paused. For larger jobs, start the run asynchronously and read the dataset after the run reaches SUCCEEDED, or use a webhook on the "succeeded" event.

Use with AI agents and the API

Apify MCP server

In Claude, ChatGPT, Cursor, VS Code, or another client supporting remote MCP servers, add:

https://mcp.apify.com?tools=lentic_clockss/deliveroo-scraper

Sign in with Apify through OAuth when prompted, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and provides run and dataset IDs; the agent reads rows with get-dataset-items.

For a client without remote MCP support, run npx @apify/actors-mcp-server --tools lentic_clockss/deliveroo-scraper with APIFY_TOKEN set.

Example prompt: "Find up to three Deliveroo restaurants in London, Islington using geohash gcpvjmebpbm2. Return their names, links, and delivery-time text."

Apify API

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/deliveroo-scraper").call(
run_input={"mode": "cities", "citySlug": "london", "maxResults": 3}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/deliveroo-scraper').call({
mode: 'cities', citySlug: 'london', maxResults: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For HTTP, send the input as JSON to POST https://api.apify.com/v2/acts/lentic_clockss~deliveroo-scraper/runs using an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After the run finishes, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json using its dataset ID.

Integrations

Connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable, or your own webhook through the Actor's Integrations tab. Use Apify Schedules for repeated menu checks.

FAQ

This Actor targets publicly reachable data. You are responsible for complying with Deliveroo's terms and applicable data-protection law. Public availability does not remove those obligations; processing personal data requires a lawful basis.

Why did my run end as ABORTED?

An aborted run has been stopped, for example by a user or an API cancellation. Check the status message and log for the actual reason. Inspect the dataset for rows already delivered; do not assume unfinished collection will produce rows or restart automatically.

How many results can I get?

Set maxResults from 1 to 500 per location or URL. The overall charge cap, Free-plan limits, available matches, and deduplication can reduce the delivered total. Menu-item rows count toward the same limit as restaurant rows.

Why are some fields empty?

Fields vary by market and page. Restaurant-list pages do not necessarily include addresses, and menu details do not necessarily expose merchant contact information. Inspect leadAbsences and detailEnriched; empty values are not proof that a business has no phone or email.

Is this an official Deliveroo API?

No. This is an independent scraper, not a Deliveroo product or ordering API.

Why do I need a geohash?

The restaurants mode uses a delivery location. citySlug and neighborhoodSlug identify the area; geohash identifies the query point. Use cities for broader discovery without a delivery point.

Can I collect grocery or alcohol listings?

There is no separately validated grocery or alcohol mode. A compatible Deliveroo URL may return shop listings, but coverage and field completeness should be checked with a small run.

What records explain the run?

The default key-value store contains INPUT_REPORT for resolution, INPUT_ECHO for processed settings, and RUN_SUMMARY for counts and warnings. Failures can also write ERROR_SUMMARY.

Limitations

  • Market choices do not establish live availability or equal coverage across countries. Non-UK merchant contact coverage has not been established.
  • Some France URL shapes in the earlier research returned no restaurant data. Use current Deliveroo links rather than changing a UK URL's domain.
  • Menus can be unavailable, incomplete, or changed since collection. Results are snapshots, not ordering guarantees.
  • Menu-item links point to the restaurant, not individual product pages.
  • Phone numbers, email addresses, named contacts, and merchant websites were absent from the examined UK public pages; they are not promised output.
  • Discovery pages can return fewer restaurant links than location searches. Brand and zone results are not complete directories.
  • A stopped run preserves delivered rows, but cannot guarantee delivery of work still in progress.

More food delivery and grocery scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.