Research desk · Data study
Every listing has a price. Only 72% say which product it is
The fields that sell an item are always present. The fields that identify it are optional — and a third of the catalogue leaves them out.
Some links here are affiliate links — if you buy, the retailer may pay us a commission at no extra cost to you. We have earned $0 from them so far. Here’s how it works.
Part of: Research
Across 5,502 live affiliate listings pulled on 3 September 2026, every row carried a price, a link, an availability flag and a description — and only 72.0% carried a product identifier, 50.3% a manufacturer part number and 43.5% a variant group id. Method: 14 unrelated product keywords read at five catalogue depths through the CJ shopping-product API, de-duplicated on retailer, title and destination URL.
The pattern is not random missingness. The fields that help you sell an item are always there. The fields that let a machine work out which item it is are optional, and roughly a third of the catalogue leaves them out.

Field completeness, all 20 fields
Every field the API will return for a shopping product, ordered by how often it is populated. The middle column is the question a shopper or a machine would be asking.
| Field | The question it answers | Present in 5,502 listings |
|---|---|---|
availability | Is it in stock? | 100.0% |
condition | New or used? | 100.0% |
lastUpdated | When was this row written? | 100.0% |
targetCountry | Which market is this for? | 100.0% |
price | What does it cost? | 100.0% |
link | Where do I buy it? | 100.0% |
description | What is it? | 100.0% |
brand | Who makes it? | 99.9% |
imageLink | What does it look like? | 99.8% |
productType | What kind of thing is it? | 98.9% |
gtin | Which exact product is it? | 72.0% |
gender | Who is it for? | 64.2% |
color | What colour? | 58.5% |
size | What size? | 55.3% |
mpn | The manufacturer's own code | 50.3% |
ageGroup | Adult or child? | 49.3% |
itemGroupId | Which listings are the same product? | 43.5% |
salePrice | Is it reduced? | 40.8% |
material | What is it made of? | 34.1% |
additionalImageLink | Any other photographs? | 8.4% |
The cliff, and where it falls
Seven fields are at 100%. Three more are above 98%. Then it falls off, and the place it falls is the interesting part.
Everything above the cliff is commercial. Price, link, availability, description, brand, image: the fields without which a listing cannot function as an offer. A retailer that omitted any of them would be publishing something unsellable, so nobody does.
Everything below the cliff is identifying. The GTIN — the barcode number that says which exact product this is — is present on 72.0% of listings. The manufacturer part number, 50.3%. The variant group id that says which rows are the same product in different sizes, 43.5%. What it is made of, 34.1%.
None of that is anyone behaving badly. A feed exists to be matched against a shopper’s search, and a search does not use a GTIN. The fields are optional because for the retailer’s own purpose they genuinely are.
The consequence lands on everyone downstream. When roughly one listing in four carries no identifier, matching a photograph or a product name to a specific SKU stops being a lookup and becomes an inference. That is precisely why a tool like ours — which reads a photograph and tries to name the product in it — sometimes returns “similar” rather than an exact match. The number in that table is the honest explanation for our own product behaviour, and we would rather publish it than describe the limitation vaguely.
Keep reading
Completeness is a retailer decision, not a spectrum
Here is the result we did not expect. Split the same sample by retailer and the averages dissolve: almost every cell is near 0% or near 100%. There is barely any middle.
| Retailer | Listings | Has GTIN | Has MPN | Has size | Has material |
|---|---|---|---|---|---|
| Wayfair North America | 1,804 | 78% | 100% | 93% | 83% |
| OnBuy.com | 1,065 | 100% | 2% | 2% | 0% |
| OnBuy EU | 935 | 100% | 0% | 0% | 0% |
| Poshmark | 513 | 1% | 0% | 100% | 0% |
| Wayfair UK | 313 | 81% | 100% | 99% | 66% |
| SHEIN | 223 | 0% | 100% | 82% | 9% |
| JD.com | 127 | 0% | 0% | 0% | 0% |
| Factcool Europe | 80 | 100% | 100% | 100% | 0% |
| Perigold | 64 | 42% | 100% | 91% | 61% |
OnBuy publishes a GTIN on 99.7% of its listings and a part number on 2.0%. Poshmark publishes a size on 100% and a GTIN on 1.0%. SHEIN publishes a part number on 100% and a GTIN on 0.0%. Wayfair North America publishes almost everything.
These are not different levels of diligence. They are different export configurations, decided once, applied to an entire catalogue. Which means “how complete is affiliate feed data” has no useful average answer — it is a question about which retailers happen to be in your sample, and any single figure (including our 72.0%) is really a statement about catalogue mix.
The practical form of that, for anyone building on feeds: test per retailer, not per field. A retailer that gives you one identifying field will usually give you all of them, and one that gives you none will never start.

