Contents
Google Postmaster Tools is the essential visibility tool for Gmail delivery. It provides the spam rate data and reputation tier information that directly explains why Gmail is accepting, deferring, or filtering your messages. No production PowerMTA environment sending significant volume to Gmail should operate without Postmaster Tools enrollment and daily review. The data it provides — even with its 24-72 hour lag — is the closest you can get to Google's actual view of your sender reputation.
Setup and Domain Verification
# Step 1: Access Postmaster Tools # URL: https://postmaster.google.com # Step 2: Add your sending domain # Click "+" → enter your sending domain (e.g., yourdomain.com) # Postmaster Tools generates a TXT verification record # Step 3: Add verification TXT to DNS # yourdomain.com TXT "google-site-verification=XXXXXXXXXXXX" # Propagation: 15 minutes to 24 hours # Step 4: Click Verify in Postmaster Tools # Data starts appearing within 24-48 hours of verification # Important notes: # - Add the domain that appears in your From: address (after the @) # - For subdomains (e.g., notifications.yourdomain.com), verify the root domain # - Multiple domains can be added separately # - Data only appears when sending volume exceeds minimum threshold # - DMARC must be published for domain reputation data to appear
Key Metrics Dashboard
| Metric | What it shows | Operational Use |
|---|---|---|
| Spam Rate | % of messages Gmail users reported as spam | Primary deliverability health signal — keep below 0.07% |
| Domain Reputation | 4-tier classification of your domain | Overall sender standing — HIGH required for inbox placement |
| IP Reputation | Per-IP classification for each sending IP | Identify specific IPs with reputation problems |
| Authentication | SPF, DKIM, DMARC pass rates | Verify authentication is working for all mail streams |
| Delivery Errors | Error categories for delivery failures | Specific Gmail policy violations affecting delivery |
| Encryption | TLS encryption in transit rates | Verify STARTTLS is working (should be 99%+) |
Reputation Tiers Explained
Google Postmaster Tools shows reputation tiers for both your domain and individual sending IPs. The tiers are: HIGH, MEDIUM, LOW, and BAD. Understanding what each tier means for delivery and what drives transitions between tiers is essential for reputation management.
- HIGH — DomainMessages are strongly favored for inbox placement. This is the target state. Maintained by low spam rates, consistent engagement, strong authentication. Do not take actions that could disrupt this status.
- MEDIUM — DomainSome messages may be routed to spam. This is a warning state — take action within 24 hours. Investigate the last 3-5 days of sending for list quality issues or engagement declines. Do not increase volume when MEDIUM.
- LOW — DomainSignificant proportion of messages going to spam. Reduce volume by 70% immediately. Only send to highly engaged subscribers. Do not send any campaigns until this recovers.
- BAD — DomainMost messages filtered or rejected. This requires complete operational review. Full remediation may take 2-4 weeks of clean sending from fresh IPs before domain reputation recovers.
- HIGH — IPIndividual sending IP has good reputation. This is the target state for all IPs in your pool. Check daily during warming.
- LOW or BAD — IPSpecific IP is being filtered. Remove this IP from active sending pools immediately. Investigate what traffic has been running through this IP. Resume only after 2-4 weeks of low-volume clean sending.
Correlating with PowerMTA Accounting Logs
# Postmaster Tools → PowerMTA accounting log format correlation workflow # Step 1: Note the date of a reputation change in Postmaster Tools # e.g., Spam rate spiked on January 15 # Step 2: Subtract 48 hours to find the actual sending date # The sending that caused the spike: approximately January 13 # Step 3: Query PowerMTA accounting log for that date grep "2026-01-13" /var/log/pmta/accounting-20260113.csv | \ awk -F, '$1=="d" && $7~/gmail/ {campaigns[$9]++} END { for(c in campaigns) print campaigns[c], c }' | sort -rn # Step 4: Identify which campaigns/segments ran on January 13 # The job-id field (column 9) contains your campaign identifier # High-volume campaigns correlate with spam rate spikes # Step 5: Check that campaign's segment for list quality issues # Did it include old/inactive subscribers? # Was the open rate unusually low for that segment?
Delivery Errors Tab Analysis
| Error Category | Gmail Policy Reason | Resolution |
|---|---|---|
| Rate limit exceeded | Sending too fast for current reputation | Reduce max-smtp-out tuning; increase retry-after |
| Spam policy violation | Content or sender behavior triggered spam policies | Review content; check spam rate trend |
| Authentication failure | SPF, DKIM, or DMARC failure on some messages | Audit all sending paths for authentication gaps |
| IP reputation issue | Specific sending IPs have poor reputation | Check IP reputation tab; rotate affected IPs out |
| Bad or missing PTR | Sending IP lacks valid PTR record | Configure PTR for all sending IPs with your provider |
Postmaster Tools API (Advanced)
# Google Postmaster Tools has an API for programmatic data access
# Documentation: https://developers.google.com/gmail/postmaster
# API requires OAuth2 authentication with Gmail Postmaster Tools scope
# Access token scope: https://www.googleapis.com/auth/postmaster.readonly
# Available API methods:
# List domains: GET /v1/domains
# Get domain stats: GET /v1/domains/{domain}/trafficStats
# Get IP stats: GET /v1/domains/{domain}/ipReputations
# Python example (with google-auth library):
import google.auth
from googleapiclient.discovery import build
creds, _ = google.auth.default(scopes=['https://www.googleapis.com/auth/postmaster.readonly'])
service = build('gmailpostmastertools', 'v1', credentials=creds)
# Get spam rate for last 7 days
stats = service.domains().trafficStats().list(
parent='domains/yourdomain.com',
startDate_year=2026, startDate_month=1, startDate_day=8,
endDate_year=2026, endDate_month=1, endDate_day=15
).execute()
for stat in stats.get('trafficStats', []):
print(f"Date: {stat['name']} | Spam rate: {stat.get('spamRate', 'N/A')}")
Daily Monitoring Workflow
# Daily Postmaster Tools monitoring checklist (5 minutes): # 1. Spam Rate tab — check current reading vs 7-day trend # Action: If above 0.07% → investigate today's sending segments # 2. Domain Reputation tab — verify still HIGH # Action: If MEDIUM → immediately pause all non-transactional sends # 3. IP Reputation tab — check each sending IP # Action: Any IP below HIGH → remove from active pool; investigate # 4. Authentication tab — verify SPF/DKIM/DMARC all showing 99%+ # Action: Any below 95% → check for authentication gaps in sending paths # 5. Delivery Errors tab — look for new error categories appearing # Action: New "rate limit" errors → check accounting log high deferral rate diagnosis # Correlation with PowerMTA: # Postmaster Tools shows yesterday's data (24-72h lag) # Accounting log shows today's data (real-time) # Both should be checked — Postmaster confirms trends, accounting log shows current state
Frequently Asked Questions
Operating PowerMTA at production volume?
We manage PowerMTA environments for high-volume senders — configuration, IP warming schedule, daily reputation monitoring, and operational response. Fully managed. No self-service.

