Email authentication

Google Workspace setup checker

Check a domain’s MX, SPF and DKIM against the exact values Google Workspace documents.

Free, no accountLive check

Try

Result

The verdict appears here once you press Check Workspace records.

What this is

This Google Workspace setup checker reads what a domain actually publishes and holds it against the values in Google’s own setup pages: the one MX host, the one SPF include, and the DKIM selector Google calls the default - rather than only telling you that some SPF record exists.

Workspace mail rests on three published values. Two are the same for every customer Google has: the MX host mail is delivered to, and the SPF include that authorises Google’s servers to send. The third, the DKIM public key, is generated for your domain and published at a selector whose name Google chooses for you.

That is what makes a provider-aware check worth doing. A generic checker can tell you an SPF record is syntactically fine while it authorises nobody at Google, and that a DKIM key exists at some selector that Workspace will never sign with. Both read as green and neither is what Google asked for.

How to read the result

The table pairs each of Google’s documented values with what this domain publishes, so three rows are most of the answer. A row reading "missing" is a record to add; a row reading "present, through another include" works but spends one more of the ten DNS lookups SPF allows than naming Google directly would.

Findings run from the worst down. The Workspace-specific ones come first, then the full SPF, DKIM and DMARC detail each generic checker would give, so a record that is present but faulty - a key under 1024 bits, a chain over the lookup limit, a DMARC policy still set to none - is still named.

This checker only covers Google Workspace’s own fixed SPF include and DKIM selector. For how SPF, DKIM and DMARC fit together, what order to fix them in, and what to do once one fails, see our guide How SPF, DKIM and DMARC work together, and what to do when one fails.

Common mistakes

What goes wrong most often, and how to tell.

  • Changing the MX records and stopping therePointing MX at Google moves where mail arrives. It authorises nothing: until the SPF include is added and the DKIM key is published and switched on, mail sent from the new Workspace account is unauthenticated, which is the state most likely to be quietly filtered.
  • Adding a second SPF record for Google beside the old oneTwo "v=spf1" TXT records on one domain is a permanent error that makes a receiver ignore both, so the domain ends up worse off than before Google was added. The include belongs inside the record that is already there.
  • Publishing the DKIM key and never clicking Start authenticationGoogle treats publishing the record and turning signing on as two separate actions, in that order, and the second one is easy to miss once the DNS change has been made. The key then sits there, correct and unused, and no outgoing message is signed.
  • Leaving the previous provider’s include in SPF after the moveA migration that adds Google’s include without removing the old host’s leaves a service nobody uses any more authorised to send as the domain, and spends a DNS lookup on it. Both are worth clearing out in the same change.

Questions

What people ask about this tool.

  • Yes. The selector is a prefix you pick when the key is generated, and Google only calls "google" the default and recommended one. This page looks at google._domainkey, so a domain that chose its own prefix reads as having no key here even though it is signing mail correctly - check it directly with the DKIM checker instead.
  • Because the two records answer different questions. MX says where mail addressed to the domain is delivered; SPF says which servers are allowed to send as it. A domain can receive every message through Workspace while authorising nobody at Google to send, which is exactly what a missing _spf.google.com include produces.
  • No. Google has you publish the TXT record and then go back to the Admin console and click Start authentication; until you do, the status stays off and outgoing mail is not signed. Nothing visible in DNS distinguishes a domain that has done that from one that has not.
  • Yes. Google documents a single smtp.google.com host at priority 1 now, and says older domains might have MX values starting with aspmx which still work. This checker recognises both sets and does not report the older one as a fault.

Sources

Every fixed value here comes from the provider’s own documentation. These pages change, so each says the day it was last read.

Use it from the API

The same check, as one request.

Request
curl -X POST https://resellerhq.com/api/tools/google-workspace-setup-checker \
  -H "Content-Type: application/json" \
  -d '{"domain":"workspace.example"}'
