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

# Menu Catalog Sync

> Sync your storekit menu to a Klaviyo catalog every day so product blocks, recommendations and dish names, images and prices are available in your emails and flows.

With catalog sync on, storekit pushes every dish on your menus into Klaviyo's catalog once a day. Klaviyo can then show dish names, images and prices in emails using product blocks and feeds, and relate the product key on events (`ProductID` on **Ordered Product**, `ProductId` on **Viewed Product**, `AddedItemProductId` on **Added to Cart**) to a real catalog item.

## Turn On Catalog Sync

<Steps>
  <Step title="Open Klaviyo">
    Go to **Stores** → any store → **Settings** → **Integrations** → **Klaviyo**, then under **Klaviyo account** click **Edit**.
  </Step>

  <Step title="Add the Catalogs scope to your private key">
    In Klaviyo, the private API key you connected needs **Catalogs — Read/Write** in addition to the [scopes needed for orders](/docs/guides/integrations/marketing/klaviyo/connect#before-you-start). If it does not have it, create a new key with all the scopes and replace the connected one under **Private key** → **Replace key**.
  </Step>

  <Step title="Enable the sync">
    Under **Klaviyo account**, click **Edit**, then switch **Catalog sync** on. It saves straight away — there is no **Save** — and the first sync starts immediately.
  </Step>
</Steps>

<Check>
  Within a few minutes, open your product catalog in Klaviyo. Your dishes are listed with their storekit names, images and prices.
</Check>

<Note>
  Catalog sync is an **account-level** setting — the **Klaviyo account** group is marked *"Shared by all stores in your account"*. Switching it on from one store's Klaviyo page turns it on for the whole account; it syncs the menus of every store whose **Enable Klaviyo** switch is on.
</Note>

## What Is Synced

The sync runs at 05:00 every day and once immediately when you enable it. It sends every named, non-deleted dish from every menu on your enabled stores.

| Klaviyo catalog field | storekit source |
| - | - |
| **Item ID** (`external_id`) | The dish's PLU, then SKU, then POS ID — whichever is set first. Falls back to the storekit item ID if none is set. |
| **Title** | Dish name |
| **Description** | Dish description, or blank |
| **Price** | Dish price in major units (`12.50`) |
| **Image** | The dish image URL, or blank |
| **Published** | `true` unless the dish is marked unavailable |
| **URL** | Blank — storekit does not send a per-dish link |

Items are created in Klaviyo's default catalog as custom-integration items. Existing items are updated in place, matched by **Item ID**.

<Warning>
  The **Item ID** is the same product key sent on order and browser events. If the same dish exists on several menus or stores with the same PLU, SKU or POS ID, it is synced once. If a dish has no PLU, SKU or POS ID, each store's copy is a separate catalog item.
</Warning>

## What Is Not Synced

* **Modifiers** — only top-level dishes are catalog items. Modifier choices still appear on order events under `Modifiers`.
* **Categories** — Klaviyo catalog categories are not created. Use the `Categories` property on events for segmenting.
* **Deletions** — a dish removed from your menu stays in Klaviyo's catalog. Delete it from the catalog in Klaviyo if you no longer want it recommended.
* **Stock** — availability is reflected in **Published** at the time of the daily sync, not in real time.

## Using the Catalog in Klaviyo

* Klaviyo's product blocks and product feeds work from catalog items, so dish names, images and prices come through without you re-entering them. See Klaviyo's own documentation for setting these up.
* Because `ProductID` on **Ordered Product** and `ProductId` on **Viewed Product** match the catalog **Item ID**, Klaviyo can relate what a customer ordered or viewed to a catalog item.
* In an abandoned checkout flow, use the `Items` array on **Started Checkout** to render the dishes left in the basket — see [Flows to Build](/docs/guides/integrations/marketing/klaviyo/flows#abandoned-checkout).

## Related

<CardGroup cols={2}>
  <Card title="Event Reference" icon="table-list" href="/docs/guides/integrations/marketing/klaviyo/event-reference#catalog-items">
    How the same product key appears on events
  </Card>

  <Card title="Troubleshooting" icon="wrench" href="/docs/guides/integrations/marketing/klaviyo/troubleshooting">
    Dishes missing from the catalog
  </Card>
</CardGroup>


## Related topics

- [Klaviyo Event Reference](/docs/guides/integrations/marketing/klaviyo/event-reference.md)
- [Flows to Build](/docs/guides/integrations/marketing/klaviyo/flows.md)
- [Klaviyo](/docs/guides/integrations/marketing/klaviyo/overview.md)
- [Connecting Klaviyo](/docs/guides/integrations/marketing/klaviyo/connect.md)
- [Menu Linking & Price Sync](/docs/guides/integrations/pos/comtrex/menu-sync.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.