Open source · Self-hosted

Automated email, SMS & push.
No per-user bill.

Send messages based on what people do. Build the flow by dragging boxes. Run it on your own servers, or right inside your Laravel app.

MIT licensed Self-host or embed Email · SMS · Push Laravel 10–13
app/Http/Controllers/SignupController.php
// your app sends an event. that's the whole setup. TriggerEngage::identify('user-42', ['email' => $user->email]); TriggerEngage::event('customer_sign_up', ['plan' => 'free']);
event received → the flow runs
Built for Mytherapist.ng, a large African health-tech platform Free and open source Email, SMS & push in one place Runs on Laravel + Redis
The problem

You shouldn't pay per user
to message your users.

Most tools charge you for every person in your database — every month, forever. Trigger Engage does the same job on servers you already pay for.

Keep your data. Keep your sending reputation. Drop the monthly bill.

Typical hosted tool
$100/mo
for about 12,000 people — and it goes up as you grow
Trigger Engage
$0
per-user fees — you host it, you own it

What's included

Everything you need to message users

The automation engine, the audiences, the tests, the charts — all included, and all yours.

Visual journeys

Drag boxes to build a flow: wait, branch, split, send. Change it anytime — people already in it aren't disrupted.

Smart segments

Group people by what they did — like “booked but didn't show up in 30 days.” The list keeps itself up to date.

A/B testing

Send a few versions of a message, split who gets which, and see which one wins — right there on the flow.

Built-in analytics

See how many messages were sent, delivered, opened, and clicked — over time and by channel. No add-on to buy.

Track before signup

Follow visitors before they sign up. When they do, everything they did earlier joins their profile — automatically.

Three channels, one profile

Email (SMTP, SES, Mailgun, Postmark, and more), SMS (Termii), and push (OneSignal) — all from the same person's profile.

Never breaks your app

If messaging goes down, it quietly logs the problem and moves on. Your signup and checkout keep working, no matter what.

Journeys

Build the flow by dragging boxes

Add triggers, waits, branches, A/B splits, and sends by dragging them onto the page. Publish it, then watch people move through it live.

  • Wait minutes, days, or until a set time
  • Pause until the next thing happens
  • Stop the flow the moment someone converts
app.trigger-engage — Welcome A/B test
The Trigger Engage journey editor showing a welcome A/B test: a trigger flowing into an A/B split that branches to two email variants and converges on exit, with a live per-variant results panel
app.trigger-engage — Segments
The rule builder: include a person when all conditions match, with an attribute condition (plan equals premium) and a behaviour condition (performed activated in the last 30 days)
Segments

Lists that update themselves

Set a rule once — based on who people are and what they've done — and the list updates itself as people act and time passes.

  • Match on details and on actions
  • Time-based rules like “inactive 14 days”
  • Send a one-off blast to any list
Analytics

See what's working

One dashboard for how many messages went out, how many landed, and how your flows are doing — all compared to last period.

  • Sent vs delivered, over 7 to 90 days
  • Delivery funnel and health by channel
  • Kept up to date by your providers
app.trigger-engage — Analytics
The analytics dashboard: stat tiles for messages, delivered, failed, runs and events with period-over-period deltas, above a sent-versus-delivered message-volume chart

How it works

Three simple parts

Your app does two things: say who someone is, and what they did. Everything else happens here.

01 — your code

Send events

Add the SDK and call identify() and event() from your app. Send them and forget them.

02 — the dashboard

Build flows

Set up lists, messages, and drag-and-drop flows with A/B splits and goals. Hit publish — no deploy, no engineer needed.

03 — the engine

Send & measure

The engine runs your flows and sends the email, SMS, and push through your providers — then shows you how they did.

Two lines to add it

Safe to run in production

Never crashes your app.

If messaging fails, it logs the problem and moves on. Your signup and checkout never notice.

No double-sends.

Every call has a key, so a retry can never send the same message twice.

Easy to test.

Use TriggerEngage::fake() and assertEventSent() — no network calls in your tests.

// composer require trigger-engage/laravel
use TriggerEngage\Laravel\Facades\TriggerEngage;

// who to message
TriggerEngage::identify('user-42', [
    'email'      => $user->email,
    'first_name' => 'Ada',
    'plan'       => 'free',
]);

// what they did — this starts your flows
TriggerEngage::event('customer_sign_up', [
    'plan' => 'free',
], person: 'user-42');
Honest comparison

Trigger Engage vs a hosted tool

Hosted tools are great. Here's the trade-off for owning your data instead of renting it.

Trigger EngageHosted (e.g. Customer.io)
Pricing model Free & open sourcePer profile, monthly
Cost for ~30,000 people$0 in fees$100+/mo, and rising
Self-host on your infra Yes No
Embed inside your Laravel app One Composer command Hosted only
Own your data & sending reputation FullyOn their servers
Email · SMS · Push All threeAll three
Journeys · Segments · A/B · Analytics IncludedIncluded
Runs without you managing itYou run it Managed for you

Not affiliated with or endorsed by Customer.io. Comparison reflects public pricing at the time of writing.

Pricing
Free. Forever.

It's open source under the MIT license. No seat limits, no user caps, no upsells. You just pay for the servers you already run.

Unlimited users Unlimited messages Every feature, no tiers Full control of your data
Questions

Good to know

Is it really free?
Yes — MIT licensed, all features, no profile caps or tiers. Your only cost is the infrastructure you host it on (or the app you embed it in).
How is this different from Mailchimp or a newsletter tool?
Those send newsletters on a schedule. Trigger Engage sends messages based on what a person does — across email, SMS, and push — with waits, branches, and goals along the way.
Can I run it inside my existing Laravel app?
Yes. One command — composer require trigger-engage/server — installs the whole thing into your app, using your database and login. No second service to run. Or deploy it on its own and connect over the API.
What do I need to run it?
PHP 8.2+, a Laravel-supported database (Postgres or MySQL in production), and Redis for queues and the scheduler. A Docker Compose stack is included for standalone deployments.
Which providers does it send through?
Email over any SMTP provider (ZeptoMail, SES, Mailgun, Postmark, and more), SMS via Termii, and push via OneSignal. You bring your own provider credentials, encrypted per workspace.
Is my customer data private?
It never leaves your infrastructure. People, events, and messages live in your database, and one-click GDPR/NDPR erasure is built in.

Own your messaging.

Build your first flow today. On your own servers or inside your app — free for good.