Generate a domain health report.

Roll five diagnostics into one scorecard — DNS, SSL expiry, SPF, DMARC, and domain expiration — so you catch deliverability and security gaps before they bite.

5-step workflow
25 crTotal cost per run, across 5 APIs
  • DNS Lookup5 cr
  • SSL Certificate Checker5 cr
  • SPF Validator5 cr
  • DMARC Validator5 cr
  • Domain Expiration5 cr
The problem

An expired certificate, a missing DMARC record, or a domain about to lapse rarely announces itself — until email stops landing or the site throws warnings. A scheduled check turns silent failures into alerts.

What you get

A pass/fail health report you can run on a schedule and surface in a dashboard or alert when something regresses.

The workflow

How the calls chain together

Every response below is a live sample from the actual API — nothing mocked.

01
DNS LookupGET /v1/dnslookup5 cr

Resolve DNS records

Pull the domain's A, MX, TXT, and other records as the baseline for every other check.

domainmyspace.comrecords{ … }
Sample response
{
  "domain": "myspace.com",
  "records": {
    "A": [
      "34.111.176.156"
    ],
    "MX": [
      {
        "exchange": "us-smtp-inbound-1.mimecast.com",
        "priority": 10
      },
      {
        "exchange": "us-smtp-inbound-2.mimecast.com",
        "priority": 10
      }
    ],
    "NS": [
      "ns-cloud-a4.googledomains.com",
      "ns-cloud-a1.googledomains.com",
      "ns-cloud-a2.googledomains.com",
      "ns-cloud-a3.googledomains.com"
    ],
    "SOA": {
      "nsname": "ns-cloud-a1.googledomains.com",
      "hostmaster": "cloud-dns-hostmaster.google.com",
      "serial": 2,
      "refresh": 21600,
      "retry": 3600,
      "expire": 259200,
      "minttl": 300
    },
    "TXT": [
      "cr40m536tje9on1slld9bi81bg",
      "qpdYoeakhlmAxsnmxgAVFmJgUSibqb/y+Eu6GGn8pdmLf+mFGIB3jhRAxIC5KObsPMES9MW2c+oOrpOo/lCQVw==",
      "oZ19a+EOIwWVDPJ7POj14UAGBfzk9xcJMmsTUAMUy7H82sDuVCxvw9rZqdg3znFrdTH04+49zd1djhEAt0ooiA==",
      "MS=ms89904786",
      "google-site-verification=eu-3gW1JePvsGRRCaEvH17YUOTFJNofm4lnz2Pk0LTc",
      "google-site-verification=q0iWqpcfOBclAJaCeWh83v62QQ4uCgbWObQ08p37qgU",
      "al4upe6q5cl13sg4srvfivflvg",
      "v=spf1 mx ip4:63.208.226.34 ip4:204.16.32.0/22 ip4:67.134.143.0/24 ip4:216.205.243.0/24 ip4:34.85.156.5/32 ip4:35.245.108.108/32 ip4:34.86.129.193/32 ip4:34.86.134.94/32 ip4:34.85.222.234/32 ip4:34.86.176.234/32 ip4:34.86.125.212/32 ip4:34.85.224.60/32 ip4:34.86.160.49/32 ip4:35.245.64.166/32 ip4:35.188.226.11/32 ip4:34.86.208.228/32 ip4:34.85.216.144/32 ip4:35.221.22.153/32 ip4:34.86.137.108/32 ip4:34.86.51.35/32 ip4:34.150.221.40/32 ip4:34.85.216.70/32 ip4:34.86.37.191/32 ip4:34.85.214.215/32 ip4:35.236.234.82/32 ip4:34.86.161.241/32 ip4:216.32.181.16 ip4:216.178.32.0/20 ip4:168.235.224.0/24 include:_netblocks.mimecast.com -all",
      "cj65vjpq0s1v9u7vfo020c6rel"
    ]
  }
}
passes the record set to the next step
02
SSL Certificate CheckerGET /v1/sslchecker5 cr

Inspect the certificate

Read the SSL certificate's issuer and expiry so you're never surprised by a lapse.

