Retail, weekly flyers
A weekly flyer API for Canadian and US retailers
Give it a Canadian postal code or a US ZIP code and get the flyer deals near it as rows: product, store, sale and regular price, price per item and per kg, discount, the dates the deal runs and the flyer it came from. Search every flyer for a product, or pull every item in every flyer. $1.50 per 1,000 deals, with no Flipp account or API key.
- $1.50 per 1,000 deals
- 2,500+ retailers, Canada and US
- Past the 200-result cap
- Week-over-week changes
Does Flipp have an API?
Flipp publishes FlyerKit, an API its own documentation describes as access to Flipp's publication data "for use in merchant or publisher applications". Every call needs an access token, and the documentation says to get one from your Flipp account manager (FlyerKit v3.0 documentation, read October 6, 2026). That route is for retailers and publishers showing flyers in their own apps. If you want the deals any shopper sees for a postal code, across every store, this Actor returns them as JSON, CSV or Excel. The README names Walmart, Costco, No Frills, Loblaws, Metro, Sobeys, Shoppers Drug Mart, Canadian Tire, Home Depot, Best Buy, Target, CVS, Walgreens, ALDI and Lowe's among the 2,500+ retailers.
Three ways to use it
Mode (mode) | You give | You get |
|---|---|---|
search (default) | Postal codes and search terms (milk, chicken breast, tv) | Every matching flyer deal near each postal code, plus in-store sale prices and, if you ask, online deals |
flyers | Postal codes, optionally stores, categories or keywords | Every item printed in every flyer near each postal code |
flyerIds | Flyer ids or flipp.com flyer links | Every item in those flyers |
Past Flipp's 200-result cap
A search on Flipp stops at 200 results. With completeCoverage on (the default), the Actor sees when a search hits that 200-result cap, re-runs it for each store that has matches and merges the results. In the README's example, "chicken" near a downtown Toronto postal code went from 197 to 715 deals in about 30 seconds, which is $1.07 at $1.50 per 1,000. Turn it off for a quick top-200 sample. sortBy can put the lowest prices first, and every row gets a priceRank within its search (1 = the lowest price, by $/kg for weight-priced items).
Every item in every flyer
Full-flyer mode reads whole flyers instead of searching them. For one Vancouver postal code that is about 18,000 items from 108 flyers in 12 seconds (README): $27.00, plus $9.00 if you add item details. One downtown postal code covers the flyers for most of a metro area. For national coverage, regionPresets has ca-major-cities (46 cities in every province and territory, about 1,200 flyers) and us-major-cities (50 metros); a flyer shared between cities is read once, and dedupeAcrossPostalCodes (on by default) saves each deal once. Narrow it with merchants, categories or searchTerms, and keep only deals running today with onlyValidNow.
Prices you can compare
| Field | What it holds |
|---|---|
currentPrice, originalPrice | Sale and regular price, as numbers; currency is CAD or USD from the flyer itself |
effectivePrice, multiBuy | Price for one item, with "2 for $5" deals divided out (multiBuy keeps quantity, total and per-item price) |
priceUnit, pricePerKg | What the price is per (each, lb, kg, 100 g, pack), and $/kg for weight-priced items |
discountPct, dollarsOff | The discount against the regular price, or as the retailer states it |
validFrom, validTo | When the deal runs |
merchant, flyerId, itemType | The store and flyer; itemType is flyer, store (in-store price at the nearest branch, with storeAddress) or online |
A weekly price-drop feed
Turn on trackChanges and run the same input on a weekly Apify schedule. The Actor keeps a small snapshot of the last run for each distinct input in your own Apify account, and each row gets changeType (new, price_drop, price_up or unchanged) with previousPrice. The run's CHANGES record lists the totals and the deals that ended. Most retailers publish new flyers weekly, often a day or two before they start, so a Thursday schedule catches the new week. This input is the README's weekly No Frills alert across Canada:
{
"mode": "flyers",
"regionPresets": [
"ca-major-cities"
],
"merchants": [
"No Frills"
],
"trackChanges": true
}What it costs
| Event | Price | Charged for |
|---|---|---|
| Deal | $0.0015 | Each deal saved to your dataset |
| Item details | $0.0005 | Each deal enriched when includeItemDetails is on |
| Run start | $0.001 | Once per run, per GB of memory (the default 1 GB is one) |
500 deals cost $0.75 plus the $0.001 run start; with item details on, add $0.25. Coverage depends on which retailers publish flyers on Flipp near each code, so test a postal code or ZIP you care about with a small run first.
Limits
- Full postal codes only. A full postal code (
M5V 2T6) or a US ZIP works; the first three characters alone (M5V) are not enough. - Some deals have no single price. "20% off all toys" or "Buy 1 get 1" carry
discountPctorsaleStoryinstead. In full-flyer mode, item details fill the sale text and units for most items. - No archive. Each run reads the flyers live today. Your history is the runs you schedule and keep.
- What Flipp has. A retailer that doesn't publish its flyer on Flipp near your postal code won't appear.
Ask for it from ChatGPT, Claude or Cursor
The Flipp Flyer Deals Scraper works as a tool in ChatGPT, Claude, Cursor and VS Code through Apify's hosted MCP server. Add this URL as a custom connector and sign in with your Apify account; runs bill to that account. Then ask in plain English, for example "find the lowest price per kg for chicken breast in flyers near M5V 2T6 this week".
https://mcp.apify.com/?tools=fetch-actor-details,yugenox/flipp-flyer-deals-scraperclaude mcp add --transport http yugenox-flyers "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/flipp-flyer-deals-scraper"The AI setup guide walks through each client.
Run it from code
Chicken breast and eggs near one Toronto postal code, lowest price first, at most 500 deals: $0.75 or less, plus the run start. The same input with a US ZIP code works too.
// Save as run.mjs, then: npm i apify-client && APIFY_TOKEN=... node run.mjs
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yugenox/flipp-flyer-deals-scraper').call({
postalCodes: [
"M5V 2T6"
],
searchTerms: [
"chicken breast",
"eggs"
],
sortBy: "price_low_to_high",
maxItems: 500
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.merchant, item.name, item.effectivePrice);import os
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yugenox/flipp-flyer-deals-scraper").call(run_input={
"postalCodes": ["M5V 2T6"],
"searchTerms": ["chicken breast", "eggs"],
"sortBy": "price_low_to_high",
"maxItems": 500,
})
if run is None:
raise RuntimeError("Run did not finish")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item.get("merchant"), item.get("name"), item.get("effectivePrice"))# Small jobs: runs the Actor and returns the rows in one call (up to 5 minutes).
curl -X POST "https://api.apify.com/v2/acts/yugenox~flipp-flyer-deals-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"postalCodes":["M5V 2T6"],"searchTerms":["chicken breast","eggs"],"sortBy":"price_low_to_high","maxItems":500}'Not affiliated with Flipp, Loblaw Companies Limited, its banners, PC Optimum or any retailer named on this page.
Questions people ask
Does Flipp have a public API for flyer deals?
Flipp's FlyerKit API is for merchant and publisher apps, and its access tokens come from a Flipp account manager. This Actor reads the deals any shopper can see for a postal code instead, at $1.50 per 1,000 deals.
Which postal codes work?
Any full Canadian postal code (M5V 2T6) or US ZIP code (10001). The first three characters of a postal code are not enough.
How do I cover a whole city or the whole country?
One downtown postal code covers most of a metro area's flyers. For national coverage use regionPresets: ca-major-cities (46 cities) or us-major-cities (50 metros). Flyers shared between cities are read once.
Does it keep price history?
It doesn't store an archive. Turn on trackChanges and schedule the same input weekly: each run compares every deal with the previous run and marks it new, price_drop, price_up or unchanged.
How am I charged?
$0.0015 per deal saved, plus $0.0005 per deal with item details on, plus $0.001 per run start (per GB of memory; the default 1 GB is one). Deals removed by your filters or as duplicates are not charged.
Is it legal to scrape Flipp?
The Actor collects only public flyer deals, prices and store locations that anyone can see on Flipp without an account. That is generally legal, but you are responsible for how you use it, including Flipp's terms. Ask a lawyer if you are unsure.
Run it on your own data
Open the Flipp Flyer Deals Scraper on Apify, enter a postal code or ZIP and press Start. You pay per deal from your own Apify account, with no subscription to us.
Last updated 2026-10-15.