HubSpot forms (Data In) for Customer.io retention programs

Customer.io partner logo

Table of Contents

Summarize this documentation using AI

This banner was added using fs-inject

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Overview

If you’re using HubSpot forms to capture email/SMS leads, quiz results, or “notify me” demand, the real win is getting that data into Customer.io in a way that your segments and triggers don’t lie to you later. If you want a second set of eyes on your identity + event mapping before you scale spend, book a strategy call—most issues here only show up after you’ve already built journeys on top of shaky data.

In practice, HubSpot form submissions become either (1) a person update (attributes like preference, skin type, due date) and/or (2) an event (like form_submitted) that you can use to trigger workflows. Your retention performance depends on choosing the right shape for the data and resolving identity consistently.

How It Works

HubSpot forms generate a submission payload (email, name, hidden fields, UTM values, quiz answers, etc.). The retention job is to translate that payload into Customer.io’s data model so segments stay accurate and your triggers fire once, on time, for the right profile.

  • Identity resolution: Customer.io needs a stable identifier (usually email, sometimes id). If the form doesn’t reliably include email, you’ll end up with anonymous/duplicate profiles and “ghost” segments.
  • Event vs attribute mapping: Use an event when the submission should trigger automation (e.g., “Back in stock request submitted”). Use attributes when the value should persist for segmentation/personalization (e.g., preferred_category = "running").
  • Trigger reliability: If you send submissions as attributes only, you’ll lose the “moment in time” needed for journeys like cart recovery or browse-to-buy. If you send everything as events, you’ll struggle to build clean segments (because you’ll be filtering on event history instead of current state).
  • Data normalization: HubSpot fields often come through as free text. If you don’t normalize (lowercase, controlled vocab, boolean/enum), segmentation breaks quietly—especially for multi-select fields.

Step-by-Step Setup

The goal is simple: every form submission should land in Customer.io as a known person, with a predictable event name and a small set of well-typed attributes you actually plan to use.

  1. Inventory the forms that matter for retention (not every lead gen form). Prioritize: back-in-stock, waitlist, quiz, warranty registration, post-purchase preference capture, SMS opt-in.
  2. Decide your primary identifier.
    • If you’re email-first, require email on the form and map it to Customer.io email.
    • If you’re ID-first (logged-in experiences), pass a stable customer ID as a hidden field and map it to Customer.io id (and still collect email when possible for channel reach).
  3. Create a consistent event naming scheme for submissions you’ll trigger on, like:
    • form_submitted with properties form_name, form_id
    • or explicit events like back_in_stock_requested, quiz_completed
  4. Map form fields into two buckets:
    • Attributes (state): preference fields, sizing, category interest, lifecycle flags (e.g., is_wholesale), SMS consent status.
    • Event properties (context): UTMs, landing page, referrer, form version, quiz score, product SKU requested.
  5. Normalize values before they hit Customer.io.
    • Convert “Yes/No” to booleans.
    • Force enums (e.g., skin_type only: dry, oily, combo, sensitive).
    • Split multi-selects into arrays (or a single canonical attribute if you only need one).
  6. Send the data into Customer.io through your chosen pipe:
    • Preferred: a server-side integration (middleware, iPaaS, or your backend) that calls Customer.io’s APIs so you control identity + dedupe.
    • Acceptable: client-side posting only if you’re comfortable with ad blockers, browser privacy, and occasional missing events.
  7. QA with real profiles.
    • Submit the form twice with the same email and confirm you get one person record.
    • Confirm the event shows up once per submission with the expected properties.
    • Confirm attributes update correctly without wiping other attributes (common when payloads are incomplete).

When Should You Use This Feature

Form data is most valuable when it creates a retention “signal” that your purchase data doesn’t capture. If you’re only using forms for generic newsletter signup, you’ll still want the data in Customer.io—but the retention upside comes from intent and preference capture.

  • Back-in-stock → conversion recovery: Someone requests a restock for SKU X. That submission should create a Customer.io event you can hold until inventory returns, then trigger a tight conversion sequence.
  • Quiz completion → better second purchase: A skincare quiz captures skin type + concerns. Map those as attributes so your post-purchase cross-sell segments aren’t guessing.
  • Warranty/registration → reactivation anchors: Registration date and product family become segmentation inputs for replenishment and “time-to-replace” nudges.
  • High-intent lead capture during cart abandonment: If a user hits exit intent and submits “send me my cart,” treat it as an event tied to the same identity you’ll use for cart recovery—otherwise you’ll message the wrong profile or miss the trigger entirely.

Operational Considerations

