The Problem
Once a contact reaches the end of a Mautic campaign, it is a dead end. The contact will idle in the campaign forever, if you did not prepare a “Change Campaign” action beforehand.
Adding new steps afterwards will not reach them. This is a long-known limitation, and over the years various workarounds have been proposed: helper campaigns, database manipulation, and other multi-step setups. Most of them are either complex to maintain or require technical access most campaign managers do not have.
The solution described here needs neither. No extra campaigns, no database access, just a small addition inside the existing campaign.
How the Workaround Works
The workaround uses a Decision event as a branching point. The key is in how Mautic handles Decisions differently from Actions or Conditions: a Decision is evaluated every time the campaign trigger runs, as long as the contact has completed the preceding step. This means it does not matter when that step was completed. A contact who finished the campaign weeks ago will still be picked up.
You can use this mechanism to catch contacts that have already reached the end of the campaign. Add a Decision event that checks for a URL that no contact will ever visit, you can just make one up. Every contact will then follow the negative path of this Decision event. Add your new steps on this negative path.
This method reaches two groups of contacts:
Contacts that are already at the end of the campaign.
Contacts that will reach that point in the campaign later.
Step-by-Step
Step 1: Add a Decision to Your Campaign
Open the campaign you want to extend, like this example campaign:
Things to Keep in Mind
This workaround can be applied at any point in a campaign, after any Action a contact has passed through, or after any Condition that evaluated as configured.
All contacts already at that point in the campaign will need one additional
mautic:campaign:triggerrun before they are processed.Make sure the cron job runs frequently enough for your use case.
If you want to introduce a longer delay before the new steps anyway, simply set a higher value in Step 2 instead of the minimum.
If your campaign has multiple endpoints you want to extend, repeat the process for each one.