> ## Documentation Index
> Fetch the complete documentation index at: https://moengage.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Sync Your Product Catalog

> Sync your Shopify product catalog to MoEngage to generate personalized recommendations for customers.

When you enable catalog sync, MoEngage fetches your Shopify product data and makes it available for campaigns, flows, and personalization. This article describes the catalog sync operation, lists the data included in the sync, and provides guidance to maintain the catalog.

<Check>
  **Prerequisites**

  Basic Recommendations must be enabled for your account before you use catalog sync for personalization. Accounts on the Enterprise plan have Basic Recommendations enabled by default. If you use a different plan, you can contact your Customer Success Manager or the MoEngage Support team to enable this feature.
</Check>

## Catalog Sync Operation

MoEngage syncs your Shopify product catalog by fetching data from your store in real time. Once synced, your catalog serves as a data source for product recommendation blocks, dynamic content in messages, and segmentation filters.

Catalog sync is not enabled by default. To activate it, navigate to your Shopify integration settings in MoEngage and turn the **Catalog Sync** toggle on. Note that the toggle requires a one-time setup step on the MoEngage side before it takes effect.

<Warning>
  **One time activation required**

  Before catalog sync functions, the MoEngage team must activate them for your workspace. If products do not appear after you enable the toggle, you can contact your Customer Success Manager or raise a support ticket.
</Warning>

## Configure Catalog Sync

Before you request the first sync, define your catalog schema. You name the catalog, map each attribute to a Shopify source, choose the attribute that identifies an item uniquely, and select the currency for product prices.

To configure and start the catalog sync, perform the following steps:

1. In your Shopify admin, navigate to **Apps** > **MoEngage**.
2. Click the **Sync product catalog** tab.
3. In **Catalog name**, enter a name for your catalog.
4. For each attribute in the table, select a **Data type** and a **Shopify source**.
5. Select the **Mark unique** checkbox for the attribute that uniquely identifies each item in your catalog.
6. To map an attribute that the table does not already list, enter a name under **Add custom attributes**, select a **Data type**, and click **Add attribute**.
7. Under **Choose currency of product price**, select the currency your product prices use.
8. Click **Request catalog sync**.
9. In the **Confirm catalog sync** dialog, click **Confirm**.

<img src="https://mintcdn.com/moengage/-R8ccvGQW5QDFNiJ/images/ShopifyCatalogSchema1.png?fit=max&auto=format&n=-R8ccvGQW5QDFNiJ&q=85&s=344a3bd6327bbd97618f6e51db3f1a1e" alt="Sync product catalog tab showing the catalog name, the attribute mapping table, and the currency selection" width="1410" height="1768" data-path="images/ShopifyCatalogSchema1.png" />

