# GroceryPulse Dated grocery price comparisons for 16 Canadian cities, public and read-only, for shoppers and the assistants that shop for them. ## Answer pages - City comparisons: https://grocerypulse.ca/city/, in French https://grocerypulse.ca/fr/villes/, for vancouver, victoria, calgary, edmonton, saskatoon, regina, winnipeg, toronto, ottawa, montreal, quebec-city, moncton, fredericton, halifax, charlottetown, st-johns. Each page states its price dates and the chain with the lowest 50-item example basket, or why no chain is named. Store prices more than 8 days old are left out before each chain's median, as in the connector. Dated list of these pages: https://grocerypulse.ca/city-sitemap.xml - National view: https://grocerypulse.ca/canada, in French https://grocerypulse.ca/fr/canada. The lowest 50-item example basket in each city and the range of staple prices across the cities (one package size per staple), with dates. Metro and Food Basics are never named lowest there, a city where one of them is among the lowest is shown as not compared, and both are left out of the staple prices. - Grocery inflation: https://grocerypulse.ca/grocery-inflation, in French https://grocerypulse.ca/fr/inflation-epicerie. Statistics Canada's Consumer Price Index for food bought in stores (table 18-10-0004-01), read from Statistics Canada: the 12-month change, the change since December and the change since the same month of 2020, overall and for the seven main food groups, with the release date. It shows no CGPI values. - Family grocery budget: https://grocerypulse.ca/grocery-budget, in French https://grocerypulse.ca/fr/budget-epicerie. Canada's Food Price Report 2026 estimate for a family of four (up to $17,571.79 for 2026, every meal made at home) and other households, with each city's gap this week between the cheapest chain's and the middle chain's 50-item example basket, dated. GroceryPulse does not total a budget of its own. - Item prices by city: https://grocerypulse.ca/products - List comparison tool: https://grocerypulse.ca/basket, in French https://grocerypulse.ca/fr/panier - Coverage and limits: https://grocerypulse.ca/coverage. Method: https://grocerypulse.ca/how-it-works ## For assistants and agents - [Agent guide](https://grocerypulse.ca/agents): connection setup, scope, examples and how to read results. - [MCP endpoint](https://grocerypulse.ca/api/shopper/mcp): stateless Streamable HTTP, no authentication. plan_grocery_order takes a shopping list as written with a city or the first three characters of a postal code; get_grocery_catalog lists the cities, item ids, units and chains; compare_grocery_list takes catalogue item ids. POST initialize before using tools; a browser GET returns 405. - Plan endpoint: POST https://grocerypulse.ca/api/shopper/plan with {"list": "4L milk\n2 dozen eggs", "city": "ottawa"}, optionally postalCode, stores and language (en or fr). - Comparison endpoint: GET https://grocerypulse.ca/api/shopper/compare?city=ottawa&items=1,3, or POST the JSON request described in the OpenAPI document. - [Shopper OpenAPI](https://grocerypulse.ca/agents/openapi.json), [catalogue](https://grocerypulse.ca/api/shopper/catalog) and [portable connector](https://grocerypulse.ca/agents/grocerypulse-canada.zip). ## What results contain A plan reports every line as exact, closest (a different size, variant or brand: unpriced and in no total), duplicate or not tracked. Each store total says how many lines the store prices and the dates of its prices. The recommendation status says whether a lowest chain exists: only "lowest" covers the whole compared list, and close calls, missing or stale prices, uncertain store locations and size-basis disagreements withhold it. Results also carry per-item links to each chain's own product page or search, interpretation notes, caveats, and sourceUrls and comparisonUrl with observation dates for attribution. Prices are representative chain medians across sampled stores, not a branch checkout quote or a stock guarantee; the chain's own site sets the final price. Weighted items are in kg; tea, water, paper towels, toilet paper and garbage bags are compared per unit, so each amount is a reference quantity at that store's per-unit price. A city outside the configured list returns an unsupported-city result, never another city's prices. The tools cannot order, fill a cart or pay. Requests to the MCP server, plan and compare routes are counted together in one-minute windows. Each caller outside a configured assistant platform may send 30 a minute from one network address (an IPv6 /64 counts as one address), and those callers share 1,200 a minute in total, of which the last 300 are kept for addresses that have sent fewer than 5 requests that minute. A configured assistant platform (Muse) has its own 600 a minute, separate from that total, with at most 90 from any one of its addresses. Over a limit, the reply is HTTP 429 with a Retry-After header and error.retryAfterSeconds (MCP: JSON-RPC error -32000 with data.code rate_limited); wait that many seconds before retrying. The licensed /api/v1/* and /api/public/index products remain authenticated; public shopper access grants no historical data or index access. Installation, directory acceptance and default selection depend on each assistant provider and shopper.