How Carpe Messaging recognizes a returning visitor
Safari and iOS limit how long a cookie written by JavaScript can last — seven days — which restricts how well a platform built on legacy JavaScript recognizes a visitor who comes back later. Carpe Messaging runs as part of your store and uses Shopify’s own visitor identifier, which is set by your store’s server and is not subject to that limit. Recognition still depends on the shopper’s consent and on what their browser has kept: inside an app’s own browser it depends on that app’s storage, and it may not carry between the app and Safari.
A discount engine from another era
Klaviyo’s native unique-code setup asks you to configure the discount in Klaviyo.
Its native discount editor exposes a defined, limited subset of Shopify discount settings: only what Klaviyo chose to offer.
Klaviyo does not let you set a form’s discount code to expire three days after each person signs up, or an automation’s discount code to expire two days after its email is sent.
Here a discount is your store’s own, mirrored as it is. On a form, each person gets one code and its expiration counts down from the moment they sign up, on the window you set.
Paying for profiles you never mail
Klaviyo’s email plans account for active profiles as well as sending volume. Keeping an active profile can affect your plan even when you do not email it. Sending is per message, and checking that an address is worth sending to is per address.
Here you are priced by what you send. The size of your list opens tiers of sending; it is never a bill of its own.
The hygiene you build by hand
In my own Klaviyo account, eighteen of thirty-three segments existed only to keep bad addresses, bots and the never-engaged out of sends. That is plumbing, and it was my job to maintain it. That was my own account and my own way of running it.
Here every sign-up is checked as it arrives (on Free, the first 200 each month), an imported address waits until it is proven to work, a profile your store has never confirmed is never mailed, and the “suspected bots” segment is built in. Consent-first is a stance: the platform will not help you blast people who never asked.
Consent is one word, and it belongs to the person
Someone has said yes to your email, or has said no, or has bounced or marked your email as spam and will never be mailed again. That is the whole of it, and it comes from your store: the same checkbox at checkout and on your forms that Shopify records. There is no second state. No “subscribed to a list” that can disagree with the consent on the profile, and no list or segment that grants permission by putting someone in it. A list is people you chose; a segment is a question you asked; neither one is a yes.
In my own store, people who checked “Please send me email” at checkout were never emailed. They had given consent, but the checkout sync did not put them on the list the welcome automation started from, and the platform had three things that could each say yes or no: consent, a subscription, and a list. Here there is one. A welcome automation starts from what happened, an order, a checkout, a form, a name added to a list, and every message it sends checks that one consent as it goes out, so nobody who said yes is skipped for being on the wrong list, and nobody who said no is mailed for being on the right one.
There is also a word for the merchant’s side of this, and it is not the same word. A pause is yours: stop marketing to this person, or to a whole segment or list, for now, because of a season, a problem you are sorting out with them, or a reason of your own. A paused person stays in your segments, still hears about an order they place, and comes back the moment you resume. Do not email, the state Klaviyo calls “suppressed”, is different and final: the address bounced, the person reported you as spam, the address was never real, or you decided this person must never be mailed again. The platform will not resume it for you, and it will not let a segment, a list or a pause put it back. Two words, because they are two different things: one is a decision you can change, the other is a fact about the address.
The small things, every day
None of these is a headline feature. Each one is a thing that was annoying, frustrating or a waste of clicks, every single day, and is simply gone.
- List hygiene happens by rule, not by segment. Bad addresses, bots and the long-gone are kept out of sends automatically. Nobody maintains eighteen segments whose only job is plumbing.
- A discount is your store’s discount. You pick it, it is mirrored as it is, each person gets one code, and on a form the expiration counts from the moment each person signs up. Nothing is rebuilt in a second editor with fewer settings.
- Things sit where you put them. Boxes nest, so a badge overlaps an image or copy sits beside one without 400 pixels of padding to fake it.
- Desktop and mobile, side by side, in place. The preview is the form or the email itself, not a screen drawn around it.
- Describe a segment in a sentence. Talaria, our AI assistant, drafts it; you keep the last word on every condition.
- Works with your AI assistant — it drafts, you send. Connect your own assistant and it reads the store and writes drafts. It can never send, schedule, publish or enable anything.
- Every published version stays. Name it, go back to it, make an earlier one live again in a click.
- When someone is not mailed, it says why. “Not sent” is a screen, not a mystery in a report.
- One clock. Every date is your store’s timezone, on every screen, in every report.
- Products stay current. A product in an email is looked up again at send time, so the price and the image are the ones on your store that morning.
- A form asks for a mobile number. Every ready-made form that asks for a number says “Mobile number” and “Must be able to receive text messages,” so people know to give a number that can get your code and your texts.
- Send a test to yourself from the builder, pause a campaign and resume it, and never re-enter consent settings per channel; consent is one word and one screen.
Leaving Klaviyo without starting over
The hardest part of leaving a platform you have used for years is everything you built inside it: your profiles and their consent, your lists, the segments you tuned, your templates and automations. And underneath all of it, the history of what every single person did: every email they received, opened and clicked, every order they placed, year after year. For a store that has been sending for a while, that is millions of events. My own store had 2.7 million. That history is what makes a segment like “opened in the last 90 days” true on your first day, and I did not want anyone to lose it, or to spend weeks rebuilding by hand what they already had.
Here you connect your Klaviyo account with a read-only key, confirm it is yours, and press once. Everything is imported on its own, in an order that makes sure nobody who asked not to be emailed is mailed by mistake. You can close the page; we email you when it is done. Nothing in Klaviyo is touched.
What cannot be translated exactly is named, with the reason, rather than guessed at, and imported automations wait, disabled, until you have looked at them. An imported address waits until it is proven to work, so an old list does not follow you here as a pile of bounces. If your imported history shows a delivery to an address in the last 90 days, with no hard bounce since, that is the proof, and it comes off hold on its own. A soft bounce, like a full inbox, does not undo that proof, and an open never counts as one. And your history starts working on day one: the people who opened and clicked most recently hear from you first while your sending warms up.
What is not here, on purpose
No reviews. No help desk. No data platform. Email and SMS marketing for a Shopify store, done properly, and nothing you will be sold later.
