Snowflake Integration: Data In
1. What this page is about
This page explains how Neon Blue reads data from your Snowflake.
It covers:
What Neon Blue needs from your warehouse
How to structure the core tables
How this fits into your existing data and reporting
You can read this even if you’ve never worked with Neon Blue before. The concepts match most modern analytics stacks.
2. Where this fits in the big picture
At a high level, the data flow looks like this:
Your systems (ecommerce platform, ESP, analytics) load data into your warehouse.
You expose a small, well-defined set of tables or views via a Snowflake Secure Data Share.
Neon Blue reads from that share to:
Learn how users behave
Measure experiments
Train and update personalization models
Separately (covered on the outbound page), Neon Blue can share results and assignments back to your Snowflake so you can validate and report internally.
3. What is a Snowflake Secure Data Share?
A Secure Data Share is Snowflake’s native way to share data between accounts without copying files around.
From your side:
You create a
SHARE(e.g.,NEON_BLUE_SHARE)You add selected tables or views to that share
You grant Neon Blue’s Snowflake account access
From our side:
We create a database in our Snowflake account, sourced from your share
We read the shared tables as if they were local, but we cannot modify your data
No S3 buckets, CSV exports, or SFTP are required. It’s secure, auditable, and versionable.
4. Data Neon Blue needs from you
To power experimentation and personalization, Neon Blue needs three core datasets:
Users – who your users are
Events – what users do
Orders / revenue – how business value shows up
Everything else (pageviews, attribution tables, etc.) is helpful but optional.
5. Core table: user_profiles (who your users are)
We covered this in the identifiers page, but we’ll restate the essential bits so this page stands alone.
Goal: One row per user with core attributes.
Example schema:
Key points:
user_idis your canonical identifiercreated_atis when they enter your world, not just first purchaseInclude non-purchasers (signups, leads) so we can learn from early-funnel behavior
6. Core table: events (what users do)
The events table is a log of important user actions.
You do not need to send every single micro-event; focus on events that matter for measurement and modeling, such as:
Email events (send, open, click, unsubscribe)
Subscription events (start, pause, skip, cancel)
Key onsite events (view important page, start checkout, complete onboard step)
Other lifecycle events (survey completed, profile updated, etc.)
Recommended shape:
Design tips:
One row per event – if a user clicks twice, that’s two rows.
Keep
event_nameconsistent over time.Use
propertiesto store contextual details instead of adding dozens of columns.
Neon Blue will map your events to:
Optimization metrics – e.g., “Did the user click any email in this flow?”
Guardrails – e.g., unsubscribes and spam complaints that we want to minimize
We’ll work with you to define which event names correspond to which “goal” and “negative” events per flow in a separate measurement configuration.
7. Core table: orders (revenue and purchases)
The orders table represents monetary outcomes. It allows Neon Blue to tie experiments back to real business value.
Example schema:
We will align with you on:
Whether to use
gross_revenueornet_revenueas the primary metricHow to treat cancellations, refunds, and skips, especially for subscriptions
What measurement windows make sense (e.g., orders within 7 days of a given experiment assignment)
Neon Blue uses this table mainly for:
Business-level reporting – e.g., “This experiment increased revenue per user by X%.”
Sanity checks – verifying that upper-funnel improvements (clicks, etc.) translate into real revenue impact
8. Optional table: pageviews or web_events
If you have web analytics in Snowflake, you can share pageviews or web events to give Neon Blue richer signals, especially for new users.
Example schema:
How Neon Blue uses this:
To understand which pages users look at before converting
To infer early preferences (e.g., browsing baby wipes vs baby lotion)
As a feature for persona modeling and creative targeting
If user_id is not available on a given row, the device_id can be joined through your user_device_id_map table when the association becomes known.
9. Optional table: user_attribution
If you already maintain a marketing attribution table (e.g., first-touch or last-click per user), we can use it as a model feature.
Example schema:
Neon Blue is agnostic to which attribution model you choose. The important thing is that it reflects how your team actually thinks about acquisition sources.
10. Data freshness and historical depth
Freshness:
For most lifecycle programs, a daily update is sufficient
If you want more real-time dashboards, we can align on hourly or intra-day updates
Historical depth:
For initial setup, we recommend 6–12 months of history if available
Longer history is a plus, particularly for subscription businesses and long funnels
11. Putting it all together: a simple end-to-end use case
Let’s say you want Neon Blue to optimize your Abandoned Cart flow.
With the inbound integration in place:
Your
eventstable tells us:When a user abandoned a cart
When they received a recovery email
Whether they clicked or unsubscribed
Your
orderstable tells us:Whether that user placed an order after the recovery email
How much revenue was generated
Your
user_profilestable tells us:When the user joined
Whether they’re a new customer or repeat buyer
Neon Blue uses this data to:
Test multiple creative variants for the recovery email
Learn which variants work best for different user types
Report how much incremental revenue those variants drive
All powered by the three core tables you’re sharing into the inbound Snowflake integration.
Last updated