Run an Audit in the App
1
Open the send or export dialog
Open the email that you plan to send or export. The audit uses the live
HTML, subject, preview text, version, and sending purpose shown in the
dialog.
2
Click Audit
Click Audit · 5 credits next to Test. For exports, the button sits
next to Export. Brew opens the Audit tab and starts the checks.
3
Review the result
Start with the readiness status and score. Then review check coverage,
loaded size, and findings grouped by category. Each finding explains what
failed and how to fix it.
4
Fix and run again
Edit the email, then click Run again · 5 credits. Any change to the
HTML, subject, preview text, purpose, or audit rules makes the prior result
stale.
A complete audit costs 5 credits. A partial
audit costs 0 credits because one or more required checks did not finish.
Never treat a partial audit as ready.
Understand the Result
Thecompletion field tells you whether every required check finished.
Complete audits score from 0 to 100. Partial audits return
completion.score: null.
Brew subtracts 20 points per blocker, 10 per error, and 3 per warning, then
floors the score at 0. Repeated targets can apply at most three penalties per
rule. Provider scores do not change the Brew score.
A complete audit stays fresh for 15 minutes. A content change or a ruleset
change makes it stale sooner.
The audit checks:
- unsubscribe content for marketing email;
- empty, malformed, placeholder, and unreachable links;
- missing, unreachable, non-image, and oversized images or GIFs;
- HTML size and the loaded size of directly referenced assets;
- subject and preview length, clarity, duplication, and placeholders;
- alt text, contrast, document language, headings, and link text;
- unsupported markup, scripts, forms, iframes, and client compatibility;
- common email practices such as a postal address, image dimensions, and text-to-image balance.
Choose the Sending Purpose
Usemarketing for newsletters, announcements, promotions, and lifecycle
email. Marketing audits check for visible unsubscribe content. The public API
defaults to marketing when you omit sendingPurpose and reports that default
in policy.source.
A missing visible marketing unsubscribe is a warning. Direct marketing sends
still insert Brew’s unsubscribe fallback before delivery.
Use transactional only for a message sent because of something the recipient
did, such as a receipt, verification email, or password reset. The unsubscribe
check is not applicable to transactional email.
In the app, Brew derives the purpose from the selected sending domain.
Transactional email creation always uses transactional. A generic export
without a sending-domain purpose uses the internal unknown purpose, skips
unsubscribe compliance, and does not insert unsubscribe content.
Continue After a Warning
Confirmed dead links or images, an image that returns non-image content, and a known loaded size above 5 MB pause the final action. You can click Continue Anyway after reviewing these findings. Brew logs the override without storing the HTML or full URLs. Authentication failures, throttling, server errors, bot protection, timeouts, and unknown resource sizes remain warnings. Brew does not report them as dead links or images. Deterministic blockers cannot be overridden. These include missing or invalid destinations, unresolved URL merge tags, invalid image sources, a missing or overlong subject, and overlong preview text.Run an Audit from MCP
If Brew is connected to your AI client, ask it to audit a saved design:“Audit the welcome email before we send it.”The agent calls
audit_email with emailId. It can also pin an
emailVersionId and set sendingPurpose to marketing or transactional.
The tool loads that exact saved version and returns the typed, capped result.
Run an Audit from the CLI
Pass the rendered HTML and the inbox copy that you plan to use:--file - to read HTML from stdin. Use --input - to read the complete
JSON request from stdin.
Run an Audit from the TypeScript SDK
{ raw: true } as the second argument to read X-Credit-Cost and the
other response headers.
Run an Audit from the API
POST /v1/emails/audit accepts raw content rather than a saved email id:
200 for both complete and partial audits. Reuse the same
idempotency key when retrying a partial result. See the generated API reference
for the complete versioned schema and transport limits. Audit calls have a
separate admission policy. See Rate Limits
for the current caller, organization, and concurrency limits.
Checks That Need Send Context
An HTML audit cannot verify SPF, DKIM, DMARC, one-click unsubscribe headers, the plaintext MIME part, consent or suppression state, or inbox placement. Use domain health, contact validation, and an inbox placement test for those checks. Before every send, transactional creation, and export, Brew runs the free content checks again on the exact email. Missing online results alone do not stop the action when an audit is missing, stale, or partial. Deterministic blockers still stop it. Marketing sends keep Brew’s unsubscribe insertion as the last safety check.Need Help?
Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:- Self-Service Tools
- Talk to Our Team
Search Documentation
Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.
ChatGPT/Claude Integration
Click “Open in ChatGPT” at the top right of any page to explore it further with ChatGPT or Claude.