SyncGTM now works inside Claude and ChatGPT. Learn more
SyncGTM logoSyncGTM logo
  • Platform

    • Find Leads
    • Enrich Data
    • Intent Signals
    • Integrations
    • GTM MCP

    Person Data

    • Work Email
    • Mobile Number
    • Personal Email
    • Experience
    • Verify Emails
    View all →

    Company

    • Techstack
    • Website Traffic
    • Revenue
    • Google Ads
    • LinkedIn Posts
    View all →

    Person signals

    • Job Change
    • Promotions
    • Leadership Change
    • LinkedIn Posts
    • WhatsApp Validation
    View all →

    Account signals

    • Headcount Growth
    • Job Openings
    • Techstack Change
    • Funding
    • Product Launched
    View all →
    • Sales
    • RevOps
    • Agency
    • Startups
    • GTM Engineers
    • CRM Enrichment
    • Account Research
    • Inbound Automation
    • Outbound Automation
    • Monitor Signals
  • Fractional GTMe
  • Pricing
  • Learn

    • Blog
    • Docs
    • Templates
    • Reports
    • Case Studies
    • Webinars
    • Video Tutorials
    • Product Tour

    Resource

    • Affiliate
    • Free Tools
    • Credit Estimator
    • Compare Coverage
    • Agency Directory
    • Product Updates
    • Roadmap
    • Join community

    AI

    • GTM agents
    • GTM skills
  • Login
  • vsClay logoClay
  • Platform

    • Find Leads
    • Enrich Data
    • Intent Signals
    • Integrations
    • GTM MCP

    Person Data

    • Work Email
    • Mobile Number
    • Personal Email
    • Experience
    • Verify Emails
    • View all →

    Company

    • Techstack
    • Website Traffic
    • Revenue
    • Google Ads
    • LinkedIn Posts
    • View all →

    Person signals

    • Job Change
    • Promotions
    • Leadership Change
    • LinkedIn Posts
    • WhatsApp Validation
    • View all →

    Account signals

    • Headcount Growth
    • Job Openings
    • Techstack Change
    • Funding
    • Product Launched
    • View all →
    • Sales
    • RevOps
    • Agency
    • Startups
    • GTM Engineers
    • CRM Enrichment
    • Account Research
    • Inbound Automation
    • Outbound Automation
    • Monitor Signals
  • Fractional GTMe
  • Pricing
    • Blog
    • Docs
    • Templates
    • Reports
    • Case Studies
    • Webinars
    • Video Tutorials
    • Product Tour

    Resource

    • Affiliate
    • Free Tools
    • Credit Estimator
    • Compare Coverage
    • Agency Directory
    • Product Updates
    • Roadmap
    • Join community

    AI

    • GTM agents
    • GTM skills
  • Login
  • vsClay logoClay
SyncGTM logo
support@syncgtm.com
Built withfrom&

Product

  • Lead Finder
  • Data enrichment
  • Intent Signals
  • Integrations
  • GTM MCP
  • Enrichment CLIsoon

Use Cases

  • CRM Enrichment
  • Account Research
  • Inbound Automation
  • Outbound Automation
  • Monitor Signals

Person Data

  • Work Email
  • Mobile Number
  • Personal Email
  • Experience
  • Verify Emails
  • View all →

Company Data

  • Techstack
  • Website Traffic
  • Job Listing
  • Google Ads
  • LinkedIn Posts
  • View all →

Person Signals

  • Job Change
  • Promotions
  • Leadership Change
  • LinkedIn Posts
  • WhatsApp Validation
  • View all →

Account Signals

  • Headcount Growth
  • Job Openings
  • Techstack Change
  • Funding
  • Product Launched
  • View all →

Solutions

  • Sales
  • Agency
  • RevOps
  • Startups
  • GTM Engineers
  • Fractional GTMe

Company

  • Contact
  • Affiliate
  • Sign Up
  • Login
  • Terms
  • Affiliate Terms
  • Privacy

Resources

  • Pricing
  • Credit Estimator
  • Templates
  • Blog
  • Case Studies
  • Webinars
  • Video Tutorials
  • Slack Community
  • Docs
  • Agency Directory
  • Free Tools
  • Product Updates
  • Roadmap

Copyright ©2026 SyncGTM

Featured on SaaSBison
SpamAssassin score explained — rules, testing, and fixes for cold email

In this Blog

  • TL;DR
  • What Is a SpamAssassin Score?
  • How SpamAssassin Scoring Works
  • What Is a Good SpamAssassin Score?
  • The Rules That Add Points
  • Authentication Rules
  • Header and Copy Rules
  • HTML and Formatting Rules
  • Link and Reputation Rules
  • Bayes Rules
  • How to Test a Cold Email
  • How to Read the Report
  • How to Lower Your SpamAssassin Score
  • A Low Score Is Not Inbox Placement
  • Pre-Send Checklist
  • FAQ
  • Conclusion

