Affiliate feeds: how to build a product feed publishers can actually use
A good product feed decides whether comparison sites, content sites and deal newsletters can show your products at all. Which fields are mandatory, how often should you update, and what are the most common mistakes?
By Jetske Feenstra
·
·
4 min read
A product feed sounds simple: a list of what you sell, with prices and images, in a format a publisher can import. In practice we see feeds every week that nobody can do anything with: missing fields, stale prices, broken URLs, missing variants.
A good feed is the difference between a comparison site that offers your products and one that simply skips you. This is what we would like to receive from you at Klatsa.
The mandatory fields
Without these eight your feed is effectively unusable:
| Field | Description | Example |
|---|---|---|
id |
Unique product ID, stable over time | SKU-12345 |
title |
Full product name | Apple iPhone 15 Pro 256GB Titanium |
description |
1 to 3 sentences about the product | iPhone 15 Pro with A17 Pro chip… |
link |
Product page URL (deeplinkable) | https://shop.nl/p/iphone-15-pro |
image_link |
Main image, at least 800×800 | https://shop.nl/img/iphone15.jpg |
price |
Price including VAT, with currency | 1199.00 EUR |
availability |
in stock / out of stock / preorder |
in stock |
brand |
Brand name | Apple |
If one of these is missing, there are publishers who will simply skip your product.
The fields you should want to send
These make the difference between "somewhere in the long tail" and "top of the comparison":
gtinormpn: global trade item number / manufacturer part number. Indispensable for matching the same product across shops.category: a Google product category path or your own categorisation. Helps with filtering.sale_price+sale_price_effective_date: for running promotions.color,size,material: essential for fashion and home products.shipping: shipping costs and delivery time. Comparison sites show this prominently.gtin_unit_pricing_measure: for food and drugstore products (€/100 ml and so on).item_group_id: to link variants of the same product.
Handling variants
The biggest stumbling block for advertisers. Many feeds send one entry per "parent product", while publishers often want to show each variant (a T-shirt in size M in black is not the same thing as L in white).
The right approach: every sellable variant is its own <item> with its own id, its own link (with the variant query string), its own image_link and its own price. Link them with item_group_id so publishers can group them if they want to.
Update behaviour
Older than 24 hours is not acceptable for:
- Stock status
- Price changes
- Sale promotions
Best practice for an average shop:
| Type of update | Frequency |
|---|---|
| Full feed rebuild | Once every 24 hours (at night) |
| Stock and price deltas | Hourly, or on every change |
| URL validation | Weekly |
Our feed importer picks up these deltas without publishers noticing a thing.
Formats
In the order publishers prefer them:
- XML: the Google Merchant feed format (
google-merchant-namespace). Standard and well documented. - CSV: pragmatic, mainly for small catalogues. Mind the escaping of commas and quotation marks.
- JSON: modern, good for API-driven shops. But fewer comparison sites support it directly.
We accept all three. Under the hood we normalise to a single internal schema, so publishers get it in the format they prefer.
Common mistakes
We see these every week:
- ❌ HTML in
description: fine, but escape it properly, otherwise the parser breaks - ❌ Commas in prices:
1.199,00does not work for most parsers, use1199.00 - ❌ Missing currency:
1199.00is not a price,1199.00 EURis - ❌ Unreachable image URLs: no access for non-EU IP addresses, or a CDN that blocks hotlinking
- ❌ Unstable product IDs: if you generate new IDs every night, a comparison site cannot send a "back in stock" notification
- ❌ Duplicates: the same product five times over because that is what your catalogue management tool does on sync
- ❌ Not marking out-of-stock items: leave them in the feed, but set
availabilitycorrectly
The Shopify shortcut
Do you run Shopify? Then you do not have to build any of the above yourself. Our Shopify integration generates a correct product feed (all mandatory fields, all variants, real-time stock) automatically from your catalogue. You activate it in our admin, connect your shop, and your product feed is live within minutes.
For custom shops we build the feed export together with your development team. We help with the schema, validate your feed and take part in the first sync test.
Questions, or would you like a feed reviewed? Email us or register as an advertiser, and we will set it up together.