ai

Marketing Automation QA: Check Journeys Before Launch With an AI Agent on Rails

A marketing automation QA checklist tests a journey's audience, triggers, branches, timing, links and consent before launch. A Journey QA Reviewer agent works through it at propose level (L2): it reads the configuration and reports findings, and it cannot change or launch anything. Rule-based checks remain the ground truth, and a person resolves every finding on any customer data platform (CDP).

Rail level: L2 · Risk: medium · Function: marketing operations

By Art Kukharenko · Published · Updated

All AI agent rails

Who this is for: marketing-operations specialists and leads. Copy the checklist, split it into rule and judgement checks, then test your current QA with seeded defects. The method is part of AI agent rails: one job, one data scope, one approver, one audit trail.

Before: the manual workflow

Manual journey QA usually means one person reading the canvas the evening before launch. Time pressure turns the review into a skim. Builders often check their own work and see what they meant to build. Knowledge of past mistakes sits with one specialist. Nothing records what was checked, so after an incident nobody can say whether a step was missed or never in the routine.

The marketing automation QA checklist

The marketing automation QA checklist below has 27 items in ten groups, and you can copy it as it stands. Each item is tagged rule when a deterministic check can answer it, or judgement when someone must compare it with the intent. It also works as a campaign QA checklist for one-off sends and as a pre-launch checklist for email workflow testing. It draws on the site's consent guidance and on published checklists from Iterable and Scalero 57.

Audience

  • The audience definition matches the written request, and its version is recorded. (judgement)
  • The audience count sits inside the expected range for this journey. (rule)
  • Standard exclusions are attached: test accounts, staff and open complaints. (rule)
  • No special-category data or close proxy drives inclusion or priority. (rule, then judgement)

Trigger and entry

  • The trigger was fired once in a test and started the right path. (rule)
  • Maximum entries and re-entry settings match the intent. (judgement)
  • An end date exists, or "runs indefinitely" is a stated choice. (rule)

Branching

  • Every step connects onward or exits, with no dead ends. (rule)
  • Branch conditions, including the default path, match the written intent. (judgement)
  • Exit rules remove people who have already done what the journey asks. (judgement)

Timing and wait steps

  • Time zone, send window and quiet hours are set for each market. (rule)
  • Wait steps make sense here and avoid public holidays and blackout dates. (judgement)
  • A frequency cap is present, and overlap with similar live journeys is known. (rule, then judgement)

Content and fallback values

  • Every merge field has a fallback value and renders on test profiles. (rule)
  • Copy fits this audience and matches the offer, price and dates on file. (judgement)
  • Regulated claims and required disclosures have a recorded sign-off. (rule)

Links and tracking

  • Every link resolves over HTTPS to the intended page. (rule)
  • Tracking parameters are present and follow your naming convention. (rule)
  • A conversion event is attached, so the result can be measured. (rule)

Consent and suppression

  • Consent purpose and channel match this message. (rule)
  • Suppression lists are attached, and the send step re-checks them at dispatch. (rule)
  • The template is tagged as marketing, service or legal notice. (rule)

Deliverability

  • Sending domain, authentication and one-click unsubscribe are in place for this stream. (rule)
  • Volume fits the warm-up plan and rate limits for this domain. (rule)

Destinations and sync rules

  • Every destination is allow-listed, and sync-time filters were checked separately. (rule)

Rollback plan

  • A named owner can stop the journey, and the stop steps are written down. (rule)
  • A review is booked soon after the first people enter. (rule)

Consent mechanics behind the suppression items are in the suppression architecture article, and the glossary entry on journey orchestration defines the terms.

What rules do and what the model does

Rules answer questions that have one right answer, and the model answers questions about intent. A rule can confirm that a suppression list is attached. It cannot notice that a branch contradicts what the marketer asked for. The split follows the boundary article, which treats deterministic rule checks as ground truth.

The table assigns each common check to its owner and shows what a failure does.

CheckOwnerWhat a failure does
Suppression attachedRuleBlocks launch
Consent purpose matchesRuleBlocks launch
Links resolveRuleBlocks launch
Tracking parameters presentRuleBlocks or warns, by your policy
Fallback values setRuleBlocks launch
Frequency cap presentRuleBlocks launch
Audience count in rangeRuleBlocks until a person confirms
Destination allow-listedRuleBlocks launch
Does the branch logic match the written intent?Model, then a personRaises a finding
Does the copy fit this audience?Model, then a personRaises a finding
Are the wait steps odd for this journey?Model, then a personRaises a finding
Does it overlap a similar live journey?Model, then a personRaises a finding

