A Klaviyo store mails in two ways. Campaigns go out when somebody presses send, usually after a second pair of eyes has looked at them. Flows (the welcome series, abandoned cart, browse abandonment, post-purchase, winback) tend to get checked once, when someone builds them, and then keep sending unattended.
Email Spam Tester reads one real message and tells you what a receiving server would make of it. Authentication, blocklist status of the sending IP (21 lists), two spam engines, the HTML, and Gmail's and Yahoo's requirements for bulk senders. Get an address on the home page (no signup), send to it within the hour, and the report builds itself as the checks finish. The address takes one message, so each test needs a fresh one.
Preview tests leave out the parts that matter for deliverability
The test send is quick. In the campaign or template editor, click Preview, pick a profile or an event to preview with, then Send test and enter the address. In a flow, open the message and use Preview & test in the upper right.
For the most realistic check of a campaign, the same article suggests sending it to a small internal list.
A one-profile list, Smart Sending off
- Create > List, name it something like "spam test", and create it.
- On the list page, click Add profile (it reads Add subscriber if you ticked the consent checkbox) and enter the test address, plus any provider inboxes the inbox test gave you.
- Build or clone the campaign, and pick this list as the only recipient.
- Turn off Smart Sending for this campaign message.
Step four is the one people miss. Smart Sending is on by default for campaigns and skips anyone who got an email from you in the last 16 hours. Test again the same day and any profile that got the morning's campaign may be skipped. You can switch it off per campaign message.
Adding a profile by hand starts from a list page in Klaviyo's own steps, so use a list, and remove the profile afterwards, since the address stops working after an hour.
If you run the inbox test, its marker has to stay in the subject, and the campaign then shows which folder it reached at Gmail, Outlook, Yahoo and other providers. Some of those provider inboxes are public test inboxes, which means your subject, sender name and folder may be visible to others.
Flow emails need a different approach
A campaign can't stand in for a flow email with full fidelity. Klaviyo notes that campaigns don't carry the event content (the cart items, the order lines) that metric-triggered flows have. You have two options.
The first is the flow's own Preview & test with a real event selected. You see the event content, but the unsubscribe links in that email are placeholders.
Or put the test address through the flow's trigger yourself, the way a shopper would, and let the flow send the live email, which is what Klaviyo means when it recommends a live test for send-time behaviour that preview mode doesn't fully show. Take a welcome series as the example. The first email goes out right after signup, so a test address that subscribes through your form gets it while the address is still open, but the second email, two days later, arrives long after the address has expired and is better checked through preview.
What the report says about a new Klaviyo account
From the report · Authentication
- SPFpassnot alignedPasses for Klaviyo's shared sending domain, not for your From.
- DMARCfailNeither SPF nor DKIM lines up with your From domain.
This is what Klaviyo's shared sending domain looks like before you set up a branded one.
Klaviyo starts most accounts on a shared IP and a shared Klaviyo sending domain. Mail on that domain is authenticated automatically, which is why SPF passes, but it passes for Klaviyo's domain. Your From domain doesn't line up with it, so DMARC fails for your brand. Klaviyo's authentication article says it directly: a policy on Klaviyo's shared domain does not make your emails pass DMARC.
So on an account without a branded sending domain, expect a passing SPF result with red alignment lines next to it, and a failed DMARC, with a branded domain near the top of the fix plan. The DMARC fail page explains the mechanics if you want them.
A branded sending domain is, in Klaviyo's words, a deliverability best practice, and bulk senders are required to have one. In Klaviyo's summary of the Gmail rule, the bulk sender line sits at 5,000 emails to personal Gmail accounts in 24 hours. Bulk senders to Gmail and Yahoo must also publish a DMARC policy, and the report checks that separately under bulk sender rules.
Setting up the branded sending domain
The setup asks for a sending subdomain, send.helloworld.com in Klaviyo's example, and offers two ways to delegate it:
- Dynamic, four NS records pointing at Klaviyo's name servers. Klaviyo recommends this one.
- Static, up to three CNAMEs, for DNS providers that can't do NS. In the example they are
sendpointing to1.klaviyodns.com, andkm1._domainkeyandkm2._domainkeypointing to matching hosts under klaviyodns.com.
Either way you add one TXT record on the bare domain, klaviyo-site-verification= followed by your public API key. Copy real values from your account. Klaviyo's table uses example values.
The selectors tell you which stream you're looking at. Marketing domains sign with km1 and km2, transactional domains with kt1 and kt2. Look up km1 in the DKIM checker once the records are live. Pick a subdomain no other email provider uses, and keep the From address on the same root domain as the sending subdomain.
Example values. Copy the real ones from your account.
| Name | Type | Value | What it is for | Copy |
|---|---|---|---|---|
| Dynamic (recommended) | ||||
| send | NS | Klaviyo's name servers, four records from your account | Delegates the sending subdomain to Klaviyo. | |
| Static, if your DNS can't do NS | ||||
| send | CNAME | 1. | The sending subdomain. | |
| km1. | CNAME | A matching host under klaviyodns.com | DKIM for marketing mail. Transactional domains sign with kt1 and kt2. | |
| km2. | CNAME | A matching host under klaviyodns.com | DKIM, the second selector. | |
| Either way | ||||
| yourstore. | TXT | klaviyo-site-verification= | Proves the domain is yours. | |
| trk | CNAME | dct. | Dedicated click tracking, together with a TXT record and SSL. | |
Click tracking has its own setup. Until you activate dedicated click tracking, which needs a CNAME at trk pointing to dct.klaviyodns.com, a TXT record and SSL, your links keep running through Klaviyo's shared click-tracking domain.
Unsubscribe headers and the rest
Klaviyo adds the one-click unsubscribe headers to marketing emails automatically, and its help article says there's nothing to set up for Google and Yahoo's one-click rule. On a live campaign both unsubscribe checks should pass. If a transactional flow email arrives without list headers, the report doesn't hold it to the bulk-sender checks at all.
Blocklist results for a pooled IP describe Klaviyo's pool. Klaviyo suggests a dedicated IP only from around a million emails a month, with a warm-up of 30 to 40 days, so most stores will stay shared.
Klaviyo's docs
Preview and test emailshelp.klaviyo.com ↗Test flow messageshelp.klaviyo.com ↗Smart Sendinghelp.klaviyo.com ↗Branded sending domainhelp.klaviyo.com ↗Email authenticationhelp.klaviyo.com ↗Questions
Why did my second Klaviyo test never arrive?
Most likely Smart Sending. It skips anyone who received an email from you in the last 16 hours and is on by default for campaigns. Turn it off for the test campaign message.
Why does DMARC fail when SPF passes?
SPF passes for Klaviyo's shared sending domain, not your From domain. DMARC needs SPF or DKIM to pass on a domain that matches your From, and a branded sending domain gives you that.
Are the unsubscribe links in a preview test real?
No. Klaviyo replaces unsubscribe and preference links with placeholders in test sends, and its documentation is silent on the header. When unsubscribe matters, send a live campaign to a one-profile list.
Does a test send count against anything in Klaviyo?
Each test recipient counts toward your monthly preview email limit, 100 a month on the free plan. Klaviyo's article ties that limit to test sends, not to live campaigns.