SpamAssassin Score Explained: How to Lower It in 2026

Kushal Magar

By Kushal Magar · October 21, 2026 · 12 min read

Key Takeaway

A SpamAssassin score is the sum of points from hundreds of rules, and 5.0 is the default spam threshold. Cold emails usually score high for three fixable reasons: broken authentication, HTML-only or image-heavy formatting, and links on bad-reputation domains. Test the real email from the real mailbox, fix the highest-point rules first, and aim for 2.0 or lower.

TL;DR

  • A SpamAssassin score is the total of points added (or subtracted) by every rule an email triggers. The default spam threshold is 5.0.
  • Aim for 2.0 or lower on cold email. Zero or negative is excellent.
  • The biggest point sources for outbound: failed SPF/DMARC, missing headers, HTML-only or image-heavy bodies, and links on blocklisted domains (URIBL_DBL_SPAM alone adds 2.5).
  • Test the exact email from the exact mailbox you will send from, using mail-tester, Postmark Spamcheck, or spamassassin -t.
  • Fix the rules with the highest points first, then retest. A low score helps, but it does not guarantee Gmail or Outlook inbox placement.

What Is a SpamAssassin Score?

A SpamAssassin score is a number that tells you how spammy an email looks to Apache SpamAssassin, the open-source spam filter used by many corporate gateways and hosting providers. Higher means more likely spam.

The score is not a single judgment. It is the sum of many small tests, each worth a fixed number of points.

This guide is for SDRs, founders, and RevOps teams running cold email. It covers how the math works, the real rule names that hit outbound emails, how to test a draft, and the fixes that bring the number down before launch.

Every rule name and point value below comes from the official SpamAssassin rule files and documentation, not guesswork.

How SpamAssassin Scoring Works

SpamAssassin runs every incoming email through hundreds of rules that inspect headers, body text, HTML, links, and the sending IP. Each rule that matches adds its score to the total.

If the total reaches the required_score, the email is tagged as spam. The official configuration docs set the default at 5.0 and describe it as "quite aggressive", suggesting ISPs use 8.0 or 10.0.

Positive and negative points

Most rules add points. Some subtract them, because they signal a legitimate sender.

A valid DKIM signature from your own domain (DKIM_VALID_AU) subtracts 0.1. A sending IP on a trusted allowlist (RCVD_IN_DNSWL_HI) subtracts 5.

Four score sets per rule

Many rules list four scores, not one. The value that applies depends on whether the server runs Bayes (learned filtering) and network tests (DNS blocklists, URI lookups).

  • Set 0: no Bayes, no network tests
  • Set 1: network tests only
  • Set 2: Bayes only
  • Set 3: Bayes and network tests

That is why the same email can score 1.8 in one tester and 3.1 in another. Always read the rule list, not just the total.

What Is a Good SpamAssassin Score?

A good SpamAssassin score for cold email is 2.0 or lower. That leaves a 3-point buffer under the default threshold for gateways that are stricter than default.

ScoreWhat it meansAction
0 or belowTrust signals outweigh spam signalsShip it
0.1 to 2.0Minor rules fired, usually harmlessShip it, fix easy wins
2.1 to 4.9Passes default, fails stricter gatewaysFix before launch
5.0 and upTagged as spam on a default installDo not send

The Rules That Add Points

The rules below are the ones cold emails trip most often. Scores come from SpamAssassin's 50_scores.cf rule file and, where marked, the published 3.3.x test table.

Where a rule has four values, we show the range. Rule updates via sa-update can shift these, so treat them as weights, not constants.

Authentication Rules

Authentication failures are the most common reason a new outbound domain scores badly. They are also the easiest to fix.

RuleFires whenPoints
DMARC_REJECTDMARC fails and your policy is p=rejectup to 1.797
DMARC_QUARDMARC fails and your policy is p=quarantineup to 1.198
SPF_SOFTFAILSending server not in SPF record (~all)up to 0.972
SPF_FAILSending server not in SPF record (-all)up to 0.919
DMARC_NONEDMARC fails and your policy is p=noneup to 0.898
DKIM_INVALIDDKIM signature present but broken0.1
DKIM_VALID / DKIM_VALID_AUValid DKIM / valid DKIM from the From domain-0.1 each
SPF_PASS / DMARC_PASSAuthentication passes-0.001 each

Notice the asymmetry. Passing authentication earns tiny credits, while failing it costs close to 2 points.

A misaligned DKIM key plus a softfailing SPF record can put you at 2.7 points before SpamAssassin reads a word of your copy. Our Gmail DKIM setup guide walks through the fix for Google Workspace.

Header and Copy Rules

