Klaviyo to Snowflake

Klaviyo holds who you can email and how they engage. In Snowflake, that sits next to your orders, so consent, recency and purchases can be read together.

The short answer

Loading Klaviyo is mostly about stopping and resuming a long crawl of changing data without skipping or repeating rows. What usually breaks is profile volume, because a profile counts as updated when any property changes, plus rate limits, late events and deleted profiles that an incremental load never sees.

What you can load from Klaviyo

Profiles
Email plus email and SMS marketing consent flags, with the profile updated time. Requesting only these fields keeps each page small.
Events by metric
Opens, clicks, placed orders and any other metric you choose, with profile and time. Metric IDs need mapping to names before they mean anything.
Campaigns, flows and lists
Available through managed connectors or Klaviyo’s own Snowflake export. Our open-source sync does not load these or event properties.

How we set it up

  1. 1

    Choose the loading route

    A managed connector suits many Klaviyo objects with no code to run. Our open-source sync suits high profile volume when you need only consent and a few event metrics.

  2. 2

    Load in resumable windows

    Rows, cursor and watermark commit in one Snowflake transaction, and a MERGE on ID makes repeated pages harmless, so a run can stop at any point.

  3. 3

    Map metrics and model engagement

    We map metric IDs to names, then build a profiles table, an events table, 30, 90 and 365-day activity flags and a mailable list.

  4. 4

    Join to Shopify customers

    We match on lowercased, trimmed email and keep a table of every email per customer, so a changed address keeps both histories.

What breaks, and how we handle it

Profile updated is wider than it looks
It changes when any property changes, including ones set by activity or integrations. We keep the full filter so unsubscribes are not missed, and make each page cheaper instead.
Rate limits
Klaviyo returns HTTP 429 with a Retry-After header. We wait that long, cap the wait, and stop cleanly when the run’s time budget is nearly used.
Events arrive late
Klaviyo creates events asynchronously, so a closed window can still gain rows. We re-read the last 24 hours on each event query.
Deleted profiles stay
A query on updated only returns profiles that still exist. Deletions need a separate check against the full list of profile IDs.
Opens are not always people
Klaviyo flags Apple Privacy Opens and has a bot click setting. We check those properties before reading engagement as intent.

What we build on top of the Klaviyo data

  • Profiles table with email and SMS consent
  • Events table with mapped metric names
  • Profile engagement with 30, 90 and 365-day flags
  • Mailable profiles list
  • Klaviyo profile to Shopify customer bridge

Common questions

Is there a free Klaviyo to Snowflake connector?

Yes. Our klaviyo-snowflake-sync is MIT licensed, and self-hosted Airbyte also has a Klaviyo source. Either way you pay for the server, the Snowflake compute and the time to run it.

Why are so many Klaviyo profiles marked as updated?

The updated time changes on any property change, including ones set by activity or integrations. Most of those profiles have no change in email or consent, but you cannot tell without reading them.

Can I report on Klaviyo campaign or flow revenue from this data?

Not from our sync, because it does not store event properties. Use a managed connector for those objects, or extend the sync to store the payload.

How do I build a list of profiles I can email in SQL?

Select profiles where email marketing consent is true and the email is not null. You can also require activity within a chosen number of days. Klaviyo still makes its own checks at send time.

Does Klaviyo have its own Snowflake export?

Klaviyo sells a managed Snowflake export as part of its Advanced KDP subscription. If you have it and its fields cover your reports, it can replace a connector.

Want Klaviyo data you can trust?

Bring the Klaviyo reports that don't match. We'll trace them to the source and show you where to start.

Book a Call