The fields that exist but do not agree with themselves
Presence is not the only way a field fails. Two of the fields at 100% coverage are not normalised, which is a quieter problem because nothing looks missing.
| Field | Distinct values seen | The values |
|---|---|---|
availability | 4 | in stock (5,262), out of stock (135), in_stock (104), out_of_stock (1) |
condition | 5 | New (5,056), Used (423), new (21), refurbished (1), NEW (1) |
The same fact is written four ways in one field and five in the other, differing only in case and in whether the space is an underscore. Anyone filtering on availability == "in stock" silently drops 104 in-stock listings. Anyone counting new versus used by exact match on New misses 22 rows.
A hundred per cent coverage of a field nobody normalised is a different kind of incompleteness, and it is the kind that produces wrong numbers rather than missing ones.
How old the data behind a link is
Every row carries a lastUpdated timestamp, and reading it gives the shelf life of the whole catalogue.
| Age of the feed row | Listings | Share of 5,502 |
|---|---|---|
| Median | 7 days | — |
| Middle half of the distribution | 3 to 25 days | — |
| Older than 30 days | 1,281 | 23.3% |
| Older than 90 days | 423 | 7.7% |
| Older than a year | 283 | 5.1% |
| Oldest row in the sample | 2,665 days — about 7 years | — |
The median is a week, which is better than the reputation feeds have. The tail is not: 283 listings — 5.1% — were last written more than a year ago and are still being served as live in-stock inventory today.
One row in the sample carried a timestamp one day in the future. We have not tried to explain it and we have not excluded it; it is one row in 5,502 and it belongs in the record rather than in a footnote we quietly dropped.
What this data cannot show
- Whether a populated field is correct. We measured presence, not accuracy. A GTIN that is present and wrong counts as present here, and would be worse than a missing one.
- Whether
lastUpdatedmeans what it appears to mean. It could be when the row changed, or when the export ran. Retailers are not obliged to agree, and a seven-day median could be seven days of staleness or a weekly export cycle. - Anything about retailers not in this sample. Fourteen keywords in one API on one morning. Nine retailers cleared 50 listings; the rest of the market is not represented.
- Whether coverage is improving. One measurement is not a trend. We have logged this as a baseline and will publish the second reading whichever way it moves.
- What any of this pays. Commission data does not exist on this API and no public rate table survived our sourcing attempts, so this study says nothing about earnings.
Method, and a correction to our own earlier note
- Sample: 5,502 unique live listings, 14 unrelated seed keywords — hiking boots, coffee maker, throw pillow, dog bed, table lamp, backpack, sunglasses, office chair, yoga mat, bath towel, wall art, sneakers, dining chair, water bottle — read at five catalogue depths each on 3 September 2026 and de-duplicated on retailer, title and destination URL.
- Two further seeds failed on a DNS error during the run and are simply absent. The sample is 14 seeds, not the 16 we attempted.
- Presence means a non-empty value. Empty strings, nulls and empty lists count as absent.
- The correction. Two of our own earlier runs recorded that
availabilityandtargetCountryreturn HTTP 400 and therefore could not be read. That is wrong, and this study exists because we re-tested it field by field. Both are selectable as fields;targetCountryfails only when used as a filter. The fields that genuinely return HTTP 400 on our token areupc,isbn,sku,googleProductCategory,shipping,currencyandsalePriceEffectiveDate. Every variant and identifier number on this page was unmeasurable under the old, wrong note. - A floor, not a census. One network, one token, one morning, and a keyword-driven sample rather than a catalogue dump. Every figure here is a lower bound on what a full census would find.
- Reuse: the numbers and tables on this page are free to quote with a link. We have earned $0 in affiliate commission and have no interest in these figures reading better or worse than they do.
Frequently asked
How complete is affiliate product feed data?
Commercially complete and structurally patchy. Across 5,502 live listings on 3 September 2026, price, link, availability, condition and description were present on 100%, while a product identifier appeared on 72.0%, a manufacturer part number on 50.3% and a variant group id on 43.5%.
Which fields are most often missing?
Additional images (8.4%), material (34.1%), variant group id (43.5%) and sale price (40.8%). The identifying fields, in other words, not the selling ones.
Why does a missing GTIN matter?
Without an identifier, matching a product photograph or name to a specific listing is inference rather than lookup. It is the difference between naming an exact item and offering a similar one.
Is feed data stale?
Less than its reputation at the median and worse at the tail. The median row was 7 days old, the middle half spanned 3 to 25 days, and 5.1% of rows had not been updated in over a year while still being served as live in-stock inventory.
Does completeness vary by retailer?
Almost entirely. Every retailer in the sample published each field on close to 0% or close to 100% of its listings, so an average across retailers describes catalogue mix rather than data quality.
More from the research desk
Last verified 3 September 2026 against 5,502 live affiliate listings pulled across 14 product categories and read field by field
How this guide was made. We research and draft these guides with AI, then a person checks every price, link and factual claim against the source before it publishes. We work this way because it lets us re-verify prices across hundreds of guides in a day, which is what keeps the numbers here current; it does not decide what we recommend. Anything we could not verify is labelled as unverified rather than filled in.