A team tracking only the online catalogue will miss most of the promotional signal in US grocery. The weekly circular is a separate publication, produced by a different team on a different calendar, and the product page frequently does not reflect what the ad is advertising.
That gap is not an edge case. It is the normal state of affairs. If your promotional intelligence comes only from product pages, you are measuring a partial picture and reporting it as complete.
Our promotional price monitoring service and grocery catalogue data collection are built specifically to run both sources together rather than treating the circular as an afterthought.
The circular — weekly ad, flyer, insert — is the retailer's planned promotional communication for a defined date range, targeted at a defined group of stores. It is produced weeks in advance, printed or published on a fixed schedule, and it is the authoritative statement of what the retailer intends to promote.
The online catalogue is a different system. Reasons they disagree:
| Cause | What you observe |
|---|---|
| Offer requires a clipped digital coupon | Ad shows a low price; PDP shows regular price |
| Offer is in-store only | Ad price absent from the online channel entirely |
| Store group mismatch | Ad applies to a store group the online store is not in |
| Timing offset | Ad live before or after the PDP updates |
| Mechanic not representable on a PDP | BOGOF or "buy 4 save $4" shows as a badge with no price change |
| Ad-only item | Promoted item not merchandised online |
So the circular and the catalogue are complementary sources answering different questions. The catalogue answers "what does it cost right now, here." The circular answers "what is the retailer promoting, to whom, and until when." Promotional strategy analysis needs the second.
Circulars appear in three broad forms. Effort and reliability differ sharply.
| Format | What it is | Extraction approach | Reliability |
|---|---|---|---|
| Structured data behind the viewer | The interactive flipbook is rendered from an offer feed | Read the underlying structured offers directly | Highest — offers arrive as fields |
| Interactive flipbook (image-based) | Page images with clickable hotspot regions | Read hotspot metadata where present; OCR the page image where not | Medium — depends on hotspot coverage |
| PDF or flat image | A rendered page with no structure at all | Document layout analysis plus OCR, then parse | Lowest — needs validation |
Always check for the structured source first. A surprising number of interactive viewers are driven by a clean offer feed, and reading it turns a document-understanding problem into a field-mapping problem.
When OCR is required, the hard part is not reading characters. It is deciding which price belongs to which product. A circular page is a dense visual layout where adjacency carries meaning. A price printed large in the middle of a block may govern six surrounding items or only one.
Practical rules for OCR-based extraction:
OCR extraction accuracy rate by circular format, measured against manual review
Our US retail data services handle all three circular formats, with the extraction route chosen per retailer rather than assumed.
An offer is not a price. It is a conditional statement about a price, and the conditions are most of the value.
| Field | Notes |
|---|---|
| retailer, banner | Ad ownership |
| circular_id | Retailer's ad identifier |
| store_group_id | Which stores the ad applies to |
| valid_from, valid_to | Ad window as published |
| page_number, block_position | Where on the page — prominence signal |
| offer_headline_raw | Verbatim, e.g. "2 for $5" |
| product_description_raw | Verbatim item text |
| brand, size_raw | Parsed from the description |
| offer_type | price_point / multibuy / bogo / percent_off / dollar_off / digital_coupon / loyalty_required / spend_threshold |
| offer_price | Numeric price where a single price applies |
| required_qty | For multibuys and thresholds |
| effective_unit_price | Derived at required_qty |
| purchase_limit | "Limit 4" parsed |
| requires_loyalty_card | Boolean |
| requires_coupon_clip | Boolean |
| min_spend | For "$5 off $25" style offers |
| excludes_raw | Exclusion fine print |
| matched_retailer_sku | Link to catalogue, null if unmatched |
| match_confidence | Confidence of that link |
| extraction_confidence | Confidence of the extraction itself |
| collected_at, source_url | Provenance |
Two confidence scores, not one. extraction_confidence says "did we read this correctly." match_confidence says "did we link it to the right catalogue item." They fail independently, and conflating them makes debugging impossible.
The full offer record is delivered alongside catalogue prices in our pricing and product data service, with both scores preserved per record.
| Mechanic | Ad text example | Effective price logic |
|---|---|---|
| Price point | "$2.99 ea" | Straightforward single price |
| Multibuy | "3 for $10" | Unit price only at qty 3; single-unit price unchanged |
| BOGO free | "Buy 1 Get 1 Free" | Effective 50% off, only at qty 2. Check whether the free item must be identical |
| BOGO half | "Buy 1 Get 1 50% Off" | Effective 25% off at qty 2 |
| Percent off | "30% Off" | Needs a base price — pull it from the catalogue |
| Dollar off | "$1.50 Off" | Needs a base price |
| Spend threshold | "Save $5 when you spend $25" | Basket-level, not item-level. Do not allocate to items |
| Digital coupon | "Clip for $1 off" | Not realised unless clipped. Flag separately |
| Loyalty gated | "With Card" | Only applies to members |
| Mix and match | "Mix or match any 5" | Offer spans a set of eligible items, not one item |
Percent-off and dollar-off offers cannot be resolved from the circular alone. They need a base price from the catalogue for the same store group, on the same date. This is the strongest argument for aligning the two sources rather than running them as separate reports.
Spend thresholds are basket-level. Allocating a share of a "$5 off $25" offer to individual items produces numbers that look precise and mean nothing.
The join has three keys, and all three must be right.
1. Product. Ad copy is abbreviated marketing text, not a catalogue title. "Coke 12pk" must resolve to a specific retailer SKU. Run it through the same matching pipeline as any cross-retailer match: exact identifier where available, then normalised brand plus size plus variant, then attribute similarity, then human review. Store the confidence.
2. Store group. The ad applies to a store group, not all stores. Maintain a mapping from store_group_id to member store IDs and keep it current. Getting this wrong attributes promotions to stores that never ran them.
3. Date. Offers are valid for a window. Joining a Tuesday catalogue observation to a Wednesday ad window produces a mismatch that looks like a data error. Always join on overlapping date ranges, not on a single date.
The product-side join is a specification-matching problem in its own right, covered in our matching ad copy to catalogue SKUs service.
Once aligned, the useful outputs appear:
| Metric | Definition |
|---|---|
| Promo depth | Offer price against non-promotional catalogue price |
| Promo frequency | Weeks in a period a line appeared in an ad |
| Promo pressure by category | Share of tracked lines on offer in a category, by week |
| Front-page prominence | Share of a brand's offers on early pages |
| Ad-only rate | Offers with no corresponding online price change |
| Mechanic mix | Distribution across BOGO, multibuy, price point, coupon |
promo depth distribution by category across tracked chains share of circular offers with no matching online price change
Most US chains flip their ad midweek, commonly Wednesday, though regional banners vary and some run Sunday or Thursday starts. Build the calendar per banner rather than assuming a single flip day.
A workable weekly rhythm:
| Day | Action |
|---|---|
| Day before flip | Collect the incoming ad where published in advance |
| Flip day, early | Full collection of new circulars across all banners |
| Flip day, later | Extract, parse, and score confidence |
| Flip day + 1 | Match to catalogue, resolve percent-off base prices |
| Flip day + 1 | Human review queue for low-confidence extractions |
| Flip day + 2 | Publish reconciled offer dataset |
| Mid-window | Spot-check for mid-week changes and corrections |
Two operational rules matter. First, keep the previous week's ad available — overlapping windows and late corrections are common. Second, snapshot the source document. When an extracted offer is challenged, the archived page settles it.
Retailers do issue corrections mid-window. Version offer records rather than overwriting them, so history remains reconstructable.
The extraction pipeline that powers this calendar is part of our ecommerce data extraction service.
Actowiz Solutions collects weekly circulars across US grocery banners, extracting structured offers with mechanic type, conditions, store group, and validity window, from structured feeds, interactive viewers, and PDF-only ads alike.
Circular offers are aligned to store-level catalogue prices so promo depth and ad-only offers can be measured rather than inferred.
You can also reach us for all your mobile app scraping, data collection, web scraping, and instant data scraper service requirements!
The ad and the online catalogue are separate systems. Many ad offers are in-store only, require a clipped digital coupon, or apply to a store group the online store is not part of. Mechanics like BOGO also cannot be expressed as a single PDP price.
Three. Some interactive viewers are driven by a structured offer feed, which is the most reliable source. Others are image-based flipbooks with clickable hotspots. Some chains publish only a PDF, which requires layout analysis and OCR plus validation.
Ad copy is abbreviated, so it runs through a matching pipeline: exact identifier where present, then normalised brand plus size plus variant, then attribute similarity, then human review. Each link carries a confidence score, separate from extraction confidence.
Our web scraping expertise is relied on by 4,000+ global enterprises including Zomato, Tata Consumer, Subway, and Expedia — helping them turn web data into growth.
Watch how businesses like yours are using Actowiz data to drive growth.
From Zomato to Expedia — see why global leaders trust us with their data.
Backed by automation, data volume, and enterprise-grade scale — we help businesses from startups to Fortune 500s extract competitive insights across the USA, UK, UAE, and beyond.
We partner with agencies, system integrators, and technology platforms to deliver end-to-end solutions across the retail and digital shelf ecosystem.
Track weekly grocery circular data across the top 10 US grocery chains. Analyze sale prices, discounts, promotions, product offers, and competitor pricing trends.
Explore Restaurant & Menu Data from RestaurantGuru UK to analyze restaurant listings, menus, pricing, ratings, and dining trends.
Global makeup price benchmark 2026: how L'Oreal, Estee Lauder, Maybelline and MAC products are priced across Sephora, Ulta, Amazon and Nykaa.
Whether you're a startup or a Fortune 500 — we have the right plan for your data needs.