issuer{ … }valid_toJul 28 23:59:59 2026 GMT
Sample response
{
  "subject": {
    "C": "US",
    "ST": "California",
    "O": "eBay, Inc.",
    "CN": "ebay.com"
  },
  "issuer": {
    "C": "GB",
    "O": "Sectigo Limited",
    "CN": "Sectigo Public Server Authentication CA OV R36"
  },
  "subjectaltname": "DNS:ebay.com, DNS:befr.ebay.be, DNS:benl.ebay.be, DNS:cafr.ebay.ca, DNS:e-bay.it, DNS:ebay.at, DNS:ebay.be, DNS:ebay.ca, DNS:ebay.ch, DNS:ebay.co.uk, DNS:ebay.com.au, DNS:ebay.com.hk, DNS:ebay.com.my, DNS:ebay.com.sg, DNS:ebay.de, DNS:ebay.es, DNS:ebay.fr, DNS:ebay.ie, DNS:ebay.in, DNS:ebay.it, DNS:ebay.nl, DNS:ebay.ph, DNS:ebay.pl, DNS:ebay.us, DNS:ebay.vn, DNS:wwww.ebay.co.uk, DNS:wwww.ebay.com, DNS:wwww.ebay.com.au, DNS:wwww.ebay.de, DNS:wwww.ebay.in, DNS:wwww.ebay.it",
  "infoAccess": {
    "CA Issuers - URI": [
      "http://crt.sectigo.com/SectigoPublicServerAuthenticationCAOVR36.crt"
    ],
    "OCSP - URI": [
      "http://ocsp.sectigo.com"
    ]
  },
  "ca": false,
  "bits": 2048,
  "valid_from": "Jul 28 00:00:00 2025 GMT",
  "valid_to": "Jul 28 23:59:59 2026 GMT",
  "serialNumber": "99F408949A6416EDC3B8F5EC77B2EBE5",
  "domain": "ebay.com"
}
passes cert status to the next step
03
SPF ValidatorGET /v1/spfvalidator5 cr

Validate SPF

Confirm the SPF record exists, is valid, and has no lookup or syntax issues.

