Implement WordPress with WPForms (Data In) for Customer.io

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 your store runs on WordPress, WPForms is often the fastest way to capture high-intent signals (back-in-stock requests, shade matching quizzes, wholesale inquiries) and push them into Customer.io as usable retention data. If you want a second set of eyes on your tracking plan before you wire it up, book a strategy call—most issues we see aren’t “messaging problems,” they’re identity and event-shape problems.

The goal here isn’t “send form data.” It’s: make sure the right person gets updated, the right event fires, and your segments don’t drift over time because fields were mapped inconsistently.

How It Works

WPForms collects a submission in WordPress, then a connector (typically a webhook or integration step) forwards that payload to Customer.io. In Customer.io terms, you’re doing two things: resolving identity (which profile should this belong to?) and writing data (attributes and/or an event) in a format your campaigns can reliably trigger from.

  • Identity resolution (non-negotiable): decide what key you’ll use to identify the person in Customer.io. In most D2C setups, that’s email. If you’re already syncing customers from Shopify, you want WPForms submissions to land on the same profile—so the identifier must match exactly (same email string, lowercased/trimmed).
  • Event vs attribute:
    • Event = “something happened” (e.g., wpform_submitted, quiz_completed, back_in_stock_requested) and should be used to trigger workflows.
    • Attribute = “something is true” (e.g., skin_tone=medium, preferred_scent=unscented, vip_interest=true) and should power segmentation and personalization.
  • Data mapping: map WPForms fields into a consistent schema. In practice, this tends to break when teams rename form fields later or ship a “v2 form” with slightly different keys—suddenly half your users have phone and the other half have phone_number.
  • Trigger reliability: your workflows should trigger on a single, stable event name and then reference normalized properties. Avoid building triggers on brittle text fields (“dropdown label”) that marketing changes every month.

Step-by-Step Setup

Before you connect anything, lock the tracking plan: what event will fire, what identifier will be used, and which fields become attributes vs event properties. That 20-minute decision prevents weeks of segment cleanup later.

  1. Pick the identifier you’ll send to Customer.io.
    • Recommended for D2C: email as the primary identifier.
    • Normalize it before sending (trim spaces, lowercase).
    • If you also capture phone, treat it as a secondary attribute unless you have a deliberate multi-identifier plan.
  2. Define your event naming convention.
    • Use one event per form intent, not per page: quiz_completed, back_in_stock_requested, contact_submitted.
    • Avoid generic names like form_submitted unless you include a stable form_id property and always branch off that.
  3. Decide what becomes an attribute vs event property.
    • Attributes: preferences you’ll use later (e.g., hair_type, size, shade_family).
    • Event properties: one-off context (e.g., landing_page, utm_campaign, quiz_version).
  4. Connect WPForms to Customer.io via a webhook/integration step.
    • Send a create/update person call using the identifier (usually email) and set your chosen attributes.
    • Send a track event call with the event name and include relevant properties.
    • If you can only send one request, prioritize the event and include the attributes as properties—but plan to upgrade later so attributes live on the profile.
  5. Validate in Customer.io Activity Logs.
    • Confirm the event is attached to the correct person (not creating duplicates).
    • Confirm properties are populated and consistently typed (strings vs booleans vs arrays).
    • Submit the form 2–3 times with different inputs to catch edge cases (empty fields, special characters).
  6. Build a “proof” segment before you launch messaging.
    • Create a segment like: “Performed quiz_completed in last 7 days AND email is present.”
    • Spot-check 10 profiles to ensure attributes landed where you expect.

When Should You Use This Feature

WPForms → Customer.io is most valuable when the form submission is a retention signal, not just a support contact. If the data can change what you send next (or when you send it), pipe it in as structured events/attributes.

  • Back-in-stock or waitlist capture: fire back_in_stock_requested with sku/variant_id. This gives you a clean reactivation trigger when inventory returns.
  • Product finder quiz: fire quiz_completed and store preferences as attributes so your post-purchase cross-sell isn’t generic.
  • Cart recovery assist: if you use a “Need help checking out?” form, treat it as a high-intent abandonment signal and route it into a short, human-sounding rescue sequence.
  • Subscription pause/cancel feedback (if collected via form): capture the reason as a normalized attribute (enum), not free text, so you can segment winbacks properly.

