Deliveroo Scraper - Restaurant Menus & Food Prices API avatar

Deliveroo Scraper - Restaurant Menus & Food Prices API

Pricing

from $7.20 / 1,000 restaurants

Go to Apify Store
Deliveroo Scraper - Restaurant Menus & Food Prices API

Deliveroo Scraper - Restaurant Menus & Food Prices API

Scrape Deliveroo restaurants and full menus in 7 countries: name, address, neighbourhood, dish names, categories and prices. Export to CSV, JSON, Excel, or XML.

Pricing

from $7.20 / 1,000 restaurants

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

ParseForge Banner

🍽️ Deliveroo Restaurants Scraper

πŸš€ Export Deliveroo restaurants and full menus in seconds. 7 live markets, 30 fields per restaurant, every dish with its price, straight from the page Deliveroo serves.

The Deliveroo Restaurants Scraper reads Deliveroo restaurant pages live and turns them into clean rows: the restaurant profile (name, Deliveroo ID, street address, neighbourhood, city, branch type, currency, menu category names, dish count, cheapest and dearest dish) and, when you turn it on, one row per dish with its name, description, category, price, discount, availability, dietary tags and image. It finds the restaurants itself from Deliveroo's own published sitemap, filtered by city and by name, or scrapes the restaurant URLs you paste.

Coverage: the 7 markets Deliveroo still operates (United Kingdom, France, Italy, Ireland, Belgium, United Arab Emirates, Kuwait), every restaurant listed in each market's sitemap (London alone is tens of thousands of pages), 30 fields per restaurant row and 32 per menu item row. Measured on 2026-09-07: 30 London restaurants in 100 seconds, 30 of 30 delivered.

🎯 Target AudienceπŸ’‘ Primary Use Cases
Restaurant groups and franchisesCompetitor menus and price points in the same postcode
FMCG and food brandsWhere a product is listed, at what price, under which category
Price intelligence teamsDish-level price tracking over time, per city and per chain
Market analystsRestaurant density, cuisine mix and price bands by neighbourhood
Delivery and logistics startupsThe live merchant landscape in a target city

πŸ“‹ What the Deliveroo Restaurants Scraper does

Give it a country and a city and it reads Deliveroo's published sitemap to find the restaurant pages, opens them through a real browser session that clears Deliveroo's Cloudflare challenge once, and extracts:

  • πŸͺ Restaurant: name, Deliveroo ID, slug, URL, menu ID, DRN IDs, branch type, fulfilment type, currency, street address, neighbourhood, city, country, city and zone IDs, whether the menu is currently disabled, the SEO title and description, the number of menu categories and their names, the dish count and the cheapest and dearest dish.
  • 🍽️ Every dish (optional): name, description, menu category, price as a decimal and as the string Deliveroo shows, discounted price, currency, availability, popularity, sponsored and signature-exclusive flags, dietary tags, nutrition, rating, image URL and the number of option groups.
  • 🧩 Option groups (optional): sizes, extras and sides for each dish, each with its own price and availability.

πŸ’‘ Why it matters: Deliveroo does not offer a public API and its pages sit behind a bot challenge. This Actor gives you the same data a customer sees, as rows you can join, chart and diff, without maintaining a browser farm.

🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is on its way. Until then, the How to use section below takes under two minutes.

πŸ“Š Output

One row per restaurant. With Include menu items on, one extra row per dish, tagged rowType: "menuItem". Fields the source withholds carry Not Disclosed; fields that do not apply carry N/A; flags are Yes or No.

