> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.omegatheme.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Klaviyo Integration: Send booking & storefront events to Klaviyo

# Klaviyo Integration: Send booking & storefront events to Klaviyo

Connect DingDoong to your Klaviyo account so every delivery, pickup, and shipping event — plus storefront actions like date selection — flows into Klaviyo. You can then build email and SMS flows (reminders, "your order is on its way", win-back) triggered by real DingDoong data.

|| This feature is available on all plans.

---

## Overview

DingDoong pushes two kinds of events to Klaviyo: **server events** (booking lifecycle — scheduled, rescheduled, reminder, tomorrow, completed) for delivery, pickup, and shipping; and **client events** (storefront behavior — widget viewed, date selected, and more). Once connected, these events appear as metrics in Klaviyo and can trigger any flow or segment you build there.

|| Connecting Klaviyo does not change anything on your storefront or in your existing orders. It only starts forwarding new events to Klaviyo — nothing is sent retroactively.

---

## Before you start

* DingDoong is installed and active on your Shopify store.
* You have a Klaviyo account with access to **API keys** (Klaviyo admin → Settings → API keys).
* You have both a **Private API key** and your **Public API key (Site ID)** ready.

---

## How to set up the Klaviyo integration

Here's how, step by step:

### Step 1: Open the Klaviyo integration settings

In the DingDoong admin, go to **General settings → Integrations → Klaviyo**. You'll see a connection card with a **Not connected** badge.