These rules catch emails sent by scripts that skip standard headers, and copy patterns lifted from old spam.

RuleFires whenPoints
MISSING_DATENo Date header1.360 to 2.739
MISSING_HEADERSMissing To: header0.915 to 1.207
MISSING_MIDNo Message-ID header0.140 to 1.199
DEAR_SOMETHING (3.3.x)Body contains "Dear (something)"1.731 to 1.999
SUBJ_ALL_CAPS (3.3.x)Subject line is all capitals0.518 to 1.625

"Dear Sir" openers cost almost 2 points on their own. A missing Date header, common with homemade SMTP scripts, costs up to 2.7.

HTML and Formatting Rules

Formatting rules punish emails that look like newsletters or image ads. Cold email built in a heavy HTML template trips several at once.

RuleFires whenPoints
MPART_ALT_DIFF (3.3.x)HTML and plain-text parts say different things0.595 to 2.246
HTML_IMAGE_RATIO_02 (3.3.x)Low ratio of text to image area0.437 to 2.199
HTML_IMAGE_ONLY_08Images with only 400 to 800 bytes of words0.585 to 1.845
HTML_FONT_LOW_CONTRAST (3.3.x)Font color close to background (hidden text)up to 0.786
MIME_HTML_ONLYOnly an HTML part, no plain-text part0.1 (trunk), up to 2.199 in 3.3.x
HTML_MESSAGEAny HTML in the message0.001

HTML itself is nearly free (0.001). The penalty comes from what you do with it: image-heavy layouts, hidden text, and plain-text parts that do not match the HTML.

Link and Reputation Rules

Network rules check your links and sending IP against public blocklists. These carry the heaviest single penalties a cold email can hit.

RuleFires whenPoints
RCVD_IN_PBLSent from an IP in Spamhaus PBL (residential or dynamic range)3.335 to 3.558
URI_HEX (3.3.x)Link hostname has a long hex string1.122 to 2.800
RCVD_IN_SBLRelay listed in Spamhaus SBL0.141 to 2.596
URIBL_DBL_SPAMLink domain listed in Spamhaus DBL2.5
URIBL_ABUSE_SURBLLink domain on the SURBL abuse list1.250 to 1.948
URIBL_BLACKLink domain on the URIBL black list1.7
NORMAL_HTTP_TO_IP (3.3.x)Link uses a raw IP address instead of a domainup to 0.795
RCVD_IN_DNSWL_HISending IP is highly trusted on DNSWL-5

One bad link can undo everything else. If your tracking domain or a linked page sits on Spamhaus DBL, that is 2.5 points for a single URL.

You can look up any domain or IP for free on Spamhaus's lookup tool.

Bayes Rules

Bayes rules come from a filter that learns from mail the server has already classified. You cannot see its training data, but you can see the verdict.

  • BAYES_99: 99 to 100% spam probability, worth 3.5 to 3.8 points
  • BAYES_999: stacks on BAYES_99 for an extra 0.2
  • BAYES_50: 40 to 60% probability, worth 0.8 to 2.0
  • BAYES_00: 0 to 1% probability, subtracts 1.5 to 1.9

A BAYES_99 hit usually means your copy reads like templated mass outreach the server has seen before. Rewriting the first lines and cutting stock phrases is the fix.

How to Test a Cold Email

To test a cold email's SpamAssassin score, send the final copy from the exact mailbox and sending tool you will use, to a tester address. Pasting copy into a web form misses every header and authentication rule.

Option 1: mail-tester

mail-tester gives you a one-time address. Send to it, click check, and open the SpamAssassin section to see each rule that fired.

It also checks SPF, DKIM, DMARC, and blocklists in the same report. The free tier is limited to a few tests per day.

Option 2: Postmark Spamcheck

Postmark Spamcheck is a free JSON API that returns a spam score for a raw email. Paste the full message source, headers included.

It suits teams that want to script a check into their send workflow.

Option 3: Run SpamAssassin yourself

On Linux or macOS, install SpamAssassin, save the received email as a .eml file, and run it in test mode. This gives you the most control and the full rule report.

sa-update                       # pull the latest rules
spamassassin -t < message.eml   # score and print the report
spamassassin -D -t < message.eml 2>&1 | less   # debug output

For a broader view that includes Gmail and Outlook inbox placement, see our roundup of email deliverability test tools.

Testing rules that matter

  • Fill in every merge field. Unfilled {{firstName}} tags change the body and the score.
  • Include your signature, tracking domain, and unsubscribe line exactly as they will ship.
  • Test each step of the sequence, not just email one. Follow-ups often carry different links.
  • Retest after every DNS change, and wait for propagation first.

How to Read the Report

SpamAssassin writes its verdict into the email headers. The X-Spam-Status header shows the total, the threshold, and every rule that fired.

