com.basketwatchireland/basketwatch

BasketWatch

Irish grocery prices at Aldi, Tesco, SuperValu and Dunnes: compare, baskets, offers, history

1.0.0
Version
remote
Transport
17
Tools

Security review

Review passed

Reviewed 1h ago.

  • tools: 17 tools scanned
  • metadata: scanned

No findings.

Tools (17)

  • status

    A freshness snapshot per supermarket: products tracked, products on promotion, the last collection date and the status of the most recent run.

  • search_products

    Search products by name across one or all Irish supermarkets. Args: query: words to match in product names, case-insensitive (e.g. "heinz baked beans", "kerrygold butter", "pringles"). store: optionally filter to one of "aldi", "tesco", "supervalu", "dunnes". Leave it out to search all four. limit: how many results to return in total (default 10). Returns the matching product rows: store, SKU id, name, brand, price, unit_price (€/kg or €/L), pack_size, category_path, url. Matches on the name only: no ingredient, nutrition or offer filters, and no price sorting.

  • compare_prices

    Find where a product is cheapest right now. Matches the same product at Aldi, Tesco, SuperValu and Dunnes Stores and returns each store's current price side by side, with unit prices, offers and Tesco Clubcard prices. Free: no BasketWatch account needed. Args: query: the product, e.g. "heinz ketchup" or "kerrygold butter 454g". limit: how many matched products to return (default 5, max 20). Returns {"as_of", "query", "matches": [{"product", "pack", "prices": {store: {name, price, unit_price, unit_basis, offer_text, was_price, clubcard_price, url}}, "cheapest_store"}]}. A store missing from "prices" does not stock that product. One product per call.

  • compare_price_across_stores

    Raw per-store search results for a product name at all four supermarkets: every matching line at each store, including other pack sizes, without matching the same product across stores. Returns a dict keyed by store, with up to `limit_per_store` matching products per store. Args: query: product-name substring (e.g. "heinz baked beans 415g"). limit_per_store: how many matches per store (default 5).

  • lookup_barcode

    Find the products carrying one or more barcodes (GTIN, EAN or UPC) across all four Irish supermarkets in one call. Codes are accepted exactly as printed: leading zeros, spaces and hyphens are ignored. Needs a signed-in BasketWatch account. Args: codes: one barcode, or up to 100 separated by commas (e.g. "5000127014084" or "5000127014084,5000157024671"). store: optionally restrict to one of "aldi", "tesco", "supervalu", "dunnes". include_copy: also return ingredients and per-100g nutrition where the retailer publishes them. Returns {"products": [...], "not_found": [...], "invalid": [...]}. Each product row carries store, matched_barcodes, name, brand, pack_size, price and its full barcodes list. One credit per barcode found, however many retailers stock it; codes with no match cost nothing.

  • get_promotions

    List products currently on promotion at a given supermarket. Returns offer label (e.g. "3 for €5", "SAVE €0.75"), was-price, validity window, and where applicable Tesco Clubcard prices, SuperValu Real Rewards prices or Dunnes member offers. Args: store: one of "tesco", "supervalu", "dunnes". (Aldi doesn't publish multibuy promos so isn't supported here.) limit: how many promotional rows to return (default 25).

  • recent_price_changes

    Price movements at one supermarket between the latest nightly snapshot and the previous one: shelf price rises and falls with old price, new price and % change, and promotions starting or ending listed separately (an offer ending is not a price rise). Args: store: "aldi" | "tesco" | "supervalu" | "dunnes". limit: how many movers to return (default 25).

  • newly_added_products

    Products newly listed at a supermarket within a configurable lookback window: range additions and new launches. Args: store: "aldi" | "tesco" | "supervalu" | "dunnes". days_back: how many days back to look (default 7 = since last scrape). limit: how many new products to return.

  • removed_products

    Products that have disappeared from a supermarket's catalogue in the given lookback window: delistings and range cuts. Args: store: "aldi" | "tesco" | "supervalu" | "dunnes". days_back: how many days back to consider (default 7). limit: how many removed products to return.

  • list_products

    Page through a supermarket's full catalogue, with no search terms or filters. Args: store: "aldi" | "tesco" | "supervalu" | "dunnes". limit: page size (default 100, max 200). offset: pagination offset.

  • get_price_history

    A product's recorded daily prices over a date range. BasketWatch has kept every night's price at all four supermarkets since May 2026. Takes product ids (store-prefixed, as returned in product results) or a query; with a query, the closest matching products are looked up first. A range returns one row per product per day, and each row costs one credit; with from_date equal to to_date, one day's price is returned. Args: product_ids: e.g. ["tesco:300793546", "dunnes:100873410"]; each id's store is taken from the id. query: product name words, used when no product_ids are given. store: aldi, tesco, supervalu or dunnes, to narrow a query. Leave it out to look in all four. from_date: first day, YYYY-MM-DD. Defaults to 30 days before to_date. to_date: last day, YYYY-MM-DD. Defaults to today. limit: most rows to return in total (default 60). Returns one row per product per day: id, name, sto

  • get_product_details

    Nutrition per 100g or 100ml (energy, fat, carbohydrate, sugars, protein, salt), the ingredients list as printed (allergens included), how many ingredients it lists, alcohol strength, pack size, description and today's price, for particular products. Products are looked up by product id (store-prefixed, as returned in product results), by the retailer's own item numbers (skus with store, as printed on its receipts), or by name (query). ingredients_incomplete marks an ingredient list on record that is cut short, which cannot show that an ingredient is absent. Results carry a note that nutrition and ingredients are for information only. Each product returned costs one credit. Args: query: product name words, e.g. "kellogg's corn flakes". product_ids: e.g. ["tesco:300793546", "dunnes:100873410"], up to 50. skus: the store's own item numbers, e.g. ["100873410"], up to 50; needs store. An Aldi article number can re

  • find_products

    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 ve

  • price_basket

    Price a whole shopping list, or every line of a grocery receipt (up to 100 lines in one call), at Aldi, Tesco, SuperValu and Dunnes Stores: each item matched to the same product at every store, the cheapest store for each item, each store's basket total, and a cheaper product of the same kind (often own-label) where one exists. Each line takes name (plain words with brand and size, e.g. "avonmore fresh milk 2l"; receipt abbreviations such as "AVNMR FRSH MLK 2L" match poorly) and optionally sku (the retailer's item number as printed on its receipts; the name is used when the number is not found), barcode, store, quantity, and paid (the line total, which gives the saving against what was paid). Irish product names say "low fat milk" for what the UK calls "semi skimmed". Bags, deposits, discounts and totals are not products. Returns, per line, the match and matched_by (sku, barcode or name), the cheapest store and price, a cheaper alte

  • price_basket_over_time

    How the cost of the same basket changed between two dates, at the store it was bought from: each product's price on both dates, whether it was on promotion, the basket total on each date, and the products that moved it. BasketWatch has recorded every product's price every night since May 2026. Up to 100 lines per call; each line takes name, sku (the retailer's printed item number, with the line's words in name), barcode, store and quantity. change_pct is the change in what the basket cost (promotions included); shelf_change_pct is regular prices only, so the gap between the two is promotions starting or ending, not price rises. biggest_rises and biggest_falls list the lines that moved most; pack_changed marks a product whose pack size changed, confirmed over three days of records (a smaller pack at the same price is a hidden rise). Lines in not_compared were not found, or not sold on one of the dates. Each product compared costs one

  • price_movements

    How a whole category's prices moved between two dates, in one call: the biggest regular-price rises and falls, promotions starting and ending, Tesco Clubcard price changes and pack-size changes, kept apart, with a summary over every product compared (average and median shelf change, counts of rises and falls) overall and per store. shelf_rise and shelf_fall are changes to the regular price; promotion_started and promotion_ended are changes in what was paid while the regular price stayed the same (a product at 18 euro on promotion and 23 euro after is a promotion ending, not a 27.8% price rise); loyalty_change is a Clubcard price moving; pack_change is the same product in a different pack size, confirmed over three days of records (a smaller pack at the same price is a hidden rise). on_promotion_both_dates marks a shelf change in the label's "was" price while the offer price paid did not move. Each mover returned costs one credit; th

  • check_credits

    How many BasketWatch credits the signed-in account has left. Free to call. One credit is one record returned.