# Changelog of Restaurant Discovery API by City (`quiago/restaurant-discovery-api`) Actor

- **URL**: https://apify.com/quiago/restaurant-discovery-api/changelog.md
- **Full Actor documentation**: https://apify.com/quiago/restaurant-discovery-api.md

## Changelog

All notable changes to this Actor are documented here.
This project follows [Keep a Changelog](https://keepachangelog.com/) and
[Semantic Versioning](https://semver.org/).

### \[0.3.0] - 2026-05-16

#### Fixed

- **Startup crash, properly.** Root cause: the old build pinned
  `apify>=2.0,<3`, pulling an old `crawlee` whose
  `HttpHeaders(RootModel, Mapping[str,str])` is incompatible with the newer
  `pydantic` in the image (`cannot specify both default and
  default_factory`). Now `apify==3.4.0` is pinned, forcing a consistent
  `crawlee 1.7 + pydantic 2.13` set. Reproduced and verified locally
  (`make actor-smoke`, `make docker-import`).

#### Added

- Empty-result runs now **fail loudly** with an actionable message
  (datadome/residential-proxy) instead of silently succeeding with an
  empty dataset.

### \[0.2.0] - 2026-05-16

#### Fixed

- **Startup crash** `TypeError: cannot specify both default and
  default_factory` (pydantic/crawlee). The Actor no longer reinstalls
  `apify`/`crawlee`/`pydantic` over the base image — it uses the mutually
  compatible versions the base image already ships.

#### Changed

- **Zero-config friendly.** `query` defaults to `Dubai` and `maxItems`
  defaults to `100`, so a run with no input returns 100 restaurants.
- Added **Get ALL results** toggle (`getAllResults`) that ignores
  `maxItems` and fetches the entire geo (auto-partitioned).

### \[0.1.0] - 2026-05-16

First public release.

#### Added

- **Search by city / country / municipality name or by TripAdvisor `geoId`.**
  Names are resolved to a `geoId` automatically and cached.
- **Full restaurant record** per item: name, URL, rating, review count, phone,
  full address, postal code, country, parent geo, coordinates, price range,
  menu URL, cuisines, establishment types, weekly schedule, open status,
  delivery / reservation flags, sponsored / premium flags, traveler award,
  thumbnail and review snippets.
- **Optional full reviews** (`withReviews`, `reviewsLimit`): rating, title,
  text, dates, trip type, reviewer profile, per-aspect ratings and the
  owner's management response.
- **Beyond TripAdvisor's ~10,000-per-geo cap.** When a geo exceeds the cap the
  Actor recursively partitions it by facets (neighbourhoods → cuisines → …)
  with global de-duplication by `location_id`, so large cities/countries are
  fully covered.
- **Output filters applied before review enrichment**: `includeSponsored`,
  `minRating`, `minReviews`, `onlyOpenNow` — no units wasted on discarded rows.
- **Anti-blocking**: a real browser warms the session (solves the datadome
  challenge), then fast HTTP pagination reuses it, with rate limiting,
  exponential backoff (honoring `Retry-After`) and session rotation.
- **Proxy support** wired to both the browser and HTTP layers (same
  fingerprint and IP per session). Apify Residential proxies recommended.
- One item per restaurant pushed to the default dataset; `overview` dataset
  view for a clean tabular display.

#### Known limitations

- Headless runs from datacenter IPs are challenged by TripAdvisor's anti-bot.
  **Use Apify Residential proxies** (prefilled in the input).
- `maxItems` caps the number of restaurants *fetched*; output filters then
  reduce the final count — raise `maxItems` if you need N rows *after*
  filtering.
- TripAdvisor returns at most ~10,000 results per geo before partitioning;
  partition coverage depends on the facets the site exposes for that geo.
