Tracking & Attribution

How Do You Check If Your Product Feed Will Be Rejected?

Feed rejections come from missing required fields; downranking comes from missing quality fields. How to count both before you push, not after.

Quick answer

Check your feed before you push it by separating two failure classes: items that will be rejected outright, and items that will be accepted but downranked. Rejection is almost always a missing required field — no image, or no product identifier at all. Downranking comes from missing quality fields like barcodes, product type or description. Count both against your variant total before submitting, because Merchant Center only tells you after you've pushed.

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Check your feed before you push it by separating two failure classes: items that will be rejected outright, and items that will be accepted but downranked. They have different causes, different costs, and only one of them is urgent.

Rejection is almost always a missing required field — no image, or no product identifier of any kind. Downranking comes from missing quality fields: no barcode, no product type, no description. Count both against your total before submitting, because Merchant Center and Commerce Manager only tell you afterwards.


What’s the difference between rejected and downranked?

Rejected items don’t appear at all. Downranked items appear and lose.

Rejected means the platform refuses the item. It won’t show in Shopping results, it can’t be used in a dynamic ad, and it doesn’t exist as far as your campaigns are concerned. The item is in your feed and invisible in the market. Two causes account for nearly all of it:

  • No image. Both Google and Meta reject items with no image. There is no partial credit here — a product without a picture cannot be merchandised.
  • No product identifier at all. If an item has no GTIN, no MPN and no brand, there’s nothing to identify it as a real product. Feeds flag this with identifier_exists=no, and the item is heavily penalised or excluded.

Downranked means the item is accepted and then loses to better-described competitors. Nothing errors. You get impressions, just fewer and worse ones, and diagnosing it is hard because the item looks fine in every dashboard. Common causes:

  • No barcode (GTIN). Barcodes are how Google matches your listing to a known product, which affects both paid placement and free listings.
  • No product type. Without a category, the platform has to guess what the item is, which weakens targeting.
  • No description. Thin listings convert worse and can be flagged as low quality.
  • Out of stock. Technically fine, genuinely present in the feed, and hidden from shoppers until restocked.

The distinction matters because it dictates order of work. Fixing 40 items with no image recovers 40 items that were earning nothing. Adding barcodes to 400 items improves performance that already exists. Both are worth doing; only the first is an emergency.

Feed items sorted into three states — rejected and invisible, accepted but downranked, and fully qualified


Why check before you push instead of after?

Because the platform’s own diagnostics are a post-mortem, and the feedback loop is slow enough to cost a launch.

The normal sequence is: push the feed, wait for a crawl, read the errors in Merchant Center, fix them in your store, wait for the next sync, re-check. Each cycle takes hours. If you’re launching a season or a new catalog, that’s the difference between campaigns starting on the day you planned and starting later with a fraction of the range live.

There’s a second reason that matters more over time. Merchant Center tells you about the items it rejected. It is much less insistent about the items it accepted and buried — those don’t appear as errors, because nothing went wrong. A pre-push check that counts both classes gives you the thing the platform’s own report is structurally bad at: the scale of your quality problem, before it becomes a performance problem you can’t explain.


What should you check, in order?

Five checks, ordered by consequence rather than by effort.

1. Items with no image. Count them. These are rejected, every one, on both platforms. This is the only check that is genuinely urgent.

2. Items with no identifier at all. Not “no GTIN” — no GTIN and no MPN and no brand. An item with a brand but no barcode is fine; an item with none of the three has nothing to identify it.

3. Items with no barcode, where one exists in the real world. A manufactured product with a GTIN you haven’t supplied is losing match quality for no reason. Custom and handmade goods legitimately have none, which is what MPN and brand are for.

4. Items with no product type. Cheap to fix in bulk, and it improves categorisation across the whole catalog rather than item by item.

5. Out-of-stock items. Not an error, but worth knowing as a share of the feed. A catalog that’s 30% out of stock is advertising a much smaller range than its product count suggests.

Do all five at the variant level, not the product level. Feeds are built per variant, and a product whose parent record looks complete can still have six variants missing images. Counting products flatters the number.


Why do Google and Meta disagree about the same feed?

Because their minimum requirements differ, so the same file can be in good shape for one and weak for the other.

The practical divergence is the identifier. Meta’s floor is essentially the image — an item with a picture and a price can be merchandised. Google wants an identifier as well, because its whole model depends on matching your listing to a known product so it can compare offers.

The consequence: an item with an image but no GTIN, MPN or brand can be perfectly usable on Meta and close to worthless on Google. If you’re running both from one feed — which is the normal setup, since the same file format serves both — a single “feed health” number will mislead you. You need readiness measured per destination.


How does PartialLeads check feed health?

By running the checks continuously against the synced catalog, at variant grain, and splitting readiness by destination — so you see the problem before the platform does.

Six checks, each with a severity. Missing image and missing identifier are marked as rejection-class. Out of stock, missing barcode, missing product type and missing description are marked as quality-class. Each carries a count and a plain-language explanation of the consequence, so the list is a work queue rather than a diagnostic dump.

Two readiness percentages, not one. Google-ready is measured as having an image and at least one of GTIN, MPN or brand. Meta-ready is measured as having an image. Reporting them separately is what stops a feed that’s fine for Meta from looking fine for Google.

A single health score out of 100, weighted so that rejection-class issues dominate and quality issues discount it — useful as a trend line rather than as a target.

Variant grain throughout. Counts are per variant, matching the grain the feeds are actually built at.