X-Spam-Status: No, score=3.4 required=5.0
  tests=DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,
  HTML_IMAGE_ONLY_08,MIME_HTML_ONLY,MISSING_MID,
  SPF_SOFTFAIL,URIBL_BLOCKED autolearn=no

Read it in three passes. First, the total versus the threshold. Second, any authentication rule (SPF, DKIM, DMARC). Third, the highest-point content rules.

In the example above, the fix order is SPF_SOFTFAIL (DNS), then MISSING_MID (sending method), then the image-only HTML (template). URIBL_BLOCKEDscores 0.001 and only means the tester's DNS resolver was rate-limited by URIBL, so ignore it.

How to Lower Your SpamAssassin Score

To lower your SpamAssassin score, fix the rules with the most points first. These eight fixes cover nearly every rule a cold email trips.

1. Fix SPF, DKIM, and DMARC

Add every sending service to one SPF record and keep it under 10 DNS lookups. Sign with DKIM on your own domain so DKIM_VALID_AU fires, and publish a DMARC record that passes.

Google requires all three for bulk senders under its email sender guidelines, so this fix pays off beyond SpamAssassin.

2. Send through a real mailbox, not a raw script

Google Workspace, Microsoft 365, and proper sending tools add Date and Message-ID headers automatically. Homemade SMTP scripts often skip them and pay up to 2.7 points for MISSING_DATE.

If you connect a tool over SMTP, use the right settings. Our Office 365 SMTP settings guide covers Microsoft 365.

3. Use plain text or matching multipart

Cold email works best as near-plain text. If you send HTML, include a plain-text part with the same words, so MIME_HTML_ONLY and MPART_ALT_DIFF do not fire.

4. Drop images and hidden text

A cold email does not need a banner, logo, or image signature. Image-heavy bodies trigger HTML_IMAGE_ONLY_* and HTML_IMAGE_RATIO_* rules.

Never use white or near-white text for preheaders or keyword stuffing. HTML_FONT_LOW_CONTRAST exists to catch it.

5. Clean up every link

  • Keep to one or two links per email, on your own domain.
  • Set up a custom tracking domain instead of a shared one, or turn link tracking off.
  • Skip public URL shorteners and raw IP links.
  • Check each linked domain on Spamhaus before launch.

6. Rewrite spam-pattern copy

Remove "Dear Sir/Madam" openers, all-caps subject lines, and money or urgency phrases. Write like one person emailing another.

Run your draft through a spam word checker to catch trigger phrases before you test.

7. Send from clean IP space

RCVD_IN_PBL (up to 3.558 points) means mail left from a residential or dynamic IP. Hosted mailboxes from a real provider fix this.

See our pick of the best email hosting for cold email if you are choosing a provider.

8. Warm up and retest

New domains have no reputation, which hurts reputation-based filters even when SpamAssassin scores well. Follow an email domain warmup plan, then retest the full sequence before launch.

A Low Score Is Not Inbox Placement

A low SpamAssassin score means your email passes one filter's rule-based checks. It does not mean Gmail or Outlook will inbox it.

Gmail and Microsoft weigh domain reputation, complaint rates, and bounce rates heavily. A campaign with a 0.5 score and a 9% bounce rate will still burn a domain.

That is why list quality belongs in the same pre-send check. SyncGTM verifies each address through a multi-provider waterfall at 0.1 credits per email, so you only send to inboxes that exist. See SyncGTM pricing or compare options in our free email verifier roundup.

Pre-Send Checklist

Run this before every new campaign or new sending domain.

  1. SPF, DKIM (own domain), and DMARC all pass in the test report.
  2. SpamAssassin score is 2.0 or lower on every sequence step.
  3. No MISSING_* header rules fired.
  4. Plain text, or HTML with a matching plain-text part. No images.
  5. One or two links, none on Spamhaus DBL, SURBL, or URIBL.
  6. No BAYES_99 hit. If it fires, rewrite the opening lines.
  7. List verified, with bounce risk removed.
  8. Domain warmed up for at least two to three weeks.

Conclusion

Your SpamAssassin score is a sum you can audit line by line. Default spam is 5.0, and cold email should sit at 2.0 or lower.

The big point sources are predictable: failed authentication, missing headers, image-heavy HTML, and blocklisted links. Fix them in that order, retest from your real mailbox, and pair the clean score with a verified list.

Ready to clean the list side? Try SyncGTM free and verify every contact before your next campaign goes out.


Frequently Asked Questions

Get started free — no credit card

A clean SpamAssassin score means nothing if half your list bounces. SyncGTM verifies every email through a multi-provider waterfall before you send.

Share Article


Ask AI

Send to inboxes that exist

SyncGTM finds and verifies B2B emails across 50+ data providers, so your low-spam-score campaign does not get wrecked by bounces.