Как посчитать email deliverability в SQL
Содержание:
Зачем deliverability
Можно отправить 100k писем, accepted 95k, но в inbox попало только 60k — остальное в spam. Deliverability = «дошло до inbox». Влияет на open/click rates, reputation, бизнес-результаты. Низкая deliverability часто не видна в дашбордах ESP — нужны seed-tests или Google Postmaster.
Delivered vs accepted
- Accepted: mailbox-провайдер принял письмо (после SPF/DKIM/DMARC checks).
- Delivered: попало в inbox (не spam, не promo).
В SQL обычно есть только accepted. Inbox placement — через сторонние сервисы (Inbox Monster, Litmus).
Deliverability в SQL
WITH email_stats AS (
SELECT
DATE_TRUNC('day', sent_at)::DATE AS day,
COUNT(*) AS sent,
COUNT(*) FILTER (WHERE status = 'accepted') AS accepted,
COUNT(*) FILTER (WHERE status IN ('bounced', 'rejected')) AS bounced_rejected
FROM email_events
WHERE sent_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY DATE_TRUNC('day', sent_at)
)
SELECT
day,
sent,
accepted,
bounced_rejected,
accepted::NUMERIC * 100 / NULLIF(sent, 0) AS accepted_rate_pct
FROM email_stats
ORDER BY day;Acceptance rate > 98% — здоровая reputation. < 95% — investigate.
По mailbox provider
Gmail, Yahoo, Outlook имеют разные правила:
SELECT
LOWER(SPLIT_PART(recipient_email, '@', 2)) AS mailbox_domain,
COUNT(*) AS sent,
COUNT(*) FILTER (WHERE status = 'accepted') AS accepted,
COUNT(*) FILTER (WHERE status = 'accepted')::NUMERIC * 100
/ NULLIF(COUNT(*), 0) AS accept_pct
FROM email_events
WHERE sent_at >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY LOWER(SPLIT_PART(recipient_email, '@', 2))
HAVING COUNT(*) > 100
ORDER BY accept_pct ASC
LIMIT 20;Gmail acceptance < 90% = sender reputation issue.
Inbox placement
SELECT
DATE_TRUNC('week', test_date)::DATE AS week,
AVG(inbox_rate) AS avg_inbox_pct,
AVG(spam_rate) AS avg_spam_pct
FROM seed_test_results
WHERE test_date >= CURRENT_DATE - INTERVAL '12 weeks'
GROUP BY DATE_TRUNC('week', test_date)
ORDER BY week;Seed tests — рассылка на test addresses, проверка где упало. Без них inbox placement в чистом SQL не достать.
Частые ошибки
Ошибка 1. Считать delivered = accepted. Accepted ≠ inbox. Может быть spam folder.
Ошибка 2. Считать на all sends. Marketing рассылки и transactional имеют разную deliverability. Сегментируйте.
Ошибка 3. Игнорировать SPF/DKIM/DMARC. Без правильной настройки 30-50% писем не дойдут.
Ошибка 4. Не сегментировать по domain. Gmail acceptance может быть 99%, Yahoo 70%. Investigate по domain.
Ошибка 5. Sending volume bursts. Резко выше usual sending = ESP начинает throttle. Гладкий ramping важен.
Связанные темы
- Как посчитать email bounce rate в SQL
- Как посчитать email open rate в SQL
- Как посчитать email list decay в SQL
- Как посчитать unsubscribe rate в SQL
FAQ
Acceptance vs inbox?
Acceptance — ESP принял. Inbox — попало в inbox-folder, не spam.
Какой rate нормальный?
Acceptance: 98%+. Inbox placement: 90%+ для marketing, 99% для transactional.
Как улучшить?
SPF/DKIM/DMARC, gradual warmup, list hygiene, content quality.
Что такое seed test?
Рассылка на test-mailboxes в разных провайдерах — где упало (inbox/spam/promo).
Стоит ли переходить на dedicated IP?
При > 200k sends/mo — yes. Меньше — shared IP.