Help · Settings
What is not imported
Nothing from Klaviyo is dropped silently. Whatever could not be imported whole is named on that run's report, with a sentence saying why, and this chapter says what to do instead.
What is not imported, and what to do instead
Nothing is dropped silently. Every segment and template that could not be imported whole, and every automation imported with steps to set up, is named on that run's report, with a sentence saying why. Every report you have ever run is on the Reports tab:
Every import you have run, newest first, kept for good. Open one to see what was imported, what was not, and why.
A report's way back is Reports, at the start of its title line.
The report opens with one line for each step it covers — 10 of 43 segments imported. 32 could not be, 1 was not needed. — and then puts what did not happen first: Not imported, then You don’t need this, then Imported, each heading carrying its own count. Every row under them names the thing and the reason.
Segments. Most translate rule for rule — including a rule about what was inside an event, like the SKU that was ordered or the email that was sent, a rule about your Shopify tags, which match here without regard to capitalization, a yes/no rule on one of your own fields, and a number rule on one of your own fields — equals, greater than, at least, less than or at most. A yes/no rule matches “true” or “yes” (or “false” or “no”) in any capitalization, though not “1” or “0”, which read as numbers — and a number rule reads your record’s value as a number, so a value that is not a number, like “N/A”, matches no number rule; the report says so next to each. What cannot be imported is named by the rule, never by the segment: "A rule could not be imported: predicted lifetime value is over $200" tells you what to do about it, where naming the whole segment does not. The rules that cannot be imported, by name: a rule about distance from a postal code, Klaviyo's predictive numbers, a rule about one of their country groupings rather than a country, a rule about a profile field this app has no way to ask about, a rule that compares one of your fields against one of Klaviyo's own internal codes rather than a word you typed, a number rule asking for a field that is not equal to a number (Klaviyo does not say whether a blank field counts), a number rule on a field some of your profiles hold as text — a “25” saved in a text field (Klaviyo’s rule may pass those people by, and ours would not), and a rule built on a metric you removed — allow that metric again on Analytics → Metrics, and the rule is imported the next time you import. A rule about when an event happened — after a date, or between two dates — is imported onto your store's days, and the segment's row on the report says how many people that moved in or out; Your store's time zone explains why. Klaviyo's "after September 3" does not count September 3 itself, so it arrives here as since September 4, the same people. A rule for events before a fixed date is not imported yet: we have not confirmed whether Klaviyo counts that day itself, and guessing could exclude a whole day. Build it here with before. A date rule on one of your own fields is different, and is not imported: Klaviyo measures a date to the moment, and a date rule here reads whole days in your store’s time zone, so the two can disagree by a day. Build it here instead — a date field offers “is before”, “is after”, “is on” and a count of days from today.
Two of Klaviyo's fields are never imported: Accepts Marketing and Accepts SMS. They are Klaviyo's copies of a setting Shopify no longer uses, and they did not change when somebody unsubscribed — on one store we measured, about half the people marked “true” had unsubscribed. Consent is imported from Klaviyo's consent records instead, and the report lists both fields under You don’t need this. A segment rule asking for Accepts Marketing to be true is imported as “email consent is subscribed”, and one asking for Accepts SMS to be true as text-message consent. Any other rule on either field is not imported, because with the field gone it would match everybody or nobody.
A segment with one or more of those rules in it is imported anyway — when the rule is one this app can never ask, which is what all but two of them are. What could not be imported is dropped, and the segment is flagged on its own page, above its rule:
A rule could not be imported:
then the rule in plain words. The report's count for the step says how many arrived that way, as a clause of the imported figure rather than a fourth number — 5 of 7 segments imported. 2 of those imported without one of their rules. 1 could not be. 1 was not needed. — and it names the rule beside each one, in the same words the segment's own page shows you.
The flag is there rather than a refusal because a segment missing one of its rules is a different audience. So you keep the work, and what is held back is the send: open the segment, put what is missing back in the builder, and saving that change clears the flag. It has to be a rule that changes — renaming the segment, or editing its labels, leaves the flag where it is. Until the rule is finished, a campaign cannot be armed with that segment, and its people cannot be added to a list.
A report does not change after you fix the segment. Each report is a record of the run that made it, so it goes on saying that this segment arrived without one of its rules. The segment's own page is the one that tells you where it stands today.
A segment whose rules are all of that kind has nothing left to import. That one is refused whole and named on the report, with each of its rules written out, so you can decide whether to build something like it here by hand. So is a segment whose rule we could not read at all: the report says that plainly, rather than guessing at what it might have meant.
And there is a door beside it: Build it here. Every row on the report that could not be imported carries it, and pressing it opens the segment builder with the name already in the field, no rules at all, and the rule as Klaviyo stored it sitting above the empty rows for you to read while you build.
Nothing is filled in for you, and that is deliberate. A rule this app could not read is a rule it could not read: half of it, quietly put on your screen as though it were the whole, is worse than none of it, because you would have no way of knowing which half was missing. So you get your own name on it, our sentence saying what we could not import, and Klaviyo's own words for the rule — and the segment you save is an ordinary one of yours, unflagged, with nothing marking it as imported.
If the rule was too long to keep a copy of, the panel says so and points you back to Klaviyo to read it there. If Klaviyo sent no rule for that segment at all, it says that instead. Neither one is a blank space you have to guess about.
Two more are held back whole, and both have a way back. A segment with a rule built on a metric you removed is refused entire rather than trimmed: a rule that counts a metric you deleted can never answer, so excluding it would hand you a segment that quietly means something else. Allow that metric again on Analytics → Metrics — the button there reads Restore, or Allow this name again once the metric's events have been deleted — and import again. That run looks at every segment afresh, so you do not need to change anything in your old tool, and the segment is imported with every rule in it. And a segment with a rule about one of your lists waits for the list. It is named on the report as one that could not be imported this time, and it is imported on its own the next time the import runs, once that list has been imported, with every rule in it.
Already enforced. Some segments exist only to hold back people who bounced, reported spam, or have no consent recorded — which your store does by itself, on every send, without a rule to maintain. Those are reported rather than rebuilt, and named one by one: the report marks each of them You don’t need this, so you can see exactly what you are no longer maintaining. They are also the sort the tick-list starts unticked, which is the same judgment made one step earlier.
Templates. A Klaviyo template arrives as a saved design under Content → Templates, with its images — background images included — copied into your own images and media so they no longer load from Klaviyo's servers. Its name becomes its subject, because Klaviyo templates do not carry one.
In most mail apps, it sends the way it looked in Klaviyo. The template's own style rules come with it — how its columns stack on mobile, what it hides on one screen size and shows on another, its link colors — along with its background colors, its background images and the color of the page around it, and it fills the email from edge to edge. Those rules are fenced in: they can only change the imported part, never your footer or your unsubscribe link. Rules that load a font from another website are excluded, so a template set in a web font shows in the next font it names. Some mail apps throw style rules away — the Gmail app reading an address that is not a Gmail address is one — and there it can look plainer. Converting the template (the Your imported templates chapter) carries its look in its own blocks.
A discount code tag becomes your Discount code field. Where the template printed a code from one of your Klaviyo discounts, it now asks for your own discount code. Until the email has a discount block with a discount chosen, it will not send and says so — it never goes out with the code missing.
The thing that stops a template being sendable is conditional content — Klaviyo's "if this person, show that" tags. Those are kept exactly as written, which means the design imports and cannot be sent until you take them out or rebuild them here. On that same real account, most templates carried at least one. The commonest by far was a guard around a first name, and that one is translated for you into this app's own way of writing a fallback. Tags that change nothing — a wrapper that nothing inside it uses, or an "if this, show that" whose every part is the same — are removed when the design is imported, keeping what they wrapped, so they no longer stop it being sent. The rest — most product feeds, loyalty-app lookups — have no counterpart here yet, and each one is named on the report so you know which email to open.
Klaviyo's order and shipping emails convert whole. Open one and press Convert to Carpe Messaging format: its event.extra… and event|lookup:… details become details from the automation's start event, its tracking button goes to the start event's tracking link, a {% if … == 'USPS' %} around a carrier's section becomes that section's Show this only when the carrier is USPS, an {% if %} around one address line becomes a rule on that line, and the {% for item in event.extra.line_items %} list becomes a product block listing each ordered item — each shade on its own line, with its quantity where the list printed it, and nothing the order did not have. An automation's own email converts the same way — it is converted from the design it was copied from. The Email templates page lists exactly what converts and what still does not.
So do most of your other designs. Converting also turns a rule about a person — a property compared with a word or a number, a Shopify tag, and, or, not, and an {% else %} — into Show this only when … blocks; points a button that went to {{ event.extra.checkout_url }}, {{ organization.url }}, {{ event.URL }} or {% unsubscribe_link %} at the same place here; keeps the images inside any part it leaves as code; and turns {% current_year %} into the Current year field. The tiny hidden line many older designs start with, there only to show under the subject line, becomes the email's preview text when it has none, and is removed when it already has one. A greeting written two ways — "Hi Name!" or "Hi again!" — becomes one line with again as the first name's fallback. "Hello again, Name!" against "Hello again!" becomes two lines, each shown only when the first name is known or is not — and when Klaviyo's editor put the {% if %}, {% else %} and {% endif %} in spans of their own, the whole paragraph is written twice the same way, each copy exactly what Klaviyo printed.
Browse, cart and back-in-stock emails. The product card Klaviyo draws from the event — {{ event.ImageURL }}, {{ event.Name }} or {{ event|lookup:'Product Name' }}, {{ event.Price }}, each linked to {{ event.URL }}, or the same product read with {% catalog event.VariantId %} — becomes a product block over the start event: the image and the name with its shade come from your store when the email goes out, and so does the price where the card printed one. It links to the product only where the card linked both its image and its name. A Make Your Purchase button that went to {{ event.URL }} becomes the block's button, in its own colors, when nothing but empty space stands between it and the card; the name and price keep the card's size, color and font. Where the block cannot draw exactly what the card did — it drops the card's "Price:" label, takes the link off an image or name that had one, or adds the image or name the card did not show — Convert templates leaves the template for you, listed with that note under Needs your answers. A product name written inside a sentence stays in it: {{ event.Name }} or {{ event|lookup:'Product Name' }} there is the product's name from the event that started the automation, and no block is added. One read with {% catalog event.VariantId %} inside a sentence is a question, because a back-in-stock request here carries the product but not its name; so is a price inside a sentence. An abandoned checkout's {% for item in event.extra.line_items %} list with its {% if item.product.variant.title != "Default" and item.product.variant.title != "Default Title" %} test — or == "Default", then == "Default Title", then the shade — becomes the order's items, with each item's quantity only where the list printed it. A test that leaves one of the two placeholders through stays as code: Klaviyo printed "Default Title" there, and the block never does.
Points and other properties. {{ person|lookup:'availablePoints'|floatformat:'0g' }} becomes your availablePoints property (the number prints as the profile has it — no thousands commas), and {{ person.PlacedOrder|default:'' }} the PlacedOrder property with no fallback, which prints nothing for a person without it, as Klaviyo did. Convert templates converts these for you — except Klaviyo's own profile fields (person.phone_number, person.organization, person.city, any $ field), which are not imported as properties: those wait for your answer.
Their library's placeholders. A product block whose feed was never chosen ({% if feeds.|index:0 %}) is filled with Best sellers, and the note asks you to choose its products; a part wrapped in {% if 1 == 0 %}, which Klaviyo never shows, is removed.
A few other things are stripped and named rather than kept: their unsubscribe and preference-center tags, because your emails get this app's own footer (when you convert a design, its own footer is read too: where it becomes blocks, its unsubscribe link works here, and if it also shows your store's address the standard footer is not added; where it stays as code, its words stay as words and the standard footer is added); srcset; fonts and style sheets loaded from another website; script and link tags; an image or background image whose address we could not reach. A very long template is refused with its measured size and a suggestion to split it.
Images. Every image in your Klaviyo image library that you have not hidden there is imported into your images and media — not only the images your designs happened to use. That matters because images live in more places in Klaviyo than designs: the ones your Klaviyo forms used are in that library too, and forms themselves are not imported, so this is the one step that saves you re-uploading them by hand.
An image you hid in Klaviyo is not imported. It is not copied, not stored and not listed on the report. If you want one of them, un-hide it in Klaviyo before you import your images. An image you hid after an earlier import had already copied it stays in your images and media; nothing here removes it.
An image already in your images and media is not copied twice. That is not a problem, so the report does not ask you to review it: it is listed, with its image and its own name, under Already in your images and media — not copied again in the report's For your information box.
Your images' descriptions are written for you after the import, a few at a time — the words a screen reader reads aloud when it reaches the image. They do not all arrive at once, so for a while the library will show you images still waiting for theirs. An image in one of your imported designs stays in that design from the start, with the words the design already gave it. To pick a waiting image for a new email, write its description yourself or wait for ours. If an image was imported carrying a description from Klaviyo, it keeps that one until better words are ready. You can edit any of them, and the moment you write your own for an image, that one is yours — nothing overwrites it. An image at an address we could not reach, or one larger than your images and media will take, is named on the report with the reason. So is an image you imported before and then deleted: it is not copied again while it sits in Recently deleted, and Restore there puts it back. If the import stops and you press Try again, every image we could not reach is fetched again; the others keep their reasons.
Automations. Every one arrives not applied yet, which is what the row on the list says before you press anything:
Your automations. Every one arrives not applied yet, with its messages set to Draft. Nothing runs until you review it, apply changes and enable it.
That is not caution about the translation. It is that an automation is a standing instruction to mail people, and a standing instruction is yours to give.
Every automation is imported, even when some of its steps cannot be. A step this app cannot import — a text message, a call to another system, an email whose design was not imported, a split whose rule we could not read — arrives as a marked step in its own place, labeled Set up this step, saying what it was and why. A split keeps both of its paths under it, so nothing after it is lost, and an email keeps its old subject line word for word so you can write it again here. If we could not read what starts an automation, it arrives with nothing chosen to start it and a note saying what started it in Klaviyo. If we could not read its rule about who gets in, the whole rule stays behind — never half of it — and a note says so, because without it the automation would reach more people than it did.
An automation that started on a Shopify event in Klaviyo starts on your store's own event here. Klaviyo gives Shopify's events names of its own; when Klaviyo says the event came from your Shopify store, the automation starts on this app's name for the same event, from your store only — so the order and shipping details in its emails, and its tracking button, work:
| Klaviyo's start | Starts here on |
|---|---|
| Placed Order | Placed Order |
| Ordered Product | Ordered Product |
| Checkout Started, or Started Checkout | Checkout Started |
| Fulfilled Order | Fulfilled Order |
| Fulfilled Partial Order | Partially Fulfilled |
| Cancelled Order | Cancelled Order |
| Refunded Order | Refunded Order |
| Confirmed Shipment | Confirmed Shipment |
| Marked Out for Delivery | Out for Delivery |
| Delivered Shipment | Delivered Shipment |
An automation that started on an event from anywhere else in Klaviyo — another app, or your own code — keeps its name and starts on that event from your site, your forms and your connected apps, never from your store's own orders and shipments, even when the two share a name. One exception: a few names only your store sends here — Placed Order, Ordered Product, Checkout Started, a canceled or refunded order, and the return events — so an automation that started on one of those from another app could never start. It is imported with a mark saying so, and it cannot go live until you choose what starts it.
A rule narrowing such a start is imported only when your store's event carries the same detail — the order's value on the order events (Klaviyo's $value), the carrier on the three shipment events (Tracking Company), and the product, variant, SKU and quantity on Ordered Product. Any other rule — Source Name, say — is not imported: your store's event has no detail by that name, so the rule would stop the automation from ever starting, or start it for everyone. And when one of a start's rules cannot be imported, none of them is — a start that kept only some of its rules would reach more people than it did. The automation arrives with one note naming every rule it had, with its value, and cannot be enabled until you set the rules up again here or clear the note.
One of them starts more often here: Refunded Order starts on a partial refund too, where Klaviyo's started only when the whole order was refunded. Read that automation's emails with a partial refund in mind before you enable it.
Any other start keeps its Klaviyo name. This happens when an automation is imported. An automation you imported before September 29, 2026 keeps the start it came with — unless it still has marked steps nobody has edited, which the next import rebuilds. That includes one whose start already has the same name as your store's event, such as Placed Order or Fulfilled Order: it can still be started from places other than your store, and its tracking button then opens your store's home page. If the Start card does not read "· From your store", switch it: open the automation, open the Start card, press Change, type your store's event — Out for Delivery, say — and pick it. The card then reads Out for Delivery · From your store. Your steps stay as they are.
An automation with anything marked cannot be enabled. Its Apply changes stays shut, and says why:
Set up or delete the 3 marked steps and clear 1 note before you apply changes.
The marked steps are named by number. Set up the real step in its place, then open the marked one and press Delete this step. When you have dealt with a note about the start or the rule, press Done — clear this beside it. Nothing marked ever runs, and nothing is sent from an automation that is not applied yet.
The report names every one, and counts them. An automation imported with something marked is listed as imported — Imported, not applied yet — 3 steps to set up — and gathered under what there is to do, like Text messages to write or Emails to give a design, biggest group first.
Importing again redoes a marked draft you have not touched. If a design or a list was missing, import your templates or your lists, then import your automations again: an automation you have not changed since it arrived is imported afresh with what is here now. One you have opened and changed is yours, and is left exactly as it is.
The report itself fits on a screen. A table at the top answers every step at once — what was imported, what your store does not need, what did not, and whether that step wants anything from you. Under it, one pill says whether the import needs you at all: a green Nothing needs your review, or how many things do. When something does, it is listed under the pill, gathered so one problem is one line however many things it stopped; long lists are folded away until you open them.
An image inside a template that could not be copied is one line for the image, however many templates use it: its file name, then how many things use it — Used in 3 templates and 1 automation email — and a fold that lists each one by name, with a link to find it.
Everything that asks nothing of you is in a box of its own, For your information, folded shut: what your store does not need, and the images that were already in your images and media. Then the addresses on hold. Then a link to everything that was imported, which is a screen of its own with a search and a filter, because four hundred names are a list to look things up in and not a report to read.
Two paths that meet again in Klaviyo are copied into each path here, because paths here do not come back together — the same automation, drawn out. Only when that would make it too long is the meeting point marked instead. An automation started by a Klaviyo form arrives with nothing chosen to start it: build the form here first, then choose it as the start. An email sent to only some of the people who got that far is imported with that rule under Send this email only to. If that email is marked, its card shows the rule under the same heading, and a note above the steps names it too: set it under Send this email only to on the email you set up in its place, then press Done — clear this. If we cannot read the rule, the email is marked and the note says so. Either note stays until you clear it, so the new email is never sent to more people than before. A wait longer than a year is marked too — waits here are at most 365 days, so you set the one you want. Two things still keep a whole automation out: one built on a metric you removed here — allow the metric again on Analytics → Metrics, then import again — and one with more than 200 steps, which is more than an automation here can hold; the report names each. Smart sending is not imported, with a note, because every send here already spaces itself out and respects your store's frequency limit.
Your sign-up forms. Not imported at all — there is no ninth row and there will not be one. Rebuild a sign-up form under Content → Forms, which is where display rules and offers live here.
Klaviyo's own numbers. Their revenue attribution and their reporting are theirs. Your history is imported; their arithmetic over it does not.