Real D2C scenario: A skincare brand runs a “Find your routine” WPForms quiz. When someone completes it, you send quiz_completed with quiz_version and set attributes like skin_type and primary_concern. Now your replenishment and cross-sell flows can branch off actual needs (dryness vs acne), instead of blasting the same “buy again” message to everyone.

Operational Considerations

The biggest operational risk isn’t the integration step—it’s the slow drift in data quality once multiple people touch the form, the mapping, and the workflow logic. Treat this like a mini data pipeline, because that’s what it becomes.

  • Segmentation accuracy:
    • Prefer enumerated values (e.g., skin_type = dry/oily/combo) over free text.
    • Keep attribute names stable. If you must change, backfill or alias—otherwise segments silently shrink.
  • Identity collisions and duplicates:
    • If you sometimes collect email and sometimes don’t, you’ll end up with anonymous-ish records that never connect to purchase history.
    • Make email required on retention-relevant forms, or explicitly handle “no email” submissions outside Customer.io.
  • Event orchestration realities:
    • Don’t trigger revenue-critical journeys off a form event unless you’re confident it always fires (plugins updated, webhook not blocked, etc.).
    • Add a “dead letter” check: a segment for people who submitted the form but didn’t get the follow-up within X minutes (usually means the event didn’t arrive or message was suppressed).
  • Source-of-truth alignment:
    • If Shopify (or your ecommerce platform) is your system of record, keep purchase data there and use WPForms for preference/intents.
    • Avoid overwriting core attributes (like name) with messy form inputs unless you sanitize.

Implementation Checklist

Use this to keep the integration “boring”—boring is good when you’re depending on the data for triggers and segmentation.

  • Identifier chosen (email recommended) and normalized (trim/lowercase)
  • Event names finalized and documented (one per intent)
  • Attribute schema agreed (stable keys, enumerated values where possible)
  • Webhook/integration sends both: person update + event track
  • Test submissions verified in Customer.io Activity Logs
  • At least one proof segment built to validate matching logic
  • Monitoring segment/report for “event received but no follow-up sent”

Expert Implementation Tips

Most retention programs we’ve seen get the biggest lift when they treat form data like first-class behavioral data—not as a one-off list build.

  • Store the “why” as attributes, not just the “what.” If someone requests restock for a specific SKU, capture requested_variant_id as an event property, but store category_interest as an attribute for longer-term targeting.
  • Version your forms explicitly. Add a hidden field like form_version so you can compare performance and avoid breaking downstream logic when the quiz changes.
  • Normalize UTMs at ingestion. If WPForms captures UTMs, map them into consistent keys (utm_source, utm_campaign) so you can segment “paid-acquired quiz takers” vs “organic.”
  • Send a single canonical event and branch inside Customer.io. For quizzes, a single quiz_completed event with properties is easier to maintain than 12 different quiz outcome events.

Common Mistakes to Avoid

These are the mistakes that quietly wreck trigger reliability and make segments feel “random,” even when the messaging is fine.

  • Letting WPForms field labels become your schema. Labels change; keys should not. Map to stable internal names.
  • Triggering flows off free-text fields. If someone types “oily-ish??” your segment logic breaks. Convert to enums.
  • Creating duplicate profiles by using inconsistent identifiers. One workflow sends Email, another sends email_address, and now you have two people who look identical but behave differently.
  • Overwriting good data with bad. Don’t replace a clean first name from checkout with “asdf” from a form submission.
  • No QA loop after plugin/theme changes. WordPress updates can break webhooks. Keep a lightweight monthly test submission on a calendar.

Summary

If WPForms submissions represent intent, pipe them into Customer.io as a clean event plus a small set of normalized attributes. Get identity resolution right and keep your schema stable, and your segments/triggers stay trustworthy.

If you can’t confidently answer “which profile gets updated?” and “what exact event fires?” don’t build campaigns yet—fix ingestion first.

Implement Wordpress With Wpforms with Propel

If you’re wiring WPForms into Customer.io and want to avoid the usual pitfalls (duplicate profiles, inconsistent keys, brittle triggers), it helps to pressure-test the tracking plan before you ship it. When you’re ready, book a strategy call—we’ll sanity-check identity, event design, and the exact mappings that keep your retention segments accurate over time.

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