Thuisbezorgd APIThuisbezorgd.nl ↗
Search Dutch restaurants by location, filter by cuisine, and retrieve delivery ETAs, fees, and ratings from Thuisbezorgd.nl via 4 structured API endpoints.
What is the Thuisbezorgd API?
The Thuisbezorgd.nl API provides 4 endpoints for finding restaurants and resolving addresses across the Netherlands. Starting with search_addresses and get_address_detail, you can resolve any Dutch address to GPS coordinates, then pass those to search_restaurants to retrieve nearby restaurant listings with cuisines, ratings, and delivery fees, or to get_restaurant_info for live ETAs, fee bands, and availability status.
curl -X GET 'https://api.parse.bot/scraper/638775b6-0f1b-4205-8f0e-1ce1f1971ac2/search_addresses?limit=5&query=Amsterdam' \ -H 'X-API-Key: $PARSE_API_KEY'
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 thuisbezorgd-nl-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.
"""Thuisbezorgd.nl: find restaurants by address, inspect delivery details."""
from parse_apis.thuisbezorgd_nl_restaurant_search_api import (
Thuisbezorgd, ServiceType, NotFound
)
client = Thuisbezorgd()
# Search for an address to get a place_id for coordinate resolution.
for addr in client.addresses.search(query="Damrak 1 Amsterdam", limit=3):
print(addr.description, addr.place_id)
# Resolve coordinates from the first address result.
first_addr = client.addresses.search(query="Amsterdam Centraal", limit=1).first()
if first_addr:
detail = first_addr.detail()
print(detail.formatted_address, detail.latitude, detail.longitude)
# Search restaurants delivering to those coordinates.
for restaurant in client.restaurants.search(
latitude="52.3676", longitude="4.9041", service_type=ServiceType.DELIVERY, limit=5
):
print(restaurant.name, restaurant.rating.score, restaurant.cuisines)
# Drill into one restaurant's operational info.
top = client.restaurants.search(latitude="52.3676", longitude="4.9041", limit=1).first()
if top:
try:
info = top.info(latitude="52.3676", longitude="4.9041")
print(info.delivery_eta.lower_bound_minutes, info.delivery_eta.upper_bound_minutes)
print(info.delivery_fees.currency, info.delivery_fees.minimum_order_value_cents)
except NotFound as exc:
print(f"restaurant gone: {exc}")
print("exercised: addresses.search / detail / restaurants.search / info")
Autocomplete address search for the Netherlands. Returns address suggestions with place IDs usable in get_address_detail to resolve coordinates. Paginates as a single page up to the limit.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results (1-20) |
| queryrequired | string | Address search query (e.g., 'Amsterdam', 'Damrak 1') |
{
"type": "object",
"fields": {
"query": "string echo of the search query",
"total": "integer count of returned addresses",
"addresses": "array of address suggestion objects with description, place_id, and type"
}
}About the Thuisbezorgd API
Address Resolution
The search_addresses endpoint accepts a free-text query and returns up to 20 address suggestions, each with a description, place_id, and type. Pass any of those place_id values to get_address_detail to retrieve a fully geocoded record including latitude, longitude, postcode, city, street, street_number, country_code, and a formatted_address string. These coordinates are the required inputs for both restaurant-facing endpoints.
Restaurant Search
search_restaurants takes latitude and longitude and returns a list of restaurants in the delivery area, along with total_found, the delivery_area postal code, and the active currency. Each restaurant object carries its id, name, slug, address, rating, cuisines array, and delivery metadata. An optional cuisine parameter filters results (e.g., 'Indian', 'Pizza', 'Chinese'), and service_type can be set to 'delivery' or 'collection' to narrow service availability.
Restaurant Detail
get_restaurant_info accepts a restaurant_id from search results plus delivery coordinates. It returns a rating object with average_stars and review count, a delivery_eta range in minutes (lower_bound_minutes, upper_bound_minutes), and a delivery_fees object that includes minimum_order_value_cents, currency, and a fee_bands array for tiered fee structures. The response also includes is_busy, is_temporarily_offline, service_types with per-type offline flags, and max_basket_items.
Coverage and Scope
All endpoints target the Dutch market exclusively — Thuisbezorgd.nl operates in the Netherlands only. Address lookups resolve Netherlands addresses; restaurant results are scoped to Dutch delivery zones. No menu item data or order-placement endpoints are included in the current API.
The Thuisbezorgd API is a managed, monitored endpoint for Thuisbezorgd.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when Thuisbezorgd.nl 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 Thuisbezorgd.nl 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?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a restaurant finder app that maps nearby delivery options using coordinates from get_address_detail
- Compare delivery ETAs and fee bands across multiple restaurants in a given Amsterdam postcode
- Filter restaurants by cuisine type (e.g., 'Chinese', 'Pizza') to populate category-specific dining feeds
- Monitor restaurant availability and busy status in real time using is_busy and is_temporarily_offline fields
- Aggregate ratings and review counts from search_restaurants to rank top-rated takeaway options in a neighbourhood
- Validate Dutch delivery addresses and extract structured postcode and city data via get_address_detail
- Determine minimum order thresholds and tiered delivery fees for cost-comparison tools using delivery_fees fee_bands
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 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.