Template

Product feed audit template

None of the pages ranking for this query gives you something to fill in. This one does: a 24-point product data quality checklist grouped into six checks, each with a pass threshold and the way to run it across thousands of rows rather than by eye, plus a tracker CSV to record the result per feed. Where a check can be automated, it says which Textfinity feed hygiene checker does it.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Six check groups: completeness, length, language consistency, value consistency, outliers and URLs. Then three manual groups: identifiers, price and availability, landing pages.
  • Thresholds from Google's spec: title 150 characters, description 5,000, id 50, brand 70, custom labels 100; availability in_stock / out_of_stock / preorder / backorder.
  • Of 20 feeds Textfinity has profiled, 18 had at least one critical issue, and titles used about 20 of Google's 150 characters on average. Expect findings.
  • Audit the output feed, not the store export: the mapping rules are where most problems are introduced or fixed.

The product feed audit template, check by check

Score each check as pass, warn or fail against the threshold, and write the affected row count. The 'How to run it' column says whether a feed hygiene checker does the work or you need a filter or a manual sample.

#CheckPass thresholdHow to run it
1Required attributes present100% of rows have id, title, description, link, image_link, availability, priceCompleteness checker: per-column % filled
2Brand present100% for new products in categories that need itCompleteness checker
3GTIN present or identifier_exists = no100% of rowsCompleteness checker on gtin; filter: the source barcode column is empty (those rows need identifier_exists = no)
4Category presentgoogle_product_category on 95%+ of rowsCompleteness checker
5Variant attributes on apparelcolor, size, gender, age_group, item_group_id on 100% of apparel rowsCompleteness checker, filtered to apparel
6Title length0 rows over 150 characters; fewer than 10% under 30Length distribution checker on the output; filter: the source title is shorter than 30
7Description length0 rows over 5,000; fewer than 10% under 100Length distribution checker
8Field length limitsid ≤ 50, brand ≤ 70, custom_label ≤ 100, product_type ≤ 750Length distribution checker
9One language per feed0 rows with mixed-language title or descriptionLanguage consistency checker
10Consistent value spellingsOne spelling per color, size, brand, condition valueValue consistency checker ('Navy', 'navy ', 'NAVY')
11Enumerated values validavailability and condition only use Google's allowed valuesProduct explorer sample of the mapped values; filter only if the source column already holds Google's values
12No outlier valuesNo rare values in columns that should be uniform (currency, condition, age_group)Outlier detection checker
13Link URLs well formed100% start with https and resolve to a product pageURL validation checker; manual sample of 20
14Image URLs well formed100% start with https; no placeholder imagesURL validation checker; manual sample of 20
15Price formatNumber with currency, e.g. 129.99 USD, on 100% of rowsProduct explorer sample of the mapped price; filter: the source price does not match regexp ^[0-9]+(\.[0-9]+)?$
16Sale price lower than price0 rows where sale_price ≥ priceFilter: compare in a merged check column or sample manually
17Availability matches stockOut-of-stock rows excluded or marked out_of_stockFilter: the source stock column is equal to 0 (variant.inventoryQuantity on Shopify)
18Duplicate ids0 duplicate id valuesProduct explorer search; export and count
19Variants groupeditem_group_id shared by all variants of a productManual sample of 10 products with variants
20Titles carry brand and key attribute90%+ of titles start with brand and include type or modelManual sample of the mapped titles in the product explorer
21Descriptions free of promo text and HTML0 rows with prices, shipping claims or tags in descriptionFilter on the source description: matches regexp <[^>]+>|free shipping|% off counts the rows the description rule must clean
22Landing page matches feedPrice and availability on page equal the feed in a 20-row sampleManual sample
23Feed freshnessFeed rebuilt after the last source change; channel fetch within 24 hoursFeed sync log; channel fetch time
24Channel-specific columnsRequired columns for Meta, TikTok Shop, Pinterest present where usedCompleteness checker on each channel feed

Character limits and allowed values from Google's product data specification, checked 2026-10-27. Percent thresholds are working targets, not Google policy.

Why the audit runs on the output feed