Catalog composition alongside the health data. Variant and product counts, in-stock versus out-of-stock, how much of the catalog is on sale and by how much, price minimum, maximum and average, a price-band distribution, your most common product types, and brand coverage. This is the context that makes a health number interpretable — 200 items missing barcodes reads differently on a 300-item catalog than on a 20,000-item one.

Ninety-day sales alongside it. Orders, revenue, how many products actually sold, how many didn’t, and the top sellers. Which turns “fix these 40 items” into “fix these 40 items, six of which sold last quarter.”

One feed URL for both platforms. The feed renders as RSS with Google’s namespace, which both Google Merchant Center and Meta Commerce Manager ingest, so there’s one URL to paste into both rather than two pipelines to keep in sync. It’s protected by an unguessable token in the URL, rotatable if it leaks, and the identifier flag is emitted automatically when an item has no GTIN, MPN or brand.

Honest boundaries — three, and they matter.

The checks test presence, not validity. They find fields that are empty. They do not validate that a price is correctly formatted, that a title is within length limits, that a landing page resolves, that an image meets resolution requirements, or that a product complies with policy. An item can pass every check here and still be rejected for a reason none of them looks at. This is a pre-flight for the most common and most mechanical failures, not a replacement for Merchant Center’s own diagnostics.

The feed-health panel currently covers Shopify catalogs. WooCommerce stores get the feed generation; the health scoring and composition analysis are Shopify-only today.

And the data is synced, not live — the catalog refreshes on a several-hour cadence with a short cache on top, so a fix you make in your store admin shows up on the next sync rather than instantly.

Two panels side by side: the checks that detect empty required and quality fields, and the larger set of format and policy problems that are present in the data but not tested

Problem PartialLeads mechanism Where you see it working
You only learn about rejections after pushing Six checks run continuously against the synced catalog Product Catalog page, before you submit
Rejections and quality issues treated alike Two severity classes — rejection-class versus quality-class Issue list ordered by consequence
One health number hides a destination gap Google-ready and Meta-ready measured separately Two readiness percentages side by side
Product-level counts hide broken variants Every count computed at variant grain Variant and product totals shown separately
A raw issue count means nothing without context Catalog composition — price bands, stock, types, brands Composition panel beside the health score
No idea which broken items actually matter Ninety-day sales, top sellers, products not selling Sales panel on the same screen
Two feeds to maintain for two platforms One RSS feed with the Google namespace, ingested by both A single tokenised feed URL

Tell us what's broken. We'll fix your tracking — free.

Describe the tracking/attribution problem you're stuck on and we'll map it to a fix: server-side conversions to Meta, Google, TikTok and Pinterest, plus first-party tracking that survives Safari. No code required.

Sources

  1. Google Merchant Center Help — Product data specification: https://support.google.com/merchants/answer/7052112
  2. Shopify Dev Docs — Web Pixels API: https://shopify.dev/docs/api/web-pixels-api
  3. Shopify Dev Docs — Webhooks: https://shopify.dev/docs/api/webhooks

Frequently asked questions

QWhy was my product disapproved in Merchant Center?
The most common mechanical causes are a missing image or no product identifier — no GTIN, no MPN and no brand — which leaves nothing to identify the item as a real product. Beyond those, disapprovals come from policy issues, landing-page problems and data-format errors, which are judgement calls rather than missing fields. Check the mechanical causes first, because they're the ones you can count before pushing.
QDo I need a GTIN for every product?
No. GTINs identify manufactured products that exist in a global catalog. Custom, handmade and own-brand goods genuinely don't have one, which is what MPN and brand are for — supplying either satisfies the identifier requirement. The problem case is an item with none of the three, which gets flagged as having no identifier and is penalised. If a barcode does exist for your item, supplying it improves matching.
QWhat's the difference between a rejected and a disapproved product?
In practice they describe the same outcome from different angles — the item won't serve. Platforms use their own terminology and severity levels, and some issues suppress an item in one surface while allowing it in another. The distinction worth acting on isn't rejected versus disapproved, it's **not serving at all** versus **serving but uncompetitive**, because those need different amounts of urgency.
QHow long does it take for feed fixes to take effect?
Two delays stack. Your feed has to re-sync from your store, and then the platform has to re-crawl and re-review it. Each has its own schedule, and platform review can take longer than the crawl. Plan fixes at least a day ahead of a launch rather than the morning of it, and batch them rather than pushing one item at a time.
QDoes an out-of-stock product hurt my feed?
Not as an error — it's valid data and correctly reported. It matters as a proportion. A catalog that's substantially out of stock is advertising a much smaller live range than its product count implies, and campaigns built on the full catalog will underdeliver. Track it as a share of the feed rather than as a problem to fix item by item.
QCan I use one feed for both Google and Meta?
Yes. Google's product-data format with its namespace is ingested by both Google Merchant Center and Meta Commerce Manager, so one file serves both and you paste one URL into each. What doesn't transfer is the *assessment* — the two platforms have different minimum requirements, so the same feed can be in good shape for one and weak for the other. Measure readiness per destination.
QWhat's a good feed health score?
Less useful as an absolute than as a trend and a split. A score that's stable and then drops is a signal something changed in your product data; a score that's been flat at the same number for a year is telling you nothing new. More useful than any single figure is the rejection-class count, because that's the part that's costing you today rather than costing you a little on every impression.

Find the qualified leads your forms are currently throwing away.

Install PartialLeads on one landing page, send traffic, and compare what your CRM captured against what PartialLeads recovered and qualified.