Product feed
The product feed necessary for the system to function is compliant with the standard feed for Google Shopping.
Provide the URL where the feed is located to start data synchronization.
We accept both regular XML files and compressed gzip files - in that case, provide a URL ending with .gz.
We support feeds in the RSS 2.0 format (products in item elements) and Atom (products in entry elements).
Below we list optional and required attributes for the product feed. Additionally, we include an example feed containing a single product - a good starting point for creating the final feed.
Required and Optional Attributes for Products
We assume that the XML namespace for Google is named g (added xmlns:g="http://base.google.com/ns/1.0" at the top of the file) and for Adshero, it is named ah (added xmlns:ah="http://adshero.io/ns/1.0" at the top of the file).
Unprefixed title, description and link elements (standard RSS/Atom fields) are treated the same as their g-prefixed counterparts.
Any other element outside the g and ah namespaces is treated as a custom parameter.
Attribute list:
| Field | Product description | Format | Required | Notes |
|---|---|---|---|---|
g:id | Unique product or offer code | Maximum 100 characters | Yes | The SKU code should be unique for each product. If the same product is sold by multiple sellers ( Keep the same code when updating data. |
ah:product_id | Unique product code | Maximum 128 characters | No | Product identifier, if Keep the same code when updating data. |
g:title | Product name | Maximum 300 characters | Yes | Accurately describes your product and matches the title in your store. Do not include promotional or shipping information in the title. |
g:description | Product description | Maximum 5000 characters (a longer description is truncated) | No | List product features, technical specifications, and visual attributes. A detailed description will help us show your product to the right customers. |
g:link | Link to the product in your store | URL | Yes | Use a link from your domain. Start with |
g:image_link | URL to the main product image | URL | Yes | For the image link:
For the image:
|
g:availability | Product availability | Enum:
| Yes | Provide product availability consistent with the product’s availability in your store.
|
g:price | Product price. | Monetary value, maximum 50 characters:
Numeric, with a dot as a decimal separator, e.g.
| Yes | Accurately state the price of the product consistent with the price in your store. The currency of all products is the currency set in the feed configuration - the currency code inside the value is ignored. Every character except digits and the dot is stripped from the value, so a comma as a decimal separator corrupts the price ( |
g:sale_price | Promotional product price. | Monetary value:
Numeric, with a dot as a decimal separator, e.g.
| No | Precisely state the promotional price of the product consistent with the price in the store. |
g:google_product_category | Google-defined category of your product. | Value from the Google product taxonomy:
| No | Include only one category. Include the most appropriate category. Include either the full category path or the category ID - do not use both values simultaneously. |
g:product_type | Product category you define for your product. | Maximum 750 alphanumeric characters (in total across all occurrences of the field). The field can be repeated when the product belongs to several categories. | Yes | Include the full product category, down to the lowest level. Category levels should be separated by symbol: >, e.g. |
g:brand | Brand name of your product. | Maximum 70 characters. | No | Provide the product brand commonly known to consumers. Providing the correct brand positively affects the shopping experience and ensures better results. If you sell private label products, fill in this field by entering your brand name. If the product has no brand, leave this field empty. |
g:gtin | Global Trade Item Number (GTIN) of your product. | Digits only, maximum 50 characters. In Europe, this will be EAN (GTIN-13): 13-digit number | No | Exclude dashes and spaces. Submit only valid and correct GTIN numbers. If the product has no GTIN, do not guess or create one yourself. |
g:MPN | Unique product identifier. | Maximum 70 alphanumeric characters. | No | Include only MPN numbers specified by the manufacturer. Use the most specific MPN number for the product (different color, different MPN). Providing the correct MPN number makes the ad better matched to the consumer. If you do not know the MPN number, do not provide it and leave this field empty. |
g:shipping | Product shipping cost and time, and countries to which you ship products. | Additionally, you may set sub-attributes:
| No | |
g:unit_pricing_measure | Unit price measure | Example
Maximum 10 characters. Supported units:
| No | Attribute defines the measure and size of the product without the shipping packaging. |
g:adult | Attribute designates if the product is intended for adults. | Example:
Supported values:
| No | Use the yes attribute for products intended only for adults, e.g., nudity, erotic content. |
g:energy_efficiency_class | Energy efficiency class | Example
Maximum 10 characters. | No | Include legally required energy label. |
g:age_group | Age group defining the demographic group the product is intended for. | Example
Maximum 100 characters. | No | Include only one value per product. |
g:color | Color of your product. | Example
Maximum 100 alphanumeric characters (40 characters per color). | No | |
g:gender | Gender the product is intended for. | Example
Maximum 10 characters. | No | |
g:material | Material the product is made from. | Example
Maximum 200 characters describing the material. | No | Add information about the material(s) your product is made from. If specifying more than one material, format it this way: |
g:pattern | Pattern or graphic design of the product. | Example
Maximum 100 characters. | No | |
g:size | Product size. | Example
Maximum 100 characters. | No | |
g:product_detail | Technical or additional product details. | This field has subattributes:
This field can be repeated with different values, up to 50 times. | No | Do not include information here that is contained in other attributes. |
g:item_group_id | Attribute for grouping unique products. | Text field. | No | For a single ad request, no more than one ad will be returned from the same group. |
g:external_seller_id | External seller ID. | Text field. | No | If this field is filled, it is required to fill in the external_seller_name field. Also accepted as ah:external_seller_id. |
ah:external_seller_name | External seller name. | Text field. | No | If this field is filled, it is required to fill in the external_seller_id field. Also accepted as g:external_seller_name. |
ah:deep_link | Link to the product in the mobile application. | URI | No | Start with http://, https:// or myapp://. The field in the g namespace (g:deep_link) is ignored. |
g:certification | Product certifications, regulatory compliance, or industry standards. | This field has subattributes:
The field can be repeated. | No | Use this attribute to indicate any certifications or compliance information relevant to the product. |
g:condition | Condition of the product being sold. | Enum:
| No | Any other value rejects the product. |
ah:adshero_label | Custom labels that can be used for custom grouping of products or campaign management. | Example:
This field can be repeated with different values. | No | These labels can be used for custom filtering. |
ah:shop_version | Product version number on the shop side. | Integer | No | Protects newer data from being overwritten by older data when the same product is updated from several sources (e.g. XML feed and API). An update is applied only when the submitted version is greater than or equal to the version stored in Adshero. |
A product without a valid value of a required field is rejected (it is not emitted).
A product with an invalid g:availability, g:condition or g:certification value, or a too long ah:product_id, is rejected as well.
Exceeding the limit of any other optional field only produces a warning visible in the panel - the product is accepted and the value is stored unchanged.
“Product” vs “Offer”
By default, the feed contains products.
In the case of multi-merchant stores (where multiple sellers sell on the platform and different sellers can sell the same product as different offers), each item in the feed is treated as a single offer.
Effectively, the feed contains “offers” when the g:external_seller_id field is populated, indicating which seller the offer belongs to.
In the case of a feed with offers, g:id must be unique for each offer.
If multiple sellers are selling the same “product” (the same item, but e.g., at a different price), then the optional ah:product_id field should be filled, which is the product identifier (multiple offers can have the same ah:product_id - this gives the system information that several offers represent the same product).
Example Feeds
Below is an example feeds.
Minimum Feed XML
- Contains 7 required fields for two products. This is used for the fastest connection verification and implementation.
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:ah="http://adshero.io/ns/1.0">
<channel>
<g:title>Adshero Minimum Product Feed (Sample Store)</g:title>
<g:link>https://www.exampleshop.pl/</g:link>
<g:description>Feed with minimal data required for synchronization.</g:description>
<item>
<g:id><![CDATA[KWA-ZIAR-EKO-1KG]]></g:id>
<g:title><![CDATA[Arabica Organic Coffee Beans, 1 kg]]></g:title>
<g:link><![CDATA[https://www.exampleshop.pl/coffee-arabica-bio-1kg]]></g:link>
<g:image_link><![CDATA[https://www.exampleshop.pl/img/coffee-bio-main.jpg]]></g:image_link>
<g:availability><![CDATA[in stock]]></g:availability>
<g:price>79.99 PLN</g:price>
<g:product_type><![CDATA[Food > Coffee and tea > Coffee beans]]></g:product_type>
</item>
<item>
<g:id><![CDATA[EXP-AUTO-SILVER]]></g:id>
<g:title><![CDATA[Barista Pro Automatic Coffee Machine X10]]></g:title>
<g:link><![CDATA[https://www.exampleshop.pl/ekspres-barista-x10]]></g:link>
<g:image_link><![CDATA[https://www.exampleshop.pl/img/ekspres-x10-main.jpg]]></g:image_link>
<g:availability><![CDATA[in stock]]></g:availability>
<g:price>2499.00 PLN</g:price>
<g:product_type><![CDATA[Electronics > Household appliances > Automatic coffee machines]]></g:product_type>
</item>
</channel>
</rss>Maximum Feed XML
- Contains all possible fields for two products.
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:ah="http://adshero.io/ns/1.0">
<channel>
<metadata>
<ref_application_id>101010101010101</ref_application_id>
<ref_asset_id>ExampleShop.pl-FULL-MAX</ref_asset_id>
</metadata>
<g:title>Perfectly Maximum Product Feed ExampleShop</g:title>
<g:link>https://www.exampleshop.pl/</g:link>
<g:description>Feed filled with every attribute, no empty values, for maximum monetization.</g:description>
<item>
<g:id><![CDATA[KWA-ZIAR-EKO-1KG-SPRZ1]]></g:id>
<g:title><![CDATA[Arabica Organic Coffee Beans, 1 kg, medium roast]]></g:title>
<g:link><![CDATA[https://www.exampleshop.pl/coffee-arabica-bio-1kg]]></g:link>
<g:image_link><![CDATA[https://www.exampleshop.pl/img/coffee-bio-main.jpg]]></g:image_link>
<g:availability><![CDATA[in stock]]></g:availability>
<g:price>79.99 PLN</g:price>
<ah:product_id><![CDATA[KWA-ZIAR-EKO-1KG]]></ah:product_id>
<ah:shop_version>1</ah:shop_version>
<g:external_seller_id><![CDATA[SELLER-001]]></g:external_seller_id>
<ah:external_seller_name><![CDATA[Coffee of the World Roastery]]></ah:external_seller_name>
<g:description><![CDATA[100% Arabica from organic Ethiopian farming. Medium roast, with notes of chocolate and nuts. Perfect for espresso.]]></g:description>
<g:sale_price>69.99 PLN</g:sale_price>
<g:google_product_category>129</g:google_product_category>
<g:product_type><![CDATA[Food > Coffee and tea > Coffee beans]]></g:product_type>
<g:brand>EcoCoffee</g:brand>
<g:gtin><![CDATA[7777777777777]]></g:gtin>
<g:mpn><![CDATA[EC-KZ-AB-1K]]></g:mpn>
<g:item_group_id><![CDATA[COFFEE-BEANS-SERIES]]></g:item_group_id>
<g:condition>new</g:condition>
<g:adult>no</g:adult>
<g:age_group>adult</g:age_group>
<g:gender>Unisex</g:gender>
<g:material>Arabica beans</g:material>
<g:color>Dark brown</g:color>
<g:pattern>Smooth</g:pattern>
<g:size>1 kg (package)</g:size>
<g:unit_pricing_measure>1 kg</g:unit_pricing_measure>
<g:energy_efficiency_class>A</g:energy_efficiency_class>
<g:product_detail>
<g:section_name>Flavor Profile</g:section_name>
<g:attribute_name>Acidity</g:attribute_name>
<g:attribute_value>Low</g:attribute_value>
</g:product_detail>
<g:certification>
<g:certification_authority>UE</g:certification_authority>
<g:certification_name>Eco Certificate</g:certification_name>
<g:certification_code>PL-EKO-05-001</g:certification_code>
<g:certification_value>PL-EKO-05</g:certification_value>
</g:certification>
<g:shipping>
<g:country>PL</g:country>
<g:region>Mazowieckie</g:region>
<g:price>11.00 PLN</g:price>
<g:min_handling_time>1 day</g:min_handling_time>
<g:max_handling_time>2 days</g:max_handling_time>
<g:min_transit_time>2 days</g:min_transit_time>
<g:max_transit_time>4 days</g:max_transit_time>
</g:shipping>
<ah:deep_link><![CDATA[https://app.exampleshop.pl/product/KWA-ZIAR-EKO-1KG-SPRZ1]]></ah:deep_link>
<ah:adshero_label><![CDATA[premium-eko]]></ah:adshero_label>
<ah:adshero_label><![CDATA[in-promotion]]></ah:adshero_label>
</item>
<item>
<g:id><![CDATA[EXP-AUTO-SILVER-SPRZ3]]></g:id>
<g:title><![CDATA[Barista Pro Automatic Coffee Machine X10]]></g:title>
<g:link><![CDATA[https://www.exampleshop.pl/ekspres-barista-x10]]></g:link>
<g:image_link><![CDATA[https://www.exampleshop.pl/img/ekspres-x10-main.jpg]]></g:image_link>
<g:availability><![CDATA[in stock]]></g:availability>
<g:price>2499.00 PLN</g:price>
<ah:product_id><![CDATA[EXP-AUTO-BPX10]]></ah:product_id>
<ah:shop_version>1</ah:shop_version>
<g:external_seller_id><![CDATA[SELLER-003]]></g:external_seller_id>
<ah:external_seller_name><![CDATA[AGD Expert]]></ah:external_seller_name>
<g:description><![CDATA[Espresso machine with built-in grinder, 15 bar, milk frothing system. Automatic cleaning.]]></g:description>
<g:sale_price>2299.00 PLN</g:sale_price>
<g:google_product_category>502</g:google_product_category>
<g:product_type><![CDATA[Electronics > Household appliances > Automatic coffee machines]]></g:product_type>
<g:brand>BaristaPro</g:brand>
<g:gtin><![CDATA[1234567890123]]></g:gtin>
<g:mpn><![CDATA[BPX10-SILVER-EU]]></g:mpn>
<g:item_group_id><![CDATA[BARISTAPRO-X10-SERIES]]></g:item_group_id>
<g:condition>new</g:condition>
<g:adult>no</g:adult>
<g:age_group>adult</g:age_group>
<g:gender>Unisex</g:gender>
<g:material>Stainless steel / Plastic</g:material>
<g:color>Silver</g:color>
<g:pattern>Smooth</g:pattern>
<g:size>Compact</g:size>
<g:unit_pricing_measure>1 szt.</g:unit_pricing_measure>
<g:energy_efficiency_class>A+++</g:energy_efficiency_class>
<g:product_detail>
<g:section_name>Technical Parameters</g:section_name>
<g:attribute_name>Pressure</g:attribute_name>
<g:attribute_value>15 bars</g:attribute_value>
</g:product_detail>
<g:certification>
<g:certification_authority>TÜV</g:certification_authority>
<g:certification_name>Electrical Safety</g:certification_name>
<g:certification_code>TUV-EXP-2024</g:certification_code>
<g:certification_value>Compliant with IEC standard</g:certification_value>
</g:certification>
<g:shipping>
<g:country>PL</g:country>
<g:region>Łódzkie</g:region>
<g:price>0.00 PLN</g:price>
<g:min_handling_time>1 day</g:min_handling_time>
<g:max_handling_time>1 day</g:max_handling_time>
<g:min_transit_time>1 day</g:min_transit_time>
<g:max_transit_time>2 days</g:max_transit_time>
</g:shipping>
<ah:deep_link><![CDATA[https://app.exampleshop.pl/product/EXP-AUTO-SILVER-SPRZ3]]></ah:deep_link>
<ah:adshero_label><![CDATA[premium-agd]]></ah:adshero_label>
<ah:adshero_label><![CDATA[free-delivery]]></ah:adshero_label>
</item>
</channel>
</rss>Additional Feed
When configuring a product feed, you can provide a URL to an additional feed.
The additional feed has the same format as the main feed, but its items are identified solely by ah:product_id (required in the additional feed) and do not contain g:id.
It can be used when the main feed is very large and data between offers (e.g., g:description) often repeats.
Only product-describing fields are supported in the additional feed: g:title, g:description, g:brand, g:image_link, g:gtin, g:mpn, g:google_product_category, g:product_type, g:item_group_id, g:condition, g:adult, g:energy_efficiency_class, g:age_group, g:color, g:gender, g:material, g:pattern, g:size, g:product_detail and g:certification.
Offer fields (g:price, g:sale_price, g:availability, g:link, g:shipping, seller, ah:deep_link, ah:adshero_label, g:unit_pricing_measure, custom parameters) must be placed in the main feed.
When an additional feed is configured, Adshero downloads it together with the main feed.
Every offer from the main feed is merged with the product from the additional feed having the same ah:product_id, and fields provided in the additional feed override the values from the main feed.
Required fields may be satisfied by either feed - e.g. g:product_type may be present only in the additional feed.
Besides reducing feed size, this also allows generating these files at different rates (e.g., price and stock data every hour, but product description and title once a day).
A feed may be configured with the additional URL only (without url).
In that case offer data (price, availability, link) is pushed through the product update API, while product data is taken from the additional feed.
Creating Product Feeds via API
Authorization header.The default path for uploading feeds to Adshero is creating them in the panel. Unless there are special cases, you don’t need to use this API.
POST https://api.adshero.io/v1/feed/ HTTP/2
Authorization: Bearer {access_token}
Content-Type: application/json
{
"name": "string",
"url": "string",
"secondaryUrl": "string",
"shopId": "string",
"currency": "string",
"lang": "string"
}curl --location --request POST 'https://api.adshero.io/v1/feed/' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"name": "string",
"url": "string",
"secondaryUrl": "string",
"shopId": "string",
"currency": "string",
"lang": "string"
}'Parameter meanings:
name: The feed name visible in the panel. Required.url: The URL to the feed — this is where we expect the XML file with the feed to be located.secondaryUrl: The URL to the additional feed. Optional - eitherurlorsecondaryUrlis required.shopId: Shop identifier. It is available in the publisher panel (shop) under account settings. Required.currency: The currency of the feed, compliant with ISO-4217. Required - prices of all products in the feed are interpreted in this currency.lang: The language of the feed, compliant with ISO-639-1 (two-letter language codes). Required.
The response contains the created feed together with its identifier (id), needed for updating products via API:
HTTP/2 200 OK
Content-Type: application/json
{
"data": {
"id": "17f4ca82-f4a4-4f3a-8372-64fb250e564b",
"name": "string",
"url": "string",
"secondaryUrl": "string",
"shopId": "string",
"currency": "string",
"lang": "string",
"created": "2026-09-03T10:15:30"
}
}User-Agent header when downloading the feed
On every feed download Adshero sends a User-Agent header in the following format:
Adshero/1.0.0 (pub/{publisherId}; feed/{feedId})where:
{publisherId}— shop identifier (shopId) configured for the feed,{feedId}— feed identifier in Adshero.
You can use this header to whitelist Adshero traffic in your firewall, WAF or any other mechanism protecting access to your feeds.