You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
What would it take to switch from Customer.io to Workflows? #213
What would it take for a team to switch from Customer.io to Workflows?
What Customer.io lets a team export, by API or file: people and attributes, segments, unsubscribes and suppressions, templates, campaigns and broadcasts, message history.
Which of those map onto Workflows concepts today (persons, cohorts, message preferences and suppressions, email templates, workflows), and which have no home.
How PostHog could find switching candidates without reading customer data in a public place: for example the existing Customer.io destination, and what a "replace this destination with a workflow" path would need.
What blocks a migrated list on day one: sending caps and warmup, list size limits, unsubscribe compliance.
Answer with an import matrix (thing, Customer.io source, Workflows target, gap) and the smallest switching path worth a map. Public docs and code only.
Lane orphaned: the worker's temporary worktree was removed while its sub-agents ran. Unassigned; the conductor redispatches it in a persistent worktree.
Short answer. A Customer.io team can switch today, but almost all of it is manual. PostHog already imports and syncs opt-out state both ways (topics, per-topic preferences, global unsubscribes, inbound webhook, outbound Track sync), so a parallel run is safe for preferences. It imports nothing that sends.
Import matrix (gist).
Imported today: subscription topics, topic preferences (CSV), global unsubscribes, live preference sync in both directions.
Exportable from Customer.io's public App API but not imported: message bodies and subjects (automations, broadcasts, newsletters, transactional), snippets, ESP suppressions (bounces, blocks, spam, invalid), segment definitions, sender identities, people exports.
Not exportable at all: the shape of an automation. The actions endpoint returns content actions only, "not delays or flow control blocks like t/f branches". So no tool can import workflows 1:1. They get rebuilt.
People: warehouse person-property sync and cohort CSV only match existing persons. Teams already on PostHog mostly have them; others send $identify.
Liquid: customer.* and event.* rewrite to person.properties.* and event.properties.*, the unsubscribe tag maps to unsubscribe_url, snippets must be inlined, and a handful of Customer.io tags and filters have no equivalent and need flagging.
Smallest switching path worth a map: "Customer.io import v2", built into the existing four-step modal:
Import message content as Liquid templates (HTML wraps into the editor already), with variables rewritten and snippets inlined.
Bulk-import ESP suppressions to protect the new domain from day one.
Turn sender identities into a domain verification checklist.
An agent skill that drafts each automation as a draft workflow from its trigger and its ordered messages, through the MCP tools that already exist. A person adds the delays and branches and turns it on.
Step 4 needs no new backend and could ship first as a skill, to learn what switchers need before building steps 1 to 3 (a guess at the order). Depends on #214 (caps), #215 (segment entry), #216 (transactional callers) and #225 (domain verification).
Compliance note on the global-unsubscribe import: ask Michael.
Activity
Silthus commentedon Oct 3, 2026
Claimed by a Claude Code research worker (Opus 5.5)
Silthus commentedon Oct 3, 2026
Lane orphaned: the worker's temporary worktree was removed while its sub-agents ran. Unassigned; the conductor redispatches it in a persistent worktree.
Silthus commentedon Oct 3, 2026
Claimed by a Claude Code research worker (Opus 5.5), redispatch
Silthus commentedon Oct 3, 2026
Resolved. Findings: https://github.com/Silthus/posthog/blob/research/customerio-switching/research-customerio-switching.md
Short answer. A Customer.io team can switch today, but almost all of it is manual. PostHog already imports and syncs opt-out state both ways (topics, per-topic preferences, global unsubscribes, inbound webhook, outbound Track sync), so a parallel run is safe for preferences. It imports nothing that sends.
Import matrix (gist).
$identify.customer.*andevent.*rewrite toperson.properties.*andevent.properties.*, the unsubscribe tag maps tounsubscribe_url, snippets must be inlined, and a handful of Customer.io tags and filters have no equivalent and need flagging.Smallest switching path worth a map: "Customer.io import v2", built into the existing four-step modal:
Step 4 needs no new backend and could ship first as a skill, to learn what switchers need before building steps 1 to 3 (a guess at the order). Depends on #214 (caps), #215 (segment entry), #216 (transactional callers) and #225 (domain verification).
Compliance note on the global-unsubscribe import: ask Michael.