Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "best_deals", "price_basket" and "price_basket_over_time"
⟨56 unchanged words⟩ a deal. The biggest saving comes first,andagainst the usual price or the price it typically sold at, whichever is less, so a product that is usually on offer does not lead. By that saving, the shopsaretakemixedturns among deals that save alike, so one shop doesnot fill the top of thelist.list,Everyand no deal comes ahead of one that saves more than twice as much. Every promotion on sale is judged, so thiscovers them all, and offset reachesevery deal. Covers food, drinks,alcohol, household, baby and petproducts unless another aisle is named.Tobacco, infant formula andmedicines are never included. Args: query: words in the product's name or brand, e.g. "coffeeheinz" or"heinzbaileys": a product or a brand, never an aisle (few wines have the word wine in their name). category: an aisle or shelf, e.g. "frozen", "household" or"toiletries". "alcohol" is every drink above 0.5% ABV at the five chains, low-alcohol ones included. "alcohol free" is the drinks of 0.5% ABV or less: by the strength on record, by a name that says alcohol free, non-alcoholic, 0.0 or de-alcoholised, or, with no strength on record, by a shelf that says so (a shop's shared "low and no" shelf alone does not count); "low and no" adds the low-alcohol drinks on those shelves. The drinks aisles are "wine", "beer", "cider", "spirits" (liqueurs included), "liqueurs" and "premixes" (alcopops and canned cocktails), or a list such as "beer and cider". Together they hold all of "alcohol" but a drink whose shelf, name, type and strength place it in none of them, such as a beer shelved only under a shop's whole drinks department with only its brand for a name. "drinks" is every drink, alcohol included; "soft drinks" leaves alcohol out. store: one of "aldi", "tesco" ⟨73 unchanged words⟩ it: kind, lowest_since, low_before, low_before_date, offer_start, run_start, days_on_offer, started_today, cut_today, yesterday_price, back_after_days, typical_price, offer_share andstarted_today.abv. started_today is true only for an offer that began on the collection day; an offer running for weeks whose price fell that day has cut_today instead, and offer_start says since when it has been on offer. One credit per deal returned.
{"$defs":{"Deal":{"additionalProperties":true,"properties":{"abv":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Alcohol by volume in percent, as the product's record has it. Empty when none is stated, and when the record cannot be right: over 100, over what a drink of its aisle reaches, or over 0.5 for a drink named alcohol free","title":"Abv"},"back_after_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"For an offer that began on the collection day: the days with no offer right before it, 14 or more, after an earlier offer. Given only when the whole break is on the price record, so it is never a guess","title":"Back After Days"},"buy_quantity":{"default":1,"description":"How ⟨54 unchanged words⟩ this product","title":"Category"},"cut_today":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when the price fell on the collection day on an offer that was running the day before too","title":"Cut Today"},"days_on_offer":{"anyOf":[{"type":"integer ⟨2 unchanged words⟩ }],"default":null,"description":"Daysatonthisofferpricewithoutoralowerbreak from offer_start to the collection day,todayboth included","title":"Days On Offer"} ⟨146 unchanged words⟩ end","title":"Offer Ends"},"offer_share":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"The share of those 90 days it was on any offer, from 0 to 1","title":"Offer Share"},"offer_start":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"On offer since: the first day of the unbroken run of days on any offer, shelf or card price, that reaches the collection day, YYYY-MM-DD. The price can have changed during it","title":"Offer Start"},"
⟨16 unchanged words⟩ when known","title":"Barcode"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"How many items in the pack, when not in name, e.g. 12 for a dozen eggs, 6 for a six pack. Not how many packs were bought: that is quantity","title":"Count"},"name":{"anyOf":[{"type":"string"}, ⟨9 unchanged words⟩ in plain words, e.g. 'avonmore fresh milk 2l', '12 eggs', 'dozen eggs'","title":"Name"},"paid":{ ⟨27 unchanged words⟩ ","title":"Quantity","type":"number"},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The pack size wanted, when not in name, e.g. '2L', '500g': chooses that size at each store","title":"Size"},"sku":{"anyOf":[{"type ⟨73 unchanged words⟩
⟨71 unchanged words⟩ BasketLine":{"additionalProperties":true,"properties":{"asked":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"The size or count the line asked for, read from its name or its size and count: {'size': '2 L'}, {'count': 12}, {'count': 6, 'each': '330 ml'}","title":"Asked"},"
⟨16 unchanged words⟩ when known","title":"Barcode"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"How many items in the pack, when not in name, e.g. 12 for a dozen eggs, 6 for a six pack. Not how many packs were bought: that is quantity","title":"Count"},"name":{"anyOf":[{"type":"string"}, ⟨9 unchanged words⟩ in plain words, e.g. 'avonmore fresh milk 2l', '12 eggs', 'dozen eggs'","title":"Name"},"paid":{ ⟨27 unchanged words⟩ ","title":"Quantity","type":"number"},"size":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The pack size wanted, when not in name, e.g. '2L', '500g': chooses that size at each store","title":"Size"},"sku":{"anyOf":[{"type ⟨91 unchanged words⟩
Authorization not required, issuer https://basketwatchireland.com
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "best_deals" and "price_basket"
⟨91 unchanged words⟩ offset reaches every deal. Covers food, drinks, alcohol, household, baby and pet products unless another aisle is named.AlcoholisTobacco, infant formula and medicines are never included. Args: query: words in the ⟨112 unchanged words⟩
⟨102 unchanged words⟩ ,"matched":{"$ref":"#/$defs/BasketMatch"},"pack_differs":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True when this was priced at another pack size than the one the line asked for","title":"Pack Differs"},"
Added "best_deals"; changed the definition of "get_promotions" (17 tools before, 18 now)
List products currently on promotion at a givensupermarket.supermarket, the biggest saving the shop states first. Every promotion can be reached: each call returns one page, and offset moves through the whole list. Returns offer label (e.g. "3 for €5 ⟨58 unchanged words⟩ limit: how many promotional rows to return in one page (default 25, max 200). offset: how many rows to skip, for the next page (default 0). A page shorter than limit is the last one.
⟨5 unchanged words⟩ ":"Limit","type":"integer"},"offset":{"default":0,"title":"Offset","type":"integer"},"store":{"title":"Store","type": ⟨7 unchanged words⟩
Changed the definition of "compare_prices", "find_products", "lookup_barcode" and 1 more
⟨134 unchanged words⟩ }, "cheapest_store"}]}. A store missingfrom "prices"doesdid notstockhave thatproduct.product in its online range today and may still sell it in store: say "not found online", not that the store lacks it. offer_ends is the last day an offer applies ⟨18 unchanged words⟩
⟨41 unchanged words⟩ dunnes, lidl); a store missing heredoesdid
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "compare_prices", "find_products", "get_promotions" and 1 more
⟨126 unchanged words⟩ price, unit_price, unit_basis, offer_text, was_price, offer_ends, clubcard_price, url}}, "cheapest_store"}]}. A store missingfrom "prices"does not stock that product. offer_ends is the last day an offer applies (Irish time): say when an offer ends, as online orders are priced for the delivery or collection day.
⟨133 unchanged words⟩ lists it","title":"Name"},"offer_ends":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last day the offer applies, YYYY-MM-DD, Irish time, where the retailer states it","title":"Offer Ends"},"offer_text":{"anyOf":[{"type":"string
Authorization not required, issuer https://basketwatchireland.com
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "price_movements"
⟨129 unchanged words⟩ at the same price is a hidden rise).;on_promotion_both_dateswas_price_changemarksisaanshelfofferchangerunninginat boththedateslabel'swhile only its
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "find_products" and "get_product_details"
⟨212 unchanged words⟩ reasons, and caveats lists known gaps (Aldi's own ingredient lists are often cutshort,soAldianproductsAldiareproductnotis offered as free fromanythingsomething only when its full list comes from the same barcode at Tesco, SuperValu or Dunnes). Claims printed in a product's NAME, ⟨50 unchanged words⟩ the ingredient lists and nutrition the retailers publish.
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "compare_prices", "find_products", "get_price_history" and 4 more
⟨32 unchanged words⟩ , offers and member prices (Tesco Clubcard, SuperValu Real Rewards, Lidl Plus). To list the products most ⟨96 unchanged words⟩
⟨84 unchanged words⟩ null"}],"default":null,"description":"Member price where one applies: Tesco Clubcardprice,TescoSuperValuonlyReal Rewards or Lidl Plus","title":"Clubcard Price"},"id" ⟨152 unchanged words⟩
Changed the definition of "compare_prices" and "lookup_barcode"
⟨34 unchanged words⟩ member prices (Tesco Clubcard, Lidl Plus). To list the products most stores stock, leave out query and set min_stores, e.g. min_stores=5 for every product matched at all five. Free: no BasketWatch account needed. Args: query: the product, e.g. "heinz ketchup" or "kerrygold butter 454g". Optional when min_stores is given. limit: how many matched products to return (default 5, max2050). min_stores: only products matched at at least this many stores, 2 to 5, with or without query. Returns {"as_of", "query", "matches ⟨17 unchanged words⟩ from "prices" does not stock that product.One product per call.
Changed the definition of "lookup_barcode"
⟨9 unchanged words⟩ EAN or UPC) at Aldi, Tesco, SuperValuand, Dunnes Storesin one call. Lidl publishes no barcodes, soand Lidlproducts are found by name, notinbyonebarcode.call. Codes are accepted exactly as printed: leading ⟨35 unchanged words⟩ ", "tesco", "supervalu", "dunnes" or "lidl". Use "lidl" for retailer-local Lidl codes. include_copy: also return ingredients and per-100g nutrition where the retailer publishes them. lidl_store_id: optionally select an Irish Lidl scanner store such as "IE0239"; prices and scanner observations then refer to that store.
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "compare_price_across_stores", "compare_prices", "find_products" and 12 more
Raw per-store search results for a product name at allfourfive supermarkets: every matching line at each store, ⟨44 unchanged words⟩
⟨9 unchanged words⟩ the same product at Aldi, Tesco, SuperValuand, Dunnes Stores and Lidl and returns each store'scurrentcurrent
Certificate recorded, valid to 2026-12-22
Authorization not required, issuer https://basketwatchireland.com
Changed the definition of "get_price_history"
⟨13 unchanged words⟩ night's price at all four supermarkets since May2026.2026, and, with with_nutrition_and_ingredients, each day's nutrition per 100g or 100ml and ingredients list as the retailer's own data stated them, kept since 16 October 2026: for questions like "has the sugar in Frosties changed". Takes product ids (as returned in product ⟨165 unchanged words⟩ return in total (default and maximum 200). with_nutrition_and_ingredients: true adds nutrition_per_100 to every row and the ingredients list on each product's first day and on any day it changed. Days before 16 October 2026 have none. Returns rows (id, name, store, scrape_date ⟨11 unchanged words⟩
⟨62 unchanged words⟩ "default":null,"title":"To Date"},"with_nutrition_and_ingredients":{"default":false,"title":"With Nutrition And Ingredients","type":"boolean"}
Changed the definition of "find_products", "get_price_history" and "get_product_details"
⟨260 unchanged words⟩ ingredients. Alcohol strength is recorded for most SuperValuand, Dunnes and Tesco drinks but few atTesco andAldi; "alcohol free" and "0.0" in ⟨326 unchanged words⟩
⟨17 unchanged words⟩ percent","title":"Alcohol Abv"},"alcohol_abv_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the strength came from: the retailer's own listing, worked out from its alcohol units per bottle or can, or the same barcode at another store","title":"Alcohol Abv Source"},"allergy_advice":{"anyOf":[{"type":"string ⟨727 unchanged words⟩
Changed the definition of "find_products" and "get_product_details"
⟨381 unchanged words⟩ nuts", "sesame"], ["vegan"]. A product whose allergy advice says it contains or may contain one is left out too, and counted in left_out_may_contain. include_ingredients: e.g. ["oats"]. max_sugar_g, ⟨198 unchanged words⟩
⟨17 unchanged words⟩ percent","title":"Alcohol Abv"},"allergy_advice":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The retailer's allergy advice: what the product contains and may contain, e.g. 'May contain: Nuts.'","title":"Allergy Advice"},"brand":{"anyOf":[{"type":"string ⟨166 unchanged words⟩ null"}],"default":null,"description":"CountryEveryofcountry
Changed the definition of "find_products" and "get_product_details"
⟨52 unchanged words⟩ comes with its nutrition, ingredients, ingredient count, country of origin where stated andtoday's price. Fibre and saturated fatare not recorded. Ingredient words. exclude_ingredients are ingredients ⟨354 unchanged words⟩ products on promotion or with a Clubcard price. origin: country of origin, e.g. "Ireland" (or "Irish"); several may be given comma-separated. A product matches only when every country its label states is one asked for: "Made in Ireland" with "EU chicken" is not Irish chicken, and is counted in left_out_partly_from_origin. Northern Ireland answers for Ireland (one island, one Bord Bia scheme), not the other way round. Products with no stated origin are counted in left_out_unknown, not returned. A provenance word in the query works too: "Irish honey" searches honey from Ireland. sort_by: price, unit_price (per kg or ⟨57 unchanged words⟩
Changed the definition of "check_credits"
How many BasketWatch credits the signed-in account hasleft.left, and when they expire. Free to call.One credit is one record returned.
⟨17 unchanged words⟩ returned","title":"Credits Remaining"},"expiring":{"description":"Credits still to expire, soonest first: credits, expires_at (UTC) and bought_at. Credits last 30 days from purchase and the soonest to expire are spent first","items":{"additionalProperties":true,"type":"object"},"title":"Expiring","type":"array"},"metered":{"anyOf":[{"type":"boolean ⟨10 unchanged words⟩ per record from credits","title":"Metered"},"never_expires":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Credits bought before 15 October 2026, which do not expire","title":"Never Expires"},"next_expiry":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"When the next credits expire (UTC), or null","title":"Next Expiry
Unknown → Live
First tool surface recorded: 17 tools (server version 1.27.1)
https://basketwatchireland.com/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 29 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Best real deals today — Today's real deals at Aldi, Tesco, SuperValu, Dunnes Stores and Lidl: offers at the lowest price on record for that product at that shop, or the first offer it has ever had. Each is measured against the product's own price history, not the shop's was price, so a recurring or long-running price does not count as a deal. The biggest saving comes first, and the shops are mixed so one shop does not fill the top of the list. Every promotion on sale is judged, so this covers them all, and offset reaches every deal. Covers food, drinks, household, baby and pet produc…
⟨689 unchanged words⟩ to return (default 10, max 50).When a search excludes an allergen, every product carries allergy_check. Show that line with every product you mention, word for word.
⟨66 unchanged words⟩ "supervalu", "dunnes" or "lidl".Use "lidl" for retailer-local Lidl codes.include_copy: also return ingredients and per-100g nutrition where the retailer publishes them.lidl_store_id: optionally select an Irish Lidl store such as "IE0239"; prices and store observations then refer to that store.Returns {"products": [...], "not_found ⟨27 unchanged words⟩ stock it; codes with no match cost nothing.Lidl results not linked to a catalogue product have id=null, catalog_linked=false and dated store observations; ingredients, pack size and nutrition are not inferred.
⟨10 unchanged words⟩ "Include Copy","type":"boolean"},"lidl_store_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lidl Store Id"},"store":{"anyOf":[{"type":"string ⟨12 unchanged words⟩
⟨215 unchanged words⟩ :"Keyed by store; a store missing heredoesdid notstockhave this product in its online range today (it may still sell it in store)","title":"Prices","type":"object ⟨158 unchanged words⟩ ,"default":null,"description":"Matched items not found in thisstorestore'sdoesonlinenotrangestocktoday (it may still sell them in store)","title":"Items Missing"},"items_priced" ⟨50 unchanged words⟩ ,"description":"The cheapest store among thosestockingwith every matched item found in its online range today","title":"Cheapest Complete Store"}," ⟨182 unchanged words⟩
⟨275 unchanged words⟩ 100g, or per 100ml for drinks"},"offer_ends":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last day the offer applies, YYYY-MM-DD, Irish time, where the retailer states it","title":"Offer Ends"},"offer_text":{"anyOf":[{"type":"string ⟨575 unchanged words⟩
⟨16 unchanged words⟩ "SAVE €0.75"), was-price, validity window, offer_ends (the last day the offer applies, Irish time), and where applicable Tesco Clubcard prices, SuperValu Real ⟨46 unchanged words⟩
⟨12 unchanged words⟩ ":"Name","type":"string"},"offer_ends":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last day the offer applies, YYYY-MM-DD, Irish time, where the retailer states it","title":"Offer Ends"},"offer_text":{"anyOf":[{"type":"string ⟨84 unchanged words⟩
⟨298 unchanged words⟩ lists it","title":"Name"},"offer_ends":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Last day the offer applies, YYYY-MM-DD, Irish time, where the retailer states it","title":"Offer Ends"},"offer_text":{"anyOf":[{"type":"string ⟨318 unchanged words⟩
⟨27 unchanged words⟩ ":"shelf_rise, shelf_fall, promotion_started, promotion_ended, loyalty_change, pack_change orpack_changewas_price_change","title":"Kind","type":"string ⟨348 unchanged words⟩
⟨189 unchanged words⟩ short","title":"Ingredients Incomplete"},"ingredients_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the ingredient list came from: the retailer, the same product (same barcode) at another retailer, or Open Food Facts","title":"Ingredients Source"},"name":{"title":"Name","type": ⟨631 unchanged words⟩
⟨291 unchanged words⟩ absent","title":"Ingredients Incomplete"},"ingredients_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the ingredient list came from: the retailer, the same product (same barcode) at another retailer, or Open Food Facts","title":"Ingredients Source"},"name":{"title":"Name","type": ⟨229 unchanged words⟩
⟨481 unchanged words⟩ or with a member price (Tesco Clubcard, SuperValu Real Rewards, Lidl Plus). origin: country of origin, ⟨143 unchanged words⟩
⟨102 unchanged words⟩ null"}],"default":null,"description":"Member price where one applies: Tesco Clubcardprice,TescoSuperValuonlyReal Rewards or Lidl Plus","title":"Clubcard Price"},"id" ⟨705 unchanged words⟩
⟨95 unchanged words⟩ null"}],"default":null,"description":"Tesco ClubcardMember price that day: Tesco Clubcard, SuperValu Real Rewards or Lidl Plus","title":"Clubcard Price"},"id" ⟨285 unchanged words⟩
⟨254 unchanged words⟩ null"}],"default":null,"description":"Member price where one applies: Tesco Clubcardprice,TescoSuperValuonlyReal Rewards or Lidl Plus","title":"Clubcard Price"},"id" ⟨260 unchanged words⟩ "default":null,"title":"Saving Vs Paid"},"supervalu_real_rewards_total":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"SuperValu total using Real Rewards prices where SuperValu has one","title":"Supervalu Real Rewards Total"},"tesco_clubcard_total":{"anyOf":[{"type ⟨56 unchanged words⟩
⟨168 unchanged words⟩ null"}],"default":null,"description":"Member price where one applies: Tesco Clubcardprice,TescoSuperValuonlyReal Rewards or Lidl Plus","title":"Clubcard Price"},"date" ⟨294 unchanged words⟩
⟨15 unchanged words⟩ rises and falls, promotions starting and ending, member price changes (Tesco Clubcard,priceSuperValuchangesReal Rewards, Lidl Plus) and pack-size changes, kept apart, with a ⟨60 unchanged words⟩ a 27.8% price rise); loyalty_change is aClubcardmember price moving; pack_change is the same product in ⟨156 unchanged words⟩
⟨195 unchanged words⟩ null"}],"default":null,"description":"Member price where one applies: Tesco Clubcardprice,TescoSuperValuonlyReal Rewards or Lidl Plus","title":"Clubcard Price"},"date" ⟨170 unchanged words⟩
⟨103 unchanged words⟩ null"}],"default":null,"description":"Loyalty-cardMember price changes,: TescoonlyClubcard, SuperValu Real Rewards or Lidl Plus","title":"Clubcard Changes"},"clubcard_changes_total" ⟨128 unchanged words⟩
⟨88 unchanged words⟩ them. lidl_store_id: optionally select an Irish Lidlscannerstore such as "IE0239"; prices andscannerstore observations then refer to that store. Returns { ⟨30 unchanged words⟩ stock it; codes with no match cost nothing.UnlinkedLidlscannerresults not linked to a catalogue product have id=null, catalog_linked=false,andtimestampeddated storeobservations; ingredients, pack size and nutrition are notinferred.
⟨10 unchanged words⟩ "Include Copy","type":"boolean"},"lidl_store_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Lidl Store Id"},"store":{"anyOf":[{"type":"string ⟨12 unchanged words⟩
⟨36 unchanged words⟩ by store (aldi, tesco, supervalu, dunnes, lidl); a store missing here does not stock ⟨198 unchanged words⟩
⟨268 unchanged words⟩ , Dunnes and Tesco drinks but few atAldi;Aldi or Lidl; "alcohol free" and "0.0" in querymatchmatch drinks named that way. Answers come from the ⟨51 unchanged words⟩ category is given. store: aldi, tesco, supervalu, dunnes ordunnes.lidl. Leave out to search allfour.five. category: an aislenameor shelf to narrow by, e.g. "Breakfast Cereals" or "Kefir". A store with no aisle or shelf of that name is searched by product name instead, and caveats say so. exclude_ingredients: ingredients a product has to be ⟨76 unchanged words⟩ : only products on promotion or with a member price (Tesco Clubcard,price.Lidl Plus). origin: country of origin, e.g. "Ireland" ⟨141 unchanged words⟩
⟨314 unchanged words⟩ in euro","title":"Price"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"store":{"anyOf":[{"type":"string ⟨469 unchanged words⟩
⟨8 unchanged words⟩ range. BasketWatch has kept every night's price atallAldi,fourTesco,supermarketsSuperValu and Dunnes Stores since May 2026 and at Lidl since 17 October 2026, and, with with_nutrition_and_ingredients, each day's nutrition ⟨159 unchanged words⟩ product_ids are given. store: aldi, tesco, supervalu, dunnes ordunneslidl, to narrow a query.Leave itout to look in allfour.five. from_date: first day, YYYY-MM-DD. Defaults to 30 ⟨68 unchanged words⟩
⟨143 unchanged words⟩ return several variants. store: aldi, tesco, supervalu, dunnes ordunneslidl: required with skus,narrows aquery; leave out for allfour.five. limit: most products to return for a ⟨6 unchanged words⟩
⟨446 unchanged words⟩ in euro","title":"Price"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"store":{"anyOf":[{"type":"string ⟨45 unchanged words⟩
⟨23 unchanged words⟩ applicable Tesco Clubcard prices, SuperValu Real Rewards pricesor, Dunnes memberoffers.offers or Lidl Plus prices (scan the Lidl Plus app at the till). Args: store: one of "tesco", "supervalu", "dunnes", "lidl". (Aldi doesn't publish multibuy promos so ⟨13 unchanged words⟩
⟨16 unchanged words⟩ "tesco" | "supervalu" | "dunnes" | "lidl". limit: page size (default 100, max ⟨5 unchanged words⟩
⟨78 unchanged words⟩ YYYY-MM-DD","title":"Scrape Date"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"unit_basis":{"anyOf":[{"type":"string ⟨54 unchanged words⟩
⟨6 unchanged words⟩ more barcodes (GTIN, EAN or UPC)acrossatallAldi,fourTesco,IrishSuperValusupermarketsand Dunnes Stores in one call. Lidl publishes no barcodes, so Lidl products are found by name, not by barcode. Codes are accepted exactly as printed: leading ⟨90 unchanged words⟩
⟨20 unchanged words⟩ "tesco" | "supervalu" | "dunnes" | "lidl". days_back: how many days back to look ⟨14 unchanged words⟩
⟨78 unchanged words⟩ YYYY-MM-DD","title":"Scrape Date"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"unit_basis":{"anyOf":[{"type":"string ⟨54 unchanged words⟩
⟨17 unchanged words⟩ one call), at Aldi, Tesco, SuperValuand, Dunnes Stores and Lidl: each item matched to the same product ⟨160 unchanged words⟩ from the overnight collection; in-store prices can differ. Member prices (Tesco Clubcard, LidlpricesPlus) are reportedseparately. Each matched item costs one credit;items not found are free. Args: items: ⟨17 unchanged words⟩ : the receipt's supermarket (aldi, tesco, supervaluor, dunnes or lidl),used for any line that does not name its own.
⟨107 unchanged words⟩ ":null,"description":"aldi, tesco, supervalu, dunnes ordunnes;lidl; defaults to the basket's store","title": ⟨30 unchanged words⟩
⟨439 unchanged words⟩ ":"Items","type":"array"},"lidl_plus_total":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Lidl total using Lidl Plus prices where Lidl has one","title":"Lidl Plus Total"},"mix_and_match_total":{"anyOf":[{"type":"number ⟨123 unchanged words⟩
⟨43 unchanged words⟩ recorded every product's price every night since May2026.2026 (Lidl's since 17 October 2026). Up to 100 lines per call; each line ⟨133 unchanged words⟩ : the receipt's supermarket (aldi, tesco, supervalu, dunnes ordunneslidl).
⟨107 unchanged words⟩ ":null,"description":"aldi, tesco, supervalu, dunnes ordunnes;lidl; defaults to the basket's store","title": ⟨48 unchanged words⟩
⟨226 unchanged words⟩ to narrow by. store: aldi, tesco, supervalu, dunnes ordunnes;lidl; leave out for allfour.five. kinds: which lists to return (default all ⟨18 unchanged words⟩
⟨47 unchanged words⟩ "tesco" | "supervalu" | "dunnes" | "lidl". limit: how many movers to return (default 25).
⟨21 unchanged words⟩ "tesco" | "supervalu" | "dunnes" | "lidl". days_back: how many days back to consider ⟨10 unchanged words⟩
⟨78 unchanged words⟩ YYYY-MM-DD","title":"Scrape Date"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"unit_basis":{"anyOf":[{"type":"string ⟨54 unchanged words⟩
⟨34 unchanged words⟩ ", "tesco", "supervalu", "dunnes", "lidl". Leave it out to search allfour.five. limit: how many results to return in ⟨37 unchanged words⟩
⟨78 unchanged words⟩ YYYY-MM-DD","title":"Scrape Date"},"shelf_path":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the retailer shelves it, every level, e.g. 'Fresh Food > Yoghurts > Kefir > Kefir Drinks'","title":"Shelf Path"},"unit_basis":{"anyOf":[{"type":"string ⟨54 unchanged words⟩
{"$defs":{"Nutrition":{"additionalProperties":true,"properties":{"carbohydrate_g":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Carbohydrate G"},"energy_kcal":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Energy Kcal"},"energy_kj":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Energy Kj"},"fat_g":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Fat G"},"protein_g":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Protein G"},"salt_g":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Salt G"},"sugars_g":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"title":"Sugars G"}},"title":"Nutrition","type":"object"},"PricePoint":{"additionalProperties":true,"properties":{" ⟨26 unchanged words⟩ ":"Id","type":"string"},"ingredients":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The ingredients list, on a product's first day and on any day it changed (with_nutrition_and_ingredients)","title":"Ingredients"},"name":{"anyOf":[{"type":"string ⟨2 unchanged words⟩ "}],"default":null,"title":"Name"},"nutrition_per_100":{"anyOf":[{"$ref":"#/$defs/Nutrition"},{"type":"null"}],"default":null,"description":"That day's nutrition per 100g or 100ml, as the retailer's own data stated it (with_nutrition_and_ingredients)"},"offer_text":{"anyOf":[{"type ⟨211 unchanged words⟩
⟨18 unchanged words⟩ supermarkets since May 2026. Takes product ids (store-prefixed,as returned in productresultsresults; an Aldi id has no store prefix, and "aldi:" in front of one is accepted) or aquery; with a query,the closest matching products are looked up first. Arange returns one rowper product per day, and each row costs one credit;with from_date equalto to_date, one day's price is returned. Every product gets the same days. When products x days would pass the row limit, the range is shortened to its most recent days for all of them and note says so; ids with no price in the range are listed in not_found. Args: product_ids: e.g. ["tesco:300793546", "dunnes:100873410", "000000000000387044"];, up to 50; each id'sstore is taken fromthe id.it. query: product name words, used when no ⟨39 unchanged words⟩ most rows to return in total (default60and maximum 200). Returnsone row per product per day:rows (id, name, store, scrape_date, price,unit_price, unit_basis,clubcard_price, offer_text,was_price.was_price), the days covered, not_found, note.
⟨9 unchanged words⟩ title":"From Date"},"limit":{"defaultanyOf":60,[{"titletype":"Limitinteger"},{"type":"integernull"}],"default":null,"title":"Limit"},"product_ids":{"anyOf":[{"items ⟨46 unchanged words⟩
⟨133 unchanged words⟩ :"PricePoint","type":"object"}},"additionalProperties":true,"properties":{"resultfrom_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"First day covered, YYYY-MM-DD","title":"From Date"},"not_found":{"description":"Requested ids with no price recorded in the range: an unknown id, or a product not on sale then","items":{"type":"string"},"title":"Not Found","type":"array"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"What was left out and why, when anything was","title":"Note"},"products":{"default":0,"description":"How many products have rows","title":"Products","type":"integer"},"rows":{"description":"One row per product per day recorded, each product's days in order","items":{"$ref":"#/$defs/PricePoint"},"title":"ResultRows","type":"array"}},"requiredto_date":{"anyOf":[{"resulttype":"string"},{"type":"null"}],"default":null,"description":"Last day covered, YYYY-MM-DD","title":"get_price_historyOutputTo Date"}},"title":"PriceHistory","type":"object"}
⟨102 unchanged words⟩ percent","title":"Alcohol Abv"},"alcohol_abv_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the strength came from: the retailer's own listing, worked out from its alcohol units per bottle or can, or the same barcode at another store","title":"Alcohol Abv Source"},"allergy_advice":{"anyOf":[{"type":"string ⟨350 unchanged words⟩
⟨102 unchanged words⟩ percent","title":"Alcohol Abv"},"allergy_advice":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The retailer's allergy advice, kept apart from the ingredients: what the product contains and may contain, e.g. 'Contains: Milk. May contain: Nuts.'; missing where the retailer publishes none","title":"Allergy Advice"},"brand":{"anyOf":[{"type":"string ⟨150 unchanged words⟩ null"}],"default":null,"description":"CountryEveryofcountryorigintheaslabelstatedstates, where it was made and where its main ingredient is from, e.g. 'Ireland', 'Ireland, EU, non-EU' (produced in Ireland using EU and non-EU chicken) or 'China, Spain, Argentina' for a blend; ⟨120 unchanged words⟩
⟨161 unchanged words⟩ "On Offer","type":"boolean"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Origin"},"query":{"anyOf":[{"type":"string ⟨31 unchanged words⟩
⟨182 unchanged words⟩ ":null,"title":"Offer Text"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Country of origin as stated, e.g. 'Ireland'","title":"Origin"},"origin_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the origin came from","title":"Origin Source"},"pack_size":{"anyOf":[{"type":"string ⟨238 unchanged words⟩ "Left Out By Store","type":"object"},"left_out_other_kind":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Products that only mention the search words but are a different kind of product (honey roast ham for 'honey'), left out","title":"Left Out Other Kind"},"left_out_partly_from_origin":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"With an origin asked for: products whose label names that country AND another ('Made in Ireland' from 'EU chicken'), left out as not wholly from it","title":"Left Out Partly From Origin"},"left_out_partly_from_origin_examples":{"description":"A few of those, each with the origin it states","items":{"type":"string"},"title":"Left Out Partly From Origin Examples","type":"array"},"left_out_unknown":{"anyOf":[{"type ⟨92 unchanged words⟩
⟨17 unchanged words⟩ included), how many ingredients it lists, country of origin, alcohol strength, pack size,description and today'sprice, for particular products. Products are looked up ⟨135 unchanged words⟩
⟨251 unchanged words⟩ from","title":"Nutrition Source"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Country of origin as stated, e.g. 'Ireland', or 'China, Spain, Argentina' for a blend; missing where none is stated","title":"Origin"},"origin_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Where the origin came from","title":"Origin Source"},"origin_text":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"The origin statement in the source's own words","title":"Origin Text"},"pack_size":{"anyOf":[{"type":"string ⟨72 unchanged words⟩