FieldDescription
πŸ–Ό imageUrlRestaurant cover image, or the dish image on a menu item row
🏷 rowTyperestaurant or menuItem
πŸ“Œ nameRestaurant name, or dish name on a menu item row
πŸ†” restaurantIdDeliveroo's numeric restaurant ID
πŸ”— urlCanonical restaurant page
πŸ”€ slugURL slug of the restaurant
πŸ“‹ menuId, 🧬 drnId, 🏒 brandDrnIdDeliveroo internal identifiers; brandDrnId is set on chain branches, Not Disclosed on independents
πŸͺ branchType, 🚴 fulfillmentTypeRESTAURANT, DELIVEROO and similar
πŸ’± currency, πŸ’² currencySymbolISO code and symbol, for example GBP and Β£
πŸ“ address, 🏘 neighborhood, πŸŒ† city, 🌍 countryStreet address (postcode included), neighbourhood, city slug, country code
πŸ”’ cityId, zoneIdDeliveroo's city and delivery zone IDs
β›” menuDisabled, menuDisabledByLocationOnlyOrdering state without a delivery address set (menus are still returned)
πŸ“ acceptsOrderNotes, πŸ§ͺ isTestSiteRestaurant flags
πŸ”Ž seoTitle, πŸ“° seoDescriptionPage metadata as published by Deliveroo
πŸ—‚ categoryCount, categoriesNumber and names of the menu sections
🍽 menuItemCountNumber of dishes on the menu
⬇️ priceMin, ⬆️ priceMaxCheapest and dearest dish, as decimals
πŸ†” itemId, 🧬 itemDrnIdMenu item identifiers (menu item rows)
πŸͺ restaurantName, πŸ”— restaurantUrlParent restaurant of a dish (menu item rows)
πŸ“ description, πŸ—‚ category, πŸ”’ categoryIdDish description and menu section (menu item rows)
πŸ’· price, priceFormatted, 🏷 priceDiscounted, priceDiscountedFormattedDish price as a decimal and as shown, plus the discounted price when there is one
βœ… available, πŸ”₯ popular, πŸ“¦ stockCount, 🏬 isInStorePriceDish availability and flags
πŸ“£ isSponsored, ⭐ isSignatureExclusive, 🎁 offerTextPromotion flags and offer text
πŸ₯— dietaryTags, 🧾 nutrition, ⭐ ratingMerchant-filled dish details, Not Disclosed when absent
🧩 modifierGroupCount, modifierGroupsOption groups; the full groups are attached only with Include modifier groups on
πŸ•’ scrapedAtISO timestamp of the extraction
❌ errornull on data rows; error rows carry only this field and are never billed

Three real records from a verification run:

{
"imageUrl": "https://rs-menus-api.roocdn.com/images/7712b7f7-7a05-4fde-b396-5bd4aa32804e/image.jpeg?width=1200&height=630&fit=crop",
"rowType": "restaurant",
"name": "Solaz Kitchen - Abbey Wood",
"restaurantId": "684098",
"url": "https://deliveroo.co.uk/menu/london/abbey-wood/solaz-kitchen-78-glimpsing-green",
"slug": "solaz-kitchen-78-glimpsing-green",
"menuId": "2721346",
"drnId": "fdcb287b-d302-4423-818b-df49fa437ea9",
"brandDrnId": "Not Disclosed",
"branchType": "RESTAURANT",
"fulfillmentType": "DELIVEROO",
"currency": "GBP",
"currencySymbol": "Β£",
"address": "78 Glimpsing Green, London, DA184HD",
"neighborhood": "Abbey Wood",
"city": "london",
"country": "GB",
"cityId": 1,
"zoneId": 1076,
"menuDisabled": "Yes",
"menuDisabledByLocationOnly": "No",
"acceptsOrderNotes": "No",
"isTestSite": "No",
"seoTitle": "Solaz Kitchen - Abbey Wood delivery from Abbey Wood - Order with Deliveroo",
"seoDescription": "Serving up amazing food, Solaz Kitchen - Abbey Wood sits in the heart of Abbey Wood. With dishes you're guaranteed to love, order now for delivery within 32 minutes",
"categoryCount": 6,
"categories": "Starter; Rice Dishes; Stew; Kids Menu; Extras; Drinks",
"menuItemCount": 60,
"priceMin": 1,
"priceMax": 11,
"scrapedAt": "2026-09-08T03:46:45.951Z",
"error": null
}
{
"imageUrl": "https://rs-menus-api.roocdn.com/images/a5ba3ae7-da0e-4513-b159-58f95ea3b050/image.jpeg?width=1200&height=630&fit=crop",
"rowType": "restaurant",
"name": "Honey’s Kitchen - Abbey Wood",
"restaurantId": "440493",
"url": "https://deliveroo.co.uk/menu/london/abbey-wood/honeys-kitchen",
"slug": "honeys-kitchen",
"menuId": "1974400",
"drnId": "1958b460-d9c0-40a7-86f1-267a7b3551d8",
"brandDrnId": "Not Disclosed",
"branchType": "RESTAURANT",
"fulfillmentType": "DELIVEROO",
"currency": "GBP",
"currencySymbol": "Β£",
"address": "73 Glimpsing Green, London, DA184HB",
"neighborhood": "Abbey Wood",
"city": "london",
"country": "GB",
"cityId": 1,
"zoneId": 1076,
"menuDisabled": "Yes",
"menuDisabledByLocationOnly": "No",
"acceptsOrderNotes": "No",
"isTestSite": "No",
"seoTitle": "Honey’s Kitchen - Abbey Wood delivery from Abbey Wood - Order with Deliveroo",
"seoDescription": "Serving up amazing food, Honey’s Kitchen - Abbey Wood sits in the heart of Abbey Wood. With dishes you're guaranteed to love, order now for delivery within 32 minutes",
"categoryCount": 6,
"categories": "Honey's Kitchen Meal Deal 🍱; Main and Protein πŸ›; Swallow & Soup Meal 🍲; Soup and Stew πŸ₯˜; Sides 🍽️; DrinksπŸ₯€",
"menuItemCount": 82,
"priceMin": 1,
"priceMax": 35,
"scrapedAt": "2026-09-08T03:46:48.577Z",
"error": null
}
{
"imageUrl": "https://rs-menus-api.roocdn.com/images/b92cfd2e-9f73-4076-8ff7-cc38d5ae2506/image.jpeg?width=600&height=600&auto=webp&format=jpg&fit=crop",
"rowType": "menuItem",
"name": "Jollof Rice with Fried Plantain & Choice of Assorted Meat, Chicken or Turkey",
"itemId": "2636284572",
"itemDrnId": "053d93c2-8521-4d1d-8fe8-e27c526a3c72",
"restaurantName": "Honey’s Kitchen - Abbey Wood",
"restaurantId": "440493",
"restaurantUrl": "https://deliveroo.co.uk/menu/london/abbey-wood/honeys-kitchen",
"city": "london",
"neighborhood": "Abbey Wood",
"description": "Smokey-Party Jollof Rice served with Fried Plantain and your choice of Assorted Meat, Chicken OR Turkey.",
"category": "Honey's Kitchen Meal Deal 🍱",
"categoryId": "936489846",
"price": 12.99,
"priceFormatted": "Β£12.99",
"currency": "GBP",
"priceDiscounted": "N/A",
"priceDiscountedFormatted": "N/A",
"isInStorePrice": "No",
"available": "Yes",
"popular": "No",
"stockCount": "N/A",
"isSponsored": "No",
"isSignatureExclusive": "No",
"offerText": "Not Disclosed",
"dietaryTags": "Not Disclosed",
"nutrition": "Not Disclosed",
"rating": "Not Disclosed",
"modifierGroupCount": 1,
"modifierGroups": [],
"scrapedAt": "2026-09-08T03:51:25.842Z",
"error": null
}

