The product feed is your product catalog — it tells Inspire what products exist, what they look like, and whether they can be recommended to customers. A well-structured feed is the foundation of recommendations, personalization, and email content.
Required fields
|
Column |
Type |
Description |
Example |
|---|---|---|---|
|
itemId |
Text |
Unique identifier per product. This must exactly match the product IDs sent in your web tracking events (PDP views, add-to-carts, purchases). No duplicates, no empty values. |
"SKU-12345" |
Important: If the itemId in your feed doesn't match the ID in your events, Inspire cannot link customer behaviour to products — recommendations will not work.
Strongly recommended fields
isAvailable — Type: Number (1 or 0)
Indicates whether a product is currently available for sale. 1 = available, 0 = not available.
Why it matters: Inspire uses this to filter out unavailable products from recommendations. If this column is missing, all products are treated as available — including out-of-stock or discontinued items.
Example: 1
category — Type: Text
The product category or product group.
Why it matters: Used as a fallback for recommendations: if a customer has not engaged with enough products, Inspire recommends popular items within the same category. Also used for filtering and grouping. Without categories, fallback recommendations will be less relevant.
Example: "Women's Shoes"
price — Type: Decimal
The selling price of the product, excluding VAT.
Why it matters: Used for price-based filtering (e.g. "only recommend products above €10") and for price bucketing in the Item Enricher. Also required for price-drop triggers.
Example: 49.95
brand — Type: Text
The brand name of the product.
Why it matters: Used to group products by brand for filtering and enrichment. Useful for "more from this brand" recommendations.
Example: "Nike"
name — Type: Text
The display name of the product.
Why it matters: Shown in recommendation output (e.g. emails, web personalisation). Without this, only the itemId is available in the output.
Example: "Air Max 90"
imageUrl — Type: Text
Full URL to the product image.
Why it matters: Shown directly in recommendation output. Without this, no product image is available in emails or on-site personalisation.
Example: "https://example.com/images/airmax90.jpg"
stock — Type: Number
The number of units currently in stock.
Why it matters: Allows you to filter recommendations by minimum stock level (e.g. "only recommend products with at least 5 units in stock").
Example: 42
Optional but useful fields
|
Column |
Type |
Description |
Example |
|---|---|---|---|
|
description |
Text |
Product description visible to consumers. |
"Lightweight running shoe with cushioned sole." |
|
costPrice |
Decimal |
The purchase or cost price of the product. |
22.50 |
|
margin |
Decimal |
The profit margin on the product. Can be used for margin-based filtering in recommendations. |
0.45 |
|
color |
Text |
The colour of the product. Useful for filtering or segmentation. |
"Red" |
|
compatibleItems |
List of text |
A list of itemId values that are compatible with this product (e.g. accessories, spare parts). Used by certain recommendation strategies to suggest compatible products. |
["SKU-99001", "SKU-99002"] |
Parent and child products (variants)
Many webshops sell products with variants — for example, a t-shirt available in sizes S, M, and L, or a shoe in multiple colours. There are two ways to handle this:
Option 1: One row per variant (SKU level) — recommended
Each size/colour combination has its own itemId. This is the most common approach and works best with Inspire, because web tracking events are also typically fired at variant level.
|
itemId |
name |
color |
size |
price |
category |
|---|---|---|---|---|---|
|
SHIRT-RED-S |
Red T-Shirt |
Red |
S |
24.95 |
T-Shirts |
|
SHIRT-RED-M |
Red T-Shirt |
Red |
M |
24.95 |
T-Shirts |
|
SHIRT-BLUE-S |
Blue T-Shirt |
Blue |
S |
24.95 |
T-Shirts |
Tip: If you want to group variants together (e.g. to avoid recommending two sizes of the same shirt), you can add a parentItemId column and use it in your Inspire configuration.
Option 2: One row per parent product only
Each product group has a single itemId, regardless of variants. This produces cleaner recommendations but loses granularity — Inspire cannot distinguish between which specific variant a customer viewed or bought.
Avoid mixing both approaches in the same feed — it makes the logic complex and hard to maintain.
Data quality checklist
Before going live, make sure:
-
Every product has a unique, non-empty itemId
-
The itemId in the feed matches exactly what is sent in CDP events and web tracking
-
isAvailable is kept up to date — discontinued or out-of-stock products are set to 0
-
Every product has a category assigned — products without a category will not benefit from fallback recommendations
-
The feed is refreshed regularly (daily recommended)
-
Products in engagement data (views, purchases) all exist in the item feed