Ten grocery weekly ads, multi-buy deals. Prepared by 248.ai (Ora), 2026-09-23.

One CSV per chain, the same 19 columns in every file, one row per item per store.
This is a sample: each file is the most recent published week for that chain. Every
Monday, each chain's new week arrives as a file in this same template.

Files:
  big-y-complex-deals-2026-09-03.csv                  34918 rows   79 stores
  crest-foods-complex-deals-2026-09-18.csv              756 rows   10 stores
  daves-markets-complex-deals-2026-09-16.csv             56 rows    1 stores
  festival-foods-complex-deals-2026-09-16.csv          4519 rows   14 stores
  giant-complex-deals-2026-09-18.csv                    117 rows    1 stores
  marcs-complex-deals-2026-09-16.csv                     87 rows    1 stores
  martins-complex-deals-2026-09-18.csv                  106 rows    1 stores
  superior-grocers-complex-deals-2026-09-16.csv          28 rows    1 stores
  gelsons-complex-deals-2026-09-16.csv                 2210 rows   26 stores
  uncle-giuseppes-complex-deals-2026-09-18.csv          362 rows   13 stores
  total                                               43159 rows

Rows cover complex deals only: N for $X, buy X get Y free or Z percent off, and
buy X save $Y. Plain single-item sale prices and digital coupons are not included.
Dates are UTC. A blank cell is null.

Columns, in order:
  store_id                           the retailer's own store number
  sku_id                             the item code
  promotion_type                     BUY_X_FOR_Y, BUY_X_GET_Y_Z_PERCENT_OFF, or BUY_X_SAVE_Y
  promotion_purchase_quantity        X: how many the shopper must buy
  promotion_total_price              BUY_X_FOR_Y only: the price for X
  promotion_quantity                 BUY_X_GET_Y_Z_PERCENT_OFF only: Y, how many are discounted
  promotion_percentage               BUY_X_GET_Y_Z_PERCENT_OFF only: Z, 100 when free
  promotion_price_off                BUY_X_SAVE_Y only: the amount off in dollars
  promotion_quantity_limit_per_cart  the limit printed in the ad; 0 when none
  promotion_start_time               UTC, ISO-8601
  promotion_end_time                 UTC, ISO-8601
  promo_group_id                     one id per offer; rows that share it are one mix-and-match group
  loyalty_offer_required             True when the price needs a loyalty offer on the shopper's account
  mapping_note                       how the row was derived, when there is something to say
  item_name                          the item as the retailer names it
  source_deal_text                   the ad copy the row was parsed from
  sku_source                         which rule produced sku_id
  flyer_id                           the retailer's circular id, when it publishes one
  ad_version                         the regional version of the ad the store receives

Big Y, Crest Foods, Festival Foods, Gelson's, and Uncle Giuseppe's print an item code
on every deal. Dave's Markets, GIANT, Marc's, MARTIN'S, and Superior Grocers print
product families ("select varieties"); those rows are one per item sharing the name,
and sku_source reads ddmsid:group.

Each file is a dated read of the retailer's public website; 248 reports what was published.