spf_validtruehas_issuesfalse
Sample response
{
  "host": "myspace.com",
  "has_spf_record": true,
  "dns_lookups_num": 9,
  "spf_record": "v=spf1 mx ip4:63.208.226.34 ip4:204.16.32.0/22 ip4:67.134.143.0/24 ip4:216.205.243.0/24 ip4:34.85.156.5/32 ip4:35.245.108.108/32 ip4:34.86.129.193/32 ip4:34.86.134.94/32 ip4:34.85.222.234/32 ip4:34.86.176.234/32 ip4:34.86.125.212/32 ip4:34.85.224.60/32 ip4:34.86.160.49/32 ip4:35.245.64.166/32 ip4:35.188.226.11/32 ip4:34.86.208.228/32 ip4:34.85.216.144/32 ip4:35.221.22.153/32 ip4:34.86.137.108/32 ip4:34.86.51.35/32 ip4:34.150.221.40/32 ip4:34.85.216.70/32 ip4:34.86.37.191/32 ip4:34.85.214.215/32 ip4:35.236.234.82/32 ip4:34.86.161.241/32 ip4:216.32.181.16 ip4:216.178.32.0/20 ip4:168.235.224.0/24 include:_netblocks.mimecast.com -all",
  "spf_records_list": [
    {
      "origin": "myspace.com",
      "record": "v=spf1 mx ip4:63.208.226.34 ip4:204.16.32.0/22 ip4:67.134.143.0/24 ip4:216.205.243.0/24 ip4:34.85.156.5/32 ip4:35.245.108.108/32 ip4:34.86.129.193/32 ip4:34.86.134.94/32 ip4:34.85.222.234/32 ip4:34.86.176.234/32 ip4:34.86.125.212/32 ip4:34.85.224.60/32 ip4:34.86.160.49/32 ip4:35.245.64.166/32 ip4:35.188.226.11/32 ip4:34.86.208.228/32 ip4:34.85.216.144/32 ip4:35.221.22.153/32 ip4:34.86.137.108/32 ip4:34.86.51.35/32 ip4:34.150.221.40/32 ip4:34.85.216.70/32 ip4:34.86.37.191/32 ip4:34.85.214.215/32 ip4:35.236.234.82/32 ip4:34.86.161.241/32 ip4:216.32.181.16 ip4:216.178.32.0/20 ip4:168.235.224.0/24 include:_netblocks.mimecast.com -all",
      "chars_num": 637,
      "use_macro": false,
      "domains": [
        "_netblocks.mimecast.com"
      ],
      "authorized_ips": {
        "ipv4": [
          "63.208.226.34",
          "204.16.32.0/22",
          "67.134.143.0/24",
          "216.205.243.0/24",
          "34.85.156.5/32",
          "35.245.108.108/32",
          "34.86.129.193/32",
          "34.86.134.94/32",
          "34.85.222.234/32",
          "34.86.176.234/32",
          "34.86.125.212/32",
          "34.85.224.60/32",
          "34.86.160.49/32",
          "35.245.64.166/32",
          "35.188.226.11/32",
          "34.86.208.228/32",
          "34.85.216.144/32",
          "35.221.22.153/32",
          "34.86.137.108/32",
          "34.86.51.35/32",
          "34.150.221.40/32",
          "34.85.216.70/32",
          "34.86.37.191/32",
          "34.85.214.215/32",
          "35.236.234.82/32",
          "34.86.161.241/32",
          "216.32.181.16",
          "216.178.32.0/20",
          "168.235.224.0/24"
        ]
      }
    },
    {
      "origin": "_netblocks.mimecast.com",
      "record": "v=spf1 include:eu._netblocks.mimecast.com include:us._netblocks.mimecast.com include:za._netblocks.mimecast.com include:de._netblocks.mimecast.com include:au._netblocks.mimecast.com include:ca._netblocks.mimecast.com include:usb._netblocks.mimecast.com ~all",
      "chars_num": 257,
      "use_macro": false,
      "domains": [
        "eu._netblocks.mimecast.com",
        "us._netblocks.mimecast.com",
        "za._netblocks.mimecast.com",
        "de._netblocks.mimecast.com",
        "au._netblocks.mimecast.com",
        "ca._netblocks.mimecast.com",
        "usb._netblocks.mimecast.com"
      ]
    },
    {
      "origin": "eu._netblocks.mimecast.com",
      "record": "v=spf1 ip4:195.130.217.0/24 ip4:91.220.42.0/24 ip4:146.101.78.0/24 ip4:207.82.80.0/24 ip4:213.167.81.0/25 ip4:193.7.207.0/25 ip4:213.167.75.0/25 ip4:185.58.85.0/24 ip4:185.58.86.0/24 ip4:193.7.206.0/25 ip4:147.28.36.0/24 ~all",
      "chars_num": 225,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "195.130.217.0/24",
          "91.220.42.0/24",
          "146.101.78.0/24",
          "207.82.80.0/24",
          "213.167.81.0/25",
          "193.7.207.0/25",
          "213.167.75.0/25",
          "185.58.85.0/24",
          "185.58.86.0/24",
          "193.7.206.0/25",
          "147.28.36.0/24"
        ]
      }
    },
    {
      "origin": "us._netblocks.mimecast.com",
      "record": "v=spf1 ip4:207.211.31.0/25 ip4:205.139.110.0/24 ip4:216.205.24.0/24 ip4:170.10.129.0/24 ip4:63.128.21.0/24 ip4:170.10.133.0/24 ip4:185.58.84.93/32 ip4:207.211.41.113/32 ip4:207.211.30.64/26 ip4:207.211.30.128/25 ip4:216.145.221.0/24 ip4:170.10.128.0/24 ip4:170.10.132.56/29 ip4:170.10.132.64/29 ~all",
      "chars_num": 299,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "207.211.31.0/25",
          "205.139.110.0/24",
          "216.205.24.0/24",
          "170.10.129.0/24",
          "63.128.21.0/24",
          "170.10.133.0/24",
          "185.58.84.93/32",
          "207.211.41.113/32",
          "207.211.30.64/26",
          "207.211.30.128/25",
          "216.145.221.0/24",
          "170.10.128.0/24",
          "170.10.132.56/29",
          "170.10.132.64/29"
        ]
      }
    },
    {
      "origin": "za._netblocks.mimecast.com",
      "record": "v=spf1 ip4:41.74.192.0/22 ip4:41.74.200.0/23 ip4:41.74.196.0/22 ip4:41.74.204.0/23 ip4:41.74.206.0/24 ~all",
      "chars_num": 106,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "41.74.192.0/22",
          "41.74.200.0/23",
          "41.74.196.0/22",
          "41.74.204.0/23",
          "41.74.206.0/24"
        ]
      }
    },
    {
      "origin": "de._netblocks.mimecast.com",
      "record": "v=spf1 ip4:51.163.158.0/24 ip4:194.104.109.0/24 ip4:194.104.111.0/24 ip4:194.104.110.21/32 ip4:194.104.110.240/28 ip4:62.140.10.21/32 ip4:62.140.7.0/24 ip4:194.104.108.240/29 ip4:194.104.108.21/32 ip4:51.163.159.0/24 ~all",
      "chars_num": 221,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "51.163.158.0/24",
          "194.104.109.0/24",
          "194.104.111.0/24",
          "194.104.110.21/32",
          "194.104.110.240/28",
          "62.140.10.21/32",
          "62.140.7.0/24",
          "194.104.108.240/29",
          "194.104.108.21/32",
          "51.163.159.0/24"
        ]
      }
    },
    {
      "origin": "au._netblocks.mimecast.com",
      "record": "v=spf1 ip4:103.13.69.0/24 ip4:124.47.150.0/24 ip4:124.47.189.0/24 ip4:103.96.23.0/24 ip4:103.96.21.0/24 ip4:180.189.28.0/24 ip4:216.145.217.0/24 ip4:103.96.22.96/28 ip4:103.96.22.22/32 ip4:103.96.20.22/32 ip4:103.96.20.96/28 ~all",
      "chars_num": 229,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "103.13.69.0/24",
          "124.47.150.0/24",
          "124.47.189.0/24",
          "103.96.23.0/24",
          "103.96.21.0/24",
          "180.189.28.0/24",
          "216.145.217.0/24",
          "103.96.22.96/28",
          "103.96.22.22/32",
          "103.96.20.22/32",
          "103.96.20.96/28"
        ]
      }
    },
    {
      "origin": "ca._netblocks.mimecast.com",
      "record": "v=spf1 ip4:170.10.145.0/24 ip4:170.10.147.0/24 ip4:170.10.144.126/32 ip4:170.10.146.126/32 ip4:170.10.144.240/29 ip4:170.10.146.240/29 ip4:216.145.216.0/24 ~all",
      "chars_num": 160,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "170.10.145.0/24",
          "170.10.147.0/24",
          "170.10.144.126/32",
          "170.10.146.126/32",
          "170.10.144.240/29",
          "170.10.146.240/29",
          "216.145.216.0/24"
        ]
      }
    },
    {
      "origin": "usb._netblocks.mimecast.com",
      "record": "v=spf1 ip4:170.10.151.0/24 ip4:170.10.153.0/24 ip4:170.10.150.240/29 ip4:170.10.152.240/29 ip4:170.10.156.0/24 ip4:170.10.157.0/24 ~all",
      "chars_num": 135,
      "use_macro": false,
      "authorized_ips": {
        "ipv4": [
          "170.10.151.0/24",
          "170.10.153.0/24",
          "170.10.150.240/29",
          "170.10.152.240/29",
          "170.10.156.0/24",
          "170.10.157.0/24"
        ]
      }
    }
  ],
  "domains_extracted": [
    "myspace.com",
    "_netblocks.mimecast.com",
    "eu._netblocks.mimecast.com",
    "us._netblocks.mimecast.com",
    "za._netblocks.mimecast.com",
    "de._netblocks.mimecast.com",
    "au._netblocks.mimecast.com",
    "ca._netblocks.mimecast.com",
    "usb._netblocks.mimecast.com"
  ],
  "authorized_ips": {
    "ipv4": [
      "63.208.226.34",
      "204.16.32.0/22",
      "67.134.143.0/24",
      "216.205.243.0/24",
      "34.85.156.5/32",
      "35.245.108.108/32",
      "34.86.129.193/32",
      "34.86.134.94/32",
      "34.85.222.234/32",
      "34.86.176.234/32",
      "34.86.125.212/32",
      "34.85.224.60/32",
      "34.86.160.49/32",
      "35.245.64.166/32",
      "35.188.226.11/32",
      "34.86.208.228/32",
      "34.85.216.144/32",
      "35.221.22.153/32",
      "34.86.137.108/32",
      "34.86.51.35/32",
      "34.150.221.40/32",
      "34.85.216.70/32",
      "34.86.37.191/32",
      "34.85.214.215/32",
      "35.236.234.82/32",
      "34.86.161.241/32",
      "216.32.181.16",
      "216.178.32.0/20",
      "168.235.224.0/24",
      "195.130.217.0/24",
      "91.220.42.0/24",
      "146.101.78.0/24",
      "207.82.80.0/24",
      "213.167.81.0/25",
      "193.7.207.0/25",
      "213.167.75.0/25",
      "185.58.85.0/24",
      "185.58.86.0/24",
      "193.7.206.0/25",
      "147.28.36.0/24",
      "207.211.31.0/25",
      "205.139.110.0/24",
      "216.205.24.0/24",
      "170.10.129.0/24",
      "63.128.21.0/24",
      "170.10.133.0/24",
      "185.58.84.93/32",
      "207.211.41.113/32",
      "207.211.30.64/26",
      "207.211.30.128/25",
      "216.145.221.0/24",
      "170.10.128.0/24",
      "170.10.132.56/29",
      "170.10.132.64/29",
      "41.74.192.0/22",
      "41.74.200.0/23",
      "41.74.196.0/22",
      "41.74.204.0/23",
      "41.74.206.0/24",
      "51.163.158.0/24",
      "194.104.109.0/24",
      "194.104.111.0/24",
      "194.104.110.21/32",
      "194.104.110.240/28",
      "62.140.10.21/32",
      "62.140.7.0/24",
      "194.104.108.240/29",
      "194.104.108.21/32",
      "51.163.159.0/24",
      "103.13.69.0/24",
      "124.47.150.0/24",
      "124.47.189.0/24",
      "103.96.23.0/24",
      "103.96.21.0/24",
      "180.189.28.0/24",
      "216.145.217.0/24",
      "103.96.22.96/28",
      "103.96.22.22/32",
      "103.96.20.22/32",
      "103.96.20.96/28",
      "170.10.145.0/24",
      "170.10.147.0/24",
      "170.10.144.126/32",
      "170.10.146.126/32",
      "170.10.144.240/29",
      "170.10.146.240/29",
      "216.145.216.0/24",
      "170.10.151.0/24",
      "170.10.153.0/24",
      "170.10.150.240/29",
      "170.10.152.240/29",
      "170.10.156.0/24",
      "170.10.157.0/24"
    ],
    "ipv6": []
  },
  "issues_found": [],
  "spf_valid": true,
  "has_issues": false,
  "macros_found": false,
  "ip_pass": false,
  "elapsed_ms": 431
}
passes sender policy to the next step
04
DMARC ValidatorGET /v1/dmarcvalidator5 cr

