Deliveroo Restaurant & Menu Scraper avatar

Deliveroo Restaurant & Menu Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Deliveroo Restaurant & Menu Scraper

Deliveroo Restaurant & Menu Scraper

Scrape Deliveroo restaurants and full menus with prices (UK, France, UAE and more): ratings, fees, minimum order, ETA, promotions, address and coordinates, plus every item with price, discount, calories, dietary tags and modifiers. Paste a listing or menu URL, or a lat,lng.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Banea Teodor

Banea Teodor

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

What does Deliveroo Restaurant & Menu Scraper do?

This Actor extracts restaurants and full menus with prices from Deliveroo in the UK, France, the UAE and Deliveroo's other markets. Paste a neighbourhood listing URL or a restaurant menu URL, or just enter a latitude,longitude, and get clean JSON: restaurant ratings, ETAs, distances, promotions, delivery fees, minimum orders, addresses with coordinates and hygiene ratings, or complete menus with item prices, discounts, calories, dietary tags and modifier options (sizes, sides, extras) with their prices.

It reads Deliveroo's server-rendered pages directly. There is no browser and no login, so runs are fast and cheap.

Why use this Actor?

  • Full menus with prices: every orderable item with numeric price, discounted price, currency, calories, dietary tags, popular and availability flags, image, and modifier groups with option prices. Each row carries its restaurant context.
  • Rich restaurant records: rating with label and count, ETA, distance, delivery fee and minimum order as both text and number, free-delivery flag, promotions and restaurant-wide offers, street address, postcode, latitude/longitude, phone (FR/AE), UK FSA hygiene rating, cuisine tags (FR/AE).
  • Search by location: give "51.5155,-0.1419" and the Actor opens the listing Deliveroo shows for that address.
  • Multi-market: deliveroo.co.uk, .fr, .ae verified; .ie, .be, .it, .com.kw, .com.qa use the same site. Prices come back in local currency, including 3-decimal currencies such as KWD.
  • Built for pipelines: every row always has every field (null when Deliveroo doesn't show it), numbers are numbers, timestamps are ISO 8601, and restaurants are deduplicated across listings.

Pairs with our Glovo, Wolt and Bolt Food restaurant & menu scrapers, which use the same field names, for cross-platform delivery price comparison.

How much does it cost?

You pay per row returned, plus a small start fee per run.

RunRowsTypical cost
One listing, restaurant list~100–120 restaurants~$0.25
10 restaurants, full menus~1,000–2,000 items~$2–4
1 menu URL, full menu50–250 items~$0.10–0.50

Use maxRestaurants and maxItemsTotal to bound any run. The Actor logs a cost estimate before it starts when a run could return more than ~5,000 rows.

Input

FieldTypeDescriptionExample
startUrlsarrayDeliveroo neighbourhood listings (/restaurants/<city>/<neighbourhood>) or menu pages (/menu/<city>/<neighbourhood>/<restaurant>), any Deliveroo domain.https://deliveroo.co.uk/restaurants/london/fitzrovia?geohash=gcpvhep7zzx1
locationsarray of stringsDelivery locations as "latitude,longitude".["51.5155,-0.1419"]
countryDomainstringDeliveroo country for locations.deliveroo.fr
modestringrestaurants (one row per restaurant, default) or menus (one row per menu item)."menus"
includeModifiersbooleanMenus mode: attach modifier groups with option prices (default on).true
maxRestaurantsintegerCap on restaurants scraped / menus opened (0 = no cap).10
maxItemsTotalintegerHard ceiling on billed rows (0 = none). The crawler stops as soon as it is reached.1000
maxItemsPerRestaurantintegerMenus mode: keep only the first N items of each menu, in menu order (0 = complete menus).25
maxConcurrency, maxRequestsPerMinuteintegerRequest pacing.3, 60

Notes:

  • A Deliveroo listing shows its top ~100–120 restaurants for that location (Deliveroo does not paginate further). Add more locations or neighbourhood URLs to widen coverage.
  • Restaurant rows from a listing carry what the listing card shows (rating, ratings count, ETA, distance, promotions, sponsored flag, image). Fees, minimum order, address, coordinates, hygiene rating, cuisine and open state live on the menu page: use mode: menus (the full records are stored under the RESTAURANTS key, free) or pass menu URLs in restaurants mode to get them in the dataset.
  • In restaurants mode a menu URL without a delivery location is fetched once more from the restaurant's own location, so fees, minimum order and open state are filled. In menus mode item rows do not depend on the location, so bare menu URLs are fetched once and their free RESTAURANTS record has no fee or minimum (use a listing or a URL with ?geohash= to get them).
  • National brands (KFC, Pizza Hut, Subway, Papa John's, Popeyes, …) sit in a compact carousel on listings that carries only the name and ETA, so their listing rows have no rating, ratings count or distance. Their menu pages have everything.
  • maxRestaurants and maxItemsTotal are shared by all listings and locations in a run: with two locations and maxRestaurants: 20 the first listing to answer fills the cap. Run one location per run (or raise the cap) when you need every area covered.
  • UK menu pages show no ETA and no cuisine tags; the ETA comes from the listing card when the menu was found through a listing.

Output

Menus mode: one row per menu item.

{
"storeId": "516734",
"storeName": "Shake Shack - Burgers & Shakes - Oxford Street",
"storeSlug": "shake-shack-oxford-street",
"storeUrl": "https://deliveroo.co.uk/menu/london/soho/shake-shack-oxford-street",
"city": "london",
"countryCode": "GB",
"categoryId": "956305007",
"categoryName": "Limited Time Only!",
"categoryPosition": 1,
"productId": "2849629908",
"name": "The Big Shack",
"description": "Made with two 100% Aberdeen Angus cheeseburgers made to order, topped with lettuce, pickles, onions, tomatoes, and secret sauce on a three-layer toasted potato bun.",
"price": 16.15,
"priceDiscounted": null,
"currency": "GBP",
"priceText": "£16.15",
"calories": 1008,
"dietaryTags": [],
"imageUrl": "https://rs-menus-api.roocdn.com/images/3f25b128-5496-49ae-8382-84b11d49f8c1/image.jpeg?width=800&height=600&auto=webp&format=jpg&fit=crop",
"isPopular": false,
"isAvailable": true,
"offerText": null,
"modifierGroups": [
{
"id": "2922055379",
"name": "NEW LTO Big Shack",
"minSelection": 0,
"maxSelection": 6,
"multiselect": false,
"options": [
{ "id": "2849629897", "name": "No Cheese", "price": 0, "priceDiscounted": null, "isAvailable": true, "modifierGroupIds": [] }
]
}
],
"itemRating": null,
"stockCount": null,
"isSponsored": false,
"offerTag": null,
"strikeThroughPrice": null,
"position": 1,
"sourceUrl": "https://deliveroo.co.uk/menu/London/soho/shake-shack-oxford-street?day=today&geohash=gcpvhep7zzx1&time=ASAP",
"scrapedAt": "2026-10-15T20:17:09.842Z",
"runId": "AbC123dEf456"
}

Restaurants mode: one row per restaurant (this one came from a menu URL, so the menu-page fields are filled).

{
"storeId": "135495",
"name": "Burger King - Paris Lescot",
"slug": "burger-king-paris-lescot",
"url": "https://deliveroo.fr/menu/paris/paris-1-louvre/burger-king-paris-lescot",
"sourceUrl": "https://deliveroo.fr/en/menu/paris/paris-1-louvre/burger-king-paris-lescot?day=today&time=ASAP&geohash=u09tvqvszqwd",
"city": "paris",
"neighborhood": "paris-1-louvre",
"countryCode": "FR",
"currency": "EUR",
"rating": 4,
"ratingText": "Good",
"ratingCount": "376",
"cuisine": ["Burgers", "Vegetarian", "Dessert"],
"eta": null,
"distance": null,
"deliveryFeeText": "€1.79 delivery",
"deliveryFee": 1.79,
"minimumOrderText": "€10.00 minimum",
"minimumOrder": 10,
"isFreeDelivery": false,
"promotions": [],
"offers": ["Spend €10.00 to get free delivery"],
"isSponsored": null,
"isOpen": true,
"closingText": "Closes at 23:45",
"address": "2 RUE PIERRE LESCOT, Paris, 75001",
"postcode": "75001",
"latitude": 48.8611717,
"longitude": 2.347961,
"phone": "+33142601653",
"hygieneRating": null,
"branchType": "RESTAURANT",
"description": "Serving up amazing food, Burger King - Paris Lescot sits in the heart of Paris 1 - Louvre. With dishes you're guaranteed to love, order now for delivery within 32 minutes",
"imageUrl": "https://rs-menus-api.roocdn.com/images/e3f51063-2fb7-4c04-a33d-a7f7a17876e9/image.jpeg?width=800&height=600&auto=webp&format=jpg&fit=crop",
"scrapedAt": "2026-10-15T20:16:28.065Z",
"runId": "AbC123dEf456"
}

A run produces only one of the two shapes (per the mode), so exports are always uniform. Menus mode additionally stores one full restaurant record per menu under the RESTAURANTS key of the run's key-value store (join on storeId). Pages that could not be scraped are listed under ERRORS with the reason (blocked, notFound, invalid, requestFailed, unexpectedResponse).

Tips and tricks

  • Price monitoring: schedule a menus run on the same menu URLs and diff by storeId + productId; runId and scrapedAt keep runs apart after export.
  • Area overview: restaurants mode over a handful of locations maps who delivers where, with ratings, ETAs and promotions, in one cheap run.
  • Fees and minimum orders: these depend on the delivery address. Listing-driven menus use the listing's location; menu URLs without one use the restaurant's own location.
  • Cost control in menus mode: maxItemsTotal is a hard ceiling (the last menu may be cut short) and stops the crawler; maxRestaurants bounds how many menus are opened; maxItemsPerRestaurant keeps the first N items of every menu in page order.
  • Closed restaurants still count toward maxRestaurants: a menu that is closed at scrape time has no orderable items (0 item rows, a RESTAURANTS record with closingText like "Opens at 10:00"). In restaurants mode a closed restaurant reached through a bare menu URL has no fee or minimum order either. Run during opening hours for complete data.
  • Grocery pages (supermarkets, convenience stores) are shelf previews: only the first items of each aisle are on the page, so grocery "menus" are partial.
  • Discounted prices reflect store-wide promotions active at scrape time (priceDiscounted on every item when the restaurant runs "25% off").
  • Modifiers: switch includeModifiers off for flat, CSV-friendly item rows.

Integrations

The dataset works with every Apify integration: export to JSON, CSV, Excel, push to Google Sheets, trigger webhooks on finish, or query via the Apify API from Python/Node, for example a weekly menu-price snapshot feeding a pricing dashboard.