Skip to content
Webgains
Ad platforms

Webgains feed for Shopify

Webgains is a UK-founded affiliate network (around 1,800 advertisers across the UK, Ireland, the EU and beyond) whose publishers promote your products for a commission. Its product feed is the Google Shopping spec verbatim: Webgains validates your file against Google's rules, in XML or CSV, and adds no fields of its own. Where it is stricter than Google is the mandatory set: nine fields in every country, including the category and shipping. Feedflock turns your Shopify catalog into exactly that file and hosts it on a stable URL that Webgains fetches on the schedule you choose.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
49 €
In stock
0 pcs
When out of stock
02 · webgains.xmlUpdated just now
<item>
<g:id>46012345678901</g:id>
<g:item_group_id>8812345678901</g:item_group_id>
<g:title>Linen shirt Sand M</g:title>
<g:description>Breathable linen shirt with a relaxed regular fit.</g:description>
<g:link>https://shop.example/products/linen-shirt-sand</g:link>
<g:image_link>https://cdn.shop.example/img/linen-shirt-sand.jpg</g:image_link>
<g:availability>out_of_stock</g:availability>
<g:condition>new</g:condition>
<g:price>49.00 EUR</g:price>
<g:brand>Nordlin</g:brand>
<g:google_product_category>212</g:google_product_category>
<g:shipping><g:country>DE</g:country><g:service>Standard</g:service><g:price>4.95 EUR</g:price></g:shipping>
</item>
Category mapping

Your product types. The channel's categories.

The channel files offers under its own category tree. Feedflock suggests a category for each Shopify product type and you just confirm. One mapping covers every product of that type, including products you add later.

Full category path in the feed
One mapping per product type
Override per individual product
Shopify typeproducts
Channel category
Men's shirts
Catalog coverage79 %
−20% off compare-at
Productg:priceg:sale_​price
Linen shirt Sand49.00 €39.20 €
Mug Fjord 350 ml15.00 €12.00 €
Backpack Ridge 28 l89.00 €71.20 €
Soy candle Les19.00 €15.20 €
Wool scarf Fjell39.00 €31.20 €
42.20 €saved across these products
5 / 5products with a sale price
Sale prices

A discount Germany and France insist on seeing.

On a discounted product the pair splits: g:price carries the regular price, g:sale_price the price you actually charge. Google treats sale_price as conditional; Webgains makes it mandatory for Germany and France, together with the two unit-pricing measures. Feedflock fills both sides from your compare-at price and leaves sale_price out when there is no discount, because an always-filled reference price invents a permanent markdown.

Feed health

Catch feed issues before Webgains does.

Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.

Feed quality · webgains.xml
76 / 100
To review: 4
No google_product_category on 11 productsGoogle treats the category as optional and auto-assigns it; Webgains makes it one of the nine mandatory fields in every country. An unmapped product type leaves it empty.
No shipping in the feedShipping is mandatory at Webgains in all countries, while Google calls it conditional. The template builds it from the feed's delivery options, and none are configured yet.
Empty description on 6 productsdescription is one of the nine mandatory fields and publishers show it verbatim. These products have no description in Shopify.
Missing image on 3 productsimage_link is mandatory too. A product without a featured image fails the mandatory-field check; the variant photo can fill in.

Setup

Live in five steps