Validate DMARC

Check the DMARC record and policy — the difference between spoofable and protected.

hasDmarctrueprejectvalidtrue
Sample response
{
  "host": "paypal.com",
  "dmarcHost": "_dmarc.paypal.com",
  "hasDmarc": true,
  "dmarc_record": "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]",
  "rua": {
    "email": "[email protected]",
    "domain": "rua.agari.com",
    "valid": true
  },
  "ruf": {
    "email": "[email protected]",
    "domain": "ruf.agari.com",
    "valid": true
  },
  "v": "DMARC1",
  "p": "reject",
  "valid": true
}
passes auth posture to the next step
05
Domain ExpirationGET /v1/domainexpiration5 cr

Check expiration

Read the registration expiry and days remaining so a domain never lapses on your watch.

expirationStatushealthydaysToExpiration1164
Sample response
{
  "domain": "myspace.com",
  "expirationDate": "2029-02-23T05:00:00Z",
  "daysToExpiration": 1164,
  "expirationStatus": "healthy",
  "createdDate": "1996-02-22T05:00:00Z",
  "lastUpdatedDate": "2023-01-17T00:16:21Z",
  "daysSinceLastUpdate": 1064,
  "domainAgeDays": 10890,
  "domainAgeYears": 29.8
}

Recipe questions.

What to know before you wire it up.

Talk to the team
Can I run this on a schedule?
Yes — that's the intended use. Call the recipe from a cron job, a serverless function, or an automation platform daily or weekly and alert when any check regresses.
Does it work for domains I don't own?
These are all public DNS and certificate lookups, so you can monitor vendor and partner domains too — useful for supply-chain and deliverability monitoring.
What counts as a failing report?
That's your call: common triggers are an expired or soon-to-expire certificate, a missing or invalid SPF/DMARC record, or a domain within N days of expiration.

Cook this in an afternoon. Every API in this recipe shares one key, one response shape, and one bill.

Swap in your own APIs

Every step is a catalog API — mix and match freely.

Browse the catalog