Skip to main content

Open product methodology

Know exactly what the result means.

FeedGuardrail exposes its release identity, deterministic rule coverage, processing boundaries, and evidence format so a result can be inspected instead of taken on faith.

Processing model

From file to actionable report

1

Read locally

Your selected feed is read in browser memory. The file is not sent to FeedGuardrail.

2

Normalize safely

Headers and supported CSV, TSV, RSS/XML, and Atom/XML records are converted into a consistent local model.

3

Run versioned rules

The google-merchant-online-product-data-2026-09-09.1 ruleset evaluates product rows and cross-feed relationships deterministically.

4

Test declared intent

Actual changed fields and product counts are compared with the portable change contract selected for the release.

5

Gate and export

The contract and safety policy decide pass, review, or block; separate evidence and operator-ledger exports preserve the decision and normalized field changes.

Supported inputs: CSV, TSV, RSS/XML, Atom/XML · up to 100,000 product rows, 500 columns, and 25 MB per selected file. A desktop-class device is recommended for large catalogs; practical capacity varies with file width, browser, and available memory.

Ruleset scope: general online product data, evaluated from selected file contents. It is not Google’s Local Inventory specification and cannot infer program enrollment, target country, product category, or account state. The Vehicle ads value build_to_order receives a contextual review warning rather than a false unsupported-value error.

Intent and safety controls as data

A decision you can inspect, edit, save, and rerun.

FeedGuardrail 1.3.0 separates what the release is intended to change from what must remain safe. Both controls can be edited or loaded as strict JSON, then travel with evidence format v3 so another person can rerun the exact decision.

Strict production

Zero removals, large price changes, warnings, or in-stock drops.

Balanced operations

Small bounded changes are allowed; material integrity risks still block.

Observe broad changes

Wider planned refreshes are allowed while core blockers stay active.

Declared change contract

Content correction, price or promotion, availability sync, and broad-refresh profiles define allowed fields and maximum changed, added, and removed products. A contract can name every supported feed column—up to 500 fields—or use * alone for a genuinely unrestricted refresh. Unexpected scope can require review or block the release even when every changed value is individually valid.

Always blocking: candidate errors, introduced errors, required-value blanking, currency changes, likely product-ID churn, and removed required headers. Policy thresholds then govern removals, large price moves, warning volume, availability drops, and overall change breadth.

Rule catalog

49 sourced deterministic checks

Every rule names its platform basis, local detection coverage, applicability, primary source, and known limitation. This separates Google’s published requirements from FeedGuardrail’s operational judgment.

Sources reviewed 2026-09-09

required-id

Missing product ID

errorGoogle requirementDirect local check
Field and scope
id · product row
Applies when
Every in-scope online product.
Local detector
Products without a stable identifier.

Primary source:G-ID · ID [id]

id-limit

Product ID exceeds 50 characters

errorGoogle format constraintDirect local check
Field and scope
id · product row
Applies when
Every submitted id.
Local detector
Product identifiers beyond Google’s supported length.

Primary source:G-ID · ID [id]

id-characters

Product ID contains unsupported characters

errorGoogle requirementPartial local coverage
Field and scope
id · product row
Applies when
Every submitted id.
Local detector
Unicode control, format, private-use, surrogate, or unassigned characters that can make product identity unstable.
Known limitation
Local Unicode-category screening cannot prove how every downstream source normalizes or preserves the identifier.

Primary source:G-ID · ID [id]

required-title

Missing title

errorGoogle requirementPartial local coverage
Field and scope
title / structured_title · product row
Applies when
Every product; either title or structured_title satisfies presence.
Local detector
Products without either a plain or structured title.
Known limitation
Structured-title subattributes and digital-source declarations are not semantically validated.

Primary sources:G-TITLE · Title [title] and structured title [structured_title]G-PDS · Product data specification

title-limit

Title exceeds 150 characters

warningGoogle format constraintPartial local coverage
Field and scope
title · product row
Applies when
A plain title is submitted.
Local detector
Plain titles beyond the supported length.
Known limitation
Structured-title content length is not independently parsed.

Primary source:G-TITLE · Title [title] and structured title [structured_title]

title-front-load

Title may hide important details

warningGoogle best practiceAdvisory proxy
Field and scope
title · product row
Applies when
A plain title exceeds 70 characters.
Local detector
Long titles whose useful attributes may be truncated in placements.
Known limitation
Length alone cannot establish whether decisive attributes are actually hidden.

Primary source:G-TITLE · Title [title] and structured title [structured_title]

title-editorial

Title may violate editorial guidance

