Free tool · runs in your browser

Gmail alias checker: is this the same inbox?

Paste two or more addresses to see which ones Gmail delivers to the same inbox: dots, +tags and googlemail.com all collapse into one. Nothing leaves your browser.

8 addresses · 4 distinct inboxes · 4 aliases

Same inbox: janedoe@gmail.com

  • jane.doe@gmail.com
  • janedoe+trial2@gmail.com
  • j.a.n.e.d.o.e@googlemail.com
  • JaneDoe+promo@Gmail.com

Same inbox: sam@outlook.com

  • sam@outlook.com
  • sam+test@outlook.com

Rules: +tags are stripped for every provider; dots are ignored only on gmail.com; googlemail.com counts as gmail.com and protonmail.com as proton.me. Dots do matter on Google Workspace and other domains.

How Gmail aliases work: the official rules

Gmail documents its alias rules unusually well. A 2026 study that tested 28 email providers found that only Gmail fully documents its aliasing (Wu et al., NDSS 2026). The rules:

Stack them and J.a.n.e+trial7@GoogleMail.com is plain jane@gmail.com. The checker above applies these rules through canonicalize(), the function behind Vetto's repeat detection.

One alias no string rule can catch: Google now lets some users change their @gmail.com address. The old one becomes an alternate address that still receives mail, up to three changes per account (Google Account Help).

Why aliases break free-trial limits

Most signup code enforces "one account per email" with a unique index on the raw string. To that index, jane@gmail.com, jane+1@gmail.com and j.ane@gmail.com are three customers. All three pass email confirmation, because every message lands in the same real inbox. One Gmail account can farm as many trials as it likes.

This happens at scale. The NDSS researchers found one base address behind up to 139 npm accounts used for spam packages, and 9 of the 18 popular platforms they tested had no defense against aliases from any provider. For the wider playbook, see how to stop free trial abuse without a credit card.

Where normalization goes wrong

Google Workspace and other custom domains

Dots only disappear on consumer Gmail. On work and school accounts they are part of the address. Suped adds that you should not strip dots just because a domain's MX records point at Google (Suped). That is why the checker, like Vetto, removes dots only on gmail.com and googlemail.com.

Other providers

Plus-addressing is common but not universal: the NDSS study found 11 of 28 providers support + suffixes. Vetto strips +tags on every domain, which can over-merge on a provider that treats + as an ordinary character. Rules differ elsewhere too: Clerk's subaddress blocking also treats = and # as separators, plus - on Yahoo (Clerk docs). Vetto leaves hyphens alone, so jane-doe and jane-smith never merge. It also folds Proton's domains into proton.me (a paid Proton account can use the same name on protonmail.com and pm.me, per Proton) and Apple's older me.com and mac.com into icloud.com. Here is what the engine does, computed from the code:

AddressMatching keyWhy
J.a.n.e+trial7@GoogleMail.comjane@gmail.comGmail: case, dots, +tag and googlemail.com all collapse
jane.doe+promo@gmail.comjanedoe@gmail.comGmail: +tag and dots removed
jane.doe@acme.iojane.doe@acme.ioCustom domain, maybe Google Workspace: dots kept
sam.rivera+test@outlook.comsam.rivera@outlook.comOther provider: +tag removed, dots kept
jane-doe@yahoo.comjane-doe@yahoo.comHyphen kept, never read as a tag
lee@pm.melee@proton.meProton short domain folded into proton.me

Store what they typed

Keep the address exactly as entered for login and sending, and keep the key in a separate column used only for matching. Suped recommends the same, and warns against using the key as the only login credential or to merge accounts automatically. A minimal key function:

alias-key.js
// Matching key for repeat-signup checks. Mirrors Vetto's canonicalize()
// for Gmail. Store the address as typed; compare on this key only.
export function aliasKey(email) {
  const e = String(email).trim().toLowerCase();
  const at = e.lastIndexOf('@');
  if (at < 1) return null;
  let local = e.slice(0, at);
  let domain = e.slice(at + 1);
  if (domain === 'googlemail.com') domain = 'gmail.com'; // same inbox
  local = local.split('+')[0] || local;                   // drop the +tag
  if (domain === 'gmail.com') local = local.replace(/\./g, ''); // consumer Gmail only
  return `${local}@${domain}`;
}

aliasKey('J.a.n.e+trial7@GoogleMail.com'); // "jane@gmail.com"
aliasKey('jane.doe@acme.io');              // "jane.doe@acme.io" (dots kept)

Warn, don't hard-block

A canonical match is a risk signal, not proof, as Suped's guide puts it. The same inbox can sign up twice for good reasons: an agency opening a second account for a client, a founder who forgot an old trial, a family sharing one address. Block them outright and you lose a customer at the moment they wanted to buy.

So Vetto warns on repeats by default: the visitor sees your message (say, "You already have an account. Sign in instead?") and a second submit goes through. On Pro you can set the action per site to allow, flag, warn or block. The NDSS authors recommend notifying the base address, as Facebook does by sending it a password reset when it spots a known alias. Pointing people to sign-in does the same job gently.

Catch repeat signups automatically

Vetto Pro runs this check on every signup and acts on it. It keeps salted hashes, never plain emails, uses them for 90 days of repeat detection and then purges them. When a new signup reaches an inbox it has seen, the verdict carries a repeat count, and the signed token passes it to your backend so you can enforce the rule server-side. The live demo is pre-seeded with jane@gmail.com and six aliases, so j.a.n.e+trial7@googlemail.com comes back with repeat 7.

index.html
<script src="https://usevetto.com/v.js" data-site="pk_your_public_key" defer></script>

On Free, alias detection runs in shadow mode, so your stats show how many repeats you would catch before you upgrade. To find alias clusters among the users you already have, run the free email list audit on a CSV export, right in your browser.

Other options: on Clerk, turn on subaddress blocking on its Protections page. On Supabase, the community email_guard extension normalizes Gmail addresses in a before-user-created hook and rejects repeats. Either way, pair it with disposable email blocking, or test one address in the disposable email checker.

Frequently asked questions

Do dots matter in Gmail addresses?

Not for personal Gmail: Google says mail to j.a.n.e@gmail.com reaches jane@gmail.com. They do matter on Google Workspace (work and school) addresses, so never strip dots from a custom domain.

Is googlemail.com the same as gmail.com?

Yes. Google says messages sent to @gmail.com and @googlemail.com go to the same place; some countries used googlemail.com. The checker and Vetto treat them as one domain.

Does a match prove two accounts belong to one person?

No. It shows that the addresses reach one inbox, which may be shared, or belong to a customer who opened a second account on purpose. Treat it as a risk signal: warn, suggest signing in, or review it, but never merge or ban accounts automatically.

Can it catch every alias?

No. It catches aliases you can see in the address: dots, +tags and alternate domains. It cannot link custom aliases, forwarding, or a Gmail address the owner renamed, because Google keeps the old address as a separate alternate.

Does this checker send my addresses anywhere?

No. Grouping runs in your browser with the same canonicalize() function Vetto uses for repeat detection. Nothing you paste is uploaded or stored.

Is alias detection on the free plan?

It runs in shadow mode on Free: repeats are counted in your stats but never shown to visitors. Pro ($12/month or $99/year) turns the warning on. Founding Lifetime is $69 once for the first 100 buyers, until November 27, 2026.

Give your signup form sharp eyes.

Free on one site. One line of HTML. Remove it any time and your form works exactly as before.

Founding offer: Pro for life for $69 once, first 100 buyers, until Nov 27.