Klaviyo CRM is a loose phrase, and it hides the decision that matters. Klaviyo is not a sales pipeline tool. It is a customer record for marketing: one profile per person, holding who they are, whether you may message them, what they bought and what you have computed about them. If you run a Shopify Plus store at $3M to $30M in revenue, that record decides who gets which message, so it is worth setting up on purpose rather than by default.
This guide is for operators who already send email or SMS from Klaviyo and want the profile to be trustworthy. It is not for brands below the $3M floor, who can leave the defaults alone, and it is not for wholesale teams that manage deals and account owners. Those teams need a sales CRM alongside Klaviyo, not instead of it.
What this page adds is the step most teams get wrong, and a plain list of what a Klaviyo profile does not hold. Both come from the same gap: nobody decided which system owns identity and consent.
What does a Klaviyo profile actually hold?
A Klaviyo profile holds identifiers, consent status, properties, and a timeline of events. Identifiers are the email address, phone number and an external ID. Consent is tracked per channel. Properties are attributes such as name, location and anything custom you add. Events are things that happened: placed an order, started checkout, viewed a product, received an email.
Klaviyo also computes fields on top of that, such as order counts and predicted values. Treat computed fields as labelled outputs of Klaviyo’s model, and check the current documentation for how each is calculated before you build a segment on it. If you cannot explain a field to a colleague, do not put it in a flow trigger.
The useful way to read the record is as two ledgers that drift. Shopify holds the order truth. Klaviyo holds a marketing copy of it, plus data Shopify never sees, such as form signups and email engagement. Every problem in this article is the two ledgers disagreeing.
| Data | In Klaviyo by default | Where it really lives |
|---|---|---|
| Identity (email, phone) | Yes, from the Shopify sync and forms | Shopify customer, plus any form source |
| Marketing consent | Yes, per channel | Klaviyo and Shopify each keep their own copy |
| Order events and line items | Yes, from the Shopify integration | Shopify |
| Support tickets | Only if an integration sends them | Your helpdesk |
| Returns and refunds | Only where the integration sends the event | Shopify, plus your returns tool |
| Subscription state | Only if the subscription app sends it | Your subscription app |
| Stock levels | No | Shopify or your inventory system |
| Margin and cost of goods | No | Your finance or ERP data |
Take from the table that the bottom four rows are absent or conditional. A segment that needs any of them depends on an integration you must confirm, not on Klaviyo itself.
How do you set up Klaviyo CRM on Shopify, step by step?
The order matters more than any single setting. Identity and consent come before properties, properties before segments, segments before flows. Teams that build in the opposite order, flows first, end up rebuilding segments when they find the profiles do not carry the fields the flows assumed.
Step 1: Connect Shopify and decide what owns the customer
Connect the Shopify integration from Klaviyo’s integrations area, and before you accept any default, write one page that says who owns what. The page has three lines. Shopify owns orders and the customer’s shipping and billing details. Klaviyo owns marketing consent and engagement data. One named person owns the mapping between them.
That sounds like paperwork. It is the difference between a discrepancy that gets fixed in a day and one that gets argued about for a quarter. When a customer complains they were emailed after unsubscribing, someone has to be able to say which system was wrong.
Check the integration’s sync settings for how it handles consent and historical data on first connect. The available options and their labels change, so read them on screen rather than trusting a screenshot from an older guide. If the sync fails or lags after you connect, work through our guide to Klaviyo not syncing Shopify orders before you build anything else.
Step 2: Set identity and consent rules before you import anything
Identity is the step most teams get wrong, and it is invisible until it costs you. Klaviyo will merge and split profiles based on the identifiers it receives. If your form sends an email and your SMS keyword sends only a phone number, you get two profiles for one person. Each one has its own consent state, its own order count and its own place in your flows.
Fix it with three decisions.
- Pick the primary key. For most Shopify stores that is email, with phone as a second identifier. Write it down and make every source send it.
- Send the same identifier from every source. Audit each form, popup, quiz and app that writes to Klaviyo. A source that omits the email will create an orphan profile.
- Map consent explicitly. Decide how a Shopify checkout opt-in, a form signup and an imported subscriber each translate to Klaviyo consent. Do not import a list with unknown consent and hope for the best.
Consent rules differ by region and channel, including for SMS. Describe your practice to counsel and confirm the specifics for every market you send to. This article does not give legal thresholds.
The verification for this step is a count. Export a sample of recent customers from Shopify and search for each one in Klaviyo by email. Every customer should resolve to exactly one profile. A customer who resolves to two, or to none, points at a source that is not sending your primary key.
Step 3: Add the custom properties your team will filter on
A custom property is a field you add to profiles, for example customer_tier or first_category. Create them only when a segment or flow will read them. The temptation is to mirror every Shopify field, and it produces a profile nobody can reason about.
For each property, write four things: the name, the type (string, number, boolean or date), the allowed values, and the owner. Free-text values are the usual failure. If one integration writes “VIP” and another writes “vip”, a segment on the first silently excludes the second. Use one casing convention and a fixed list of values.
Decide where each property is computed. A customer tier based on lifetime spend is better calculated in Shopify or your warehouse and pushed to Klaviyo on a schedule than recomputed inside Klaviyo, because then the tier is the same in every tool that reads it. Klaviyo stays the place the tier is used, not the place it is decided.
For window choices inside properties and segments, use a method rather than a guess. Take the median gap between first and second orders for your catalogue, then choose windows that are a multiple of it. Your own gap is a metric to confirm from your order export, not a number to borrow from a benchmark.
Step 4: Build segments that read the record
A segment is a saved rule over the record. Build a small set first. Four or five that map to decisions are worth more than forty that map to campaigns. Our guide to Klaviyo segments covers the rule builder in detail. Here, the concern is what makes a segment trustworthy as a CRM view.
Use these habits on every segment:
- State the time window explicitly. “Placed Order at least once, over all time” and “Placed Order at least once in the last N days” are different groups. Do not leave the window at whatever the builder defaults to.
- Exclude on purpose. A win-back segment should exclude anyone with a recent order, an open support issue or active suppression. Write the exclusions into the segment, not into a note.
- Name by rule. “Buyers, 1 order, no order in window, consented email” tells the next person what it does. “Q3 push” does not.
- Prefer events over computed fields. An event has a timestamp you can inspect. A predicted field is Klaviyo’s estimate, which you cannot audit line by line.
Segments recalculate as data changes, so a segment is only as current as the sync beneath it. That is why Step 6 exists.
Step 5: Wire flows to segments and events
Flows are where the record turns into revenue. Klaviyo’s own figure is that 41% of email revenue across its 183,000+ brands comes from automated flows (Klaviyo, vendor-reported). That number tells you where the record is used most, not what your store will earn. To estimate your own, use the flow revenue calculator with your inputs and treat the output as a starting hypothesis.
The setting that breaks record-based flows is overlap. A profile can qualify for a welcome flow, a browse flow and a win-back segment at once. If nothing separates them, the customer gets three messages in a day. Use flow filters and exclusions so that each profile is in one path at a time, and set a priority order for the cases where more than one applies. The mechanics of building each flow are in our guide to Klaviyo flows.
Put a check on every trigger: what happens to someone who buys mid-flow? Flow filters that re-check “has not placed an order since starting this flow” before each send are the difference between a reminder and an embarrassment. If the order sync lags, that filter fails silently.
Cost follows the record. Klaviyo’s pricing is tied to the number of profiles, so duplicate and unconsented profiles are not just messy, they can raise the bill. Check the current model on the vendor’s site and read our note on Klaviyo pricing for how the packaging works.
Step 6: Verify the record against Shopify
Verification is a sample, not a dashboard. Pull 20 recent customers from Shopify at random (this is a method, size it to your volume), and for each one compare four things in Klaviyo: the profile exists once, the email matches, the order history matches the last few Shopify orders, and the consent status matches what the customer chose.
Record every difference in a sheet with the cause. Patterns show up fast. Missing orders point to a sync gap. Two profiles point to an identity rule. A consent mismatch points to a form or import that bypassed your mapping.
Run the same check after any change: a new form, a theme change to the checkout, a new subscription app, an import. Also run it on a fixed schedule. Monthly is a reasonable starting cadence, and you should tighten it if the mismatch log is not empty. The record does not degrade all at once, it degrades one integration at a time.
Where do teams go wrong with a Klaviyo customer record?
Most failures are decisions nobody made rather than settings someone got wrong. Three appear repeatedly.
Treating Klaviyo as the master is the first mistake. A team decides Klaviyo “knows” the customer, then a returns process, a helpdesk or a subscription app changes something Klaviyo never hears about. The customer who returned an order is still tagged as a high-value buyer, and receives an upsell for the item they just sent back. Klaviyo cannot know what it was not told.
The list import is the second mistake. Someone exports contacts from an old tool, uploads them, and marks them all as subscribed to make the numbers look good. Deliverability suffers first, and consent questions follow. Import only with a documented basis, and let unknown-consent contacts stay out of sends.
Property sprawl is the third mistake. A year on, the profile has dozens of custom fields, half with inconsistent values, and nobody dares delete one. Segments quietly exclude people whose value is spelled differently. Every property needs an owner and an allowed-values list, and an unused property should be retired.
When should you keep a separate CRM next to Klaviyo?
Keep a separate system when you have people to manage rather than customers to message. Wholesale accounts with an account manager, deal stages, quotes, and contract renewals do not fit a marketing profile. Those belong in a sales CRM, with Klaviyo receiving a small set of fields (account type, tier) so marketing can suppress or tailor messages.
Also keep one when you need a single customer view across ads, support, analytics and a warehouse. Klaviyo can send and receive data through integrations and its API, but it is built to drive messaging, not to be the hub for every tool. If the same person must be identified consistently in your helpdesk and your ad platforms, decide where that identity lives and treat Klaviyo as a spoke.
A useful test: if a field would be edited by a person on a phone call, it belongs in the CRM. If it is set by customer behaviour, it belongs in Klaviyo. For the wider view of how these systems fit a retention programme, see customer retention for ecommerce, and for how this shapes the plan for growing brands, see our page for scaling brands.
What does this cost to keep running?
The ongoing cost is attention, not licence fees. Someone has to own the property list, the segment names and the monthly sample check. In a store of this size that is a few hours a month for a marketer who knows the tools, metric to confirm against your own team’s time once you have run two cycles.
The failure cost is harder to see. When the record drifts, the symptoms are indirect: complaints from recent buyers who got a cart reminder, unsubscribes that jump after a segment change, a flow that seems to underperform for no reason. None of these show up as an error in Klaviyo. You find them by comparing the record to Shopify, which is why Step 6 is the one to keep.
Who owns the Klaviyo record in the end?
The Klaviyo record is a lifecycle problem: who gets which message, when, and on what evidence. When identity, consent and order truth disagree, the flows built on top of them misfire, and no template change fixes that. Pointerflow treats it as a lifecycle flows problem, and works on the record and the flows together so that the messages read from data you have already checked.
Sources
- Klaviyo, benchmark data across 183,000+ brands: 41% of email revenue from automated flows (vendor-reported). All other guidance is written from how Klaviyo and Shopify profiles, events and consent work in general, with no other external figures quoted.