Guide
An email approval workflow that holds up: rounds, variance log, sign-off
Most email programs have an approval step. Fewer have an approval workflow: a repeatable path from the first build to a sign-off someone can check later. The difference shows up the week a miss ships, when the account lead is asked who approved the email, and which version they saw.
This guide is for agency producers, account leads and QA leads: who checks what, how rounds work, and what a sign-off should cover.
Why “approved in the thread” fails
The usual approval is a reply-all: a screenshot or a preview link goes out, and the client writes “looks good, approved”. It feels like a record. It breaks in three places.
Who approved which version
A launch and a reminder in two languages is four emails, each built more than once. The thread has a dozen attachments and three people who said yes at different times. Months later nobody can say whether the approval covered the French reminder or only the English launch.
The screenshot problem
A screenshot says nothing about where the links go, what the alt text reads, or whether the pre-header matches the deck. Two builds with different link destinations produce the same screenshot. The client approved a picture, not the email.
The fix that came after approval
The client approves on Tuesday, then sends one more change on Wednesday: a date in the legal copy. The developer makes it so the send goes on time, and nobody checks it, because the email is already approved. The approval now covers an email that no longer exists.
The roles, and what each actually checks
Approval goes wrong when everyone assumes someone else checked a thing.
- Developer. Builds the email and fixes what QA reports. Checks that personalization resolves and the template publishes. Should not sign off their own build.
- QA. Checks the build against the approved assets: the copy deck line by line, every link and alt text against the links and alt matrix, and the layout against the approved design. Owns the variance log and the round count.
- Account lead or producer. Owns the question “can it be sent?” Decides what is a fix and what is a question for the client, and chases answers. Needs a one-line answer and a list of what blocks sign-off, not HTML.
- Client reviewer. Owns the approved assets. Answers questions where the deck and design disagree, and approves a specific round, not “the email”.
Rounds: check, fix, check again
A round is one pass of QA over one set of built files. Number them, and every finding, fix and approval belongs to a round, so “which version?” has an answer.
Round 1 finds the misses against the approved assets
Round 1 is the expensive one: every line against the copy deck, every link and alt attribute against the matrix, the layout against the approved design. The misses are predictable: a pre-header never updated from the template, a link on the wrong language path, a missing disclaimer, a module the design has and the build dropped. The copy deck comparison guide walks through the deck half of this pass.
In SendLint, the campaign Overview after each round says whether it can be sent, the next step, and what blocks sign-off, grouped by who acts: For the developer, and Check by eye where a check cannot be sure.
The developer gets a numbered variance log, not a thread
With a thread of annotated screenshots, the developer has to work out which email each one is from and whether the problem is in the other versions too. A variance log has one numbered row per issue, the versions it affects, the change in the developer’s terms, and the evidence.
Email: Shop the season early.
Deck: Earn more on your everyday spend.
#4 · FR · Terms link
Email: harbourline.example/en/legal/terms
Deck: harbourline.example/fr/juridique/conditions
“#4 is done, #3 needs a deck answer” is a sentence anyone can act on. SendLint’s variance log downloads as a .docx for the whole campaign, every round and every language, or copies into a ticket. A developer without an account can get a round brief as a read-only link.
Round 2 shows what changed and what came back
Round 2 answers three questions: what was fixed, what is still open, and what is new. The third is the one people skip. A fix in the reminder can break the footer in the launch, and a reviewer who only checks the round 1 list never sees it.
In SendLint, findings are matched across rounds. The Round matrix shows each one per round as Fail, Warn, Pass or Fixed, worked out from the email rather than set by hand, and a fix that regresses is tagged “Came back in R2”.
And so on until clean
Keep going until the round comes back clean. A deck change mid-campaign is a new input: update the deck and run the next round against it. A finding that is not a real problem is waived, so it stays visible on the record.
The sign-off
What the client signs
A sign-off should name a specific round of specific files, per language: not “the launch” but round 2 of the English launch and reminder. Languages rarely finish together, so they are signed off separately.
In SendLint, approval is earned, not clicked. A round can be marked complete only when it passes the client’s compliance policy: by default, zero unresolved fails, with waived findings counting as resolved. Otherwise, fix and re-run, waive, or override with a typed reason on permanent record. Each language has its own row on the Overview, signing off its own latest round.
Two-party approval or self-approval
Self-approval means one person marks the round complete, which is fine as long as the record says so. Regulated clients usually want two people. With two-party approval on in the client’s compliance policy, a Member’s sign-off becomes an approval request, and only a Reviewer can grant it. The certificate records which happened, two-party or self-approved, including on the public verify page.
What a certificate records
- The SHA-256 fingerprint of each approved email’s exact HTML
- The campaign, the round and the language
- The check counts, the waivers and the policy in force
- Who approved, how, and any override reason
The fingerprint makes approval a property of the file. Anyone can check a file against it at sendlint.com/verify. The guide to proving the sent email matches the approved one covers the hashing and the pipeline gate in detail.
When a newer round supersedes it
Remember the Wednesday fix. That edit produces a different fingerprint, so the file no longer matches. Run it as a new round, approve it, and the new certificate supersedes the old one. Nothing is deleted: the old certificate’s page reads REPLACED BY A NEWER SIGN-OFF and names its successor. Supersession stays inside one language: approving French never replaces the English certificate.
Running it as an agency
An agency runs this for several clients at once, each with its own rules and approvers.
- One rulebook per client. Brand rules, check policies and the compliance policy live on the client, so every campaign gets the same pass and the same approval rules.
- Free Reviewer seats. Member seats run analyses and are the only billed seats. Designers, developers and account managers join as Reviewers for free: they comment, add a finding SendLint missed, and grant approval under a two-party policy.
- A client portal with no login. Brand-side stakeholders get a per-campaign link with a status per round, finding counts, and the SendLint Approved seal once approved. It never shows email source or internal notes.
- The audit trail when a miss ships. Every sign-off writes an audit-log entry with the user and the time, and the compliance PDF lists every audited action on the campaign in order. When a client asks how something got through, the answer is which round, what was checked, what was waived, and who approved.
The agencies page lays out the seats and the campaign flow side by side.
A worked example: Harbourline HL2316
Harbourline is a fictional retailer, and HL2316 its points campaign: a launch and a reminder, in English and French. The week below is illustrative.
- Monday, round 1. QA runs all four emails against the deck and the approved creative. Both languages read Needs fixes. The variance log has a template pre-header in all four, an English terms link in the French build, and French alt text still in English. One line is a question: the deck and the creative show different offer end dates, so it goes to the client.
- Tuesday, fixes. The developer replies by row number. The client answers the date question, and the deck is updated.
- Wednesday, round 2. The fixed files run as the next round against the updated deck. English is clean and reads Ready to sign off; the account lead marks it complete, and the English certificate is minted. French has one new fail: fixing the terms link moved the unsubscribe link to the English path. It shows as new on the Overview, not buried in the round 1 list.
- Thursday, French sign-off. Round 3 of the French emails comes back clean. The client’s compliance policy needs two people, so the account lead’s sign-off becomes a request and a Reviewer grants it. The French certificate records two-party approval. The English certificate from Wednesday stands untouched.
The rounds, the log, the answers and both certificates are in one place. Walk through the sample campaign in the free demo.
Frequently asked questions
- What is an email approval workflow?
- The steps between the first build and the send: QA checks the email against the approved assets, the developer fixes what was found, QA checks again, and someone with authority signs off a specific round of specific files, with a record of each step.
- What is a variance log in email QA?
- A numbered list of every difference between the built email and the approved assets: one row per issue, the versions it affects, the change in the developer's terms and the evidence. It replaces a thread of screenshots.
- What exactly does the client sign off?
- A specific round of specific files, in one language. In SendLint the certificate records the SHA-256 fingerprint of each approved email's HTML, the round, the language, the check counts, the waivers and who approved, so the approval belongs to those exact bytes.
- What is the difference between two-party approval and self-approval?
- With two-party approval, the person who marks the round complete only requests approval, and a second person with a Reviewer seat grants it. With self-approval, one person marks it complete. SendLint labels the certificate with the mode either way.
- What happens to a sign-off when a newer round is approved?
- The newer approval supersedes the old certificate for the same language. The old certificate is kept, and its verify page says it was replaced by a newer sign-off and names the successor. Approving French never replaces the English certificate.
Keep reading
- How to prove the email you sent is the email that was approvedApproval usually lives in a screenshot and a thread. Here's how to bind it to the exact bytes instead, and verify any file against it later.
- How to QA an email against the copy deck, line by lineThe shapes a deck arrives in, both directions, per version and per language, the parts everyone skips (subject line, alt text, links, tokens), what counts as different, and what to do when the deck is revised mid-campaign.
- The email QA checklist: every check before you sendEvery check a bank-grade email QA pass covers, why each exists, and which ones humans consistently miss.