Inspect a campaign journey simulation
The Journey canvas can project a draft graph before you activate a campaign. Use the simulation to answer a narrow question: how does an estimated cohort move through this graph, and where does it stop? The result is project-only. It does not enroll a contact, queue a message, or call a provider. The current canvas simulator is a cohort projection, not a live contact replay: it does not read a contact record or create a per-contact execution trace. The Inspector terminology below refers to the projection results shown beside the canvas: inspect eachnodeResults row and its exact nodeId. This guide shows how to use the branch assumptions to test a contact-shaped path without changing tenant data.
This guide assumes you have a journey draft open in Outbound → Campaigns → Journey. For the graph itself, see Build, simulate, and launch a campaign journey. For a journey that is already being refused at launch, see Troubleshooting: campaign and journey enrollment errors.
1. What the simulator executes
Select Simulate in the journey toolbar. The simulator runs the same in-memorynodes and edges that the canvas is editing. It does not reload a different saved version, enroll a real contact, or execute live actions.
The projection evaluates graph structure and contact inputs only:
- A trigger provides the entry point for the estimated cohort.
- A wait passes the projected volume to the next node; the current result does not advance or return a per-contact clock.
- A condition projects
yesandnovolumes from the configured pass rate. - An A/B split projects each branch from its configured weights.
- A send node contributes a projected send count; it does not send.
- An end or exit node contributes to the projected terminal outcome.
2. Pick a sample contact
Start with an entry cohort size that represents the population you want to inspect. In the simulation panel, set Entry cohort size and review the graph fields your conditions read. For a contact-shaped test, write down the sample contact’s relevant attributes and translate them into a branch pass-rate assumption; the current cohort simulator does not fetch contacts, events, or tenant attributes. Use assumptions when you need to force a branch without changing tenant data. A global Branch pass rate (%) controls the default share taking theyes path, while a per-node override controls a named condition. These values apply only to the projection. For example, for a condition that reads plan, prepare two contact-shaped cases: an eligible contact (plan = pro) and an ineligible contact (plan = free).
- Run the eligible case with a
100%pass rate and confirm theyeshandle. - Run the ineligible case with a
0%pass rate and confirm thenohandle. - Remove the temporary assumption before you save or activate. Assumptions never become contact updates.
false, or zero. If a condition has no usable value, the Inspector marks the decision unresolved rather than silently guessing a branch. For date-based waits, use a contact with the date field populated and confirm the timezone shown by the project. If the journey enters from a segment, choose a contact that is actually in that segment or use the segment-entry context offered by the simulator.
3. Read each projected step
After the run, read the projection results in node order. The current result includes one row per graph node with its exactnodeId, label, projected arrival volume, and whether that node is reachable. Select the matching node on the canvas to inspect its configuration. Read branch volumes and warnings alongside the rows; the result does not include an execution-time contact timestamp or a per-contact resolved attribute value.
For a 1,000-contact entry cohort, a 1-day wait still contributes 1,000 projected arrivals to the next node. The wait changes live execution timing, but the current graph projection does not calculate timestamps, contact attrition, or delivery time.
A/B split math
For a split with variants weighted 70% and 30%, the simulator normalizes the weights to 0.70 and 0.30. For an entry cohort of 1,000 contacts, the projection is:4. Map branch handles to outcomes
The label on an edge is the contract between a decision node and its next step. Read thesourceHandle on the edge and compare it with the result shown in the Inspector:
Do not infer a branch from its position on the canvas. A lower edge is not automatically
no, and a right-hand edge is not automatically a timeout. Select the edge or node and verify its handle label. If a handle has no outgoing edge, the Inspector can report a branch as unresolved even when the other branch reaches an exit.
5. Fix common simulator findings
The Inspector distinguishes a projected graph problem from a launch refusal. When it names a node, copy the exact node id into your review notes; ids are more reliable than node labels, which can be duplicated.
Run the simulation again after each graph change. A clean trace should show an admitted trigger, a finite sequence of node ids, explicit branch results, and a goal or terminal outcome.
Projection finding or launch validation failure?
A projection finding is attached to the sample run: it names a node or handle in the trace, such asn_goal being unreachable or no having no edge. Fix the graph, then run the projection again. A launch validation failure is a refusal for the saved campaign or resolved audience, such as JOURNEY_DEFINITION_INVALID, JOURNEY_TRIGGER_MISSING, JOURNEY_TRIGGER_DISCONNECTED, AUDIENCE_TOO_LARGE, or a channel/send-gate refusal. It can happen even when one sample trace looks healthy. Copy the error code and request id and follow Troubleshooting: campaign and journey enrollment errors; do not try to fix a launch refusal by changing only the sample contact.
6. Walkthrough: segment entry, one-day wait, send, and goal
Use this small graph to reproduce the same example described in Campaign journeys: a segment admits the contact, the journey waits one day, sends a message, and checks a goal condition.Before the fix
The draft contains these nodes and edges:no handle from n_goal is not connected. Run the simulator with this sample context:
n_goal, and the missing handle is no. The 500/500 split uses the default 50% pass rate; set a per-node override when your sample-shaped case needs a different split.
After the fix
Make the smallest change: connect theno handle to an explicit end node.
100% pass-rate assumption for n_goal. The first three rows remain, the yes volume becomes 1,000, and n_end_success receives the full projected volume. Comparing the two projections verifies that both branch handles are wired without changing tenant data or sending either message.
7. Know when simulation is not enough
A successful projection means the graph can produce a path for the supplied sample. It does not authorize a live campaign. The launch validator still checks the saved journey and the tenant’s launch conditions, including:- Channel eligibility: the configured channel, sender, template, recipient address, and tenant channel setup must be eligible for the audience.
- Audience size: the resolved audience must fit the tenant’s allowed recipient count. A one-contact simulation does not prove that the full audience will pass this check.
- Per-tenant send gates: tenant-owned send controls such as quiet hours, frequency caps, suppression, consent, and configured country or channel controls still apply at launch and at send time.
8. Simulation limits
The canvas simulation is intentionally a projection. It does not model:- Contact attrition during waits. A contact remains in the trace across a one-day wait; the projection does not estimate who will leave, unsubscribe, or become unreachable during that period.
- Event timing noise. A projected event or timeout follows the scenario you supplied. It does not reproduce ingestion delay, clock skew, retries, or other timing variation.
- Per-channel delivery outcomes. A projected send is not a delivered, opened, clicked, failed, or replied message. Read those outcomes from the live campaign analytics after activation.
See also
- Campaign journeys: build, validate, simulate, and launch — the canvas loop and journey model.
- Build, simulate, and launch a campaign journey — graph structure, node types, and API examples.
- Troubleshooting: campaign and journey enrollment errors — launch and enrollment refusal codes.