Deliveroo API & Scraper
Deliveroo shows a different set of stores, fees and delivery times for every address, so this API always takes a location: latitude and longitude, a postcode, or a geohash.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
`stores` returns every restaurant, supermarket, Deliveroo HOP store and shop that delivers there (3,984 for a London W1 postcode on 2026-10-18) with the delivery fee and minimum order for that address, the delivery-time estimate, distance, star rating, price band and current offer, filtered by Deliveroo's own tabs (restaurants, grocery, shopping), cuisine, dish or dietary option, and sorted and paged over the complete list. `store` opens one restaurant menu or grocery catalogue: every category or aisle and the items with price, sale price, the loyalty price a supermarket prints (Tesco Clubcard, Sainsbury's Nectar, Waitrose loyalty card), unit price, size, availability, the stock count where the store publishes one, calories and dietary tags. `search` looks up a dish or a product across the stores delivering to the address, the way Deliveroo's search box does, and returns each match with its price, sold-out flag and the store selling it. `filters` lists the cuisines, dishes and dietary options available at an address with store counts.
What a Deliveroo field actually contains
Fields that read differently from how they look. Every row was measured against live responses on 2026-10-18.
| Field | What it holds |
|---|---|
| delivery_fee, minimum_order | The fee and minimum spend Deliveroo charges for the address you sent, not a store-wide constant. Each has amount, currency and the text Deliveroo prints (£0.79, KD 1.000). Matched the store page for the same address on 8 of 8 stores. |
| store_type | restaurant, or shop for Deliveroo's on-demand grocery and retail stores (supermarkets, Deliveroo HOP, convenience, pharmacy). The grocery tab also contains some restaurants that sell groceries (27 of 364 in London W1). |
| rating, rating_percentage | rating is the star value Deliveroo shows (4.7); rating_percentage is Deliveroo's own score it is derived from (94.9). New stores have neither. |
| delivery_time_minutes, eta_range_minutes | The current estimate Deliveroo shows (15) and its range (10-20), live at the moment of the call. |
| price, sale_price | price is the item's regular price; sale_price is set when the item is discounted (Waitrose carbonara £6.25, sale £5.00 with "20% off"). |
| member_price, offer_text | member_price is the loyalty-card price a supermarket prints in its offer: Tesco "£2.00 Clubcard (£13.33/kg)" gives 2.00 with program Clubcard. Multi-buys ("3 for £10 Clubcard") stay in offer_text only. |
| stock_count, available | stock_count is the number of units the store shows, published by some grocers only (Deliveroo HOP and Tesco Express: most items; Sainsbury's and Waitrose: none). available false means the item cannot be ordered now. |
| sold_out (search) | Deliveroo prints "Currently sold out" instead of the price; the price is still returned and sold_out is true. |
| amount (Kuwait) | Kuwaiti dinar has three decimals: KD 1.450 is 1.45. |
Deliveroo's recommended order is reshuffled on every request (0 of the first 100 positions repeated a minute apart), so stores are sorted by distance by default; page with pagination.next_cursor and no store is repeated. Search returns up to about 50 stores with up to 10 matching items each per query.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/deliveroo/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"country": "uk",
"query": "milk",
"postcode": "W1W 5QZ"
}
}{
"ok": true,
"meta": {
"api": "deliveroo",
"endpoint": "search",
"mode": "live",
"latency_ms": 1762.3,
"record_count": 344,
"bytes": 325162,
"cache_hit": false,
"upstream_requests": 1,
"charged_credits": 3,
"version": "1.0.1",
"request_id": "491b560fd5bb44e2",
"fetched_at": "2026-10-18T17:44:59.062Z"
},
"data": {
"items": [
{
"item_id": "2562392646",
"drn_id": "6210ba18-775a-4e3a-96a6-a1e0c23540f6",
"name": "Sainsbury's Semi Skimmed Fresh British Milk 4 Pints/2.272L",
"price": {
"amount": 1.9,
"currency": "GBP",
"display": "£1.90"
},
"sale_price": null,
"member_price": null,
"sold_out": false,
"availability_text": null,
"offer_text": null,
"unit_price_text": "2.27L · £0.84/L",
"sponsored": false,
"image": "https://rs-menus-api.roocdn.com/images/roo/7357971a-8be5-432f-8adb-65d7be15aec2.jpg",
"url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local?day=today&item-drn-id=6210ba18-775a-4e3a-96a6-a1e0c23540f6&item-id=2562392646&postcode=W1W5QZ&time=ASAP",
"store_id": "675203",
"store_name": "Sainsbury's Local",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local",
"rank": 1
},
{
"item_id": "2562390921",
"drn_id": "7d0b6020-d8d5-42a0-9ec8-5050068585a2",
"name": "Sainsbury's Whole Fresh British Milk 4 Pints/2.272L",
"price": {
"amount": 1.9,
"currency": "GBP",
"display": "£1.90"
},
"sale_price": null,
"member_price": null,
"sold_out": false,
"availability_text": null,
"offer_text": null,
"unit_price_text": "2.27L · £0.84/L",
"sponsored": false,
"image": "https://rs-menus-api.roocdn.com/images/roo/e95b99de-c8d1-4788-a6b9-29a20482ca42.jpg",
"url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local?day=today&item-drn-id=7d0b6020-d8d5-42a0-9ec8-5050068585a2&item-id=2562390921&postcode=W1W5QZ&time=ASAP",
"store_id": "675203",
"store_name": "Sainsbury's Local",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local",
"rank": 2
},
{
"item_id": "2562395218",
"drn_id": "6856a074-b7ab-4ca2-a981-0d3b3bdba0a9",
"name": "Sainsbury's Semi Skimmed Fresh British Milk 2 Pints/1.136L",
"price": {
"amount": 1.5,
"currency": "GBP",
"display": "£1.50"
},
"sale_price": null,
"member_price": null,
"sold_out": false,
"availability_text": null,
"offer_text": null,
"unit_price_text": "1.14L · £1.32/L",
"sponsored": false,
"image": "https://rs-menus-api.roocdn.com/images/roo/68738346-5677-4d32-954b-5bdaeed8f2cc.jpg",
"url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local?day=today&item-drn-id=6856a074-b7ab-4ca2-a981-0d3b3bdba0a9&item-id=2562395218&postcode=W1W5QZ&time=ASAP",
"store_id": "675203",
"store_name": "Sainsbury's Local",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local",
"rank": 3
}
],
"stores": [
{
"store_id": "675203",
"store_name": "Sainsbury's Local",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/fitzrovia/sainsburys-oxford-circus-berners-street-local",
"items": 10
},
{
"store_id": "275808",
"store_name": "Waitrose",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/bloomsbury/waitrose-bloomsbury",
"items": 8
},
{
"store_id": "769001",
"store_name": "Co-op",
"store_type": "shop",
"store_url": "https://deliveroo.co.uk/menu/London/regent's-park/london-baker-street-station",
"items": 10
}
],
"total_items": 344,
"location": null,
"market": "uk",
"query": "milk",
"type": "all",
"notices": []
}
}What the Deliveroo API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| stores | Restaurants, grocery stores and shops that deliver to a location (latitude+longitude, postcode or geohash) in one Deliveroo market, with delivery fee and minimum order for that location, delivery-time estimate, distance, star rating, price band, current offer and store type. Filter by Deliveroo tab (restaurants / grocery / shopping), cuisine, dish, dietary, name, maximum delivery fee or time, minimum rating, offers; sort and page the complete set. | Pricing teams call stores to get restaurants, grocery stores and shops that deliver to a location (latitude+longitude, postcod…. | country, latitude, longitude, postcode, geohash, ... |
| store | One Deliveroo store's menu or grocery catalogue: store details (address, coordinates, currency, whether it delivers to the given location, next delivery time), every category/aisle with its item count, and the items page by page with price, sale price, discount and offer text, unit price, size, availability, stock count where the store publishes it, calories, dietary tags and image. Filter to one category or to specific item ids. | Marketplace operators call store to get one Deliveroo store's menu or grocery catalogue. | store_id, country, latitude, longitude, postcode, ... |
| search | Search dishes and grocery products by name across the stores delivering to a location, the way Deliveroo's search box does: each match with its price, sale price, offer, unit price, sold-out flag and the store selling it (id, name, type, link). Up to ~50 stores with up to 10 matching items each per query. | Catalog enrichment teams call search to search dishes and grocery products by name across the stores delivering to a location, the wa…. | country, query, latitude, longitude, postcode, ... |
| filters | The filters Deliveroo offers at a location with live store counts: tabs (restaurants, grocery, shopping), cuisines, dishes, dietary options, delivery-time and delivery-fee bands, rating bands. Use the keys with `stores`. | Retail analysts call filters to get the filters Deliveroo offers at a location with live store counts. | country, latitude, longitude, postcode, geohash |
Call search from your stack
curl -X POST https://api.reefapi.com/deliveroo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"uk","query":"milk","postcode":"W1W 5QZ"}'import requests
r = requests.post(
"https://api.reefapi.com/deliveroo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"country": "uk",
"query": "milk",
"postcode": "W1W 5QZ"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/deliveroo/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"country": "uk",
"query": "milk",
"postcode": "W1W 5QZ"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.deliveroo.search with {"country":"uk","query":"milk","postcode":"W1W 5QZ"}.Who uses this API and why
- Track grocery prices, Clubcard and Nectar prices and promotions on Deliveroo by store and city.
- Map which restaurants and supermarkets deliver to an address with fees, minimum order and delivery times.
- Monitor restaurant menu prices and new dishes for a chain across its Deliveroo branches.
- Compare a product's price across the supermarkets and convenience stores delivering to one address.
- Build a restaurant and dark-store database for the UK, France, Italy, Belgium, Ireland, UAE and Kuwait.
Questions developers ask before integrating
Which countries does it cover?
The seven markets Deliveroo operates in today: United Kingdom, France, Ireland, Italy, Belgium, United Arab Emirates and Kuwait. Qatar, Singapore and Hong Kong answer that the market is closed.
Do I need an address?
Yes, a location is required: latitude and longitude, a postcode (W1W 5QZ, 75004) or a geohash. Deliveroo's store list, fees and times depend on it, and the response says where the location was placed.
Can I get supermarket prices from Deliveroo?
Yes. Use type=grocery in stores to list the supermarkets, Deliveroo HOP and convenience stores delivering to an address, then store with the store_id for the full catalogue (Waitrose Marylebone: 277 aisles, 11,254 products) with price, sale price, loyalty price, unit price and stock where published.
How do I compare one product across stores?
search with query=milk and the address returns the matching products from the stores nearby with each store's price; London W1 returned 356 milk products from 48 stores.
Can I get a restaurant's full menu?
Yes. store with the restaurant's store_id, its slug or its Deliveroo menu URL returns every category and dish with price, description, calories, dietary tags and availability, page by page.
Which filters work?
Deliveroo's own tabs and its cuisine, dish and dietary keys (London W1: grocery 358, burgers 589, vegan 38 of 3,984 stores), plus name, maximum delivery fee, minimum rating, maximum delivery time and offers only. A cuisine or dish key that does not exist at the address is refused instead of being ignored; the filters call lists the valid keys.
Do I need a Deliveroo account?
No. Everything is what a logged-out visitor sees; Deliveroo Plus member prices are not included.
How fresh is the data?
Every call reads Deliveroo live; nothing is cached.
What is the Deliveroo API?
Deliveroo API is a ReefAPI endpoint group for restaurants, supermarkets and shops that deliver to an address, with fees and times; full menus and grocery catalogues with live prices, offers and stock. It returns live JSON through POST requests under /deliveroo/v1.
Is the Deliveroo API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Deliveroo calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Deliveroo login or account?
No login to Deliveroo is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Deliveroo data?
The page example is captured from a live stores call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Deliveroo API use?
Deliveroo actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Deliveroo from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call deliveroo actions with the same key, credit pool and JSON envelope used by normal REST requests.