# Product Feed
In Klaviyo, product feeds are added via Catalog Sources. This view is hidden for custom API plugins like this one, but still accessible and usable here: https://www.klaviyo.com/catalog/sources. Once you've created your JSON feed, add it to a new Catalog Source to make the products within it available to your Klaviyo emails. Confirm your product feed is working on the Catalog page.
Download Klaviyo's documentation for Custom Catalogs
# JSON Feed in Twig
You can use Twig to generate a JSON feed. Create a template like the following example and make sure it is publicly accessible:
{% if craft.app.plugins.isPluginInstalled('klaviyoconnect') %}
{% set productImageField = craft.app.getPlugins().getPlugin('klaviyoconnect').getSettings().productImageField %}
{% endif %}
{% set products = craft.products().hasVariant({ hasStock: true }).with(productImageField is defined ? [productImageField] : []).all() %}
{% set feed = [] %}
{% for product in products %}
{% set variant = product.defaultVariant %}
{% set feedProduct = {
'SKU' : variant.sku,
'ProductName': product.title,
'ProductType': product.type,
'ProductURL' : variant.url,
'ItemPrice' : variant.price,
'ProductID' : product.id,
} %}
{% if productImageField is defined and product[productImageField]|length > 0 %}
{% set feedProduct = feedProduct|merge({
'ProductImage': product[productImageField][0].url,
}) %}
{% endif %}
{% set feed = feed|merge([feedProduct]) %}
{% endfor %}
{{ feed|json_encode }}