FoodHero Scraper - Grocery Deals, Prices & Stores avatar

FoodHero Scraper - Grocery Deals, Prices & Stores

Pricing

from $1.20 / 1,000 deal or store records

Go to Apify Store
FoodHero Scraper - Grocery Deals, Prices & Stores

FoodHero Scraper - Grocery Deals, Prices & Stores

Scrape FoodHero surplus grocery deals across Canada by area, store or offer ID. Extract products, brands, regular and discounted prices, savings, portions left, best-before dates and CO2 savings, plus store names, chains, addresses, coordinates and types.

Pricing

from $1.20 / 1,000 deal or store records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

FoodHero Scraper - Surplus Grocery Deals in Canada

Collect discounted surplus-grocery deals from FoodHero, the Canadian app that helps stores sell surplus food before it goes to waste. Search by area, or paste a store or offer id, and get one clean row per deal with the product, both prices, the discount, how many portions are left, the best-before date, and the store behind it.

FoodHero operates in Canada. The default connection settings work on every plan, and which deals you get back is decided by the areas you search, not by where the connection exits.

What you get

One row per surplus deal (recordType: "offer"), with:

  • Product - name, brand, description, size, department, photo
  • Price - regular price, deal price, discount %, currency (CAD)
  • Availability - portions left, sold-out flag, last-call flag, best-before date (raw and ISO)
  • Impact - CO2 saved, new-arrival flag
  • Store - name, chain, store type, full address, city, province, postal code, coordinates, distance from your search point, and (optionally) phone, website and description

A pasted store that lists nothing right now comes back as a single store row (recordType: "store") so a target you named always returns something.

Input

  • Mode - Search deals by area or Store or offer ids.
  • Areas to search (search mode) - one or more lat,lng pairs or Canadian place names (Toronto, Montreal, Vancouver). Leave empty to cover every FoodHero city in Canada at once.
  • Radius (km) - keep only stores within this distance of each area.
  • Store name contains - keep only stores whose name matches (Sobeys, IGA, Safeway, Foodland, Thrifty…). Applies in both modes.
  • Include sold-out deals - also return deals with zero portions left.
  • Add store phone, website and description - richer store contact info (one extra request per store, so a little slower).
  • Store or offer ids (URL mode) - one target per entry. FoodHero has no public web page for a store, so paste its 24-character id: a bare id is read as a store, or prefix it (store/<id> or offer/<id>) to be explicit.
  • Max items / Max pages per area - limits.
  • Resume from a previous run - paste an interrupted run's ID (or its dataset ID) to carry on without returning what it already saved.
  • Incremental mode - for scheduled runs: after the first run, return only what is NEW, UPDATED or REAPPEARED. Optional Emit unchanged / Emit expired toggles.
  • MCP connectors - optionally pipe the results into apps you already use.
  • Proxy - the default shared pool reaches FoodHero on every plan; leave it as it is unless you have a reason to use your own proxy.

Resume and recurring updates

These are two different things.

Resume finishes ONE interrupted collection. Paste that run's ID (or its dataset ID) into resumeFromRunId and the deals it already saved are skipped.

Incremental mode is for running the same selection again and again - every morning, say, to watch fresh surplus appear and sold-out deals disappear. The actor remembers the previous run of that selection and, from the second run on, returns only what changed. Each row then carries changeType, changedFields, firstSeenAt and lastSeenAt. Memory is kept per selection (mode, areas, radius, store-name filter, sold-out toggle and pasted ids); set stateKey to name a campaign or to deliberately share one.

EXPIRED rows are only produced when a run scanned the whole selection. A run stopped by maxItems or maxPages, a run whose area could not be fully read, a run where a pasted id was refused, and a resumed run all skip that step and say so in the log: a partial scan must never report a live deal as gone.

Example output

{
"recordType": "offer",
"productName": "Sliced Braided Brioche",
"productBrand": "Sample Bakery",
"price": 13.99,
"discountPrice": 7.0,
"discountPercent": 50,
"currency": "CAD",
"itemLeft": 1,
"isSoldOut": false,
"bestBeforeAt": "2027-01-22T15:56:05+00:00",
"storeName": "IGA Complexe Desjardins",
"city": "Montreal",
"state": "QC",
"country": "CA",
"latitude": 45.5075,
"longitude": -73.5654,
"distanceKm": 0.65
}

Send results into your apps (MCP connectors)

Results can optionally be piped into apps you already use, through Model Context Protocol connectors, as a delivery step after the collection. Authorize a connector under Apify, Settings, API and Integrations, then select it in the mcpConnectors field of the input. For Notion, also set notionParentPageUrl to the page under which deal pages should be created; maxNotifyListings caps how many deals are written to each connector.

What arrives in the connector is a condensed, human readable summary per deal: a title plus the key fields flattened to plain text. Nested objects collapse to their main value and long lists are trimmed to a few entries, so a long product description may be shortened there. The complete record always stays in the Apify dataset, which this step never changes. Leaving mcpConnectors empty skips the export entirely.

Notes

  • The actor reads live availability, so deals change through the day - run again later to catch fresh surplus.
  • Access to the deals is handled for you behind the scenes; no account setup is needed. Keep your usage respectful of FoodHero's terms.
  • FoodHero currently operates in Canada, so searching outside Canada returns nothing. Use Canadian areas - or leave the area empty to cover every FoodHero city at once.