Invoices sit in an uncomfortable deliverability spot: they look identical to the scam invoices that flood every business inbox, they carry a PDF attachment which pushes the message toward heavier spam scrutiny, and they are usually sent by a third-party billing tool (Xero, QuickBooks, Harvest, FreshBooks, Stripe Invoicing) on your behalf without any authentication on your domain.
The result: your invoice lands in the customer's junk folder, they do not see it, payment is late. Your accounts receivable team chases. The customer says "we never got it". Everybody blames email, nobody fixes it.
Why invoices get filtered
- PDF attachment with generic name.
invoice-123.pdfis the most scammed filename in existence. Corporate spam filters apply elevated scrutiny to any PDF attached to mail from an unknown sender. - Monetary-amount subject line. "Invoice for $1,250 from Acme" reads like phishing to any filter trained on wire-fraud campaigns. Trailing amount and invoice number combined is an explicit signal.
- Billing tool sends as you, without your DKIM. Xero sends from
messaging.xero.comwith their DKIM, but shows your email as From. That mismatch fails DMARC alignment and strict corporate filters reject on that basis. - Unknown recipient, new relationship. First invoice to a new customer has zero per-recipient engagement history. The first invoice is the highest-risk delivery in the entire customer relationship.
Every day an invoice sits in spam is a day added to your DSO (days sales outstanding). At 15% spam placement on $500k monthly invoicing, you are looking at roughly $75k/month of cash perpetually 5-10 days late. That is free working capital you are gifting your customers' banks.
Measuring invoice placement
The challenge: you cannot easily test invoice placement without sending real invoices. Two workable patterns:
- Seed customer accounts. Create a dummy customer with seed email addresses at Gmail, Outlook, Yahoo. Issue real test invoices through your billing system.
- BCC seed on production invoices. In your billing workflow, BCC a seed address on every outgoing invoice. Placement monitoring picks up where each real invoice landed. Warning: BCCs may not fully replicate folder placement for the actual recipient, but they give directional signal.
# Example: instrument Stripe Invoicing with a seed BCC
# (via webhook intercept before mail goes out)
POST /webhooks/stripe/invoice.sent
{
"invoice_id": "in_1234",
"customer_email": "customer@acme.com",
"amount": 125000
}
# Your handler:
if should_seed_check(invoice_id):
email.send_bcc(
to=ORIGINAL_RECIPIENT,
bcc=["seed-gmail-corp@check.live-direct-marketing.online"],
template=INVOICE_TEMPLATE_ID
)Authentication fixes
Invoice mail is where DMARC alignment failures bite hardest. Corporate filters at financial firms and law firms (where you want to get paid) enforce DMARC strictly. Checklist:
- Publish SPF, DKIM, DMARC on your invoicing domain. If your billing tool sends from
billing.yourcompany.com, make sure all three are configured specifically for that subdomain. - Authenticate the billing tool explicitly. Xero, QuickBooks, Stripe all have instructions for adding their sending servers to your SPF and publishing their DKIM selector as a CNAME on your DNS.
- DMARC
adkim=r(relaxed) to start. Billing tools often sign with their own d= while using your Friendly-From. Strict alignment will fail. Use relaxed, then monitor reports. - Check DMARC reports for rejects.
rua=mailto:dmarc@yourcompany.comand parse the weekly aggregates. Any failure you see on invoice mail is a customer who likely never got their bill.
Example SPF for company using Stripe Invoicing
billing.yourcompany.com. IN TXT "v=spf1 include:stripe.com include:_spf.google.com ~all"
stripe._domainkey.billing.yourcompany.com. IN CNAME stripe.dkim.stripe.com.
_dmarc.billing.yourcompany.com. IN TXT "v=DMARC1; p=quarantine; adkim=r; aspf=r; rua=mailto:dmarc@yourcompany.com; pct=100"Template hygiene for invoice mail
- Subject line without currency symbols. "Your November invoice from Acme" beats "Invoice #1234 — $1,250.00 due".
- HTML body with invoice text duplicated. Do not rely solely on the PDF. Include line items, total, due date and payment link in the email body. Filters see readable content instead of just an attachment and binary payload.
- Named PDF filename.
Acme-Invoice-2026-11-CustomerCo.pdfreads better thaninvoice.pdf. Makes attachments look less generic. - Reply-to goes to a human.
billing@yourcompany.comshould be monitored and able to answer "where's the invoice for last month?" type questions.
"Click here to pay" linking to a hosted invoice page (Stripe hosted invoice, Bill.com link, etc) is much faster and more reliable than a PDF that the customer has to download and process through their AP system. It also gives you click-level engagement data which feeds back into placement.
The finance team's placement dashboard
Most finance teams have no visibility into email placement at all. The data they need, in one view:
- Current placement % for invoice mail at top customer domains.
- DSO broken down by placement bucket (inbox / spam).
- Most recent DMARC failure report.
- Customers who have "never received" an invoice in the last 90 days.
This is the signal to act on. If placement at a major customer domain drops, call it out before the customer does.
Automate a weekly placement check for invoice mail. Alert finance if placement drops below threshold. Ship the fix before the late payments show up.