From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.

  1. Join Webgains as an advertiser

    Register at webgains.com and set up your program: the commissions publishers sign up for. Program approval and tracking integration are part of advertiser onboarding; the product feed plugs in afterwards.

  2. Install Feedflock

    Add Feedflock from the Shopify App Store. It reads your products, variants, stock, images and shipping rates directly through the Shopify API.

  3. Pick the Webgains template

    Create a new feed and choose Webgains. The field set is Google's, mapped from the start: id, title, description, link, image_link, availability, price and brand, one item per variant, prices as number, space and ISO currency code.

  4. Cover the Webgains overlay

    Two fields Google treats as optional are mandatory at Webgains: google_product_category (map your types to Google's taxonomy; a numeric ID skips manual mapping entirely) and shipping (built from your delivery options). Targeting Germany or France? sale_price and the unit-pricing pair are mandatory there too.

  5. Paste the feed URL into the Feed Manager

    In your Webgains account: Create Feed, add the hosted feed URL and pick the fetch frequency. Daily is the usual choice, weekly and monthly exist, with time and day configuration. Feed behind Cloudflare or a firewall? Whitelist Webgains' three fetcher IPs or every fetch returns 403.

    https://feedflock.appfleece.com/f/demo-webgains/webgains.xml

The feed

What the channel receives

webgains.xml
<item>
  <g:id>46012345678901</g:id>
  <g:item_group_id>8812345678901</g:item_group_id>
  <g:title>Linen shirt Sand M</g:title>
  <g:description>Breathable linen shirt with a relaxed regular fit.</g:description>
  <g:link>https://shop.example/products/linen-shirt-sand</g:link>
  <g:image_link>https://cdn.shop.example/img/linen-shirt-sand.jpg</g:image_link>
  <g:availability>in_stock</g:availability>
  <g:condition>new</g:condition>
  <g:price>49.00 EUR</g:price>
  <g:brand>Nordlin</g:brand>
  <g:google_product_category>212</g:google_product_category>
  <g:shipping><g:country>DE</g:country><g:service>Standard</g:service><g:price>4.95 EUR</g:price></g:shipping>
</item>
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

49 €

Feed fields

g:id

46012345678901

g:item_group_id

8812345678901

g:title

Linen shirt Sand M

g:description

Breathable linen shirt with a relaxed regular fit.

g:link

https://shop.example/products/linen-shirt-sand

g:availability

in_stock

g:condition

new

g:price

49.00 EUR

g:brand

Nordlin

g:google_product_category

212

g:country

DE

g:service

Standard

g:price

4.95 EUR

The channel

Publishers sell for you

Webgains is an affiliate network: content sites, bloggers and deal portals pick up your product data and send you traffic for the commission your program sets. The feed is how your catalog reaches them, and Webgains converts your plain product URLs into tracking links after processing.

A format you already have

Webgains validates against the Google Shopping Feed specifications and publishes no vocabulary of its own. If you already run a Google-format feed, the shape is identical. This template exists so the Webgains-mandatory extras are covered too.

Failure modes you can live with

A feed that errors after a successful run keeps serving the last good version, and a feed with under 10% erroneous rows still publishes, with a downloadable per-product error log naming what to fix.

The feed

  • The template shares Google's field definitions by reference: the file you render is the file Webgains' importer validates, with no invented Webgains fields
  • All nine Webgains-mandatory fields covered: the Google seven plus google_product_category and shipping, which Google itself treats as optional and conditional
  • Categories from Google's taxonomy as numeric IDs or full paths. Webgains accepts eleven taxonomy locales, and an ID needs no manual mapping on their side at all
  • Shipping rendered from your delivery options as Google's <g:shipping> sub-attribute form, ready for the mandatory check. Webgains' own price:min:max value form is documented in the template's notes
  • Discounts split the honest way: the compare-at price goes to g:price, the price you charge to g:sale_price, the pair Germany and France make mandatory, with the unit-pricing measures ready in the template
  • Plain, variant-pinned product URLs: Webgains wraps its tracking around them after processing, so there is no tracking glue to maintain in the feed
  • One item per variant, titles that pair product and variant, and sold-out items kept in the feed marked out_of_stock, Google's model, which Webgains follows
  • Fetch tracking shows when Webgains last downloaded the feed and alerts you if the fetches stop, the same signal Webgains' own Feed Manager history records

Deep dive

01

Google's spec, Webgains' overlay

  • Webgains checks the feed "adheres to the Google Shopping Feed specifications", in CSV or XML
  • Field names must match Google's spec; anything else becomes a custom field, and those are capped at 10
  • Nine mandatory fields in every country: the Google seven plus google_product_category and shipping
  • Germany and France add three more: sale_price, unit_pricing_measure and unit_pricing_base_measure
Technical details

Webgains' Knowledge Hub says it outright: the platform checks that your feed is valid and adheres to the Google Shopping Feed specifications, and it accepts Google Product Feeds in either CSV or XML. Column headers and tag names must match the field names in Google's specification; anything that does not is interpreted as a custom field, custom fields are capped at ten, and in XML they need the g: prefix. There is no Webgains-own field to learn; the sweep that looked for a deeplink or network-ID column found none, because link stays the plain product URL and Webgains converts it to a tracking link after processing.

Where Webgains is genuinely stricter than Google is the mandatory set. Nine fields are required in every country: id, title, description, link, image_link, availability, price, and then google_product_category, which Google treats as optional, and shipping, which Google calls conditional. For Germany and France the table adds sale_price, unit_pricing_measure and unit_pricing_base_measure. Feedflock's template maps the whole nine from the start, so the overlay is covered before you paste the URL.

02

Create Feed, a URL and a schedule

  • Self-serve: Create Feed, add the Feed URL, set your preferences
  • Fetch frequency is your choice: daily, weekly or monthly, with time and day configuration; a manual Refetch button exists (queued, not instant)
  • Up to 25 active feeds per account, fetched from public URLs
  • Behind Cloudflare or a firewall, whitelist the fetcher IPs 18.132.235.95, 18.133.40.185 and 18.132.163.150
Technical details

Transport is a URL pull on a merchant-chosen schedule. In the Webgains platform you click Create Feed, paste the feed's public URL and pick how often Webgains should re-fetch it: daily, weekly or monthly, with the time and day configurable. A manual Refetch button exists for the impatient, though it queues rather than runs instantly. One account holds up to 25 active feeds, all fetched and processed from public URLs.

Every fetch lands in the Feed Manager history: a green "Successfully processed" with the run time and product count, or a downloadable per-product error log. When a fetch fails outright the history shows the HTTP status, and a 403 from an otherwise healthy URL is the signature of Cloudflare blocking Webgains' fetcher, which the documentation answers with three IPs to whitelist. Feedflock regenerates the file as often as every hour, so whatever cadence you pick, every fetch reads current prices and stock.

03

How Webgains handles a broken feed

  • A duplicate id is overwritten by the latest occurrence in the feed, silently, with no error
  • A feed that has never processed successfully serves nothing to publishers
  • Errors after a success keep serving the last good version
  • Under 10% erroneous rows, the feed still publishes, with the error log naming the products to fix
Technical details

Webgains' failure modes are per-row and non-destructive, and they are worth knowing before the first import. The quiet one is the duplicate id: the product is overwritten with the latest occurrence in the feed: a silent loss, not an error. Feedflock's default id is the Shopify variant ID, which never repeats and never changes, so the collision cannot start.

The rest is forgiving by design. A feed that has never been successfully processed makes no feed available to publishers at all. One that errors after a success keeps serving the last good version while you fix it. And under 10% erroneous rows the feed is still processed, with the errors shown for fixing. The downloadable log names the exact products. The Feed Manager history is the ground truth for all of it, which is also where Feedflock's missed-fetch alerting points.

04

Categories, shipping and the honest seams

  • google_product_category takes a numeric ID or a full path: "2271" or "Clothing & Accessories > Clothing > Dresses"
  • Eleven taxonomy locales are supported: en-GB, fr-FR, de-DE, nl-NL, da-DK, sv-SE, es-ES, en-US, pl-PL, it-IT, pt-BR, the network's footprint
  • Numeric IDs are recorded as their en-US text and need no manual category mapping on Webgains' side
  • Webgains documents shipping as price:min:max ("9.95 EUR:2:5"); the template emits Google's sub-attribute form, the one untested seam, worth a look at the first import
Technical details

The category is Google's taxonomy: a numeric ID or the full path with spaces around the ">" respected. Webgains supports the taxonomy in eleven locales (the same list as the network's footprint) and records ID values as their en-US text, which is why a numeric ID is the robust choice: it skips manual category mapping on Webgains' side entirely. Feedflock maps your product types to the same tree, so the mandatory field is filled with a value Webgains accepts verbatim.