warningGoogle requirementAdvisory proxy
Field and scope
title · product row
Applies when
A plain title is submitted.
Local detector
Heavy capitalization or a limited set of common promotional phrases.
Known limitation
The phrase list and capitalization ratio can miss violations or flag legitimate acronym-heavy titles.

Primary source:G-TITLE · Title [title] and structured title [structured_title]

required-description

Missing description

warningGoogle requirementPartial local coverage
Field and scope
description / structured_description · product row
Applies when
Every product; either description or structured_description satisfies presence.
Local detector
Products without either a plain or structured description.
Known limitation
The local warning reflects Google’s documented limited-performance consequence; structured subattributes are not semantically validated.

Primary sources:G-DESC · Description [description] and structured description [structured_description]G-PDS · Product data specification

description-limit

Description exceeds 5,000 characters

warningGoogle format constraintPartial local coverage
Field and scope
description · product row
Applies when
A plain description is submitted.
Local detector
Plain descriptions beyond the supported length.
Known limitation
Structured-description content is not independently parsed.

Primary source:G-DESC · Description [description] and structured description [structured_description]

required-link

Missing landing-page link

errorGoogle requirementDirect local check
Field and scope
link · product row
Applies when
Every product.
Local detector
Products without a destination URL.

Primary source:G-LINK · Link [link]

invalid-link

Invalid landing-page URL

errorGoogle requirementPartial local coverage
Field and scope
link · product row
Applies when
A link is submitted.
Local detector
Destination values that are not complete HTTP or HTTPS URLs.
Known limitation
A local parser cannot prove domain ownership, crawlability, redirect behavior, page usability, or product consistency.

Primary source:G-LINK · Link [link]

link-format-limit

Landing-page URL exceeds channel format limits

errorGoogle format constraintPartial local coverage
Field and scope
link · product row
Applies when
A link is submitted.
Local detector
Product links with non-ASCII URL characters or more than 2,000 characters.
Known limitation
ASCII and length are checked; raw RFC 3986 compliance and downstream normalization are not fully proven.

Primary source:G-LINK · Link [link]

required-image

Missing primary image link

errorGoogle requirementDirect local check
Field and scope
image_link · product row
Applies when
Every product.
Local detector
Products without a primary image URL.

Primary source:G-IMAGE · Image link [image_link]

invalid-image

Invalid image URL

errorGoogle requirementPartial local coverage
Field and scope
image_link · product row
Applies when
An image_link is submitted.
Local detector
Image values that are not complete HTTP or HTTPS URLs.
Known limitation
The target is not fetched, so media type, crawlability, stability, dimensions, and policy compliance remain unknown.

Primary source:G-IMAGE · Image link [image_link]

image-format-limit

Image URL exceeds channel format limits

errorGoogle format constraintPartial local coverage
Field and scope
image_link · product row
Applies when
An image_link is submitted.
Local detector
Primary image links with non-ASCII URL characters or more than 2,000 characters.
Known limitation
This is a local URL-envelope check only.

Primary source:G-IMAGE · Image link [image_link]

mobile-link-format

Invalid mobile landing-page URL

errorGoogle format constraintPartial local coverage
Field and scope
mobile_link · product row
Applies when
Optional mobile_link is present.
Local detector
Submitted mobile destinations outside the supported URL and length envelope.
Known limitation
The mobile page is not fetched or compared with the product.

Primary source:G-MOBILE · Mobile link [mobile_link]

additional-image-format

Invalid additional image list

errorGoogle format constraintPartial local coverage
Field and scope
additional_image_link · product row
Applies when
Optional additional_image_link is present.
Local detector
Malformed additional-image URLs or lists containing more than ten values.
Known limitation
URLs are checked locally; image contents, crawlability, and all repeated-field encoding cases are not proven.

Primary source:G-ADDIMAGE · Additional image link [additional_image_link]

video-link-format

Invalid product video URL list

errorGoogle format constraintPartial local coverage
Field and scope
video_link · product row
Applies when
Optional video_link is present.
Local detector
Malformed video URLs or lists containing more than ten values.
Known limitation
URLs and count are checked, but format, direct-file behavior, crawlability, duration, size, resolution, and aspect ratio are not.

Primary source:G-VIDEO · Video link [video_link]

availability-enum

Missing or unsupported availability

errorGoogle requirementPartial local coverage
Field and scope
availability · product row
Applies when
Standard online products.
Local detector
Standard online-product availability outside the documented vocabulary.
Known limitation
Product-program context is not inferred; Vehicle ads build_to_order is handled as a separate review warning.

Primary source:G-AVAIL · Availability [availability]

vehicle-availability-context

Vehicle-only availability needs review

