New users activate on behavioral triggers
At PingPong I replaced a 30-day calendar drip with five account-state triggers: application started, KYC pending, KYC approved, first funding, first payment. The journey now advances on what the account just did.
The account sets the timing. Send on state changes.
Every onboarding system I've inherited made the same bet: that day 3 means the same thing for every new user. It never does. One account is stuck on verification, another already moved money, and both get the same “here's a tip” email because the calendar said so.
At PingPong I rebuilt the onboarding email system around real-time account state. I threw out the 30-day calendar drip and built five account-state triggers in its place: application started, KYC pending, KYC approved, first funding, first payment. Each one fires because the account changed, and each one has one job: move the user to the next state.
The results made the argument for me. KYC submissions went from roughly 10% of registrations to 35–40%, and average KYC completion time fell from 140 hours to 24–48 hours. The comparison window is roughly the eight weeks either side of the switch, with no holdout, on registrations running in the low thousands a month, and the 35–40% is the range those months moved in. Same product, same audience. What changed on my side was what the emails listened to. Compliance process, verification steps, and the product experience move these numbers too, and the layer I claim here is the trigger. The industry moved in the same direction, and I wrote up the sources in the onboarding rebuild post: API-triggered campaigns grew ~33% on Braze in 2025 while time-based sends fell ~19%.
Four moves, from
drip to trigger
01 · Define the first meaningful action
Activation is the first meaningful action the account takes. For a payments product that was the first payment, and everything upstream of it, application, KYC, first funding, was a state I could watch. I name the target action first, then work backwards to the states that gate it. This page is about trigger design, moving an account to the next state; the onboarding principle covers how those states get routed and verified.
02 · Instrument the states
Every trigger here is a field read. The KYC-approved cadence runs on one field mapping: enrollment fires when kyc_status flips to Approved, and the journey exits the moment first_funding_date is set, once per lifetime. I spent most of the build getting that mapping right.
03 · Build journeys on account state
Five state triggers feed three journeys: orientation at signup, KYC-progress support during verification, and activation after compliance approval. I measured every send. Between state changes I kept the pacing deliberate, three sends carry the unfunded wait after approval, then the system goes quiet until the account moves again.
04 · Alarm the triggers themselves
A compliance change to how state flips broke enrollment, and nothing errored. I caught it only because the KYC-pending segment quietly dropped to zero. Now, across the workflow layer I built, I put a count alert on every trigger segment that flags zero enrollments. If a trigger stops firing, I want a page the moment it happens.
One rebuild, measured end to end
The drip guessed. The triggers knew.
The old system sent 30 days of emails to every registration, whether the account was stuck at KYC or already funding. I replaced it with five account-state triggers and gave each cadence one measurable job. First payment is the action these triggers aim at, and the numbers on this page sit one gate upstream, at KYC submission and completion time.
This activation engine sat inside a larger machine. At PingPong I owned the marketing for the cross-border payments line end to end as it scaled from $2M to $76M in year one and past $250M+ in year two. Sales carried the deal conversations, finance ran the payment rails, and I ran the activation programs that fire on usage signals.
KYC submissions 10% → 35–40% · completion 140h → 24–48hWant activation you can trigger on account state?
Name the action that counts, then let the field that says it happened set the timing.