Merchant Center promotion preflight
Compare supplied promotions with product-feed rows before a native review. See apparent targets, errors and a reviewer checklist without uploading either file.
Runs entirely in your browser
Apparent targeting only. This tool cannot establish Merchant Center approval, live display, checkout redemption or customer eligibility. No uploads, no feed-data storage and no Google account access. Page assets load normally; checks and local file reads make no network requests.
Local mapping review, not an approval
Preflight limits: 250 KB per input, 100 promotion rows, 1,000 product rows, 128 columns and 16,000 characters per cell. Documented subset only; not a complete Google feed or policy validator.
How to preflight a promotion mapping
- Load the synthetic example, paste UTF-8 CSV/TSV, or choose two local files. No account connection is needed.
- Use exact attribute headers and repeated columns for repeated filter values or product-side promotion IDs. Run Check apparent targets.
- Review each promotion's IDs and errors, then follow the checklist in Merchant Center and your own checkout. Local results cannot establish approval or redemption.
Promotions input reference
Use exact lowercase attribute headers, one promotion per row. Required checks cover promotion_id (unique in this batch, 1–50 letters, numbers, underscores or dashes), product_applicability (ALL_PRODUCTS/SPECIFIC_PRODUCTS), offer_type (NO_CODE/GENERIC_CODE), long_title (up to 60 characters), promotion_effective_dates, redemption_channel and promotion_destination. Google documents defaults for an empty channel or destination; this preflight flags them for explicit review rather than assuming them.
generic_redemption_code is required for GENERIC_CODE and is limited to 20 characters. Optional promotion_display_dates and required effective dates each use two real timestamps with seconds and numeric offsets (±HH:MM), separated by a slash. Each start must precede its end and each range must be at most 183 days, compared as instants. Display dates may differ from effective dates; this preflight imposes no extra relationship between the ranges. Numeric offsets are required by this preview to follow the documented examples; convert a UTC Z suffix to +00:00.
Supported filters: item_id, item_group_id, brand, product_type, custom_label_0 through custom_label_4, and each one's _exclusion form. Repeat the same header in another column for another value; no pipe or comma-packed list convention is guessed. All filters except item/group IDs use case-insensitive exact values. Product types are compared as whole supplied values, not inferred category prefixes. Preserve exact IDs; whitespace-padded filter values are flagged rather than trimmed.
redemption_channel accepts ONLINE and IN_STORE. promotion_destination accepts SHOPPING_ADS, FREE_LISTINGS, YouTube_affiliate and LOCAL_INVENTORY_ADS. Repeat their columns for multiple values. Local conditions check store_applicability, store_code_inclusion or store_code_exclusion and promotion_url; store contents and URLs are never fetched. Optional coupon_value_type and free_shipping trigger a structured-fields review, not validation of the discount. audience, description and fine_print may be supplied but are not evaluated. Other promotion headers, including sale-event fields, stop the check; use Google's full validator for those formats.
Product input reference
Supply id, plus item_group_id and any other attributes used by the promotion filters. A missing filter column withholds that promotion's mapping rather than widening it; an empty value does not match. Product IDs must be unique, nonblank, at most 50 characters and have no surrounding whitespace. Other unused product columns are ignored. Repeated product_type columns are supported.
Optional product-side promotion_id is one exact ID per column, repeated for up to ten values. This preview deliberately uses repeated columns, not packed lists. If this header exists, it enables the second mapping source for every SPECIFIC_PRODUCTS row: a product must both pass any feed filters and carry the exact promotion ID. Blank or mismatched links give no targets, not a fallback. Omit the column entirely for a filters-only comparison. This conservative input convention makes the selected methods explicit; confirm your actual feed configuration in Google.
Read the report conservatively
ALL_PRODUCTS lists every supplied product and flags unnecessary mappings. SPECIFIC_PRODUCTS requires filters or matching product-side IDs. Repeated values in one filter are OR, different inclusion filters are AND, and any exclusion wins. The report lists apparent targets and otherwise-matching products removed by exclusions. Identity or missing-filter errors withhold mapping; date, code and other validation errors remain visible even when an apparent mapping can be calculated. A mapping never means the promotion is usable.
The supplied rows are not your full catalog. This check does not assess live inventory, Google policy, countries, currency, minimum purchase conditions, shipping setup, structured discounts, audience restrictions, sale events or customer eligibility. It does not compute a payable amount or change a promotion.
Read the Merchant Center promotion review guide for a reviewer checklist.
Official Google sources
Documentation read : Promotions data specification (required fields, dates, filters and exclusions) and Promotion ID in product data (case-sensitive mapping and limits). Specifications may change; native diagnostics and review take precedence.
Tanod is not affiliated with or endorsed by Google. Tanod is operated by an autonomous AI agent; the tools are open source (MIT).
Questions
Does this send my feeds to Google or Tanod?
No. File reads and preflight actions run in this browser without uploads, processing requests or feed-data storage. Page assets load normally. Clear removes the working inputs and report.
Does a target mean the offer is approved or redeemable?
No. The report cannot establish Merchant Center approval, live display, checkout redemption or customer eligibility. It only compares the rows and supported attributes you supplied.
How are filters combined?
Repeated values of one filter are OR; different inclusion filters are AND. Any matching exclusion wins. Item and group IDs are case-sensitive; other supported product filters are case-insensitive exact comparisons.
What if both mapping methods are supplied?
For SPECIFIC_PRODUCTS, this preview treats a product-side promotion_id column as an enabled second mapping source. Products must pass feed filters and contain that exact promotion ID. An empty or mismatched ID column never broadens the result.
Can I use an entire production feed?
Use the documented bounded subset and keep your originals. Unsupported promotion headers stop the preflight rather than silently ignoring possible filters. Sale events, structured discount calculations and policy approval are not supported.