Campaign QA Checklist
Check an email campaign draft for broken links, missing or inconsistent UTM (Urchin Tracking Module — the query parameters used to track click sources in analytics) parameters, and unresolved merge fields, then report every defect back to the sender so they can fix it before send.
When to use
- Before a campaign is scheduled or sent, when a draft is ready for review.
- When a sender asks for a QA (quality assurance) pass on an email draft.
- After a template or merge-field change, to catch regressions before the next send.
- When a prior QA report flagged issues and the sender says a revision is ready for re-check.
Tools
read-file— load the campaign draft (HTML/text body, subject line, and merge-field manifest) from the artifact the sender produced.shell-execute— run a small script to extract all links, parse UTM query parameters, and find merge-field tokens (e.g.{{first_name}}) in the draft.write-file— save the QA findings (defect list: broken links, missing/inconsistent UTMs, unresolved merge fields) as a report artifact.send-message— notify the sender that QA is complete and flag defects for fixes, or confirm the draft is clean.
Playbook
- Identify the draft artifact to review; use
read-fileto load its full contents (body, subject, any merge-field data file). - Use
shell-executeto run a short script extracting every URL from the draft body. - For each extracted link, use
shell-executeto check it has the expected UTM parameters (utm_source,utm_medium,utm_campaignat minimum) and that values are consistent with the campaign name. - Use
shell-executeto scan the draft for merge-field tokens (e.g.{{first_name}},{{company}}) and cross-check each against the field list in the merge-field manifest, flagging any token with no matching field or any field that appears literally unresolved. - Compile every defect found — broken/dead links, missing or mismatched UTM parameters, unresolved or unmapped merge fields — into a single structured list with the exact location (link text or line) of each.
- Use
write-fileto save this defect list as a QA report artifact, or note explicitly that no defects were found. - Use
send-messageto notify the sender: summarize the defect count and severity, point to the QA report artifact, and ask for a fixed draft if defects exist. - If the sender supplies a revised draft, repeat steps 1-6 against the new version and confirm which defects were resolved.
- Once a draft passes with zero defects, use
send-messageto confirm the campaign is QA-clean and ready to schedule.
Failure modes
- 401/403 on any dependency the draft references -> missing Integration, escalate via
send-messageto a human naming the service and required scopes. - Empty result when extracting links or merge fields -> verify you are reading the correct file/section with
read-file, and re-check the parsing logic inshell-executebefore concluding the draft is clean. - Rate limit encountered while probing external link targets -> back off and note the limitation in the QA report rather than marking links as verified.
- Draft format or merge-field syntax has changed from what the script expects -> fall back to a manual read of the file via
read-fileand note the format change in the report for the sender.
Done when
- A QA report artifact exists (via
write-file) listing every broken link, UTM defect, and unresolved merge field, or explicitly stating none were found. - The sender has been notified via
send-messagewith the defect summary and a link/reference to the report. - Any revised draft has been re-checked and the report reflects which defects are resolved versus still open.