---
title: "Warehouse attributes | Snowplow Signals"
description: "Warehouse attributes sync customer data such as plan tier or a churn score from Snowflake, BigQuery or Databricks, so your app reads it beside live behavior."
source: https://signals.snowplow.io/products/warehouse-attributes
---

[Product](https://signals.snowplow.io/products) / Warehouse attributes 

# Serve your warehouse data beside live behavior. 

Signals syncs what your warehouse knows about a customer, such as their plan, their orders or a churn score, and your app reads it in the same call as what they are doing right now.

[Start free](https://signals.snowplow.io/start) [Talk to an engineer](https://signals.snowplow.io/start?intent=engineer) 

The real engine · no card · no sales call

The problem

## Your customer data sits far from your app. 

Your customer table, orders, subscriptions and model scores live in the warehouse. Getting them to your app takes a sync job, a cache and an API of their own, kept apart from what the customer is doing now.

How it works

## Warehouse data, in the same call as live behavior. 

Point Signals at a table in your warehouse that you want to serve to your app in real time. It syncs the rows that changed, hourly by default or every 6, 12 or 24 hours, and your app reads them beside the live attributes in one call, in 6ms.

**3** _rows_ changed · **3** synced · **2** untouched 

your warehouse · churn\_scores 

| account   | churn\_score | plan\_tier | updated\_at |        |
| --------- | ------------ | ---------- | ----------- | ------ |
| acct\_1c4 | 0.17         | enterprise | 07:52       |        |
| acct\_7d2 | 0.71         | pro        | 09:18       | synced |
| acct\_e08 | 0.91         | free       | 08:33       |        |
| acct\_33a | 0.26         | pro        | 09:34       | synced |
| acct\_5b9 | 0.64         | team       | 09:51       | synced |

sync · hourly → Signals → your app

Snowflake, BigQuery or Databricks holds the table, with a column for the attribute key 

Your models and dbt jobs write the table, and the next sync picks up the rows they changed 

Your app or agent reads warehouse and live attributes from one service, in one call 

Works with 
* Snowflake
* BigQuery
* Databricks

Capabilities

## Served on request, synced on your schedule. 

01 

### Served beside live attributes

Your app or agent reads warehouse values and live attributes for the same customer in one call. No second API or cache to run.

02 

### A sync you control

Hourly, or every 6, 12 or 24 hours. A backfill start date sets how far back the first sync reads, and a TTL sets how long values stay.

03 

### Only the rows that changed

Each sync reads only the rows your jobs changed since the last one, using the table's last-modified timestamp, so the rest of the table stays put.

[Syncing warehouse tables →](https://docs.snowplow.io/docs/signals/attributes/warehouse-config/) [See it in Snowplow Console →](https://signals.snowplow.io/products#console) 

What you can build

## Act on what you know while they are still on the page. 

account 1842

Warehousesynced hourly 

`churn_risk` **0.82** 

`plan_tier` **team** 

Livefrom recent events 

`cancel_page_views_1h` **1** 

`last_limit_hit` **seats** 

`last_error_1h` **E-409** 

1. [Your cancel page offers a pause. churn\_risk (warehouse) cancel\_page\_views\_1h (live) Cancel flow play → ](https://signals.snowplow.io/solutions/b2b-software/cancel-flow#quiet)
2. [Your upgrade prompt names the next plan. plan\_tier (warehouse) last\_limit\_hit (live) Upgrade timing play → ](https://signals.snowplow.io/solutions/b2b-software/upgrade#limit)
3. [Your desk sees the plan and error on the ticket. plan\_tier (warehouse) last\_error\_1h (live) Support context play → ](https://signals.snowplow.io/solutions/b2b-software/support#repeat-error)

Warehouse attributes

## Frequently asked questions. 

### We already sync these tables to our CDP. Why add this?

Keep that sync. A CDP sends audiences and scores to your marketing tools. Signals serves the same table to your own app and agents on request, in 6ms at the median, in-region, alongside the live attributes for that customer. One call returns what your warehouse knows about them and what they are doing now.

### How fresh are warehouse attributes?

As fresh as the sync, which runs hourly by default or every 6, 12 or 24 hours. That suits values that change slowly, such as a churn score or a plan tier. For what the customer is doing in this visit, use a real-time attribute, which updates within <1s of each event.

### What does the table need?

A column holding the key values, such as user\_id or account\_id, and a last-modified timestamp in UTC that changes whenever a row changes. If a key has several rows in one sync, Signals keeps the latest.

### Should we compute it from events instead?

If the value comes from Snowplow events, yes. Define a real-time attribute and backfill it from the warehouse, so one definition serves both. Warehouse attributes are for values computed elsewhere, such as a model score or a CRM field.

### Which warehouses are supported?

Snowflake, BigQuery and Databricks.

## Start with one attribute. 

Add the SDK, define one attribute, and watch it update as you browse and search your own product. The free tier runs on the real engine: no card, no sales call.

[Start free](https://signals.snowplow.io/start) [Talk to an engineer](https://signals.snowplow.io/start?intent=engineer) 

Next up: [Real-time attributes →](https://signals.snowplow.io/products/real-time-attributes) and [Agentic context →](https://signals.snowplow.io/products/agentic-context).
