Email CAN-SPAM Checker & Unsubscribe Header Test avatar

Email CAN-SPAM Checker & Unsubscribe Header Test

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Email CAN-SPAM Checker & Unsubscribe Header Test

Email CAN-SPAM Checker & Unsubscribe Header Test

Pre-check marketing emails before sending for CAN-SPAM gaps: missing unsubscribe link or postal address, opt-out barriers and delays over 10 business days, fake RE:/FW: and alarm subjects, plus Google and Yahoo one-click List-Unsubscribe headers. Sources per finding.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Ultimate Foresight Inc

Ultimate Foresight Inc

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Share

Pre-check marketing emails before you send them for CAN-SPAM Act gaps and Google / Yahoo bulk-sender unsubscribe requirements. The Email CAN-SPAM Checker reads subject, body, footer and headers and flags missing unsubscribe links, missing postal addresses, opt-out barriers like 'log in to unsubscribe', opt-out delays over 10 business days, fake 'RE:' or 'FW:' subjects, alarm subjects, promotions inside transactional emails and missing List-Unsubscribe and one-click List-Unsubscribe-Post headers. Click Start with the prefilled example to see it work.

This is an automated screen of email content, not a legal determination. It can't check whether links work or whether recipients consented. A clean result doesn't mean an email complies. GDPR, CASL and other countries' rules aren't covered. Not legal advice; every row carries this disclaimer and a timestamp.

What does the Email CAN-SPAM Checker do?

  • ✅ Unsubscribe missing or hard to use: no opt-out link or text, or opt-outs that need a login, a fee or more than one page.
  • ✅ Opt-out delays longer than the 10 business days CAN-SPAM allows.
  • ✅ Postal address missing: street address, PO Box or private mailbox.
  • ✅ Misleading subjects: fake RE:/FW: prefixes and alarm subjects like 'your account will be closed' on promotional mail.
  • ✅ Promotions in transactional mail and a low-severity note when an ad isn't identified as one.
  • ✅ Headers: List-Unsubscribe and one-click List-Unsubscribe-Post (needed by Gmail and Yahoo for bulk senders), and from-name vs domain mismatches. Header checks only run when you supply headers.
  • ✅ Output per row: subject, commercial, promotionalContent, unsubscribeFound, postalAddressFound, riskLevel, issueCount, categoriesFlagged, issues (ruleId, severity, message, quote, sourceUrl, fixHint), checkedAt and a disclaimer.

Who is it for?

  • Email marketers and agencies checking campaigns before they go out.
  • E-commerce and SaaS teams reviewing templates and automated flows.
  • Deliverability consultants auditing many campaigns at once.
  • ESP and CRM builders adding a pre-send check through the API.

How to check marketing emails for CAN-SPAM

  1. Click Start with the prefilled example (a fake RE: sale, an email with opt-out barriers and a clean newsletter).
  2. Replace Emails with your own: subject, body (HTML or text with footer), optional fromName, fromEmail, headers and isTransactional.
  3. Or enter a Dataset ID with exported campaigns; use Field map for fields like settings.subject_line.
  4. Turn on Only save rows with findings to skip clean emails; you only pay for saved rows.
  5. Export results as CSV, Excel or JSON, or fetch them through the API.

Input example

This is the prefilled input:

{
"emails": [
{
"id": "EXAMPLE-SALE",
"subject": "RE: your order",
"body": "<p>Black Friday: 40% off everything. Shop now!</p>"
},
{
"id": "EXAMPLE-OPTOUT",
"subject": "New arrivals are here",
"body": "<p>Shop the new collection.</p><p>To unsubscribe, log in to your account. Please allow up to 30 days for removal.</p><p>Example Co, 123 Main Street, Springfield, IL 62701</p>",
"headers": {
"List-Unsubscribe": "<mailto:unsubscribe@example.com>"
}
},
{
"id": "EXAMPLE-NEWS",
"subject": "October tips from Example Co",
"fromName": "Example Co",
"fromEmail": "news@example.com",
"body": "<p>Five ways to save energy this winter.</p><p>You're receiving this because you signed up at example.com. <a href='https://example.com/u'>Unsubscribe</a> | Manage preferences</p><p>Example Co, 123 Main Street, Springfield, IL 62701</p>",
"headers": {
"List-Unsubscribe": "<https://example.com/u/one-click>",
"List-Unsubscribe-Post": "List-Unsubscribe=One-Click"
}
}
]
}

Dataset mode:

{"datasetId": "YOUR_DATASET_ID", "fieldMap": {"subject": "settings.subject_line", "body": "html"}, "onlyFlagged": true}

Output example

Real output from a run of the prefilled input on 2026-11-01 (long finding lists are shortened here; the run returns all of them):

