Discover/Deliveroo API
live

Deliveroo APIdeliveroo.co.uk

Search Deliveroo UK restaurants by keyword and postcode, and fetch full menu data including item names, descriptions, prices, and images.

Endpoints
2
Updated
2mo ago

What is the Deliveroo API?

The Deliveroo UK API gives developers access to 2 endpoints covering restaurant discovery and menu retrieval. Use search_restaurants to find restaurants by keyword and UK postcode, returning names, URLs, images, ratings, distances, and estimated delivery times. Use get_restaurant_menu to pull structured menu data from any Deliveroo restaurant URL, including item names, descriptions, prices, and restaurant-level metadata.

Try it
Search keyword (e.g. pizza, burger, sushi)
UK postcode to search near (e.g. EC4R 3TE)
api.parse.bot/scraper/03208dc2-5ba7-43bd-bf9d-d8b089fc4234/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/03208dc2-5ba7-43bd-bf9d-d8b089fc4234/search_restaurants?query=pizza&postcode=EC4R+3TE' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace deliveroo-co-uk-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Deliveroo UK API Client
Search restaurants and extract menus from Deliveroo UK.
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Any


class ParseClient:
    """Client for interacting with the Deliveroo UK Parse API."""

    def __init__(self, api_key: str | None = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for authentication. If not provided, uses PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "03208dc2-5ba7-43bd-bf9d-d8b089fc4234"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params: Any) -> dict:
        """
        Make a request to the Parse API.

        Args:
            endpoint: API endpoint name
            method: HTTP method (GET or POST)
            **params: Query/body parameters

        Returns:
            API response as dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}

        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        elif method == "POST":
            response = requests.post(url, headers=headers, json=params)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def search_restaurants(self, query: str, postcode: str) -> dict:
        """
        Search for restaurants by keyword and postcode.

        Args:
            query: Search keyword (e.g., pizza, burger, sushi)
            postcode: UK postcode to search near (e.g., EC4R 3TE)

        Returns:
            Dictionary containing array of restaurants with details
        """
        return self._call("search_restaurants", method="GET", query=query, postcode=postcode)

    def get_restaurant_menu(self, url: str) -> dict:
        """
        Get the menu for a restaurant by its Deliveroo URL.

        Args:
            url: Full Deliveroo restaurant menu URL

        Returns:
            Dictionary containing restaurant info and menu items
        """
        return self._call("get_restaurant_menu", method="GET", url=url)


if __name__ == "__main__":
    # Initialize the API client
    client = ParseClient()

    # Workflow: Search for restaurants, analyze top results, get their menus
    print("=" * 70)
    print("🍕 Deliveroo Restaurant Discovery & Menu Analyzer")
    print("=" * 70)

    # Parameters for search
    postcode = "EC4R 3TE"  # Central London
    search_query = "pizza"

    print(f"\n🔍 Searching for '{search_query}' restaurants near {postcode}...\n")

    try:
        # Step 1: Search for restaurants
        search_response = client.search_restaurants(query=search_query, postcode=postcode)
        
        if search_response.get("status") != "success":
            print("❌ Search failed")
            exit(1)

        restaurants = search_response.get("data", {}).get("restaurants", [])
        print(f"✅ Found {len(restaurants)} restaurants\n")

        if not restaurants:
            print("No restaurants found. Try a different search or postcode.")
            exit(0)

        # Step 2: Analyze top 3 restaurants and get their menus
        for idx, restaurant in enumerate(restaurants[:3], 1):
            name = restaurant.get("name", "Unknown")
            url = restaurant.get("url", "")
            details = restaurant.get("details", "")
            image = restaurant.get("image", "")

            print(f"\n{'─' * 70}")
            print(f"📍 Restaurant #{idx}: {name}")
            print(f"   Details: {details}")
            
            if not url:
                print("   ⚠️  No URL available for this restaurant")
                continue

            # Step 3: Get full menu for this restaurant
            print(f"   📋 Fetching menu details...")
            
            menu_response = client.get_restaurant_menu(url=url)
            
            if menu_response.get("status") != "success":
                print(f"   ❌ Could not fetch menu")
                continue

            restaurant_info = menu_response.get("data", {}).get("restaurant", {})
            menu_items = menu_response.get("data", {}).get("menu_items", [])

            # Display restaurant details
            rating = restaurant_info.get("rating", "N/A")
            review_count = restaurant_info.get("review_count", "0")
            address = restaurant_info.get("address", "N/A")

            print(f"   ⭐ Rating: {rating} ({review_count} reviews)")
            print(f"   📮 Address: {address}")
            print(f"   🍖 Menu items: {len(menu_items)} total")

            # Display sample menu items with prices
            print(f"\n   Sample menu items:")
            for item in menu_items[:5]:
                item_name = item.get("name", "Unknown")
                price = item.get("price")
                description = item.get("description", "")
                
                price_str = f"£{price}" if price else "Price N/A"
                desc_str = f" - {description}" if description else ""
                print(f"      • {item_name}: {price_str}{desc_str}")

            if len(menu_items) > 5:
                print(f"      ... and {len(menu_items) - 5} more items")

        print(f"\n{'=' * 70}")
        print("✨ Analysis complete!")
        print("=" * 70)

    except requests.exceptions.HTTPError as e:
        print(f"❌ API Error: {e.response.status_code} - {e.response.text}")
    except Exception as e:
        print(f"❌ Error: {e}")
All endpoints · 2 totalmissing one? ·

Search for restaurants by keyword and postcode. Returns a list of restaurants matching the search query near the given postcode, with details including name, menu URL, image, and a description with rating, distance, and delivery time.

Input
ParamTypeDescription
queryrequiredstringSearch keyword (e.g. pizza, burger, sushi)
postcoderequiredstringUK postcode to search near (e.g. EC4R 3TE)
Response
{
  "type": "object",
  "fields": {
    "restaurants": "array of objects with name, url, image, and details"
  },
  "sample": {
    "data": {
      "restaurants": [
        {
          "url": "https://deliveroo.co.uk/menu/London/fitzrovia/german-doner-kabab-and-grill-68-cleveland-street",
          "name": "Pizza Toppers",
          "image": "https://rs-menus-api.roocdn.com/images/e1438da0-407c-4069-bba2-79c91a58397f/image.jpeg?width={w}&height={h}&auto=webp&format=jpg&fit=crop{&quality}",
          "details": "Item Cheese and tomato pizza from Pizza Toppers. Priced at £20.95. 2.2 mi. Delivers at 40. Rated 4.3 from 15 reviews. Free delivery."
        }
      ]
    },
    "status": "success"
  }
}

About the Deliveroo API

Restaurant Search

The search_restaurants endpoint accepts a query string (e.g. "pizza", "sushi") and a UK postcode (e.g. "EC4R 3TE"). It returns an array of matching restaurants, each with a name, a url pointing to that restaurant's Deliveroo menu page, an image URL, and a details field that bundles rating, distance from the postcode, and estimated delivery time as a descriptive string.

Menu Data

The get_restaurant_menu endpoint takes a full Deliveroo menu URL as its only required input. It returns two top-level objects. The restaurant object includes the restaurant's id, name, rating, review_count, address, and image. The menu_items array contains individual dishes, each with an id, name, description, price, and image. Note that prices are not guaranteed to be present for every item — some listings may return a null or absent price field.

Coverage and Scope

This API covers Deliveroo's UK platform (deliveroo.co.uk). Search results are geographically anchored to the provided postcode, so results will vary by location. Menu data reflects what is publicly visible on a restaurant's Deliveroo listing page without requiring a logged-in session.

Reliability & maintenance

The Deliveroo API is a managed, monitored endpoint for deliveroo.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when deliveroo.co.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official deliveroo.co.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Aggregate restaurant listings near a postcode for a local food discovery app
  • Compare menu prices across competing restaurants for a given cuisine type
  • Build a meal-planning tool that indexes dish descriptions and images from Deliveroo menus
  • Monitor menu changes over time by periodically fetching menu data for a set of restaurant URLs
  • Enrich a food delivery analytics dashboard with delivery time estimates and ratings from search results
  • Generate structured datasets of UK restaurant menus for research or competitive analysis
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Deliveroo have an official public developer API?+
Deliveroo does not offer a public developer API for restaurant search or menu data. Access to structured restaurant and menu data requires using a third-party solution like this one.
What does the `details` field in search results actually contain?+
The details field in each search_restaurants result is a descriptive string that combines the restaurant's rating, its distance from the supplied postcode, and an estimated delivery time. It is returned as a single text value rather than separate structured fields.
Are prices always available in menu responses?+
Not always. The get_restaurant_menu endpoint returns a price field for each item in menu_items, but the endpoint description notes that prices may not be available for all items. Some items may return a null or missing price depending on how the restaurant has configured its listing.
Does the API support order placement or basket management?+
No. The API covers restaurant search and menu retrieval only — it does not support placing orders, managing baskets, tracking deliveries, or any transactional operations. You can fork this API on Parse and revise it to add endpoints targeting other parts of Deliveroo's public-facing interface.
Is this API limited to the UK version of Deliveroo?+
Yes, the API targets deliveroo.co.uk and expects UK postcodes as location input. Deliveroo also operates in other countries (Ireland, France, UAE, etc.), but those markets are not covered by this API. You can fork it on Parse and revise it to point at another regional Deliveroo domain.
Page content last updated . Spec covers 2 endpoints from deliveroo.co.uk.
Related APIs in Food DiningSee all →
ubereats.com API
Search for restaurants by cuisine or location and browse their menus, prices, ratings, and delivery times. Get detailed information about specific restaurants and menu items to find exactly what you want to order.
doordash.com API
Search for restaurants on DoorDash and view their menus, hours, and current promotions to find exactly what you're looking for. Get detailed information about any restaurant including pricing, availability, and active discounts across the US.
food.grab.com API
Search for GrabFood restaurants by location and retrieve complete menu listings with prices and details for any store. Access real-time restaurant information and full dining options using a guest token obtained from the browser.
Thuisbezorgd.nl API
Search for restaurants on Thuisbezorgd.nl by location and cuisine type. Retrieve delivery times, ratings, fees, and menu details for restaurants across the Netherlands, with support for address lookup and cuisine filtering.
chownow.com API
Search for nearby restaurants, view their operating hours and delivery zones, and browse complete menus with all items, modifiers, and prices. Access detailed restaurant information and locations to find exactly what you're looking for on the ChowNow marketplace.
postmates.com API
Browse and search Postmates restaurants to discover menus, items, and detailed restaurant information all in one place. Get category suggestions, view complete menus, and access specific item details to find exactly what you're looking for.
resy.com, opentable.com API
Search and compare restaurants across Resy and OpenTable by cuisine, location, and price range, then sort results by price or ratings to find the best dining option. Retrieve comprehensive restaurant details including addresses, contact information, descriptions, and customer ratings all in one place.
rewe.de API
Search REWE online shop products with local delivery pricing by German postal code, browse the delivery catalog, and check whether delivery or pickup is available in a given area.