Response
{
  "tool": "google-workspace-setup-checker",
  "input": {
    "domain": "workspace.example"
  },
  "result": {
    "verdict": {
      "tone": "success",
      "headline": "workspace.example is set up the way Google documents",
      "summary": "Google’s MX host, the _spf.google.com include and a key at \"google\" are all published."
    },
    "findings": [
      {
        "id": "dkim-signing-may-be-off",
        "severity": "info",
        "title": "Publishing the key is not the last step",
        "detail": "Google’s DKIM page has you return to the Admin console and click Start authentication once the record is live; until that is done the status stays off and outgoing mail carries no signature. Nothing in DNS shows which side of that step a domain is on."
      },
      {
        "id": "dkim-key-type-recognised",
        "severity": "info",
        "title": "DKIM: 2048-bit RSA key",
        "detail": "The modulus decoded from \"p=\" is 2048 bits, read directly from the DER-encoded key rather than estimated from its length."
      },
      {
        "id": "mail-routed-to-google",
        "severity": "pass",
        "title": "Mail for this domain is delivered by Google",
        "detail": "1 smtp.google.com - a Google host, so the SPF and DKIM values below are the ones this domain should be publishing. Google now documents a single smtp.google.com record; the older aspmx hosts are recognised here too, because they still work."
      },
      {
        "id": "spf-google-include-present",
        "severity": "pass",
        "title": "SPF authorises Google to send",
        "detail": "The record at workspace.example includes _spf.google.com, which is the include Google’s own SPF page documents for a Workspace sender."
      },
      {
        "id": "dkim-default-selector-found",
        "severity": "pass",
        "title": "A DKIM key is at Google’s default selector",
        "detail": "google._domainkey.workspace.example publishes a key. \"google\" is the default prefix selector Google’s own DKIM page recommends, so a domain set up by following those instructions has its key exactly here."
      },
      {
        "id": "spf-spf-record-found",
        "severity": "pass",
        "title": "SPF: SPF record found",
        "detail": "workspace.example publishes \"v=spf1 include:_spf.google.com ~all\", using 1 of the 10 DNS lookups RFC 7208 §4.6.4 allows."
      },
      {
        "id": "spf-softfail-all",
        "severity": "pass",
        "title": "SPF: \"~all\" soft-fails unlisted senders",
        "detail": "A soft fail tells a receiver an unlisted sender probably is not legitimate without demanding the message be rejected outright - the usual setting while confirming a record is complete, before tightening it to \"-all\"."
      },
      {
        "id": "dkim-dkim-record-found",
        "severity": "pass",
        "title": "DKIM: DKIM key published at selector \"google\"",
        "detail": "google._domainkey.workspace.example publishes a rsa key."
      },
      {
        "id": "dmarc-dmarc-record-found",
        "severity": "pass",
        "title": "DMARC: DMARC record found",
        "detail": "_dmarc.workspace.example publishes \"v=DMARC1; p=reject; rua=mailto:[email protected]\". A receiver that honours this rejects failing mail outright."
      }
    ],
    "parts": [
      {
        "kind": "table",
        "title": "What Google documents, against what this domain publishes",
        "columns": [
          "Record",
          "Google’s value",
          "Published at workspace.example"
        ],
        "rows": [
          [
            "MX",
            "1 smtp.google.com",
            "1 smtp.google.com"
          ],
          [
            "SPF include",
            "_spf.google.com",
            "present"
          ],
          [
            "DKIM",
            "google._domainkey",
            "a key is published"
          ]
        ],
        "mono": [
          1,
          2
        ],
        "note": "The DKIM key itself is generated per domain, so only the selector it sits at is a fixed value."
      }
    ],
    "lookups": [
      {
        "label": "MX for workspace.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for workspace.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for _spf.google.com",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for google._domainkey.workspace.example",
        "value": "Cloudflare: 1 record"
      },
      {
        "label": "TXT for _dmarc.workspace.example",
        "value": "Cloudflare: 1 record"
      }
    ],
    "limits": [
      "DNS cannot show whether DKIM signing was ever switched on. Google makes \"Start authentication\" in the Admin console a separate step after the record is published, so a perfectly correct key here can belong to a domain that signs nothing.",
      "Nothing here reaches the Admin console, so it cannot say whether the domain is a Workspace domain at all, which users exist on it, or whether anyone is sending through it.",
      "The DKIM check looks only at google._domainkey, because that is the prefix Google calls the default. A domain that chose its own prefix when it generated the key reads as having no key here; the DKIM checker takes a selector directly."
    ]
  }
}

This example uses a name RFC 2606 reserves for documentation, ending in .example, .test, .invalid or .localhost. None of them is a real domain, and nobody can register one.

Resell mailbox licences for the domains you just checked, under your own brand.

Get started

Company names and logos are trademarks of their owners, shown only to identify each service.