This is where most retention programs get tripped up: the form submission is “in Customer.io,” but it isn’t usable because identity is messy, fields aren’t standardized, or triggers are built on the wrong primitive.

  • Segmentation integrity: Don’t segment on raw free-text fields from HubSpot. Normalize into controlled attributes, or you’ll end up with 15 versions of “Running” and your audience counts will drift.
  • Duplicate profiles: If some submissions come in with email and others come in with an internal ID, you need a consistent merge strategy. Otherwise, your cart recovery might hit Profile A while the quiz data sits on Profile B.
  • Event timing and delays: If your pipeline delays events (batch syncs), your “send within 15 minutes” abandon flows will underperform. For time-sensitive triggers, push events in near real time.
  • Attribute overwrite risk: HubSpot often sends blank values for unfilled fields. If you map those directly, you’ll wipe good data in Customer.io. Only update attributes when the form actually provides a value.
  • Consent and compliance: Treat SMS/email consent as first-class attributes (and ideally subscription status) so orchestration respects channel rules. Don’t rely on “we collected it in HubSpot” as your only source of truth.

Implementation Checklist

Before you build journeys on top of HubSpot form signals, lock the plumbing so your segments don’t rot over time.

  • Primary identifier defined (email and/or customer ID) and present on every relevant form
  • Event naming convention documented (one generic + properties, or explicit per-form events)
  • Field mapping spec: which fields become Customer.io attributes vs event properties
  • Normalization rules for enums, booleans, multi-selects, and casing
  • Dedupe/merge plan validated with repeat submissions
  • Blank-field handling: prevent attribute wipeouts
  • Latency expectations confirmed (real-time vs batch) for time-sensitive flows
  • Consent captured and mapped in a way Customer.io can enforce in orchestration
  • QA completed: profile view shows correct attributes + events, and segments populate as expected

Expert Implementation Tips

The difference between “data is flowing” and “data is profitable” is usually a few operator decisions you make up front.

  • Use one canonical submission event (form_submitted) and pass form_name/form_id unless you truly need separate triggers. It keeps your event taxonomy from exploding.
  • Promote only the 3–8 fields you’ll actually use into attributes. Everything else can live as event properties for analysis or conditional logic.
  • Stamp intent explicitly: add an attribute like intent = "back_in_stock" or intent = "quiz" when the form is high-value. It makes segmentation and orchestration faster than filtering on event history.
  • Pass product identifiers cleanly (SKU/variant ID) on restock and waitlist forms. “Product name” strings change; IDs don’t. Your trigger logic will thank you later.
  • Capture attribution once, then freeze it for retention logic. UTMs from a form submission are useful, but don’t let later submissions overwrite your original acquisition source unless that’s intentional.

Common Mistakes to Avoid

Most teams don’t fail because HubSpot → Customer.io is impossible; they fail because they treat form data like a newsletter signup instead of a retention signal that needs clean identity and predictable schema.

  • Triggering off attribute changes when you needed an event: attribute updates don’t preserve “when it happened” cleanly for journey entry and frequency control.
  • Letting HubSpot free-text become segmentation fields: you’ll ship campaigns to tiny, fragmented audiences without realizing it.
  • Not requiring email on high-intent forms: you’ll collect demand you can’t reliably message, or you’ll create duplicates you can’t merge cleanly.
  • Overwriting good attributes with blanks: one incomplete form submission can erase preference data and break personalization in replenishment flows.
  • Building journeys before validating latency: if submissions arrive 30–60 minutes late, your “fast follow” sequences won’t perform and you’ll blame creative instead of plumbing.

Summary

If HubSpot forms are a meaningful intent signal for your brand, get them into Customer.io as clean events plus a small set of normalized attributes. Prioritize identity consistency and schema discipline first—then your cart recovery, repeat purchase, and reactivation journeys will fire reliably and segment counts will stay stable.

Implement Forms with Propel

If you’re wiring HubSpot forms into Customer.io, the main operator work is deciding what becomes an event vs an attribute, and making sure identity doesn’t fragment across tools. In most retention programs, we’ve seen performance lift just from fixing duplicates and normalizing fields before any new messaging goes out. If you want help pressure-testing your mapping and trigger plan, book a strategy call and we’ll walk through the exact forms and journeys you’re betting on.

Contact us

Get in touch

Our friendly team is always here to chat.

Here’s what we’ll dig into:

Where your lifecycle flows are underperforming and the revenue you’re missing

How AI-driven personalisation can move the needle on retention and LTV

Quick wins your team can action this quarter

Whether Propel AI is the right fit for your brand, stage, and stack