Campaigns
Build the journey once. Nothing sends until you approve it.
A campaign here is a graph rather than a list, which is why it can follow a person instead of marching everyone through the same seven emails. Lanes hold sequences of steps; goals watch for something happening and move people between them. A campaign lands as a draft, and a draft has never sent anything. Email is the only channel MADDOX operates for you — a lane can also carry a webhook or an SMS step, which the email page describes in full — and journey tasks are how a journey reaches somebody inside the CRM, which is where most follow-up actually happens. The marketplace carries ready-made journeys to start from, including industry pack libraries — IT services first.
In the product
Every campaign, with its state on the face of it.

The engine
Build it, then watch it run
A journey is authored on a canvas and read back on the same canvas afterwards. These two pages are the whole of how a campaign is made.
Instant on
Or start from one somebody already built
Most campaigns are not novel. A pack is a complete journey – lanes, steps, goals and the email copy – that installs into your workspace as a draft you can read before you decide anything.
Afterwards
What happens to an installed campaign later
Installing is the easy half. The three pages below are the harder half: taking a new version without losing your edits, and taking a campaign out without wrecking anybody’s history.
Before and after launch
A normal tool tells you a campaign sent. This one tells you what did not.
Most marketing automation is quiet about everything except the send button. The parts below are the ones an MSP owner asks about the morning after a launch.
A launch readiness panel, with a link beside every problem.
Before a campaign launches, one panel lists what is not ready: a missing or paused sender, a sending domain failing its deliverability checks, emails signed by nobody, campaign values left empty, and steps with something wrong in them. The few that can embarrass you — no sender, a sender failing SPF or DKIM, no postal address, a broken unsubscribe, a placeholder sitting inside a link — stop the launch. Every item links to where it is fixed, because a count with nowhere to click is just a worry with a number on it. The deliverability page covers the sender checks in full.
Recipients, holds and skips, visible after the send.
Once it runs, the Recipients tab shows each person at each step with what happened: sent, delivered, bounced or unknown, opened or clicked, and the whole view exports as CSV. A send held for a time window or a missing time zone says so, and when it will try again. A send that was skipped or failed shows up on the contact’s own timeline with the reason. Email sequences walks through each one.
Questions
The things people actually ask.
What can a campaign actually send?
Email is the only channel MADDOX operates for you, and that is the honest shape of the product rather than a roadmap position. Two step types can still send data out of the building on your instruction: an HTTP webhook step posting contact details to an address you choose, which works on a default install, and an SMS step that fires only where you have connected your own Twilio account and taken it out of dry-run. Inside the CRM a journey can also raise a task for a person to do something – make the call, check the account, follow up by hand – and those tasks queue against the campaign that raised them.
Does a campaign start running as soon as I create it?
No. A campaign is created as a draft, and a draft has no enrolments and sends nothing. Launching is a separate, deliberate act, and the system checks first that the journey actually has an entry point – a graph nobody can enter is refused rather than launched into silence.
What is a goal?
A goal is a trigger with a lane on either side of it. It watches for something – the campaign launching, a link being clicked, a tag being applied – and when it fires it completes the lanes it was watching and starts the lanes it points at. That is how branching works here: you wire goals, rather than burying conditions inside a step.
Can two people edit the same journey at once?
Yes, and you should know exactly how much protection that comes with. The canvas writes through a single definition writer that owns the invariants – step ordering, goal wiring clamped to lanes the campaign actually owns, and one conversion goal at a time. That last one is genuinely enforced: a campaign can only ever be measured against one conversion goal, and a second person promoting a different goal at the same moment is refused with a message telling them to reload. Everything else is last write wins. Two people editing the same step’s subject line concurrently lose one of the two edits without being told, and we would rather write that down than let the word “collide” carry more than it should.
Can I see what a launch would do before I run it?
Yes. A preview reports the entry lanes it would use, the contacts it resolved, how many enrolment rows it would write and who it would skip – read-only, and throwing the same refusals a real launch would throw, so a journey that cannot be entered fails the preview rather than passing it and failing later. The canvas also flags a lane that branches only conditionally with no active unconditional fallback, which is the failure worth catching: an unreachable lane is loud, a lane whose only fallback is switched off catches nobody and says nothing.
Build a journey and leave it sitting as a draft.
Draw the lanes, set the goals, then walk away without a single email going out. The distance between a built campaign and a sent one is where the confidence comes from.