benni@hamburg: ~ — zsh ● online
benni@hamburg:~$ whoami

Benjamin Dreier_

builds tiny APIs that do exactly one thing well, then stop.

← cd ../tools
benni@hamburg:~$ man spf

SPF Validator live

Looks up and parses the SPF record for a domain, breaks every mechanism into a readable list, and flags common mistakes (too many lookups, missing all, etc.).

// try it
// response
// response appears here
GET /v1/check https://spf.benjamin-dreier.de
// parameters
domain* text domain whose SPF record to check github.com
ip text IPv4/IPv6 to evaluate against the record (optional) 192.30.252.1
// example request
curl 'https://spf.benjamin-dreier.de/v1/check?domain=github.com&ip=192.30.252.1'
// example response
{
  "domain": "github.com",
  "found": true,
  "record": "v=spf1 ip4:192.30.252.0/22 include:spf.protection.outlook.com ... ~all",
  "terms": [
    { "raw": "ip4:192.30.252.0/22", "qualifier": "+", "kind": "ip4", "value": "192.30.252.0/22" },
    { "raw": "include:spf.protection.outlook.com", "qualifier": "+", "kind": "include", "value": "spf.protection.outlook.com" }
  ],
  "warnings": []
}

OpenAPI spec → — drop it into your own client or codegen.

// what is spf

The SPF Checker looks up a domain's v=spf1 record, parses every mechanism into a readable list, and flags the common mistakes that quietly break email deliverability — things like blowing past the 10-DNS-lookup limit or forgetting an all mechanism. Pass an optional IP and it evaluates whether that sender would pass.

Reach for it when mail keeps landing in spam for no obvious reason, when you're adding a new sending service (Google Workspace, Outlook, SendGrid, Mailchimp…) to an existing record, or when you just want to see what a domain actually publishes. It reads and lints SPF — it never touches your DNS.

// reading the terms
ip4 / ip6 an address or CIDR range allowed to send
include pull in another domain's SPF (counts toward the 10-lookup limit)
a / mx allow the domain's own A / MX hosts
all the catch-all at the end of the record
+ - ~ ? qualifier: pass · fail (-all) · softfail (~all) · neutral
// examples
github.com a long record chaining many includes
google.com a minimal record: one include plus ~all
microsoft.com a large multi-include record
domain=example.com&ip=1.2.3.4 add an IP to get a pass/fail evaluation
a domain with no SPF returns found: false with an explanatory error
STATUS: busy LOCATION: Hamburg, DE MAIL: hello@bendre.org FUEL: ▓▓▓▓░ energy drink