Campaign Restart: Life After the Last Campaign Step
October 30, 2026
Every Mautic campaign has a last step. Nobody talks about what happens after it.
A new Mautic fix every Friday: a plugin or a tutorial
October 30, 2026
Every Mautic campaign has a last step. Nobody talks about what happens after it.
Picture your contact. They opened the welcome email. They clicked the link. They waited the polite three days, got tagged, got scored, got the follow-up. Then the campaign ran out of road, and they were left standing in an empty car park at midnight, still holding a lanyard that says Member. Nobody is coming to pick them up. Mautic doesn't know they're there. Neither do you.
I actually made a video about this issue 4 years ago introducing Future Joey and Caffeine Addicted Future Joey:
But this post is not about the video and the probelm it describes, but a solution with a small plugin: Campaign Restart.
A contact who reaches the end of a campaign is still a member of it. Mautic just has nothing left to schedule for them, so the campaign engine stops looking. They're not removed, they're not failed, they're simply... done. Furniture.
And you can't easily point at them. Mautic's segment filters will happily tell you who is in a campaign. They won't tell you who has finished it. "In campaign" lumps together the person on step 2 of 9 and the person who wrapped up in March. Those two need very different emails.
So the usual workarounds come out:
Campaign Restart adds one new segment filter: Finished campaign (no pending actions). Pick a campaign, and the segment fills with contacts who are:
That's the car park, in segment form. It comes in two flavours:
Operator | Who you get |
|---|---|
equals | Everyone who has finished the campaign |
not equal | Everyone else: never joined, still mid-way, or manually removed |
"Not equal" is handy for the polite version of marketing: don't send the re-engagement offer to people who are still in the middle of being engaged.

Finding them is half the job. The other half is getting them moving again, without dragging them back through the welcome email.
Mautic already has Jump to Event, but it only jumps inside its own campaign. It's a lift that only goes between floors of one building. Campaign Restart adds Jump to event in campaign: a campaign action that sends a contact to a specific step of a different campaign.
In the action you pick two things:
When the action runs, the contact lands on that exact step, right away. Not at the top. Not at the start of the onboarding. Exactly where you pointed.

The plugin also bumps the contact's rotation in the target campaign first. That's Mautic's "this is their next lap" counter. Without it, a contact who already ran that step once would bump into their own earlier run and get nowhere. With it, they can take the same step as many laps as you like.
Here's the bit that made me grin when it first worked.
Until now, every campaign was one long script. Top to bottom, start to finish, a few branches, done. If you wanted the same five steps in three places, you built them three times. Lovingly. By hand. With the same typo in each.
With a cross-campaign jump, a campaign stops being a script and starts being an object, with steps you can call from outside:
Onboarding.sendTips()
ReEngagement.winBackOffer()
Renewal.reminder()Build your "re-engagement" steps once, in one campaign. Then every other campaign can call into it at the right step. That's reuse. Change the offer in one place, and every caller gets the new version. That's encapsulation, or at least its cheerful marketing cousin.
There's even a type check, of sorts: the jump only works for contacts who are already a member of the target campaign. No membership, no method call. Think of it as a private method with a guest list.
Yes, I know. Somewhere a computer science lecturer just felt a disturbance and doesn't know why. But if you've ever copied the same twelve campaign steps into six campaigns, you'll feel the relief too.
Here's the setup I'd start with. Your onboarding campaign runs to the end. A segment catches everyone who finished. A small win-back campaign picks them up and drops them back into onboarding, at the step you choose.

The contact never sees the welcome email twice. They skip straight to the bit you want them to see again.
The fine print, because there always is some:
Campaign Restart is free and open source (MIT), for Mautic 5 and PHP 8.1 or newer: github.com/jos0405/MauticCampaignRestartBundle.
plugins/MauticCampaignRestartBundle.sudo -u www-data php bin/console cache:clear. Not as root. Root-owned cache files are how a quiet Tuesday becomes a loud one.No tables, no settings, no wizard. Then go and collect your contacts from the car park. They've been waiting.
Comments
Please log in to post a comment.