pp_search
Search supermarket offers across 10 Dutch chains by product, category, retailer, price, or promotion status to find active, upcoming, or shelf prices.
Instructions
Search supermarket offers across the 10 Dutch chains (Albert Heijn, Aldi, DekaMarkt, Dirk, Ekoplaza, Hoogvliet, Jumbo, Lidl, PLUS, Vomar).
Omit q or pass * to browse the whole catalogue.
How to read a row: promotion_status decides what the price means. active = on offer right now, upcoming = starts next week, shelf = the regular price, historical = the last price seen, up to 60 days old.
Taking the lowest price across rows can therefore return a price nobody is charging today — filter on promotion_status (or leave current_only-style filtering to the caller) before quoting a best price.
Retailer slugs: albert_heijn, jumbo, aldi, lidl, ekoplaza, plus, dekamarkt, hoogvliet, vomar, dirk.
Category slugs are not free text: call pp_get_categories first to map the user's word to a slug.
Keep page_size modest; page through rather than asking for 100 rows when a question needs 3.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (use * to browse all) | |
| page | No | Page number | |
| dietary | No | Comma-separated dietary tags: bio, glutenvrij, lactosevrij, vegan | |
| sort_by | No | Sorteerveld, optioneel met richting: `veld` of `veld:asc` / `veld:desc`. Toegestaan: price, savings_percentage, product_id, savings_amount, original_price, discount_percentage, extracted_at, valid_until. | |
| category | No | Filter by unified category slug (e.g., groente-fruit, zuivel-eieren) | |
| retailer | No | Filter by retailer (aldi, albert_heijn, jumbo, lidl) | |
| max_price | No | Maximum price | |
| min_price | No | Minimum price | |
| page_size | No | Results per page | |
| min_savings | No | Minimum savings percentage (0-100) | |
| private_label | No | Filter on the retailer's own house brand: true for huismerken only, false for A-merken only. Omit for no filter. A chain with no reliable brand signal (Lidl, Vomar) carries no rows on either side of this filter, rather than a guessed one. | |
| promotion_type | No | Filter by promotion type: percentage, multi_buy, one_plus_one, volume, limited, starting | |
| promotion_status | No | Filter by status: active, upcoming, or expired | |
| include_all_retailers | No | Ignore the caller's stored retailer preference and search every retailer. Only meaningful for browser callers carrying a `pp_uid` cookie — an API-key caller has no stored preference, so this is a no-op for integrations. |