Skip to content

Inbox deliverability

Inbox deliverability

How Mailivate keeps permissioned campaigns out of spam, and what you still need to do.

Mailivate is built for permissioned email: newsletters, promotions, and automations to people who asked to hear from you. Inbox placement is decided by Gmail, Outlook, and Yahoo — no ESP can guarantee Primary. This page is what we do, and what you control.

What Mailivate does

  • Separate sending paths. Campaigns and automations go out on the marketing plane. Receipts and password resets stay on the transactional plane so a campaign never burns app mail.
  • Authentication. Each marketing subdomain must publish SPF, DKIM, and DMARC (p=none is enough). Verify fails without DMARC.
  • Google Postmaster. Paste the Postmaster verification token on the domain so we can publish the TXT. Enroll the domain at postmaster.google.com — that is Gmail’s spam-rate dashboard.
  • Aligned tracking. CNAME track.your-marketing-domain to Mailivate so opens and clicks are not on mailivate.com.
  • One-click unsubscribe. Every marketing send includes List-Unsubscribe headers and a visible Unsubscribe link. Honor happens immediately.
  • Physical address in the email. Your workspace mailing address is added to the footer of live campaign and automation mail. That is a CAN-SPAM requirement, not just a send checklist.
  • List identity. Marketing messages include a List-Id so Gmail can tell one list from another.
  • Automatic pause. If a sending campaign’s hard-bounce rate crosses 2% after 100 sends, or spam complaints cross 0.08% with at least two complaints, Mailivate pauses remaining delivery and shows the reason on the campaign summary. Resume only after you clean the list.

What you still need to do

  • Send only to people who opted in. Do not import purchased, scraped, or rented lists. See Importing subscribers.
  • Keep double opt-in on for new lists (the default).
  • Keep the From address on your verified marketing subdomain (hello@news.acme.com, not the root website domain).
  • Do not import role addresses (info@, admin@), disposable mail, or obvious typos (gamil.com). Mailivate rejects those at import, API subscribe, and the add-subscriber form. Failed import rows include the reason. Production also rejects domains with no MX or A record.
  • Watch complaint and bounce rates on the dashboard. Gmail expects user-reported spam under 0.1% and never at 0.3%.

If a campaign pauses

  1. Open the campaign Summary. The pause reason explains whether bounces or complaints tripped the limit.
  2. Export or review bounces and suppressions. Do not resend to those addresses.
  3. Fix the list (or the offer) before Resume sending. Remaining recipients are still queued.

Transactional API mail is not auto-paused this way.

Complaint loops

Auto-pause for spam only fires when we actually receive a complaint. Operators enroll Yahoo CFL and Microsoft JMRP, then forward ARF to POST /feedback-loop (X-Mailivate-Fbl-Secret). JSON { "email": "user@gmail.com" } or a raw ARF body both work. Return-Path bounce+<send-uuid>@ binds the complaint to the exact send. Kumo Feedback log records are mapped the same way.

Gmail has no CFL. Enroll every marketing domain in Google Postmaster Tools after publishing the Postmaster TXT from Settings. Operator steps live in docs/ops/postmaster-and-feedback-loops.md.

Placement seeds

Operators can add seed addresses with php artisan mailivate:placement-seed you@gmail.com (or MAILIVATE_PLACEMENT_SEEDS). Each campaign send also delivers a copy to those inboxes so you can see Primary vs Promotions vs Spam. Seed copies are excluded from bounce/complaint auto-pause math.

What Mailivate does not do

We do not send campaigns through your personal Gmail or Outlook inbox, and we do not run a “warmup network” that fakes opens and replies. Those tactics are for 1:1 outreach tools and fight Gmail’s rules for bulk senders.

Confirm