Two honest caveats, both stated rather than hidden. Webgains documents the shipping value in its own extended form (price, minimum and maximum transit time, like "9.95 EUR:2:5"), while the template emits Google's <g:shipping> sub-attribute form from your delivery options; whether the platform's check accepts that form is the one seam to watch in the first Feed Manager error log. And a January 2027 change raises the minimum image size to 500 × 500 px for Google-format feeds; Feedflock's image guidance already reflects it.

The takeaway

One URL, a fetch schedule you pick yourself and a file that speaks Google's spec with Webgains' nine mandatory fields already covered: category, shipping, honest sale prices, plain links for Webgains' own tracking. Your Shopify catalog stays the single source of truth for every publisher in the network.

Claude · ChatGPT

Or set up your Webgains feed in chat

Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to Webgains's own tree and tells you what is still missing. You approve every change.

feedflock · mcp

Create a Webgains feed for my store and map my categories.

I'll create it as a draft and show you each change before I make it.

FAQ

In format, yes: Webgains validates your file against the Google Shopping Feed specifications and adds no fields of its own, in XML or CSV. The difference is the mandatory set: Webgains requires nine fields in every country, adding google_product_category and shipping to Google's seven, and three more for Germany and France. A plain Google feed without those two is exactly the feed Webgains refuses.
You choose: daily, weekly or monthly, with the time and day configurable. Daily is the usual choice. A manual Refetch button exists but queues rather than running instantly. Feedflock regenerates the file as often as every hour, so every fetch reads current prices and stock.
The Feed Manager history shows the HTTP status. If the feed has processed successfully before, publishers keep being served the last good version; a feed that never succeeded serves nothing. A 403 on a healthy URL usually means Cloudflare is blocking the fetcher. Whitelist 18.132.235.95, 18.133.40.185 and 18.132.163.150.
Yes, up to ten custom fields. Any header or tag that does not match a Google Shopping field name is interpreted as a custom field, the name must not clash with one, and in XML it needs the g: prefix. An eleventh custom field fails the feed.
On a discounted product the regular price goes to g:price and the price you charge to g:sale_price; without a discount, sale_price stays out. Webgains makes sale_price mandatory for Germany and France, together with unit_pricing_measure and unit_pricing_base_measure. Feedflock fills the pair from your Shopify compare-at price.
Yes, google_product_category is one of Webgains' nine mandatory fields in every country, where Google treats it as optional. The value is a numeric ID or a full path from Google's taxonomy, in any of eleven supported locales. Use the numeric ID and Webgains needs no manual category mapping on its side at all.
Yes. Filter by collection, tag, vendor, price or stock level, or leave out individual variants. Keep temporarily sold-out products in the feed marked out_of_stock, though: Webgains follows Google's model, and an offer that disappears and returns loses its continuity.

Get on every marketplace that matters this afternoon.

Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.

.myshopify.com