✨ Why choose this Actor

What you get
Seven live marketsUnited Kingdom, France, Italy, Ireland, Belgium, United Arab Emirates and Kuwait. The markets Deliveroo has exited are deliberately not offered: they no longer publish a sitemap and their pages redirect.
Discovery includedYou do not need a list of URLs. The Actor reads Deliveroo's own sitemap index and filters it by city and by name before opening a single page, so the filtering costs nothing.
The full menu, not the cardPrices, descriptions, categories, images and option groups come from the page's own data payload, so they are exactly what a customer sees, not a guess parsed off a listing tile.
Public pages onlyDeliveroo's robots.txt disallows its API and GraphQL routes. This Actor reads neither. It uses the sitemap Deliveroo publishes and the restaurant pages themselves.
One browser page per runThe Cloudflare challenge is cleared once in a real browser; every sitemap and restaurant page after that is fetched from the cleared session, which is why 30 restaurants take about 100 seconds.
No silent nullsEvery field is present on every row. What Deliveroo withholds says Not Disclosed, what does not apply says N/A, and errors land in their own unbilled rows.

πŸ“ˆ How it compares to alternatives

Deliveroo Restaurants ScraperTypical listing scrapersManual copy-paste
Markets7Usually UK onlyAny, slowly
DiscoverySitemap, filtered by city and nameNeeds a postcode or URL listNone
Menu depthEvery dish, with option groups on requestListing tile onlyWhatever you type
Delivery fees and ETAsNot available (shown only once an address is set)Sometimes, address-boundYes
OutputRestaurant rows plus dish rows, CSV, JSON, Excel, XMLVariesSpreadsheet
SpeedAbout 3 seconds per restaurantBrowser render per pageMinutes per restaurant

Honest ceiling: delivery fee, delivery time, minimum order and star ratings are only rendered once a delivery address is set, which a logged-out page never has. The Actor returns the restaurant profile and the complete menu with prices, and reports menuDisabled so you know the ordering state.

πŸš€ How to use

  1. Create a free Apify account. New accounts start with $5 in free credit.
  2. Open the Deliveroo Restaurants Scraper page and click Try for free.
  3. Pick a Country, type a City slug such as london, bristol, paris or dubai, and optionally a Name contains filter such as pizza.
  4. Or paste restaurant page URLs into Restaurant URLs to skip discovery entirely.
  5. Turn on Include menu items if you want one row per dish, and set Max Items.
  6. Click Start. Results appear in the Dataset tab, ready to export as CSV, Excel, JSON or XML.

A minimal input:

{ "country": "uk", "city": "london", "searchTerm": "pizza", "includeMenuItems": true, "maxItems": 200 }

πŸ’Ό Business use cases

Run it on a schedule against a list of restaurant URLs with menu items on. Every run returns the current price of every dish, so a diff between two runs is your price-change report.

πŸ₯Š Competitive benchmarking

