Summarize this documentation using AI
Overview
If you’re running retention on Squarespace, the real work is getting clean purchase + cart intent data into Customer.io so your segments don’t drift and your automations don’t misfire. If you want a second set of eyes on the data model before you wire up flows, book a strategy call—most “Customer.io isn’t working” issues are really identity + event mapping issues upstream.
In practice, Squarespace stores a lot of the customer truth (orders, products, emails), but Customer.io only becomes useful when you consistently pass the same identifiers and the same event schema every time. That’s what makes cart recovery timers accurate, repeat purchase triggers dependable, and winback segments trustworthy.
How It Works
Think of the Squarespace → Customer.io setup as a data pipeline problem, not a “connect the integration” problem. Your goal is to stream a small set of high-signal commerce events into Customer.io, attach them to the correct person profile, and keep the payloads stable so segmentation stays accurate over time.
- Events enter Customer.io when your Squarespace storefront (or a middleware layer) sends events like
product_viewed,checkout_started, andorder_completedvia Customer.io’s event ingestion (commonly Track API/Pipelines, depending on your stack). - Identity resolution happens at ingest. If the event includes a consistent identifier (usually
emailor a stablecustomer_id), Customer.io can attach the event to the right person. If identifiers change or go missing, you’ll create duplicates and your triggers will “randomly” miss people. - Attributes get mapped to the person profile (ex:
last_order_date,orders_count,lifetime_value). These attributes are what power your “repeat buyer vs one-time buyer” splits and suppression rules. - Segmentation + triggers depend on event consistency. If
order_completedsometimes includesorder_idand sometimes doesn’t, deduping breaks. Ifcheckout_starteddoesn’t always includecart_value, your “high-intent cart” segment becomes unreliable.
A realistic D2C scenario: someone adds a $78 skincare bundle to cart on mobile, bounces, then completes the purchase later on desktop. If your identity is email-only and you don’t capture it until checkout completion, your cart abandonment flow will either never trigger (no identifiable person) or it will trigger but fail to suppress after purchase (purchase event lands on a different profile). Clean identity + consistent event payloads fix that.
Step-by-Step Setup
The fastest path is to define your retention event schema first, then implement the sending. When teams do it in the opposite order, they end up retrofitting payloads after flows are already live—which is where segmentation drift and “why did this send?” fire drills come from.
- Decide your primary identifier.
For Squarespace stores, email is usually the most practical. If you also have a stable Squarespace customer ID, send it too—but don’t rely on it unless it’s present on every relevant event. - Define the minimum viable retention event set.
At a minimum for retention execution:product_viewed,added_to_cart,checkout_started,order_completed, and optionallyorder_refunded/order_canceledif you run aggressive post-purchase flows. - Standardize event names and required properties.
Lock a contract like:order_completed:order_id,email,total,currency,items[],discount_code(if present),created_atcheckout_started:email(if known),cart_id,cart_value,items[],created_at
- Implement event sending from Squarespace (or middleware).
Squarespace may not emit every event you want natively. Many brands use a lightweight middleware (serverless function/Zapier-like layer) to listen for order events and forward them to Customer.io with the correct schema and identifiers. - Upsert person attributes on purchase.
Onorder_completed, update person attributes likelast_order_date,orders_count,lifetime_value, andlast_order_total. This is what makes repeat purchase and VIP segmentation stable. - Handle anonymous behavior intentionally.
If you can’t identify users until email capture, accept that early-funnel events will be anonymous. Decide whether you’ll merge anonymous activity later (once email is known) or only trigger flows after identification. Don’t pretend you have deterministic cart abandonment if you don’t capture identity. - Verify in Customer.io’s event/person views.
Before building any automation, confirm that: events land on the right profile, event timestamps match reality, and properties needed for segmentation are present.
When Should You Use This Feature
Squarespace data-in work matters most when your retention program depends on precise triggers and suppression. If you’re only blasting newsletters, you can get away with a basic list sync. The moment you run behavior-based flows, your event/identity layer becomes the bottleneck.
- Cart recovery when you need accurate “started checkout but didn’t purchase” logic and clean suppression on
order_completed. - Repeat purchase orchestration when you want “replenishment” or “next best product” journeys based on items purchased and time since last order.
- Reactivation/winback when you need a trustworthy
last_order_dateandorders_countto avoid discounting active buyers. - Post-purchase CX when refund/cancel signals should stop review requests, referrals, or upsell sequences.
Operational Considerations
Most retention teams don’t struggle with creative—they struggle with data drift. The operational reality is that one missing identifier or one inconsistent event property quietly breaks your segments, then you notice it weeks later when performance drops.
- Segmentation integrity: build segments off stable attributes (like
last_order_date) and stable events (likeorder_completed), not brittle proxies. If you segment “VIP” off a property that’s only populated sometimes, you’ll under-message your best customers. - Event deduplication: always include a unique ID (ex:
order_id) so retries don’t create duplicate purchases and accidentally suppress/trigger flows incorrectly. - Timestamp hygiene: send the real event time, not “time we forwarded it.” Delayed timestamps distort holdout tests, send-time logic, and replenishment windows.
- Orchestration across flows: your purchase event is the global suppression lever. If it’s unreliable, every flow becomes risky—cart, browse, winback, post-purchase all start stepping on each other.
- Data mapping ownership: decide who owns the schema (retention/growth) and who owns the transport (engineering/ops). When nobody owns it, it degrades.
Implementation Checklist
Before you turn on any revenue-critical automation, you want a quick “is the data trustworthy?” pass. This checklist catches the issues that most often cause missed triggers and wrong sends.
- Primary identifier chosen (email and/or customer_id) and present on all purchase events
- Standard event names defined and documented (no ad-hoc naming)
order_completedincludesorder_id, totals, currency, and line items- Cart/checkout events include a stable
cart_idand cart value - Person attributes updated on purchase:
last_order_date,orders_count,lifetime_value - Refund/cancel events handled (or an explicit decision not to)
- Anonymous behavior strategy decided (merge later vs trigger only after identification)
- Test orders run end-to-end and events verified on the correct person profile
Expert Implementation Tips
Once the basics are in, the biggest gains come from making your data more “decision-ready” for segmentation and orchestration—so you can run tighter logic without writing fragile segment rules.
- Promote key event properties into attributes. If you constantly segment on “last purchased category,” write it as an attribute on purchase. Segments run faster and break less.
- Send line items in a consistent structure. Even if you don’t use it on day one, clean line-item arrays unlock product-aware cross-sell and replenishment later without re-instrumentation.
- Design suppression around a single source of truth. In most retention programs, we’ve seen the cleanest setup when every flow suppresses on
order_completed(and optionallyorder_refunded) rather than channel-specific hacks. - Instrument “email captured” explicitly. If identity only becomes known at email capture, treat that as a first-class event. It helps you reason about why cart recovery coverage is what it is.
Common Mistakes to Avoid
These are the mistakes that create silent revenue leaks—flows still send, but they send to the wrong people or at the wrong time.
- Relying on inconsistent identifiers (sometimes email, sometimes phone, sometimes nothing), which creates duplicate profiles and broken suppression.
- Using different event names for the same action (ex:
purchasevsorder_completed), which forces you to maintain messy segments and triggers. - Missing unique IDs on orders/carts, which makes retries look like new events and inflates conversions or suppresses incorrectly.
- Only sending aggregate totals and skipping line items, then later realizing you can’t do category-based winback or cross-sell without rework.
- Backfilling data without a plan and accidentally triggering automations on historical events because timestamps weren’t handled properly.
Summary
If you want Customer.io to drive repeat purchase and recovery for a Squarespace store, you need reliable identity and a stable commerce event schema.
Get order_completed and your cart intent events right, promote a few key attributes, and your segmentation + triggers stop being a guessing game.
Implement Squarespace with Propel
When we implement Squarespace data-in for Customer.io, we usually start by locking the event contract (names, required properties, identifiers), then validating it against the exact segments your retention program needs (cart recovery, replenishment, winback). If you want to pressure-test your current tracking and avoid the usual duplication/suppression pitfalls, book a strategy call and we’ll map the data you have to the automations you actually want to run.