![](https://storage.crisp.chat/users/helpdesk/website/-/8/3/8/3/8383e5404a31c000/image_738061.png)

### Step 2: Get your Klaviyo API keys

In a new tab, open your [Klaviyo API keys page](https://www.klaviyo.com/settings/account/api-keys). Copy your **Private API key** and your **Public API key** (also called the Site ID).

![](https://storage.crisp.chat/users/helpdesk/website/-/8/3/8/3/8383e5404a31c000/image_cpv1b0.png)


### Step 3: Paste the keys and test the connection

Back in DingDoong, paste the **Private API key** and **Public API key** into the two fields, then click **Test connection**. When the keys are valid, the badge turns green and shows **Connected**, and your keys are saved (the private key is stored masked).

![](https://storage.crisp.chat/users/helpdesk/website/-/8/3/8/3/8383e5404a31c000/image_hd4qe7.png)


### Step 4: Choose which booking (server) events to send

Once connected, open the **Event configuration** card. Use the tabs to switch between **Delivery**, **Pickup**, and **Shipping**, then tick the lifecycle events you want to send: **Scheduled**, **Rescheduled**, **Reminder**, **Tomorrow**, and **Completed**. Use **Select all** to enable an entire tab at once.



### Step 5: Choose which storefront (client) events to send

In the **Storefront events** section, enable the client-side events you want to track: **Widget viewed**, **Date selected**, **Zone rejected**, **Date not available**, and **Surcharge applied**.


### Step 6: Send a test event to Klaviyo

Any event you enable shows a **Needs test** badge until Klaviyo has seen it. Click **Send test events** (the count shows how many are pending), or use the per-event **Send test** link. This registers the metric in Klaviyo so it's available when you build a flow. Enabled events flip to **Sent** once received.


### Step 7: Fine-tune timing and triggers

Adjust the remaining options to match how you operate:

* **Reminder timing** — how many hours before the booking the *reminder* event fires (2, 6, 12, 24, or 48 hours).
* **Delivery count period** — the look-back window used for delivery-count data (30, 60, 90, 180, or 365 days).
* **Completed event trigger** — what marks an order as completed: **Shopify fulfilled**, **In-app fulfilled**, or **Both**.

![](https://storage.crisp.chat/users/helpdesk/website/-/8/3/8/3/8383e5404a31c000/image_111cosp.png)

---

## How it looks in Klaviyo

After you send a test (or a real event occurs), the metric appears in Klaviyo under **Analytics → Metrics**. You can then use it as a flow trigger or a segment condition — for example, a "Pickup reminder" flow triggered by the pickup *reminder* event.

![](https://storage.crisp.chat/users/helpdesk/website/-/8/3/8/3/8383e5404a31c000/image_1nrhyyo.png)


---

## Recommended Klaviyo flows

Once your events reach Klaviyo, you can trigger flows off them. Here are the most useful flows to build first, and which DingDoong event to use as the trigger metric.

| Flow | Trigger metric | Why it works |
| ---- |
| Order confirmation with delivery/pickup date | `scheduled` (delivery, pickup, or shipping) | Confirms the exact date/slot the moment a booking is placed — clearer than Shopify's generic order confirmation |
| Pre-delivery reminder | `reminder` | Fires X hours before, based on your Reminder timing setting — reduces missed deliveries |
| "Arriving tomorrow" heads-up | `tomorrow` | Next-day nudge so the customer is home / ready for pickup |
| Post-delivery follow-up & review request | `completed` | Ask for a review or offer a reorder discount right after fulfillment |
| Pickup-ready reminder | `pickup reminder` / `pickup tomorrow` | Cuts down on no-show pickups |
| Availability win-back | `date_not_available` / `zone_rejected` | Follow up with shoppers who couldn't book their preferred date or fell outside your zone |

### How to build a flow in Klaviyo (example: pre-delivery reminder)

1. In DingDoong, enable **Delivery → Reminder**, set **Reminder timing** (e.g., 24 hours), and click **Send test** so the metric appears in Klaviyo.
2. In Klaviyo, go to **Flows → Create flow → Create from scratch**.
3. Set the trigger to **Metric**, and choose the DingDoong reminder metric.
4. (Optional) Add flow filters or conditional splits on event properties such as `delivery_date`, `time_slot`, or `delivery_zone` to personalize the message.
5. Add an **Email** or **SMS** action, write your message, and use event/profile properties (e.g., the delivery date) as merge tags.
6. Turn the flow **Live**.

|| Because DingDoong sends events with the timing you configure, you usually don't need a "Time delay" step in Klaviyo — the `reminder` and `tomorrow` events already fire at the right moment.

### Segments worth building

* Customers with an upcoming delivery (recently fired `scheduled`, no `completed` yet) — great for promos or route notices.
* High-frequency bookers (many `completed` events) — target for loyalty or subscription offers.
* Shoppers who hit availability limits (`date_not_available` / `zone_rejected`) — gauge demand for new dates or zones.

---

## Common scenarios

### Send a reminder email the day before a delivery

Enable **Delivery → Reminder**, set **Reminder timing** to 24 hours, send a test, then in Klaviyo build a flow triggered by that reminder metric.

### Track storefront drop-off when a date is unavailable

Enable **Date not available** and **Zone rejected** under Storefront events. Use these metrics in Klaviyo to segment shoppers who hit availability limits, then follow up or adjust your schedule.

### Only send events for pickup, not delivery or shipping

Open the **Pickup** tab and use **Select all**, and leave the Delivery and Shipping tabs unchecked. Only pickup events will flow to Klaviyo.

---

## Tips & Best practices

|| Always click **Send test events** after enabling a new event. Klaviyo only lists a metric once it has received it at least once, so testing makes the event selectable when you build your flow.

| Enable only the events you'll actually use in a flow — fewer, well-named metrics keep your Klaviyo account tidy.

| Set **Reminder timing** to match your prep window (e.g., 24 hours for next-day delivery, 2 hours for same-day pickup).

---

## Troubleshooting

### The connection test fails

Double-check that you pasted the **Private** key in the private field and the **Public** key (Site ID) in the public field — they are easy to swap. Confirm the private key hasn't been revoked in Klaviyo and that your account has API access. If it still fails, the connection message will explain whether the keys were rejected or Klaviyo was unreachable.

### My event isn't showing up in Klaviyo

Make sure the event is enabled (checked) and that you've clicked **Send test** for it — an event with a **Needs test** badge hasn't been registered in Klaviyo yet. Server events also only fire when a matching real booking occurs (e.g., a pickup *completed* event needs a pickup order that is fulfilled per your Completed event trigger).

### An event shows "Needs test" even though it's enabled

Enabling an event just turns it on; it stays **Needs test** until Klaviyo receives it once. Click the per-event **Send test** link or the top **Send test events** button to register it.

---

## FAQ

### Do events get sent for past orders?

No. Only new events are forwarded to Klaviyo after you connect. Nothing is sent retroactively.

### How do I disconnect Klaviyo or undo this?

In the Klaviyo connection card, click **Disconnect**. This removes the stored keys and stops all events from being sent. Your enabled-event selections and timing settings are kept, so reconnecting later restores your configuration.

### What's the difference between server events and storefront events?

Server (booking) events describe the order lifecycle — scheduled, rescheduled, reminder, tomorrow, completed — per delivery/pickup/shipping channel. Storefront (client) events describe shopper behavior in the widget, like viewing it or selecting a date.

