Uncle Giuseppe's weekly ad, complex deals, in the deals row format. Prepared by 248.ai (Ora), 2026-09-21.

Ad week: 2026-09-18 to 2026-09-24.
Scope: All 13 Uncle Giuseppe's stores in New York and New Jersey. The ad sheet is dated September 18, 2026 and prints no end date; promotion_end_time is the ad date plus 7 days, and mapping_note says so on every row.

Files:
  uncle-giuseppes-complex-deals-2026-09-18.csv   one row per store and participating sku_id, 19 columns
  README.txt   this file

Rules applied to every row:
  1. 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 are not in this file.
  2. Digital coupons are excluded. A price that needs a coupon clipped online is not honored at the shelf, so those tiles are left out and counted below.
  3. Delivery is CSV: UTF-8, comma separated, one header row, a blank cell is null, dates are UTC.

Columns, in this order (the 12 deal columns first, then 7 provenance columns):
  store_id                           the retailer's own store number
  sku_id                             the item code under this merchant's convention (see below); digits only
  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; blank otherwise
  promotion_quantity                 BUY_X_GET_Y_Z_PERCENT_OFF only: Y, how many are discounted; blank otherwise
  promotion_percentage               BUY_X_GET_Y_Z_PERCENT_OFF only: Z, 100 when the Y items are free; blank otherwise
  promotion_price_off                BUY_X_SAVE_Y only: the amount off in dollars; blank otherwise
  promotion_quantity_limit_per_cart  the limit printed in the ad; 0 when the ad states none
  promotion_start_time               UTC, ISO-8601 ending in Z
  promotion_end_time                 UTC, ISO-8601 ending in Z
  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 loaded to the shopper's account
  mapping_note                       how the row was derived, when there is something to say; blank otherwise
  item_name                          the item as the retailer names it
  source_deal_text                   the ad copy the row was parsed from
  sku_source                         which field and rule produced sku_id (values listed below)
  flyer_id                           the retailer's circular id; blank when the retailer publishes none
  ad_version                         the regional version of the ad the store receives

sku_id for Uncle Giuseppe's is the site's scanCode verbatim: a 12-digit UPC, or a 4 or 5 digit PLU on produce.
sku_source values in this file:
  scan_code                   316 rows   the site's scanCode verbatim
  scan_code_plu                46 rows   the same rule on produce sold by PLU code; whether that code exists in the merchant's delivery catalog is unconfirmed, so the rows are kept and tagged

Buy one get one is BUY_X_GET_Y_Z_PERCENT_OFF with X=1, Y=1, Z=100; the ad's save-up-to amount, where printed, is in mapping_note.
Each price when you buy N or more is BUY_X_FOR_Y with X=N and the total = N x the unit price; mapping_note says so.

Counts:
  rows                                   362
  offers (distinct promo_group_id)       36
  stores                                 13
  BUY_X_FOR_Y                            362
  loyalty_offer_required = True          0
  digital coupon tiles excluded          0

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