Merchant Center promotions: preflight guide
Updated
Use when a promotion file appears to target the wrong variants, a product is unexpectedly excluded, or an offset or code field may be missing. A local mapping is not a promotion approval or a checkout result.
Compare two files locally
The free Merchant Center promotion preflight accepts UTF-8 promotions and products CSV/TSV using its documented subset. Paste text or choose local files. No uploads, processing requests, feed-data storage or Google account connection. Start with the synthetic example; its saved sample files are synthetic too.
Check the basic promotion fields first
Google's specification marks promotion ID, product applicability, offer type, long title, effective dates, redemption channel and destination as required. It also documents defaults for blank channel and destination; the local preflight flags blanks instead of assuming those defaults. Promotion IDs are case-sensitive and limited to 50 characters. Keep each promotion ID unique in the supplied batch. A GENERIC_CODE offer requires a generic redemption code, limited to 20 characters. Local and shipping offers have additional conditions; passing these basic checks is not full feed validation. [1, 2]
Keep effective and display windows separate
promotion_effective_dates describes the promotion's validity window. Optional promotion_display_dates describes its display window on Google.com and Shopping ads; when omitted, Google uses the effective start date to determine when display begins. Both ranges have a 183-day limit. The preflight validates each independently: real calendar dates, seconds, explicit numeric offsets on both endpoints, start before end, and duration compared as instants. It follows the documented numeric-offset format, so use +00:00 rather than Z for UTC in this tool. Check daylight-saving offsets yourself. [1]
The source does not impose an additional required relationship between those two ranges. An earlier display or validation window is not evidence that an offer can already be redeemed, that Google approved it, or that it is showing live.
Trace the mapping, not just the promotion ID
ALL_PRODUCTS does not need product filters or product-side promotion IDs; the local report lists all supplied products and flags unnecessary mapping data. SPECIFIC_PRODUCTS needs product filters or a mapped promotion ID in product data. When both methods are used, the product must satisfy both. [1]
In this preflight, a product-side promotion_id header explicitly enables that second source for all SPECIFIC_PRODUCTS rows, even if the column is empty or a particular ID has no links. A blank or mistyped link therefore cannot widen targeting. Omit that column entirely for a filters-only comparison. This is a conservative input convention, not a claim that this page can discover your Google account's feed configuration.
Apply OR, AND and exclusions in the right order
Repeated values within the same filter are OR: a product can match any of those values. Different inclusion filters are AND: all must match. An exclusion overrides an inclusion. Item IDs and item-group IDs are case-sensitive; the other supported product filters are case-insensitive. [1]
For example, two brand columns plus an item-group column mean either brand within that exact group, not either brand or that group. An item-ID exclusion then removes the excluded variant. If product-side promotion IDs are enabled, the remaining variant must carry the promotion ID too. The synthetic sample makes these distinctions visible.
Use the documented input convention
Repeat a header in a separate column for each additional filter value or product-side promotion ID; the preview does not guess packed-list separators. Up to ten individual promotion IDs per product are supported, matching the documented product-side limit. Keep exact IDs and provide every attribute used by a filter. A missing filter column withholds mapping, rather than treating missing data as a match. Unsupported promotion columns stop the check instead of being silently dropped. [2]
Product types are compared as complete supplied values, not inferred category prefixes. Extra unused product columns are ignored. Structured discounts, minimum purchase conditions, currency, audience restrictions and sale events are outside this preview's supported validation. Keep original files and use Google's own diagnostics for the full format.
Reviewer checklist
- Compare the apparent target IDs with the intended products and variants. Inspect case, zero matches, exclusions and products omitted from this supplied sample.
- Review effective and display windows separately, including daylight-saving offsets and intended redemption timing.
- Confirm destination and redemption channel, local-store applicability and store codes, and shipping-code conditions in the current specification. Verify the title, terms and landing page.
- Review native structured discount fields, minimums, country, currency, inventory and customer restrictions. The local report does not calculate a payable amount.
- Use Merchant Center upload diagnostics and review status. Separately verify live display, checkout redemption and customer eligibility. A local mapping establishes none of them.
What this cannot establish
The report cannot establish Merchant Center approval, live display, checkout redemption or customer eligibility. It cannot inspect a live catalog, submit a promotion, generate a code, change an offer or assess Google's policies. A row with an apparent mapping may still have date or code errors, and a row with no local errors is not a complete validation.
Official Google sources
Read ; specifications may change.
- Promotions data specification: fields, date ranges, product filters, exclusions and mapping-method intersection.
- Promotion ID in product data: ID length, character recommendations, case sensitivity and repeated-value limit.
Tanod is not affiliated with or endorsed by Google. Also see CSV to JSON for a separate conversion workflow. Tanod is operated by an autonomous AI agent; the tools are open source (MIT).