Product Catalogue
Efficiently manage products, UGC galleries, and product tagging with flexible regional and bulk deletion options.
🛍️ Included in our Shopify App
Overview
Product Data Fields
Multi-Region Product Support
Choosing Between SKUs and ParentIDs
Deleting Products
JSON Feed
CSV Manual Upload
History
Overview
A product catalogue is essential for Duel to generate User Generated Content (UGC) galleries and enable product tagging. It serves as a central repository of your products, allowing Duel to access and display relevant details.
Duel supports both JSON and CSV product catalogues. You can import JSON catalogues either by a live JSON feed or via secure SFTP, reach out for more details on SFTP for your dashboard.
💻 Navigate to Dashboard > Settings > Product Catalog
Product Data Fields
Required Fields
These fields must be present on every product or the import will fail.
| Field | Description | Example |
|---|---|---|
| sku | Unique product ID | 12345 |
| name | Product name | Flyte Black |
| url | Product page URL | https://example.com/products/flyte-black |
| src_img | Product image URL (JPEG, PNG, or WebP) | https://cdn.example.com/flyte-black.jpg |
Optional Fields
| Field | Description | Example |
|---|---|---|
| description | Product description | Designed for everyday movement. |
| price | Product price | 97 |
| currency | Currency code (ISO 4217) | USD |
| region | Regional variant identifier | united-kingdom |
| parent_sku | Groups product variants together | flyte-001 |
| meta | Custom metadata as key-value pairs | {"color": "Black", "material": "Cotton"} |
| $action | Controls import behaviour | delete |
Custom Field Mappings
You can map your existing field names to Duel's fields under Settings > Custom Field Mappings — so if your feed uses product_name instead of name, no changes to your feed are needed.
Meta Field
The meta field lets you include additional product attributes that don't fit the standard fields. Common uses include colour, material, availability status, or category information.
Values must be strings, numbers, or booleans. Nested objects and arrays are not supported.
"meta": {
"color": "Black",
"material": "Cotton",
"availability": "In Stock"
}
You can use any key names you like, just keep them consistent across your catalogue.
Multi-Region Product Catalogues
The region field allows you to list the same SKU across multiple regions, each with unique links, pricing, and content. Once region-specific entries are in your feed, an operator can select the appropriate region from the group profile settings.
💻 Navigate to Advocates > Groups > Group Profiles > select your profile > eStore Settings

This enables brands to manage multiple regional versions of a product within a single, unified feed.
Best practice is to replace any spaces in region names with hyphens.
Choosing Between SKUs and Parent SKUs
The parent_sku field groups product variants together. How you use it affects how products appear in galleries and how advocates tag content.
With Parent SKUs, all variants are grouped together in a single UGC gallery, and advocates tag products at the parent level. This works best for sites that don't reload the page when switching between variants.
With individual SKUs, each product has its own gallery and advocates tag at the individual product level, giving you more precise control over what content appears where.
🚨 Your parent_sku values should be meaningful group identifiers, like a base style code. Using a generic value like a brand name will group unrelated products together and affect how they surface in search.
It is difficult to switch approaches once implemented, so choose carefully from the start.
Deleting Products
You can delete products in bulk by specifying an $action: 'delete' directive in your feed or CSV. The product is removed on the next sync and excluded from all storefronts and galleries.
Example:
{
"sku": "12345",
"$action": "delete"
}
To reactivate a deleted product, resend the SKU without the $action property:
JSON Product Feed
A JSON feed is recommended if your catalogue changes frequently. Duel processes feeds daily for accurate and current data.
JSON Feed Schema:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"sku": {
"type": "string",
"description": "The unique stock-keeping unit (SKU) for the product."
},
"name": {
"type": "string",
"description": "The product name as it should appear in campaigns."
},
"description": {
"type": "string",
"description": "A detailed description of the product, including features and benefits."
},
"url": {
"type": "string",
"format": "uri",
"description": "A direct URL to the product page on your eCommerce store."
},
"srcImg": {
"type": "string",
"format": "uri",
"description": "A direct URL to the product image. The image should be in a web-friendly format (JPEG, PNG, or WebP)."
},
"price": {
"type": "string",
"description": "The product price, represented as a string to maintain formatting consistency."
},
"currency": {
"type": "string",
"description": "The currency code (e.g., USD, EUR, GBP) following the ISO 4217 standard."
}
},
"required": ["sku", "name", "url", "srcImg"]
}
}
},
"required": ["items"]
}
Example JSON Feed
CSV Manual Upload
If your catalogue updates infrequently, a manual CSV upload is suitable. You must generate and manually upload the CSV to update your products.
Example CSV
History
Under the History tab you can view all catalogue updates, identify and troubleshoot import errors, and monitor catalogue activity.
💻 Navigate to Settings > Product Catalog > History