warningConditional Google requirementAdvisory proxy
Field and scope
availability · product row
Applies when
availability is build_to_order.
Local detector
build_to_order values whose Vehicle ads context cannot be established locally.
Known limitation
The file alone cannot establish enrollment in or eligibility for Vehicle ads.

Primary source:G-AVAIL · Availability [availability]

availability-date-required

Missing availability date

errorConditional Google requirementDirect local check
Field and scope
availability_date · product row
Applies when
availability is preorder or backorder.
Local detector
Preorder or backorder products without an availability date.

Primary sources:G-AVAIL · Availability [availability]G-AVAILDATE · Availability date [availability_date]

availability-date-format

Invalid availability date

errorGoogle format constraintPartial local coverage
Field and scope
availability_date · product row
Applies when
availability_date is present.
Local detector
Availability dates outside the supported ISO 8601 envelope.
Known limitation
Syntax is checked, but landing-page visibility and the maximum future horizon are not.

Primary sources:G-AVAILDATE · Availability date [availability_date]G-DATE · Format date and time

price-format

Missing or invalid price

errorGoogle requirementPartial local coverage
Field and scope
price · product row
Applies when
Every product.
Local detector
Prices without a non-negative number and recognized ISO 4217 currency code.
Known limitation
Syntax and a versioned recognized-currency set are checked; target-country support, page equality, checkout equality, and program context are not.

Primary sources:G-PRICE · Price [price]G-CURRENCY · Supported languages and currencies

price-rounding

Price precision will be rounded

warningGoogle format constraintDirect local check
Field and scope
price / sale_price · product row
Applies when
price or sale_price has more than two decimal places.
Local detector
Price values carrying more than two decimal places.
Known limitation
FeedGuardrail warns before Google’s documented rounding; it does not predict the displayed rounded value in every currency context.

Primary sources:G-PRICE · Price [price]G-SALE · Sale price [sale_price]

zero-price-context

Zero price needs program review

warningConditional Google requirementAdvisory proxy
Field and scope
price / sale_price · product row
Applies when
price or sale_price equals zero.
Local detector
Zero prices whose documented contract or subscription exception cannot be established locally.
Known limitation
The local file cannot establish a qualifying device-contract or physical-subscription program.

Primary sources:G-PRICE · Price [price]G-SALE · Sale price [sale_price]

sale-price

Invalid sale price

errorConditional Google requirementPartial local coverage
Field and scope
sale_price · product row
Applies when
Optional sale_price is present.
Local detector
Sale prices with invalid syntax, mismatched currency, or an amount not below regular price.
Known limitation
The local check cannot prove promotion timing, landing-page display, checkout price, or program-specific zero-price eligibility.

Primary sources:G-SALE · Sale price [sale_price]G-PRICE · Price [price]

sale-date-format

Invalid sale price effective date

errorGoogle format constraintPartial local coverage
Field and scope
sale_price_effective_date · product row
Applies when
Optional sale_price_effective_date is present.
Local detector
Sale windows without two ordered ISO 8601 dates or date-times.
Known limitation
The ordered ISO envelope is checked; promotion eligibility and live behavior are not.

Primary sources:G-SALEDATE · Sale price effective date [sale_price_effective_date]G-DATE · Format date and time

expiration-date-format

Invalid expiration date

errorGoogle format constraintPartial local coverage
Field and scope
expiration_date · product row
Applies when
Optional expiration_date is present.
Local detector
Expiration values outside supported ISO 8601 date formats.
Known limitation
Syntax is checked; the maximum future horizon is not evaluated to preserve rerun determinism.

Primary sources:G-EXPIRY · Expiration date [expiration_date]G-DATE · Format date and time

condition-enum

Unsupported condition

errorGoogle format constraintPartial local coverage
Field and scope
condition · product row
Applies when
condition is supplied; it is contextually required for used or refurbished products.
Local detector
Submitted conditions outside the general online-product vocabulary.
Known limitation
Missing condition and Vehicle-ad-specific context cannot be inferred from arbitrary feeds.

Primary source:G-CONDITION · Condition [condition]

adult-boolean

Invalid adult-content flag

errorGoogle format constraintPartial local coverage
Field and scope
adult · product row
Applies when
adult is supplied.
Local detector
Adult flags outside yes, true, no, or false.
Known limitation
The tool cannot determine whether an unlabeled product contains adult content.

Primary source:G-ADULT · Adult [adult]

bundle-boolean

Invalid bundle flag

errorGoogle format constraintPartial local coverage
Field and scope
is_bundle · product row
Applies when
is_bundle is supplied.
Local detector
Bundle flags outside yes, true, no, or false.
Known limitation
The tool cannot determine whether an unlabeled offer is a merchant-defined bundle.

