Summarize this documentation using AI
Overview
Import objects or relationships via CSV in Customer.io is how D2C teams quickly turn “extra data” like products, SKUs, subscriptions, stores, or loyalty tiers into usable personalization and targeting. Instead of forcing everything into person attributes, you model your catalog and customer-to-product connections as structured data, then use it to drive higher AOV, repeat purchase, and smarter post-purchase journeys.
A common example is syncing your product catalog as objects, then importing customer-to-product relationships (like “purchased”, “interested”, or “subscribed”) so your flows can recommend the right replenishment or complementary items without brittle, one-off segments.
If you want this implemented cleanly end to end (data model, CSV formatting, and journeys that actually convert), Propel can help you get it live fast inside Customer.io, book a strategy call.
How It Works
Import objects or relationships via CSV in Customer.io works by uploading a file that creates or updates records for a specific object type (like Product) and optionally links those objects to people through relationships (like Person purchased Product).
In practice, you use objects for the “thing” you want to reference repeatedly (Product, Variant, Subscription, Bundle, Store Location), and relationships for the “connection” between a person and that thing (purchased, last_viewed, replenishment_due, VIP_eligible). Once imported, those objects and relationships become available for segmentation and message personalization, so you can target shoppers based on the products they own, what they are due to reorder, or what category they keep browsing.
Most D2C brands use CSV imports as a fast bridge when they cannot fully automate objects yet, or when they need a one-time backfill before turning on ongoing event tracking. It is also a reliable workflow for merchandising-led campaigns where the catalog changes weekly and you want a controlled snapshot. For deeper orchestration, you can pair CSV imports with automations in Customer.io.
Step-by-Step Setup
Import objects or relationships via CSV in Customer.io goes smoothly when you treat it like a data product, not a one-off upload.
- Decide the object model before touching the CSV. Pick your object types (for example: Product, Variant, Subscription) and the minimum fields you need for segmentation and personalization (title, category, price, margin band, subscription_eligible, replenishment_days).
- Define relationships that map to revenue use cases. Examples: purchased_product, last_purchased_variant, replenishment_due_for, browsing_interest_in. Keep relationship names stable because you will build segments and Liquid logic on top of them.
- Create a clean ID strategy. Use immutable IDs (SKU, variant_id, subscription_id). Avoid names as identifiers because merchandising teams change names constantly.
- Build the objects CSV. Include the object identifier and columns for the attributes you will actually use. If you are not going to segment on it or personalize with it, do not import it yet.
- Build the relationships CSV. Include person identifiers (like email or customer_id) and the object identifier, plus relationship attributes you need (last_purchase_date, quantity, next_replenishment_date).
- Import objects first, then relationships. Relationships depend on the object existing. If you reverse it, you create avoidable errors and partial data.
- Validate in a small batch. Upload 50 to 200 rows first, confirm the objects appear correctly, and confirm a test person shows the expected linked objects.
- Backfill, then operationalize. Do the full import, then set a cadence (daily, weekly) or transition to an API-based sync once the model is stable.
When Should You Use This Feature
Import objects or relationships via CSV in Customer.io is most valuable when you need richer targeting than “has purchased” and you want that targeting tied to specific products, categories, or ownership state.
- Replenishment and repeat purchase programs: Import a relationship like replenishment_due_for with next_replenishment_date so you can trigger reminders that feel helpful, not spammy.
- Post-purchase cross-sell that respects what they bought: Link customers to the exact product or variant purchased, then recommend complementary items based on category rules (for example: cleanser buyers get moisturizer recommendations).
- Merchandising-driven product discovery: Import a weekly curated set of products as objects with tags like “new_arrival” or “editor_pick”, then target past buyers of adjacent categories.
- Winback with relevance: Import “last_owned_product_category” relationships so your reactivation series leads with what they historically liked, not your current top seller.
Operational Considerations
Import objects or relationships via CSV in Customer.io creates leverage, but only if the data stays consistent and your team knows how to use it.
- Segmentation design: Build segments around relationship attributes (next_replenishment_date, last_purchase_date, owned_category) instead of static lists. That keeps flows evergreen.
- Data freshness and cadence: If your CSV import runs weekly but your replenishment logic expects daily precision, you will miss the moment. Match import frequency to the business clock of the journey.
- Source of truth alignment: Decide whether Shopify, your subscription platform, or your data warehouse owns product metadata. Split ownership creates conflicts like mismatched prices or discontinued SKUs still being recommended.
- Orchestration with events: CSV imports are great for backfills and snapshots. For real-time triggers (abandoned checkout, browse abandonment), keep using events. In retention programs we have implemented for D2C brands, the best results come from combining real-time events for timing with objects for relevance.
- QA process: Treat imports like releases. Keep a staging file, validate a test cohort, and confirm Liquid renders correctly before you send at scale.
Implementation Checklist
Import objects or relationships via CSV in Customer.io is easier to manage when you standardize the basics.
- Object types defined (Product, Variant, Subscription, etc.) with a documented purpose for each
- Stable ID strategy (SKU or variant_id), no names as identifiers
- Relationships named for business meaning (purchased, replenishment_due_for, interested_in)
- Objects CSV created and validated on a small batch
- Relationships CSV created and validated on the same test people
- Import order confirmed (objects first, relationships second)
- Segments built that reference relationship attributes, not manual lists
- Message templates tested with Liquid using real linked objects
- Ongoing refresh cadence agreed and owned by a specific team
Expert Implementation Tips
Import objects or relationships via CSV in Customer.io becomes a revenue driver when you design it around how shoppers actually buy.
- Model for repeat purchase first. For consumables, a single relationship attribute like next_replenishment_date often outperforms complex category logic because it hits the shopper at the right time.
- Keep product objects “message-ready”. Include fields you need for creative (image_url, short_title, primary_benefit, landing_page_url). In retention programs we have implemented for D2C brands, missing creative fields is the number one reason teams abandon object-based personalization after the first attempt.
- Use relationships to prevent bad recommendations. Add a simple flag like is_discontinued or out_of_stock to objects, then filter them out in segments and templates so you do not send shoppers to dead ends.
- Start with one hero journey. For example, build a replenishment flow for your top 20 percent SKU volume, prove lift, then expand the model rather than importing your full catalog on day one.
Common Mistakes to Avoid
Import objects or relationships via CSV in Customer.io can quietly fail when teams treat it as a data dump instead of an operating system.
- Importing too many fields “just in case”. It slows QA and increases breakage when upstream naming changes.
- Using inconsistent identifiers across systems. If Shopify uses variant_id but your CSV uses SKU, you will create duplicate objects and unreliable relationships.
- Building segments that depend on one-time imports. If you do not refresh, your “replenishment due” audience becomes stale and performance drops.
- Not validating relationship directionality. Make sure you are linking the right person to the right object, especially when multiple emails or profiles exist for the same buyer.
- Skipping template QA. Object-based Liquid can render blank states unless you handle missing objects gracefully.
Summary
Use CSV imports for objects and relationships when you need product-aware segmentation and personalization that increases repeat purchase and AOV. It matters most for replenishment, cross-sell, and winback programs where relevance drives revenue, and it pairs well with real-time event triggers in Customer.io.
Implement with Propel
Propel helps D2C teams design the object model, run clean imports, and turn the data into journeys that convert inside Customer.io. book a strategy call.