Klaviyo
Connect Klaviyo and Curobi sends every important subscription moment to your Klaviyo account as a metric you can start a flow on, such as a win-back series when someone cancels or a “your box ships soon” email before a charge. It also keeps four subscription fields up to date on each customer’s Klaviyo profile, for segments.
Available on the Business and Pro plans. It isn’t part of the Free plan’s 14-day trial. Development stores can use it too, so you can build flows before a store launches. See Pricing & Plans.
To set it up, follow Connect Klaviyo and build your first flow. It takes about five minutes. This page is the reference: what gets sent, how the email handoff works, and what to check when something looks wrong.
What Curobi sends
| Metric in Klaviyo | Sent when |
|---|---|
| Curobi Subscription Started | A customer starts a subscription |
| Curobi Subscription Renewed | A recurring charge succeeds |
| Curobi Upcoming Charge | A charge is coming up (sent ahead of the charge) |
| Curobi Payment Failed | A recurring charge fails |
| Curobi Payment Recovered | A failed charge is later paid |
| Curobi Subscription Paused | A subscription is paused |
| Curobi Subscription Cancelled | A subscription is cancelled |
| Curobi Subscription Reactivated | A paused or cancelled subscription starts again |
| Curobi Payment Method Updated | A customer updates their card |
The metric names never change, so a flow you build today keeps working. Klaviyo flows match on the exact name, which means renaming a metric would quietly stop every flow built on the old one. The Curobi prefix keeps these apart from another subscription app’s metrics in the same Klaviyo account, which matters while you’re moving subscribers over from one.
Curobi doesn’t send orders. Klaviyo’s own Shopify integration already records every order, renewals included. Curobi adds subscription events to the customer profiles that integration created; it doesn’t replace it.
Events start when you connect. Subscriptions that started, renewed or changed before you connected aren’t sent to Klaviyo.
Event details for your emails
Each event carries the details you need inside the email. The products, amount and date also come ready to print, so an email reads right without any formatting.
| Property | Example | Notes |
|---|---|---|
event.ItemNamesText | Coffee Beans, Filter Papers | Product names, ready to print |
event.ChargeAmountText | $25.00 | Total per charge, ready to print |
event.NextChargeDateText | Nov 16, 2026 | Next charge date, ready to print |
event.ItemNames | Product names as a list | |
event.Items | One entry per product, with Title, Quantity, Price, ProductId, VariantId | |
event.ChargeAmount | 25 | Total per charge, as a number |
event.Currency | USD | |
event.Frequency | Every month | |
event.NextChargeDate | 2026-11-16T00:00:00Z | For flow filters and date maths |
event.Status | active | |
event.ManageUrl | A link for the customer to manage the subscription | |
event.CancellationReason | Too expensive | Curobi Subscription Cancelled only, when the customer gave one |
event.PreviousStatus | paused |
A property with no value is left out, not sent empty. That’s why the cancellation reason simply isn’t there when a customer skipped the question, rather than being a blank string your email prints as “Reason: ”.
A starter block to paste into an email, using the ready-to-print fields:
Thanks for subscribing to {{ event.ItemNamesText }}!
Billed {{ event.Frequency|lower }}: {{ event.ChargeAmountText }}
Next charge: {{ event.NextChargeDateText }}Or, with one line per product:
Thanks for subscribing!
{% for item in event.Items %}{{ item.Title }} × {{ item.Quantity }}<br>{% endfor %}
Billed {{ event.Frequency|lower }}: {{ event.ChargeAmount|floatformat:2 }} {{ event.Currency }}
Next charge: {{ event.NextChargeDate|format_date_string|date:"F j, Y" }}Profile fields for segments
| Profile field | Example |
|---|---|
| Curobi Active Subscriber | true |
| Curobi Active Subscriptions | 2 |
| Curobi Subscription Status | active |
| Curobi Next Charge Date | 2026-11-16 |
The fields describe the customer, not one subscription. Curobi Subscription Status reads active
while any of the customer’s subscriptions is active; otherwise it shows the state of their most recent
one, such as paused or cancelled. So a customer who cancels one of two subscriptions is still an
active subscriber, and won’t fall into a “lapsed subscribers” segment by mistake.
The fields update each time Curobi sends that customer an event, so they’re as fresh as the customer’s last subscription change.
Choosing which events to send
Everything is on by default. Klaviyo does nothing with a metric until you build a flow on it, so sending everything costs you nothing and means the metric is already there the day you want it. To stop sending one, untick it under Events sent to Klaviyo on Curobi’s Klaviyo page and click Save.
Let Klaviyo send an email instead of Curobi
Curobi already emails customers at most of these moments: a confirmation, a pause notice, a cancellation notice and so on (see Customer Notifications). If your Klaviyo flow sends the same message, customers get two. So you can hand any of these emails to Klaviyo, and Curobi then stops sending its own copy.
The section Who emails your customers on the Klaviyo page lists eight emails in two groups:
| Group | Emails |
|---|---|
| Welcome & billing | Subscription confirmed, Upcoming charge reminder, Charge receipt, Payment recovered, Payment method updated |
| Subscription changes | Subscription paused, Subscription cancelled, Subscription reactivated |
Each row shows the Klaviyo metric that matches it and a CUROBI | Klaviyo switch. A bar at the top counts how many emails each side sends. Every email starts on CUROBI.
To hand one over:
- Build the flow in Klaviyo on the matching metric, set it Live, and check that a test email reads right.
- On that email’s row, click Klaviyo.
- Confirm Switch to Klaviyo. From then on, your Klaviyo flow sends that email and Curobi doesn’t.
To take it back, click CUROBI on the row.
The rules, and why they work this way
- Switch only after your Klaviyo flow is live. A customer gets the email only if a live flow is triggered by the metric. Curobi can’t see inside your Klaviyo account, so it can’t tell whether that flow exists. Switching first leaves customers with no email at all.
- The event has to be on. The Klaviyo side of the switch stays greyed out until that event is ticked under Events sent to Klaviyo. If you untick it later, Curobi starts sending that email again, because Klaviyo would no longer receive anything to send it from.
- Curobi is the safety net. If Klaviyo is disconnected for any reason, or your plan drops below Business, Curobi goes back to sending every email you handed over, with nothing for you to do.
- Use the handoff, not the email switch in Settings. You could also turn Curobi’s email off in Settings → Customer emails. Don’t, if Klaviyo is taking over. A switch in Settings stays off after Klaviyo is disconnected, which leaves customers with no email from anyone. A handoff ends with the connection.
- Settings shows it too. In Settings → Customer emails, an email you handed over says your Klaviyo flow sends it, and points back to the Klaviyo page. The switch there still decides whether Curobi would send the email. If it’s off and the email isn’t handed to Klaviyo, the Klaviyo page shows No one sends this.
- The failed-payment email can’t be handed over. It’s Shopify’s secure card-update email, and it carries the only link that lets a customer update their card, so it always sends. You can still build a Klaviyo flow on Curobi Payment Failed; it sends alongside Shopify’s email, not instead of it.
Customer data and consent
- Sent: the customer’s email address, so the event lands on the right Klaviyo profile, and the subscription details listed above.
- Never sent: phone numbers, addresses or payment details.
- Never changed: consent. Curobi never subscribes anyone to a list or changes their email or SMS consent. Whether Klaviyo can email a customer is still decided by Klaviyo.
- Customer choices are respected. If a customer turned off a message type in their email preferences, for example renewal reminders, Curobi doesn’t send that event for them, so a Klaviyo flow can’t send it either. Otherwise turning off reminders in the portal would just move the reminder to a different sender. Essential account and billing events are always sent.
- Not stored. Curobi reads the email address from Shopify when it sends the event, and doesn’t keep it.
- Your key is encrypted. Curobi checks the key with Klaviyo before saving it, stores it encrypted, and never shows it again, not even to you.
- Read-only where it can be. The key Curobi asks for can read your Klaviyo account’s name and send events. It can’t read your lists, campaigns or anything else.
Checking it’s working
Recent deliveries on the Klaviyo page lists the latest real subscription events Curobi sent. Test events aren’t listed there; check those in Klaviyo (Analytics → Metrics, or the activity feed on the profile).
| Status | Meaning |
|---|---|
| Delivered | Klaviyo accepted it |
| Skipped | Curobi deliberately didn’t send it: the customer has no email address, or turned that message type off. The reason is shown |
| Retrying | Klaviyo didn’t answer; Curobi tries again for about seven hours |
| Failed | Curobi gave up on this event |
Disconnecting
- On the Klaviyo page, click Disconnect and confirm.
- Curobi stops sending events, deletes its copy of the key, and goes back to sending any emails you handed to Klaviyo.
- To fully revoke access, also delete the CUROBI key in Klaviyo (Settings → API keys). A private key can only be deleted from inside Klaviyo, so Curobi can’t do this part for you.
Flows you built stay in Klaviyo, but they get no new Curobi events. Reconnecting later keeps your event choices and delivery history.
Uninstalling Curobi also disconnects Klaviyo and deletes the key straight away.
Moving below Business stops events from being sent, and Curobi takes back any emails you handed to Klaviyo. Your connection itself is kept.
Troubleshooting
”That doesn’t look like a Klaviyo private API key.”
You pasted something else, often the 6-character public key or only part of the private key. A
private key starts with pk_. Klaviyo shows it only once, so if you didn’t copy it,
create a new one.
”Klaviyo didn’t accept that key.”
The key was deleted, or wasn’t copied in full. Create a new key.
”That key is missing a scope.”
The key doesn’t have Accounts: Read Access. Klaviyo keys can’t be edited, so create a new key with the right permissions.
A “Klaviyo was disconnected” banner
The key was deleted, it lost its Events: Full Access permission, or ten events in a row failed. The Risk Center shows the same warning. Create a new key and connect again. Events from the gap aren’t resent, and any emails you handed to Klaviyo were sent by Curobi in the meantime.
I sent a test event but got no email
That’s expected until you build a flow. The test sends an event, not an email. Build a flow on Curobi Subscription Started, set the email and the flow to Live, turn off Smart Sending, then send another test. Also check your spam folder. See Build a flow.
I sent a test but Recent deliveries still says “Nothing sent yet.”
Expected. Test events aren’t listed there. Check Analytics → Metrics in Klaviyo.
The test worked but real events don’t appear
Check Recent deliveries. Skipped means the customer has no email address, or opted out of that message type. If nothing is listed at all, no subscription has changed since you connected.
I can’t find “API keys” in Klaviyo
Your Klaviyo login isn’t an Owner or Admin. Ask the account owner to create the key, or to change your role.
I don’t see Klaviyo in Curobi, or it shows an upgrade message
Klaviyo needs the Business plan or higher. See Pricing & Plans.