MoEngage prefills the table with the default mapping described in [Synced Attributes](#synced-attributes). You can change the data type or the Shopify source of any prefilled attribute, or remove an attribute using the delete icon at the end of its row.

Each custom attribute you add appears as a new row at the end of the table. **Request catalog sync** stays disabled until every row has both a data type and a Shopify source.

<img src="https://mintcdn.com/moengage/-R8ccvGQW5QDFNiJ/images/ShopifyCatalogSchema2.png?fit=max&auto=format&n=-R8ccvGQW5QDFNiJ&q=85&s=ddb2fdd6924dade8d14bcf7c4b63dd69" alt="Add custom attributes field with a name entered, a data type selected, and the Add attribute button" width="2006" height="1340" data-path="images/ShopifyCatalogSchema2.png" />

The **Shopify source** list contains native product fields such as Product title, Description (HTML), Vendor / Brand, Tags, URL Handle, Variant Price, Compare at price, SKU, Inventory Qty, Variant name, and Primary Image URL. Your Shopify metafields also appear in this list, marked as **Meta field**.

### Choose the Unique Identifier

Every catalog needs one attribute that identifies each item uniquely. Select the **Mark unique** checkbox on that attribute's row. You can mark **Variant ID**, **SKU**, or a custom attribute as the unique identifier.

You cannot change the unique identifier after the first sync completes, so choose an attribute whose value is different for every item. If two or more items share the same value, MoEngage treats them as the same item and keeps only the most recent values it receives for that identifier, which means the earlier item is overwritten in your catalog.

### Configuration You Cannot Change After the First Sync

MoEngage fixes part of your schema once the first sync completes successfully, so review your mapping before you request the sync.

<Warning>
  Once you sync, the currency and the attributes added so far cannot be edited or deleted. You can still add new attributes later.
</Warning>

After the first successful sync, you cannot rename or delete the attributes already in the table, change their data types, change their Shopify sources, or change the catalog currency. You can add new custom attributes at any time, and MoEngage includes them in the next sync.

<img src="https://mintcdn.com/moengage/-R8ccvGQW5QDFNiJ/images/ShopifyCatalogSchema3.png?fit=max&auto=format&n=-R8ccvGQW5QDFNiJ&q=85&s=9493bab1aaeae201415b6fb0523dde20" alt="The Confirm catalog sync dialog with the Confirm button highlighted" width="964" height="336" data-path="images/ShopifyCatalogSchema3.png" />

## Sync Frequency

After the first sync completes, MoEngage keeps your catalog up to date in real time. When a product changes in Shopify, that change reflects in your MoEngage catalog without waiting for a scheduled refresh, so campaigns that rely on catalog attributes such as product price, image, or availability use current values.

<Note>
  Real-time catalog sync is in early access.
</Note>

MoEngage syncs only the products whose Shopify status is **Active**. If a product's status changes from **Active** to any other value, MoEngage removes it from the catalog.

## Synced Attributes

MoEngage prefills the mapping table with the following product attributes. Before the first sync, you can change the data type or Shopify source of any of them, remove the ones you do not need, and add your own.

| Attribute                    | Description                                                                                                                            | Shopify Source Field  |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| **Product title**            | The name of the product as it appears in your store.                                                                                   | Product title         |
| **Variant ID**               | The unique identifier for each product variant (size, color, and so on). This serves as the primary key for each item in your catalog. | Variant ID            |
| **Product ID**               | The unique identifier for the parent product. Multiple variation IDs can have the same product IDs.                                    | Product ID            |
| **Product URL**              | The URL to access the item on your storefront.                                                                                         | Product URL           |
| **Primary Image URL**        | The URL of the primary product image associated with the variation ID.                                                                 | Primary Image URL     |
| **Vendor / Brand**           | The name of the product vendor, brand, or supplier.                                                                                    | Vendor / Brand        |
| **SKU (Stock Keeping Unit)** | This is your internal product code for this variant.                                                                                   | SKU                   |
| **Variant Name**             | The name of the specific variant (for example: Blue / XL).                                                                             | Variant Name          |
| **Variant Price**            | The listed price for this variant.                                                                                                     | Variant Price         |
| **Inventory Qty**            | The available inventory for this variant present in your store.                                                                        | Inventory Qty         |
| **Description (HTML)**       | The product description text.                                                                                                          | Description (HTML)    |
| **Created At**               | The date you created the product in Shopify (ISO 8601 format).                                                                         | Product creation date |
| **Updated At**               | The date you last modified the product in Shopify (ISO 8601 format).                                                                   | Last modified date    |

## Excluded Data

The following data does not sync in the default catalog sync:

* **Third-party app fields**: Only native Shopify product fields and your Shopify metafields are available as sources.

## Essential Considerations for Sync and Personalization

To use your catalog data effectively, review the following information:

<AccordionGroup>
  <Accordion title="Catalog Enrichment for Webhooks">
    Webhook events, such as **Shopify - Order Placed** and **Shopify - Add to Cart**, do not include product or image URLs in their payloads. To use these attributes in campaign personalization, use catalog enrichment at send time. MoEngage looks up the relevant product in your synced catalog and attaches the attributes to the message. For more information, refer [here](/docs/user-guide/content/recommendations/getting-started/overview).
  </Accordion>

  <Accordion title="Data Consistency Requirements">
    Field values must be consistent in type across your catalog for products to import correctly. For example, if the **Variant Name** field contains text strings for most products but numeric values for others, MoEngage skips the products with numeric values. You can review your Shopify data for inconsistent formats in the **SKU**, **Price**, and **Variant Name** fields before you sync.
  </Accordion>
</AccordionGroup>

## Verify the Catalog Sync

To confirm the sync completes correctly, perform the following steps:

1. In your MoEngage dashboard, navigate to **Content** > [**Catalog**](/docs/user-guide/content/recommendations/prerequisites/catalogs) and check the total product count.
2. Compare this count to your active product count in Shopify (Shopify admin > **Products**, filtering for active, non-draft items).
3. If the count is lower than expected, check your Shopify product data for fields with inconsistent values, particularly **Variant Name**.
4. If products are still missing despite consistent data, contact support with your workspace ID and the approximate number of missing products.

## Troubleshoot

To troubleshoot catalog issues, review the following table:

| Symptom                                                   | What to check                                                                                                                                                                                                                                                                                                                                                                                                                               |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Products do not appear after you enable catalog sync.     | Catalog sync requires a one time activation. Confirm with your Customer Success Manager or raise a support ticket to verify activation for your workspace.                                                                                                                                                                                                                                                                                  |
| MoEngage excludes some products after the sync completes. | Check the following: <ul><li>Products whose Shopify status is not **Active** do not sync.</li><li>Fields with inconsistent data types across products, for example text for some and numeric for others, do not import.</li><li>If the attribute you marked as unique holds the same value for more than one item, MoEngage treats those items as one and keeps only the most recent values, so the earlier item does not appear.</li></ul> |
| The catalog does not include metafield values.            | Map the metafield to an attribute in the **Sync product catalog** tab. Your metafields appear in the **Shopify source** list, marked as **Meta field**. Map them before the first sync, because you cannot change an attribute's source afterward.                                                                                                                                                                                          |
| The SKU does not serve as the unique product identifier.  | Select the **Mark unique** checkbox on the **SKU** row before the first sync. MoEngage marks **Variant ID** as unique by default, and you cannot change the mapping after the first sync completes.                                                                                                                                                                                                                                         |

<Info>
  **Information**

  If you have questions about your Shopify integration, read our [FAQs](/docs/developer-guide/ecommerce-platforms/shopify/faqs).
</Info>