A model's "pass" never overrides a failed rule, and a model's silence does not mean correct. So the report says "no findings in these checks" and lists them. It never says "passed".

After: the job on rails, step by step

The job on rails runs rule checks first, then the agent, then a person, and the launch approval stays last.

  1. A marketer submits one journey version for launch, and the platform hashes it.
  2. The Orchestrator routes the submission to this rail. It reads metadata only.
  3. Rule checks run in the rule layer. A failed rule blocks launch, whatever happens next.
  4. The Journey QA Reviewer reads the configuration, content, audience counts, rule results and the live journey list.
  5. Findings arrive with severity, location, evidence and a suggested fix, plus the list of checks actually run.
  6. A person resolves each finding by fixing it or accepting it with a note. Unresolved high-severity findings stay blocked by the rule layer. A fix creates a new version, so steps 3 to 5 run again.
  7. The normal launch approval follows. A named approver, who is not the requester, signs the version hash. Any later change voids that approval, and a timeout expires it.

The agent has no write tools at any step. The tool allow-list enforces that, so no prompt can add one. A ledger writer outside the agent records each step.

The rail card

The rail card fixes what the Journey QA Reviewer may do, and each limit sits in a system rather than a prompt. Budget values are yours to set. See the rail card guide for how the fields work.

FieldValue
JobReview one journey version before launch and report findings with severity and evidence.
TriggerA journey submitted for launch.
Data scopeJourney configuration, content, audience counts and rule-check results. No customer profiles. Enforced by the data view.
Tool scopeRead: journey configuration, rule-check results, audience counts, live journey list. Propose: findings report. Execute: none.
Output contractFindings with severity, location, evidence and suggested fix, plus a list of checks actually run.
GateA person resolves every finding. Unresolved high-severity findings stay blocked by the rule layer.
LimitsBudget per run. One journey version per run.
LedgerJourney version hash, checks run, findings, who resolved each one and how, model version.
EvaluationSeeded-defect set covering audience, trigger, branch, link, consent and timing errors.
Owner and kill switchHead of marketing operations. An Orchestrator pause returns launches to manual QA.

The session holds two of the three Rule of Two properties 1. It reads untrusted text, because agency copy, feeds and merge fields can carry instructions. It also reads confidential configuration. So it must not gain the third property, changing state. That is why the rail level stays at L2 and does not move up.

What the ledger shows for one run

One run leaves one record, written by the ledger writer and not by the agent. The example below is illustrative, with example value values, in the style of the segmentation walkthrough.

{
  "record_id": "aud_000877",
  "event": "journey.qa.reviewed",
  "rail": "journey-qa-reviewer@v3",
  "submitted_by": "marketer_12",
  "journey": {"ref": "jrn_311@v4", "sha256": "4be1..."},
  "rule_checks": {"run": 14, "failed": ["suppression_attached"]},
  "agent": {"version": "2.1.0", "model": "model-id@version"},
  "checks_run": ["branch_intent", "wait_steps", "copy_fit", "overlap"],
  "findings": [
    {"id": "f1", "severity": "high", "location": "branch_2.exit",
     "resolved_by": "marketing_ops_04", "resolution": "fixed in v5"},
    {"id": "f2", "severity": "medium", "location": "wait_3",
     "resolved_by": "marketing_ops_04", "resolution": "accepted, note n_88"}
  ],
  "ledger": {"prev_hash": "ab41...", "hash": "c7d0..."}
}

Three ways it fails, and the control for each

Journey QA with an agent fails in predictable ways, and each control below lives outside the model.

FailureHow it shows upControl
False assuranceReviewers treat a short report as approval and stop reading the journey.The output contract forbids the word "passed". Launch approval stays with a named person.
Injection through journey copyA template or feed tells the model to report nothing.No write tools exist, rule checks run separately, and seeded injection cases sit in the evaluation set.
Findings fatigueLong lists of minor comments teach people to dismiss everything.Severity tiers, plus tuning against override data.

One more failure is human: under deadline, people skip QA. Make the review a launch prerequisite in the workflow, so the launch button stays locked until a run exists for that version hash.

Metrics that are honest

Honest QA metrics count what got through as well as what got caught. Use the definitions in the AI marketing operations roadmap and baseline them before you add the agent.

  • QA catch rate on seeded defects, split by defect type.
  • Escaped error rate: errors found after launch per 100 campaigns.
  • False-finding rate: findings rejected as wrong, not findings accepted and left alone.
  • Submission-to-launch-ready time, measured by your team.
  • Override rate. Near zero may mean rubber-stamping, so sample decisions.

