Piotr VassevPiotr Vassev

How to Compare Just Eat Restaurants and Menus by Postcode

A restaurant with a low delivery charge may still be a poor match for a small order if its minimum basket is high. Compare delivery cost, order minimum, and availability together before adding menu prices.

The Just Eat Scraper collects Just Eat UK restaurants by postcode and can include nested menus. I maintain it. Here we will review twenty restaurants serving central Manchester, then prepare a menu comparison without mixing restaurant and item rows.

How to Compare Just Eat Restaurants and Menus by Postcode

Start with one delivery area

The Actor runs on Apify without a Just Eat login. It covers just-eat.co.uk. Supply a full UK postcode or an outcode such as M1; an outcode is a broad discovery area, so confirm the final delivery address before relying on a checkout quote.

Open Input in JSON view:

{
  "postcodes": ["M1"],
  "scrapeMenus": false,
  "maxItems": 20,
  "proxyConfiguration": {"useApifyProxy": false}
}

Keep postcodes explicit. An empty list uses a built-in set of major UK cities instead of doing nothing. maxItems caps unique restaurants across all postcodes, and zero means unlimited. Overlapping postcode results are deduplicated.

Click Start and inspect the dataset. scrapedFromPostcode preserves discovery context, but one deduplicated restaurant row is not a complete list of every postcode it serves.

Compare a realistic order

The documented restaurant record groups its fields:

{
  "rating": {"average": 4.5, "count": 1200, "stars": 4.5},
  "cuisines": ["Burgers", "American"],
  "delivery": {
    "cost": 0.99,
    "minimumOrderValue": 10,
    "isFree": false,
    "etaMinutesLower": 15,
    "etaMinutesUpper": 30
  },
  "isOpenNow": true
}

This is a shortened README example, not a current Manchester quote. For an illustrative £8 food basket, the £10 minimum means the order does not yet qualify, even though delivery is only £0.99. For a £12 basket, adding that delivery charge gives £12.99 before any other checkout fees. Keep the qualifying basket and unverified fees visible rather than ranking by delivery price alone.

Export restaurant data as CSV with id, name, url, scrapedFromPostcode, cuisines, rating average and count, the delivery fields, and isOpenNow. Filter to the cuisine of interest, then flag minimum orders above your intended basket. Keep ETA as a lower and upper estimate, not an exact arrival time.

Just Eat restaurant dataset with delivery information

Earlier Just Eat output illustrates restaurant-level fields before menu items are flattened.

Add menus and flatten them carefully

Change scrapeMenus to true for a small postcode run when you need menu items. There is no direct restaurant-ID input in the current schema, so the Actor cannot simply enrich an arbitrary list of selected IDs. Discovery may change between runs; match results by id.

Export JSON to retain menu.categories[].items[] and item variations. Create a separate item table containing restaurant ID, category ID/name, item ID/name, and basePrice. Keep restaurant delivery charges in the restaurant table, not repeated as part of every item price.

A menu's basePrice may not describe a fully configured order. Inspect each variation's modifierGroups, including minChoices, maxChoices, and option additionPrice, before comparing a named meal. A required size or paid extra can change the total; an optional “remove cheese” choice with zero cost should not.

Compare matching portion sizes and configurations. Missing nutrition is unknown, and item count is not evidence that every menu option is available at every time.

Know which event each row charges

Pricing as of September 6, 2026: a restaurant without a returned menu costs $0.002; a record with a menu costs $0.01. These are alternative row events. Twenty listing-only rows cost $0.04, while twenty successful menu rows cost $0.20, plus the Actor-start charge of $0.00005 per GB of allocated memory, minimum one event.

If menu retrieval fails or no menu is available, the row can use the listing event. Check current pricing and the run's event breakdown rather than assuming every requested menu succeeded.

Before repeating a comparison, store the run time with your export and use the same postcode and approximate time of day. isOpenNow, delivery cost, offers, and ETA are observations that can change. Check the source page before treating a missing menu as a permanently closed restaurant.

The Node.js example shows how to run this Actor from code and retrieve its dataset.

Frequently asked questions

Are listing and menu charges added together?

No. A restaurant row is charged as a listing without a menu or as a menu-detail record with a menu. Actor-start charges are separate.

How should I flatten menu items?

Create an item table from menu.categories[].items[] with restaurant, category, and item IDs. Keep variations and modifier choices available, and do not fold restaurant delivery fees into each item’s basePrice.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn