Skip to content
All work

Dubai-based forex broker · 2026

Multi-channel lifecycle engine

Four automated customer journeys across WhatsApp and email, running unattended every two hours with per-message delivery tracking.

Simplified for publication. Identifiers, endpoints and customer data removed.

The problem

Customer follow-up was manual and inconsistent. An earlier scheduled version fired unpredictably and had no way to tell a delivery failure from a send that never happened — so nobody could say whether a campaign had actually reached anyone.

What I built

  • 01

    Rebuilt the scheduler around a fixed two-hour window with explicit day-offset routing, replacing the cadence logic that had been misfiring

  • 02

    Joined every send against a suppression list and an already-sent ledger before dispatch, so a retry can never double-message a customer

  • 03

    Throttled dispatch to one message at a time with a fixed delay, keeping the send rate under the provider's frequency ceiling

  • 04

    Logged failures as a first-class path — every rejection stored with its provider error code, not collapsed into a generic error

Outcome

  • 99.6% email delivery across the measured window (1,123 of 1,127)

  • Throughput grew roughly 18× in four weeks while the failure rate fell from 28% to 2%

  • Every failure is now attributable to a specific cause — provider frequency capping accounts for the majority, which is a tuning problem rather than a defect

  • 21 campaigns run across four lifecycle journeys with no manual intervention

Stack

  • n8n
  • MySQL
  • WhatsApp Cloud API
  • SendGrid
  • GCP
  • Docker

Want something like this built?

Most of this is portable. The dedup, throttling and failure-handling patterns apply to any channel you send on.

Book a call