Primary source:G-BUNDLE · Bundle [is_bundle]

multipack-format

Invalid multipack quantity

errorConditional Google requirementPartial local coverage
Field and scope
multipack · product row
Applies when
multipack is supplied for a retailer-defined multipack.
Local detector
Multipack quantities that are not positive whole numbers.
Known limitation
The tool cannot distinguish retailer-defined from manufacturer-defined packs or detect every missing attribute.

Primary source:G-MULTIPACK · Multipack [multipack]

age-group-enum

Unsupported age group

errorConditional Google requirementDirect local check
Field and scope
age_group · product row
Applies when
age_group is supplied; requiredness varies by product and target country.
Local detector
Submitted age-group values outside Google’s vocabulary.

Primary source:G-AGE · Age group [age_group]

gender-enum

Unsupported gender value

errorConditional Google requirementDirect local check
Field and scope
gender · product row
Applies when
gender is supplied; requiredness varies by product and target country.
Local detector
Submitted gender values outside Google’s vocabulary.

Primary source:G-GENDER · Gender [gender]

size-system-enum

Unsupported size system

warningGoogle format constraintDirect local check
Field and scope
size_system · product row
Applies when
Optional apparel size_system is supplied.
Local detector
Submitted size systems outside Google’s country and region codes.

Primary source:G-SIZESYSTEM · Size system [size_system]

size-type-enum

Unsupported size type

warningGoogle format constraintDirect local check
Field and scope
size_type · product row
Applies when
Optional apparel size_type is supplied.
Local detector
Size-type values or repetitions outside Google’s vocabulary.

Primary source:G-SIZETYPE · Size type [size_type]

product-type-limit

Product type exceeds repetition or length limits

warningGoogle format constraintPartial local coverage
Field and scope
product_type · product row
Applies when
Optional product_type is supplied.
Local detector
More than five merchant hierarchies or any hierarchy beyond 750 characters.
Known limitation
Common comma-separated repetitions are checked; every possible quoted repeated-field encoding is not reconstructed.

Primary source:G-PRODUCTTYPE · Product type [product_type]

custom-label-limit

Custom label exceeds 100 characters

warningGoogle format constraintPartial local coverage
Field and scope
custom_label_0 … custom_label_4 · product row
Applies when
A custom_label_0 through custom_label_4 value is supplied.
Local detector
Campaign-segmentation labels beyond the supported length.
Known limitation
The account-wide unique-value limit cannot be established from one selected file.

Primary source:G-CUSTOMLABEL · Custom label 0–4 [custom_label_0–4]

shipping-weight-format

Invalid shipping weight

errorGoogle format constraintPartial local coverage
Field and scope
shipping_weight · product row
Applies when
Optional shipping_weight is supplied.
Local detector
Shipping weights outside documented units or upper bounds.
Known limitation
Syntax and published upper bounds are checked; carrier configuration and contextual requiredness are not.

Primary source:G-SHIPWEIGHT · Shipping weight [shipping_weight]

identifier-boolean

Unrecognized identifier_exists value

warningGoogle format constraintDirect local check
Field and scope
identifier_exists · product row
Applies when
Optional identifier_exists is supplied.
Local detector
Identifier flags outside yes, true, no, or false.

Primary source:G-IDEXISTS · Identifier exists [identifier_exists]

identifier-incomplete

Product identifiers look incomplete

warningFeedGuardrail guardrailAdvisory proxy
Field and scope
gtin / brand / mpn · product row
Applies when
The product is not explicitly marked as having no assigned identifiers.
Local detector
Products that may be missing the identifier combination expected for their context.
Known limitation
Expected combinations depend on category, condition, manufacturer status, and whether identifiers were assigned.

Primary sources:G-UPI · About unique product identifiersG-IDEXISTS · Identifier exists [identifier_exists]G-GTIN · GTIN [gtin]G-PDS · Product data specification

invalid-gtin

Malformed GTIN

errorGoogle format constraintPartial local coverage
Field and scope
gtin · product row
Applies when
One or more GTIN values are supplied.
Local detector
GTINs with an unsupported length or failed check digit.
Known limitation
Length and check digit are checked; restricted prefixes, coupon ranges, allocation status, and packaging-level restrictions are not.

Primary sources:G-GTIN · GTIN [gtin]G-UPI · About unique product identifiers

duplicate-id

Duplicate product ID

errorGoogle requirementPartial local coverage
Field and scope
id · whole feed
Applies when
Distinct rows in the selected file.
Local detector
A product ID used by more than one row in the selected file.
Known limitation
Uniqueness across other active sources and historical ID reuse are outside a local-file check.