Report these by rail and role, not by named reviewer. Annex III point 4(b) of the EU AI Act lists monitoring workers' performance as a high-risk use 2, so take advice before using this data to assess a person.

Run a seeded-defect test on your current QA, with or without an agent:

  1. Copy a few recent journeys into a test workspace.
  2. Insert known defects: audience, trigger, branch, link, consent and timing.
  3. Run your normal QA without telling the reviewers which journeys are seeded.
  4. Count catches by defect type, and write down what was missed.
  5. Repeat before any change to the model, the prompt or the tools.

How vendor tools compare

Simulators test mechanics and an agent checks intent, so most teams need both. The table reflects vendor pages we opened on 1 November 2026, and features may exist that these pages do not describe.

ToolWhat it testsDoes anyone receive a message?What it leaves to you
Adobe Journey Optimizer dry runReach and branches on the real production audience 3No. Channel actions do not run, and custom actions are disabled 3Content, and anything behind a bypassed action
Adobe Journey Optimizer test modeStep-by-step logic with up to 100 test profiles 4Yes, to test profiles. Triggered events are real and can start other journeys 4Reach on the real audience
Adobe Journey Optimizer simulationPaths and decisioning with simulated users 11Yes, real sends. It skips consent, frequency caps, quiet hours and opt-outs 11All consent checks
Microsoft Customer Insights JourneysPreviews and test sends of messages 6Test recipients only. Double opt-in logic cannot be tested by test send 6Whole-journey paths; we found no path simulator on the pages opened
Iterable pre-flight checklistA manual list, including a reviewer other than the builder 5Your choiceEnforcement and records
Hightouch destination rulesFilters rows at sync time without changing the audience, most often for consent 8Not applicableAudience counts can differ from what syncs, so check rules separately
Cassidy launch checklist agentClaims URL, tracking and pixel checks 9Not statedNo marketing automation platform is named, and we saw no independent review

A script, or nothing, is sometimes the better answer. If you launch few journeys, a shared checklist and a second reader will do. Build the rule checks before any agent, because they catch the costly errors. If all journeys live in one vendor and the content is not regulated, a vendor assistant may be enough: Braze Operator reviews message content and Canvas configuration, and it cannot launch anything that affects users 10. PrivyCDP's product page describes AI-assisted review of workflows, with limits on data access and review of results.

To see how this job fits the wider function, read AI agents for marketing operations, or return to the AI agent rails hub. To write this rail for your own team, download the rail card template.

Browse use casesFunction playbooksAgent roster

FAQ

How do you QA a marketing automation workflow?

Run deterministic checks first: suppression, consent purpose, links, fallback values, frequency caps and audience range. Then have a second reader compare branches, waits and copy with the written intent. Test the mechanics in a simulator or with test profiles. Record what was checked, and make a person resolve every issue before the normal launch approval.

What should a campaign QA checklist include?

Cover audience, trigger and entry, branching, timing and waits, content and fallback values, links and tracking, consent and suppression, deliverability, destinations and a rollback plan. Tag each item as a rule or a judgement call, so you can automate the rules and spend human attention on intent. The 27-item list above is free to copy.

Can AI do QA for marketing campaigns?

Partly. An agent is useful for reading configuration against intent, spotting odd waits and finding overlap with live journeys. It should not replace rule checks or sign off a launch. Keep it at propose level, with no write tools, so that a bad or manipulated run produces a poor report and nothing worse.

What is the difference between dry run and test mode?

In Adobe Journey Optimizer, dry run uses the real production audience without contacting anyone, and channel actions do not run. Test mode sends real messages to flagged test profiles, and it shortens waits so you can follow each step. Dry run shows reach and branches. Test mode shows what a message and path look like.

How do you test journeys without emailing customers?

Use a dry-run feature if your platform has one, or send only to flagged test profiles in a test workspace. Check whether "simulation" still sends real messages, because Adobe's does. Then review the configuration itself against the checklist, since neither a dry run nor a test profile tells you whether the logic matches the intent.

Sources

  1. Meta, Agents Rule of Two (31 October 2025)
  2. EU AI Act, Annex III
  3. Adobe, Journey dry run
  4. Adobe, Test your journey
  5. Iterable, Creating an Iterable journey pre-flight checklist (16 April 2024)
  6. Microsoft Learn, Check your work using previews and test sends
  7. Scalero, Email QA checklist
  8. Hightouch Docs, Destination rules
  9. Cassidy, AI campaign launch checklist agent
  10. Braze Docs, What you can do with Operator
  11. Adobe, Simulate your journey

This article is general information, not legal advice.

Further reading

Published: · Updated:

Editorial dates describe content changes. Confirm current sources before making legal, security or purchasing decisions.