Set a city and a name filter and pull every matching restaurant. Compare priceMin, priceMax and menuItemCount per cuisine and per neighbourhood.

πŸ“¦ Distribution checks for food brands

Set Name contains to a chain or product name and read the menus of every branch, with the price and category each one uses.

πŸ—ΊοΈ Market mapping

Pull a whole city with menu items off: one row per restaurant with address, neighbourhood and zone ID gives you restaurant density and cuisine mix by area in one run.

πŸ”Œ Automating Deliveroo Restaurants Scraper

  • Make and Zapier: trigger a run on a schedule and push new rows to Google Sheets or a CRM.
  • Slack: post a summary when a scheduled run finishes, or alert when a tracked dish changes price.
  • Airbyte: load the dataset into your warehouse with the Apify source connector.
  • GitHub: commit a CSV snapshot per run to keep a versioned price history.
  • Google Drive: save each run's export as a dated file for the team.

All of these use Apify's built-in integrations or the Apify API.

🌟 Beyond business use cases

  • Research: study dish prices, portion labelling and dietary tagging across cities and markets.
  • Personal: find every restaurant in your neighbourhood that sells a specific dish, with prices.
  • Non-profit: map food availability and price bands by area for community projects.
  • Experimentation: build a dish-level dataset for price prediction or recommendation models.

πŸ€– Ask an AI assistant about this scraper

Connect the Actor to an MCP-capable assistant and ask in plain English:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/deliveroo-restaurants-scraper"
  • "What does a chicken burger cost across Deliveroo restaurants in Bristol?"
  • "Pull the full menu and prices for these five London restaurants."
  • "Which Deliveroo restaurants in Dublin sell pizza, and what is their price range?"

❓ Frequently Asked Questions

🌍 Which countries are covered?

Seven: United Kingdom, France, Italy, Ireland, Belgium, United Arab Emirates and Kuwait. These are the markets where Deliveroo still publishes a sitemap.

πŸ”‘ Do I need a Deliveroo account?

No. Only public restaurant pages are read.

πŸ”Œ Does it use Deliveroo's API?

No. Deliveroo's robots.txt disallows the API and GraphQL routes, so the Actor reads the published sitemap and the restaurant pages instead.

🎯 Can I scrape a specific restaurant?

Yes. Paste its page URL into Restaurant URLs and discovery is skipped.

🚚 Does it return delivery fees, delivery times and ratings?

No. Those appear only once a delivery address is set, which a logged-out page never has. The Actor returns the restaurant profile and the complete menu with prices.

πŸ›‘οΈ Why does it need a residential proxy?

Every Deliveroo page sits behind a Cloudflare managed challenge. Datacenter exits get a 403; a residential exit plus a real browser clears it. Keep the default proxy setting on.

β›” Why is menuDisabled Yes on most rows?

Deliveroo disables ordering when no delivery address is set, which is the state a scraper is always in. The menu, the dishes and the prices are still on the page and are all returned.

πŸ•³οΈ Why is a field Not Disclosed?

Not every restaurant fills every field. brandDrnId is set on chain branches and empty on independents; nutrition, rating and stockCount are filled by the merchant and most do not. There is no separate postcode column because Deliveroo's own postcode field is empty on every market measured; the postcode is inside address.

πŸ”’ How does Max Items count?

It counts rows: restaurant rows and menu item rows together. With menu items off, 50 means 50 restaurants. With menu items on, a restaurant with 60 dishes uses 61 rows.

πŸ“‰ Why did I get fewer rows than Max Items?

Either the city and name filters matched fewer restaurants, or the run hit its time budget. The log prints how many candidate pages the sitemap filter produced.

❌ What is an error row?

When a page could not be read, a row with only the error field is written naming the URL and the reason. Error rows are never billed and the run continues with the next restaurant.

⏱️ How fast is it?

About 3 seconds per restaurant once the session is warm. The first page pays for the browser start and the challenge, roughly 20 to 40 seconds.

πŸ”„ Can I run it on a schedule?

Yes. Use Apify Schedules with the same input; each run writes a fresh dataset you can diff against the previous one.

🧾 Is this an official Deliveroo product?

No. It is an independent tool that reads only publicly available pages.

πŸ”Œ Integrate with any app

Every run's dataset is available through the Apify API as JSON, CSV, Excel or XML, and through the Apify integrations for Make, Zapier, Slack, Airbyte, Google Sheets, Google Drive and GitHub. Use webhooks to trigger your own pipeline when a run finishes.

πŸ’‘ Pro Tip: browse the complete ParseForge collection for more scrapers.

πŸ†˜ Need Help? Open our contact form with your run ID, your input and what you expected.

⚠️ Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Deliveroo. It collects only publicly available restaurant and menu data and does not read any route Deliveroo's robots.txt disallows. You are responsible for using the data in compliance with Deliveroo's terms and applicable laws.