Primary source:G-ID · ID [id]

case-variant-id

Product IDs differ only by casing

warningGoogle requirementDirect local check
Field and scope
id · whole feed
Applies when
IDs in the selected file differ only by casing.
Local detector
IDs that become ambiguous when case is ignored.

Primary source:G-ID · ID [id]

mixed-currency

Multiple currencies in one feed

warningFeedGuardrail guardrailAdvisory proxy
Field and scope
price · whole feed
Applies when
The selected file contains more than one parsed currency.
Local detector
Catalogs that may contain accidentally combined regional prices.
Known limitation
Google does not prohibit every mixed-currency feed; legitimate multi-country and conversion workflows exist.

Primary sources:G-CURRENCY · Supported languages and currenciesG-MULTICOUNTRY · Shopping ads and free listings in multiple countriesG-PRICE · Price [price]

single-variant-group

Variant group contains one product

warningFeedGuardrail guardrailAdvisory proxy
Field and scope
item_group_id · whole feed
Applies when
An item_group_id appears once in the selected file.
Local detector
A group represented by only one row in the selected file.
Known limitation
Sibling variants may be inactive, filtered, or supplied through another source.

Primary source:G-ITEMGROUP · Item group ID [item_group_id]

item-group-limit

Item group ID exceeds 50 characters

errorGoogle format constraintDirect local check
Field and scope
item_group_id · product row
Applies when
item_group_id is supplied.
Local detector
Variant-group identifiers beyond the supported length.

Primary source:G-ITEMGROUP · Item group ID [item_group_id]

item-group-self

Product ID equals item group ID

warningGoogle best practiceAdvisory proxy
Field and scope
id / item_group_id · product row
Applies when
id equals item_group_id.
Local detector
A child offer identifier reused as its shared group identifier.
Known limitation
Equality is a strong semantic warning, not a separately documented syntax rejection.

Primary source:G-ITEMGROUP · Item group ID [item_group_id]

duplicate-variant

Duplicate variant attributes

warningGoogle requirementPartial local coverage
Field and scope
item_group_id / color / size / material / pattern / age_group / gender / variant_option · whole feed
Applies when
Multiple rows share item_group_id and populated standard or structured variant dimensions.
Local detector
Products in one group that share the same populated standard or structured variant dimensions.
Known limitation
The signature covers color, size, material, pattern, age_group, gender, and raw variant_option; it cannot prove every custom dimension or landing-page choice.

Primary sources:G-DUPVARIANT · How to fix: Duplicate variantG-ITEMGROUP · Item group ID [item_group_id]G-VARIANTOPTION · Variant option [variant_option]

Reproducible evidence

A comparison record another person can rerun.

Release Gate evidence v3 records the exact input-file SHA-256 hashes, declared change contract, ruleset, safety policy, pass/review/block checks, issue outcomes, field drift, price and availability movement, identity risk, and inventory/schema changes. A recipient can load that evidence with both exact files and reproduce the decision locally.

Exact inputs

Two SHA-256 hashes bind the record to the baseline and candidate file bytes.

Stable decision logic

The evidence names the versioned ruleset and embeds the exact validated change contract and safety policy.

Privacy minimized

Filenames and product IDs are excluded by default; no feed rows or raw row-level values are embedded.

Unsigned evidence: hashes prove a byte-for-byte match to recorded inputs, and the local rerun checks reproducibility. The versioned evidence-v3 HTML is checked against its canonical embedded record, but the pack is not a digital signature, certification, authorship proof, proof of prior authorization, proof that it is the original export, or guarantee of Google approval. Its timestamp and optional filename labels are self-reported metadata. Someone holding both feeds can generate a different internally consistent pack with different controls.

Separate operator change ledger

A local CSV lists normalized before/after values for uniquely matched product-field changes, product membership changes, and explicit comparison-ambiguity records with critical, review, or informational risk. It is spreadsheet-formula protected and deliberately separate from privacy-minimized shareable evidence.

Primary specification sources

Each rule above links directly to the official Google page used for its classification and records the review date. Google can change its specifications; a dated source review is stronger than an unsourced claim but does not make FeedGuardrail affiliated with Google or guarantee channel approval. FeedGuardrail’s release contracts and safety thresholds remain its own operational controls.

Honest boundaries

What local checks cannot prove

  • Landing-page price or availability parity
  • Live image crawlability or image-content policy
  • Merchant Center account, policy, or diagnostics state
  • Approval, traffic, revenue, or advertising performance

Inspect it, then use it.

Run the built-in samples before selecting a real feed. No account or ad-platform connection is required.

Evaluate a release