How to create a product feed for ProfitMetrics
How to Create and Debug a Product Feed
Section 1: Product Feed Specification
Section 1: Product Feed Specification
The ProfitMetrics product feed is based on RSS and is largely compatible with the Google Shopping XML feed, with some additional elements. Key specifications include:
- Encoding: The product feed should be encoded as UTF-8.
- Item Elements: The item elements should include specific information such as
- link
- title
- g:id (unique product ID)
- g:image_link (link to product image)
- g:price (retail price), and more.
- Currency Format: Various currency-related elements can be included, such as pm:price_currency and pm:price_buy_currency.
Things to Note:
- Even though some fields are optional, it is strongly recommended to include as much information as possible for enhanced functionality.
- Each product variant should have its own item, and each item is considered a real sellable product with a unique ID.
- Products must only appear once in the feed; duplicates (field g:id) will result in importing failures.
- Extra fields are ignored, maintaining backward compatibility with Google Shopping feeds.
Example Product Feed
<!-- Example Product Feed -->
<rss pm-type="gs-1.0" xmlns:g="http://base.google.com/ns/1.0" xmlns:pm="https://my.profitmetrics.io/ns/1.0">
<channel>
<item>
<!-- Product Details -->
</item>
<!-- Additional Items -->
</channel>
</rss>
Section 2: Feed Access & Security Requirements
In some cases, product feeds may be restricted for security reasons (e.g. IP restrictions, firewall rules, or server-level access control). To ensure ProfitMetrics can successfully fetch the product feed, the following configuration is required.
If IP restrictions are enabled on your server or security system, please whitelist the IP addresses used by ProfitMetrics for feed retrieval.
The current IP ranges used for feed fetching can be found here:
Feed fetching IP addresses (ProfitMetrics):
https://api.my.profitmetrics.io/api/public/info/ipAddresses/feedFetching
This ensures that:
- The product feed can be accessed securely by ProfitMetrics systems
- Sensitive data remains protected from unauthorised access
- Automated feed updates continue to function without interruption
If you are unsure how to apply IP whitelisting, your technical team or hosting provider should be able to assist.
Section 3: Troubleshooting
To ensure a successful product feed, please consider the following troubleshooting tips:
- Check that the overall group is called <channel>.
- Ensure products are labelled <item> and not <products> or <items>.
- Match the ID in the feed with the ID received with orders (usually the internal product variant ID from the e-commerce platform).
- Use pm:price_buy and pm:price_buy_currency for cost prices.
- Required Fields:
- Create "pm:id" and fill it with product IDs.
-
Alternatively, this field can be named several other things in this priority:
pm:id
g:id
id
-
- Create "pm:id" and fill it with product IDs.
-
- Create "title" and fill it with product titles.
- Create "price" and fill it with product prices incl. VAT/Tax.
- Recommended Fields:
- Create "pm:price_buy" and fill it with product costs (costs of goods sold) ex. VAT/Tax.
-
Alternatively, this field can be named several other things:
pm:price_buy
g:cost_of_goods_sold
price_buy
cost_of_goods_sold
g:price_buy
pm:cost_of_goods_sold
cost_price
-
- Create "pm:price_buy_currency
- Create "pm:price_buy" and fill it with product costs (costs of goods sold) ex. VAT/Tax.
Confirm that the feed does not contain illegal characters (such as &, <, >).
Full Specs:
| Element | Description | Required |
| link | Should to the biggest extent possible match realworld links, to be able to match up pageviews in for example Google Analytics with products. | Optional |
| title | Product name | Required |
| pm:id OR g:id OR id |
Unique Product ID. This should match what is transmitted to profitmetrics in orderspecs |
Required |
| pm:sku |
product SKU (different from ID) |
Optional |
| g:image_link | Link to the product image. Should preferably not be too high resolution. Bounds of about 500x500px are good. But there are no hard restrictions here. | Optional |
|
g:price |
Retail price, including VAT | Required |
| g:google_product_category | Google category from Google product category taxonomy | Optional |
| g:brand | Brand of product | Optional |
| pm:price_currency | Currency of the Retail price, 3-letter ISO 4217 format | Optional |
| pm:price_buy | The cost price of product EX Vat. This can also be any one of the names listed above |
Optional |
| pm:price_buy_currency | Currency for the cost price of the product (3 letters ISO 4217 format) | Optional |
| pm:num_stock | Number of items in stock | Optional |
| pm:category | A category the product is part of. This element can be placed multiple times. Place the most important category first. | Optional |