Find products by ingredients and nutrition
find_productsRead-onlyIdempotent
Find products that meet ingredient, nutrition, alcohol or offer conditions, optionally sorted. For questions like "biscuits without palm oil", "nut-free snacks at Tesco", "vegan chocolate", "cereal with the least sugar", "high protein yoghurt", "bread with the fewest ingredients", "alcohol-free beer", "low salt soup" or "cheapest olive oil at Aldi". Every product comes with its nutrition, ingredients, ingredient count and today's price. Fibre and saturated fat are not recorded.
Ingredient words. exclude_ingredients are ingredients a product is free
of; include_ingredients ones it contains. These words are expanded to the
label terms they cover: palm oil, nuts (includes peanuts), peanuts, gluten,
milk (dairy), eggs, soya, sesame, mustard, celery, fish, crustaceans,
molluscs, shellfish, sulphites, lupin, gelatine, alcohol, added sugar,
sweeteners, pork, meat, vegetarian (meat, fish, gelatine and other
animal-derived ingredients) and vegan (vegetarian plus milk, eggs, honey and
other animal products). Any other word is matched as written, e.g.
"coconut" or "oats".
With no store, results alternate across the stores (each store's best
match, then each store's next), and matched_by_store gives each store's
full count.
A product whose ingredient list or nutrition is not on record, or whose
ingredient list on record is incomplete, is left out, never assumed to
pass: left_out_unknown counts them, left_out_by_reason gives the reasons,
and caveats lists known gaps (Aldi's ingredient lists are often cut short,
so Aldi products are not offered as free from anything). Claims printed in
a product's NAME, such as "gluten free", "lactose free", "alcohol free" or
"vegan", are matched through query; exclude_ingredients also checks the
ingredients. Alcohol strength is recorded for most SuperValu and Dunnes
drinks but few at Tesco and Aldi; "alcohol free" and "0.0" in query match
drinks named that way.
Answers come from the ingredient lists and nutrition the retailers publish.
"Free from" means none of the listed ingredients names it; not every
"may contain" warning is covered. Results carry a note that this is information
only. Each product returned costs one credit.
Args:
query: product words, e.g. "biscuits", "crisps", "dark chocolate".
Needed unless category is given.
store: aldi, tesco, supervalu or dunnes. Leave out to search all four.
category: an aisle name to narrow by, e.g. "Breakfast Cereals".
exclude_ingredients: ingredients a product has to be free of, e.g.
["palm oil"], ["nuts", "sesame"], ["vegan"].
include_ingredients: e.g. ["oats"].
max_sugar_g, max_salt_g, max_fat_g, max_carbs_g, min_protein_g:
grams per 100g or 100ml, e.g. max_sugar_g=5.
max_kcal: kilocalories per 100g or 100ml.
max_abv, min_abv: alcohol by volume, percent.
max_ingredients: at most this many listed ingredients, e.g. 5. A
compound ingredient's own bracketed list counts as one.
on_offer: only products on promotion or with a Clubcard price.
sort_by: price, unit_price (per kg or litre), sugar, salt, fat, carbs,
protein, kcal, abv or ingredients (fewest first). Products that
are the kind of thing searched for rank ahead of name-only matches
(name_match_only), so "chocolate" sorted by price does not lead
with chocolate-flavour popcorn.
descending: true for highest first, e.g. most protein.
limit: most products to return (default 10, max 50).
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| store | No | ||
| max_abv | No | ||
| min_abv | No | ||
| sort_by | No | ||
| category | No | ||
| max_kcal | No | ||
| on_offer | No | ||
| max_fat_g | No | ||
| descending | No | ||
| max_salt_g | No | ||
| max_carbs_g | No | ||
| max_sugar_g | No | ||
| min_protein_g | No | ||
| max_ingredients | No | ||
| exclude_ingredients | No | ||
| include_ingredients | No |
Output Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | ||
| as_of | No | Price date, YYYY-MM-DD | |
| caveats | No | Limits of this answer: pass them on | |
| matched | No | Products that passed every filter | |
| products | No | ||
| considered | No | Products the search looked at | |
| left_out_unknown | No | Left out because the ingredients, nutrition or value a filter or sort needs is not on record for them, or the ingredient list is incomplete | |
| matched_by_store | No | How many products passed at each store (more than are returned) | |
| left_out_by_store | No | ||
| left_out_by_reason | No | Why products were left out, with counts |