[
{
"itemNo": 1,
"emailId": "EXAMPLE-SALE",
"title": null,
"subject": "RE: your order",
"commercial": true,
"promotionalContent": true,
"unsubscribeFound": false,
"postalAddressFound": false,
"riskLevel": "high",
"issueCount": 4,
"categoriesFlagged": [
"ad_not_identified",
"fake_reply_subject",
"postal_address_missing",
"unsubscribe_missing"
],
"issues": [
{
"ruleId": "unsubscribe_missing",
"severity": "high",
"message": "No unsubscribe or opt-out mechanism found. Commercial email must include a clear way to opt out that works for at least 30 days after sending (15 USC 7704(a)(3)).",
"quote": null,
"sourceUrl": "https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business",
"fixHint": "Add a visible 'Unsubscribe' link (and a list-unsubscribe header)."
},
{
"ruleId": "postal_address_missing",
"severity": "high",
"message": "No physical postal address found. Commercial email must include a valid postal address: a street address, a registered PO box or a registered private mailbox (15 USC 7704(a)(5)).",
"quote": null,
"sourceUrl": "https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business",
"fixHint": "Add your business postal address to the footer."
},
{
"...": "2 more findings: ad_not_identified 'No clear statement that the email is an advertisem', fake_reply_subject 'RE: your order'"
}
],
"url": null,
"checkedAt": "2026-11-01T19:35:06+00:00",
"disclaimer": "Automated keyword screening of the email content supplied against the US CAN-SPAM Act (15..."
},
{
"itemNo": 2,
"emailId": "EXAMPLE-OPTOUT",
"title": null,
"subject": "New arrivals are here",
"commercial": true,
"promotionalContent": true,
"unsubscribeFound": true,
"postalAddressFound": true,
"riskLevel": "high",
"issueCount": 4,
"categoriesFlagged": [
"ad_not_identified",
"one_click_post_header_missing",
"opt_out_delay_too_long",
"unsubscribe_barrier"
],
"issues": [
{
"ruleId": "unsubscribe_barrier",
"severity": "high",
"message": "Opting out appears to need a login, password, fee or extra information. The FTC rule bars requiring anything beyond an email address and opt-out preferences, or steps other than a reply email or a single web page (16 CFR 316.5).",
"quote": "Shop the new collection. To unsubscribe, log in to your account. Please allow up to 30...",
"sourceUrl": "https://www.ecfr.gov/current/title-16/chapter-I/subchapter-C/part-316",
"fixHint": "Let people unsubscribe from one page without signing in."
},
{
"ruleId": "opt_out_delay_too_long",
"severity": "high",
"message": "Says opt-outs may take 30 days. CAN-SPAM requires honoring opt-outs within 10 business days.",
"quote": "...bscribe, log in to your account. Please allow up to 30 days for removal. Example Co, 123 Main Street, Springfi...",
"sourceUrl": "https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business",
"fixHint": "Process unsubscribes within 10 business days (mailbox providers expect 2 days)."
},
{
"...": "2 more findings: ad_not_identified 'No clear statement that the email is an advertisem', one_click_post_header_missing 'List-Unsubscribe is present but List-Unsubscribe-P'"
}
],
"url": null,
"checkedAt": "2026-11-01T19:35:06+00:00",
"disclaimer": "Automated keyword screening of the email content supplied against the US CAN-SPAM Act (15..."
},
{
"itemNo": 3,
"emailId": "EXAMPLE-NEWS",
"title": null,
"subject": "October tips from Example Co",
"commercial": true,
"promotionalContent": false,
"unsubscribeFound": true,
"postalAddressFound": true,
"riskLevel": "none found",
"issueCount": 0,
"categoriesFlagged": [],
"issues": [],
"url": null,
"checkedAt": "2026-11-01T19:35:06+00:00",
"disclaimer": "Automated keyword screening of the email content supplied against the US CAN-SPAM Act (15..."
}
]

How much does it cost to check emails?

This Actor uses pay-per-event pricing: $0.001 per email saved plus a $0.00005 start fee per run, plus small platform usage paid by you (a few hundredths of a cent for small runs). That's about $1.00 for 1,000 emails and $10.00 for 10,000 plus usage. With Only save rows with findings on, rows without findings aren't saved or charged. You can set a maximum cost per run in the run options.

Use it through the API, integrations or AI agents

  • Run it and get results in one call: https://api.apify.com/v2/acts/ultimatemc~email-can-spam-checker/run-sync-get-dataset-items
  • Use it from AI agents through the Apify MCP server: https://mcp.apify.com?tools=ultimatemc/email-can-spam-checker
  • Schedule it after a daily scraper run, send flagged rows to Slack or email with webhooks, or connect it to Make, Zapier, n8n or Google Sheets.
  • Call it from your sending pipeline before each campaign goes out.

How it works

Checks are deterministic rules written from the FTC's CAN-SPAM compliance guide, 16 CFR 316, 15 U.S.C. 7704 and Google's and Yahoo's sender requirements, checked on 2026-11-01. HTML is converted to text, and footers, addresses and opt-out wording are matched with patterns. No AI and no external calls.

Sources:

FAQ

No, US law is opt-out. It requires honest headers and subjects, an ad disclosure, a postal address and a working opt-out honored within 10 business days.

Why are header checks skipped sometimes?

They only run when you supply headers, so body-only checks aren't flagged for missing headers.

Does it check transactional emails?

Yes, lightly. Set isTransactional to true and the checker only flags promotional content inside them.

Does it send or test emails?

No. It reads the content you supply and never sends anything.

Is it AI?

No. It's a fixed set of rules, so the same input always gives the same result.

Limitations

  • It can't click links or verify that unsubscribe actually works.
  • US law and Gmail/Yahoo sender rules only; GDPR, CASL and others aren't covered.
  • Spam-filter scoring and deliverability aren't measured.

Other tools by Ultimate Foresight

Found a false positive? Open an issue on the Issues tab with the email content and what you expected, and we'll review the rule.