> For the complete documentation index, see [llms.txt](https://docs.roadmap.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roadmap.so/subscriptions/subscriptions-klaviyo-integration.md).

# Subscriptions Klaviyo Integration

Lifecycle metrics that trigger flows, the contract data each event carries, and profile properties for segments.

Every subscription lifecycle moment fires a **metric** into Klaviyo: creation, upcoming orders, pauses, cancellations, and payment failures. Each event carries a full snapshot of the contract, so your flow emails can show exactly what the customer subscribes to. Alongside the events, Roadmap provides subscription **profile properties** for customer segmentation and conditional splits.

Setting up the connection is covered in the [Klaviyo integration](/getting-started/klaviyo-integration.md) guide: one API key shared by every Roadmap product.

### Where to find it in the app

In the Roadmap app, go to **Settings → Klaviyo Integration**:

* **Klaviyo Metrics → Subscriptions tab**: the subscription metrics with their sync status. After install, click **Sync Metrics** once so they appear in Klaviyo for the first time.
* **Klaviyo Profile → Subscriptions tab**: the profile properties below, with a **Manual Sync** button.

### The metrics

| Metric                               | Fires when                | Guide                                                                                                                                                      |
| ------------------------------------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Roadmap: Subscription created        | a new contract is created | [Subscription created email flow](/subscriptions/subscriptions-klaviyo-integration/subscription-created-email-flow.md)                                     |
| Roadmap: Upcoming order              | a renewal is approaching  | [Upcoming order reminders](/subscriptions/subscriptions-klaviyo-integration/upcoming-order-reminders.md)                                                   |
| Roadmap: Subscription payment failed | a billing attempt fails   | [Payment failed email flow](/subscriptions/subscriptions-klaviyo-integration/payment-failed-email-flow.md)                                                 |
| Roadmap: Subscription failed         | a contract becomes Failed | [Subscription failed email flow](/subscriptions/subscriptions-klaviyo-integration/subscription-failed-email-flow.md)                                       |
| Roadmap: Subscription paused         | a contract is paused      | [Klaviyo pre-resume flow for paused subscriptions](/subscriptions/subscriptions-klaviyo-integration/klaviyo-pre-resume-flow-for-paused-subscriptions.md)   |
| Roadmap: Subscription canceled       | a contract is cancelled   | [Klaviyo win-back flow for cancelled subscriptions](/subscriptions/subscriptions-klaviyo-integration/klaviyo-win-back-flow-for-cancelled-subscriptions.md) |

*Roadmap: Subscription canceled* is where cancellation reasons land: when your [churn prevention flow](/subscriptions/managing-subscriptions/churn-prevention-cancellation-and-pause-flows.md) captures why a customer is leaving, the reason (slug, label, and any free text) arrives on the canceled event, so one metric powers reason-segmented win-backs.

### The contract snapshot: event properties shared by every metric

Subscription events carry the same core payload, so any flow email can describe the contract:

| Event property                                                                                           | What it holds                                |
| -------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| `product_titles`, `product_variant_titles`                                                               | the subscribed products and their variants   |
| `product_ids`, `variant_ids`                                                                             | their Shopify ids                            |
| `product_images`                                                                                         | product image URLs for the email             |
| `product_prices`, `line_items`                                                                           | per-product prices and quantities            |
| `onetime_product_titles`, `onetime_product_ids`, `onetime_variant_ids`, `onetime_product_variant_titles` | one-time products added to the next order    |
| `delivery_frequencies`                                                                                   | human-readable frequency, e.g. *Every month* |
| `delivery_interval_frequency`                                                                            | the interval as a number                     |
| `order_upcoming_number`                                                                                  | which order number is next for this contract |
| `is_prepaid`                                                                                             | whether the contract is prepaid              |
| `subtotal_price`, `total_price`                                                                          | objects with `amount` and `currency`         |
| `subscription_id`, `customer_id`                                                                         | the contract and customer ids                |

Example snippets:

```liquid
{{ event.product_titles.0|default:'' }} arrives {{ event.delivery_frequencies.0|default:'' }}.
Order total: {{ event.total_price.amount|default:'' }} {{ event.total_price.currency|default:'' }}
```

Each metric adds its own properties on top (like the failure and retry dates): see the individual email flow guides.

### Profile properties

| Data point                   | Klaviyo property                              |
| ---------------------------- | --------------------------------------------- |
| Has active subscription      | `person.roadmap_has_active_subscription`      |
| Lifetime subscription orders | `person.roadmap_lifetime_subscription_orders` |
| Has paused subscription      | `person.roadmap_has_paused_subscription`      |

Use these for segments and splits: subscribers versus one-time customers, or messaging that respects an active subscription (nobody should get a "subscribe and save" push for a product they already subscribe to).

### Related guides

* [Klaviyo integration](/getting-started/klaviyo-integration.md): connection setup and the settings that span every product
* [Churn prevention: cancellation and pause flows](/subscriptions/managing-subscriptions/churn-prevention-cancellation-and-pause-flows.md): where cancellation reasons are captured
* [The Subscription Activity Timeline](/subscriptions/managing-subscriptions/the-subscription-activity-timeline.md): Klaviyo triggers are logged per contract
* [Subscription auto-tagging](/subscriptions/getting-started/subscription-auto-tagging.md): milestone tags that sync to Klaviyo via Shopify


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.roadmap.so/subscriptions/subscriptions-klaviyo-integration.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
