D-03 · INBOX PLACEMENT · GMAIL
Gmail spam false positives from API sends
Authentication passes, content looks clean, yet Gmail files API-triggered mail as spam. This triage separates engagement, content, and reputation causes.
Symptom
Order confirmations and trial alerts land in Gmail spam while the same templates reach other providers’ inboxes. Authentication checks pass, no blocklistings appear, and test sends to personal Gmail accounts reproduce the problem intermittently — some users affected, others not. The pattern correlates with bulk-adjacent signals: high link counts, image-heavy layouts, and sends to stale segments dragging engagement down.
The misleading symptom is open-rate collapse. Gmail clips engagement feedback to senders, so the team debates content tweaks while the underlying driver — low per-user engagement history combined with promotional template fingerprints on transactional streams — goes unaddressed.
Cause
Gmail weighs per-sender engagement history, complaint ratios, authentication alignment, and content fingerprints together. API sends inherit the reputation of their stream: if onboarding nudges, digests, and receipts share one subdomain and IP pool, bulk engagement drags transactional placement. Content triggers amplify it — URL shorteners, mismatched link domains, heavy images with thin text, and spam-adjacent phrasing (“act now,” excessive urgency) push borderline reputations over the edge.
List quality is the quiet multiplier. Purchased or long-dormant addresses generate spam complaints and hit recycled traps, and Gmail’s bulk-sender thresholds punish complaint rates above roughly 0.3% with spam-foldering well before hard blocks. One re-engagement blast to a two-year-old list can undo months of clean transactional history.
Fix
Isolate streams immediately: transactional on its own subdomain with plain, low-link templates; marketing on a separate subdomain with full branding. Strip transactional templates to essentials — one primary link domain matching the sender, balanced text-to-image ratio, valid multipart plain-text. Register with Google Postmaster Tools and watch domain reputation, spam rate, and authentication results daily during recovery.
Suppress chronic non-engagers from bulk streams (12-month inactivity is a defensible default) and re-permission stale cohorts with a confirmed opt-in rather than a “we miss you” blast. Throttle bulk while transactional recovers, sending bulk only to the most engaged quartile until Postmaster reputation climbs back to High.
Prevention
Enforce template review for transactional streams: link-domain allowlists, image budgets, and plain-text parity checks in CI before deploy. Sunset policies run automatically, complaint feedback suppresses in real time, and bulk-sender requirements (authenticated mail, one-click unsubscribe, sub-0.3% complaints) are monitored as SLAs, not aspirations. Seed-test Gmail placement weekly with engaged and neutral profiles to catch drift before users report it.
Worked example
A project-management SaaS finds trial alerts landing in Gmail spam for roughly a third of new signups. Postmaster shows Medium reputation with a 0.4% spam rate; inspection reveals onboarding nudges and receipts sharing one subdomain, with nudges carrying heavy promotional templates. The team splits streams, strips transactional templates to one link and plain-text twins, and restricts bulk to 90-day actives.
Within three weeks spam rates fall below 0.1%, reputation returns to High, and trial-to-activated conversion rises because alerts arrive on time. The promotional templates return only after the recovery, redesigned with matching link domains and honest subject lines. Placement, the team learns, was a product metric all along — every spam-foldered alert had been a silently lost activation.