Composable CDP
Marketing's customer data platform, built in-house on Snowflake to replace a vendor. A dozen systems become one profile per person.
Built with
- Snowflake
- Python
- AWS S3
- SageMaker
- Azure Data Factory
- Control-M
- Azure DevOps
- Monte Carlo
$260Kmonthly vendor dependency deprecated
$5Mprojected savings
65MCustomer 360 profiles
12+source systems consolidated
What marketing gets: one person, end to end
A mother buys Huggies, grabs a coupon and joins the newsletter. Three systems see three strangers. Here they become one profile. Table names are illustrative.
Three raw recordsa retailer purchase file in S3, a coupon app event, a newsletter signup
stg_purchases · stg_coupon_events · stg_signupscleaned and typed; emails and phones normalized and hashedint_identity_graphthe hashed email and the device ID are matched, so the three records get one consumer_iddim_consumer · fct_consumer_eventsone row per person; every purchase, download and signup as an event with its date and brandAudience: Huggies buyers, last 30 days, opted ina query over the two tables, synced to the ad platforms every day
Why build it instead of renting it
A packaged CDP copies the data and bills for it every month. Here the warehouse is the source of truth and only audiences are synced out. The bill goes away.
How the data flows
Source systemsfiles in AWS S3 and APIs
ELT pipelines in Python and SageMakerorchestrated by Azure Data Factory and Control-M
Snowflake layersdimension and fact tables with daily incremental transformations
Identity resolution and Customer 360the same person matched across platforms
Activationaudiences synced to the marketing platforms
Delivery and data quality
- Delivery: every change to the models goes through review and deploys the same way, with CI/CD in Azure DevOps.
- Trust: Monte Carlo catches a broken source before it reaches an audience.
Built at Kimberly-Clark. Company data, schemas and internal details are not shown.