# Changelog of Deliveroo Restaurant & Menu Scraper (`teodor_banea/deliveroo-restaurant-menu-scraper`) Actor

- **URL**: https://apify.com/teodor_banea/deliveroo-restaurant-menu-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/teodor_banea/deliveroo-restaurant-menu-scraper.md

## Changelog

### 0.1.3 (2026-10-16)

- Listings dropped because the cap was filled while they were in flight are logged too.
- Status message grammar ("1 restaurant").
- Caps now stop the crawler. `maxItemsTotal`/`maxRestaurants` only stopped the dataset writes;
  every queued menu page was still downloaded (platform QA: 108 menus fetched for 30 billed rows).
- No more spurious `requestFailed` ERRORS for requests dropped while the run winds down after a cap.
- Memory: default 2048 MB (was 1024) and crawlee's HTML block detection is off — it parsed every
  13 MB menu page into a DOM and runs with 25+ menus were killed for memory.
- `RESTAURANTS` records are written with every menu (an abort or crash lost up to ten).
- New input `maxItemsPerRestaurant` (menus mode) and new restaurant column `closingText`.
- Listings dropped because an earlier listing filled the run-wide cap are now logged.
- Status message no longer blames "the listings" on runs that only had menu URLs.
- README: national brands on listings carry no rating/distance; bare menu URLs in menus mode;
  grocery pages are partial; caps are run-wide.

### 0.1.0 (2026-10-15)

- First release: Deliveroo listings (neighbourhood URLs or `latitude,longitude` locations) and menu pages on deliveroo.co.uk, .fr, .ae, .ie, .be, .it, .com.kw, .com.qa.
- `restaurants` mode: one row per restaurant (listing card fields; menu URLs add fees, minimum order, address, coordinates, hygiene rating, cuisine, phone, open state).
- `menus` mode: one row per orderable item with numeric prices, discounts, calories, dietary tags, availability, bundle savings and modifier groups with option prices; full restaurant records stored under `RESTAURANTS`.
- Menu URLs are always requested with `day=today&time=ASAP` (a bare menu URL is a Cloudflare 403) and `/en` on non-UK domains; location-less menu URLs are re-fetched from the restaurant's own pin so fees and minimum order are filled.
- Cloudflare challenge pages retire the session and retry on a new IP; tiered datacenter → residential proxy; terminal 400/401/404/410.
- Cap-slot reservation before every dataset write, state persisted after every page and on migration, restaurants deduplicated across listings, failed pages under `ERRORS`.