A product data quality checklist applied to the store export tells you what the store has. Applied to the feed a channel fetches, it tells you what the channel sees, which is the thing that gets disapproved. The difference is the mapping layer: a combine rule that produced a 190-character title, a currency suffix that was never added, a category lookup with 30 unmatched paths. Audit the feed, trace each failure back to the rule or the source column, and fix it at the source only when it is a source problem.

Textfinity's feed hygiene profile runs the six automated groups (completeness, length distribution, language consistency, value consistency, outlier detection, URL validation) over the whole catalog on each build. The remaining checks are filters you add to a scratch feed, or samples you take in the product explorer. Textfinity does not import Merchant Center diagnostics, so disapprovals still get read in Merchant Center; the audit is what you run before they happen.

Turning a failed check into a fix

Most failures map to one of four fixes. Missing values: a static default (condition = new), a derived value (identifier_exists from gtin), or a merged source for data the store lacks (GTINs, brand). Over-length or thin text: a combine or AI config for titles, remove from regexp for HTML, an AI description (500 to 1,000 characters, accepted in review) for thin descriptions. Inconsistent values: replace from regexp for case and whitespace, replace from Google Sheet for a controlled vocabulary. Bad rows: a filter rule that excludes them until the source is fixed.

Three fixes from the checklist as Textfinity rules

#10 value consistency:  color → replace from regexp (?i)^\s*navy\s*$ → Navy
#17 availability:       exclude filter: [stock] is equal to "0"
#21 promo in description: description → remove from regexp (?i)free shipping[^.]*\.

How often to audit, and what to track

Run the full 24 checks when a feed is created, when the source platform or a mapping rule changes, and before a seasonal campaign. Run the six automated groups on every build, which is what the hygiene profile does by default. The tracker CSV records one row per check per feed with the date, the affected row count and the fix owner, so the second audit shows movement rather than a fresh list.

Two numbers are worth watching between audits: average title length (the profiled average of about 20 characters means most feeds are leaving 130 characters of search matching unused) and the completeness percentage of the three attributes that drive matching, gtin, google_product_category and brand.

Examples

Worked examples, by situation

Three audits, three different failure patterns, and the rule that cleared each.

Fashion · Google Shopping · 3,200 SKUs · Shopify · check 10 and 6

Color spelled seven ways and titles missing size

Before

color: Navy | navy | NAVY | Navy Blue | navy-blue | Blue Navy | nvy
title: Crew Tee (12 characters)

After

color: Navy
title: Fieldnote Organic Crew Tee Navy M (34 characters)

How we set it up

Value consistency flagged the seven spellings; we mapped color with replace from google sheet on a 40-row color vocabulary; it replaces substrings row by row, so longer variants (navy-blue, Navy Blue) go above the short ones. Length distribution flagged 1,900 titles under 30 characters; we mapped title as a combine of product.vendor, product.title, the color option and the size option. The title reads the raw color, so it carries the store's spelling until the store itself is cleaned.

Home decor · Meta catalog · 800 SKUs · WooCommerce XML · check 13, 14 and 21

Relative image paths and HTML in descriptions

Before

image_link: /wp-content/uploads/vase-01.jpg
description: <p>Ceramic vase. <a href="/shipping">Free shipping!</a></p>

After

image_link: https://shop.example/wp-content/uploads/vase-01.jpg
description: Ceramic vase.

How we set it up

URL validation flagged 800 relative paths; we gave image_link the prefix https://shop.example. Filter check 21 found 310 descriptions with HTML and promo text; we mapped description with remove from regexp <[^>]+>|Free shipping!.

Electronics · Google Shopping · 5,000 SKUs · Magento · check 3, 11 and 17

Empty GTINs, a lowercase 'In Stock' and sold-out rows

Before

gtin: (empty on 1,200 rows)
availability: In Stock | in_stock | available
stock: 0 on 340 rows marked in_stock

After

identifier_exists: no (on the 1,200 rows)
availability: in_stock
340 rows excluded until restocked

How we set it up

Completeness showed gtin at 76%; we wrote identifier_exists as an advanced rule: if [gtin] is empty then "no" else "yes". Outlier detection flagged 'In Stock' and 'available'; availability became replace from regexp (?i)^(in stock|available)$ → in_stock, and an exclude filter drops rows where [stock] is equal to 0.

Copy this plan

Run the audit in an hour

Steps two to five are in Textfinity, where we run them for you; step six is wherever the fix belongs.

  1. 01

    Download the tracker and pick the feed to audit

    One tracker per feed. Audit the feed with the most spend first; the Google Shopping feed for most stores.

  2. 02

    Connect the source and build the feed

    If the feed already exists in Textfinity, skip to step three. Otherwise connect the store and start from the channel template so the column names match the checklist.

    What we set up: We connect your store and build the feed from the matching channel template.
  3. 03

    Read the feed hygiene profile

    It covers checks 1 to 14 and 24: completeness per column, length distribution against channel limits, language and value consistency, outliers and URL validation. Record the affected counts in the tracker.

    What we set up: We run the feed hygiene profile and fill the tracker's counts for you.
  4. 04

    Add filters for the rule-based checks

    Checks 3, 6, 15, 17 and 21 use filter rules on source columns; 11 and 20 are samples of the mapped output. Add each as an include rule on a scratch copy of the feed to count matching rows, then delete it. Filters read the source columns, not the mapped output, so point them at the column each rule reads, and check mapped values in the product explorer.

    What we set up: We count each check with temporary include filters (is not in list, does not match regexp, is longer than) on a scratch copy of the feed.
  5. 05

    Sample the manual checks in the product explorer

    Checks 16, 18, 19 and 22: open ten products with variants and twenty at random, compare the mapped output with the landing page.

    What we set up: We pull the sample in the product explorer and compare it with your landing pages.
  6. 06

    Fix in the right place and re-run

    Mapping rule for derived problems, merged source for missing data, store edit for genuine source errors. Rebuild and read the hygiene profile again; the tracker now shows the delta.

    What we set up: We fix derived problems with mapping rules and missing data with a merged source, and list the store edits for you.

Customization tips

Make it yours

Fix the rule, not the row

A failed check on 300 rows is almost always one rule or one source column. Editing rows in the store feels productive and leaves the rule to fail again on the next import.

Set thresholds you can defend

100% is right for required attributes and URL format. For title length and category coverage, pick the percentage you will actually act on this month and raise it next audit.

Audit every channel feed, not only Google

Meta, TikTok Shop and Pinterest have their own required columns and their own spelling of availability. The same six checker groups run on each feed; check 24 exists so you do not assume Google-clean means channel-clean.

Keep the previous tracker

The value of the second audit is the comparison. Store the CSV with the date in the filename and diff the affected counts.

Downloads

Take the files

FAQ

Questions about product feed audit template

What is a product feed audit?

A structured check of the product data a channel receives: whether required attributes are present, within length limits and using allowed values, whether identifiers and categories are filled, whether prices and availability match the landing page, and whether URLs resolve. The output is a list of failed checks with affected row counts and a fix for each.

What should a product data quality checklist include?

At minimum: completeness of required attributes, length limits (Google: title 150, description 5,000), allowed values for availability and condition, consistent spellings of colors, sizes and brands, valid link and image URLs, price format with currency, GTIN or identifier_exists, variant grouping, and a sample comparison against the landing page.

How often should I audit a product feed?

Fully when the feed is created, when a mapping rule or source platform changes, and before seasonal campaigns. The automated checks (completeness, length, consistency, URLs) should run on every rebuild; Textfinity's feed hygiene profile does that by default.

Can a feed audit replace Merchant Center diagnostics?

No. The audit catches data problems before upload; Merchant Center diagnostics report what Google actually disapproved, including policy issues no data check can predict. Use both. Textfinity does not import Merchant Center diagnostics, so read them in Merchant Center after each fetch.

Set up for you

Have the 24 checks run on your own feed.

Send us your store or feed URL. We build the feed from the channel template, run the audit and fix what the rules can fix; the completeness, length, consistency and URL checks then run on every build.

Have us audit your feedOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.