Protection rules

Allow trusted domains, block known abuse, and review newly registered domains.

Protection rules adapt SignupScore to your customers and your abuse patterns. Manage them in Dashboard → Protection.

Every policy below answers one question: should this address get in? Here is what each one does to a real signup.

AddressPolicyDefaultResult
sam@partner.com (your rule)Exact domain ruleallow, always, beats everything below
bot@x.duckdns.orgFree and dynamic DNSOnblock
hi@parkedbrand.comCannot receive emailOnblock
x8f2@duck.comEmail relaysOffallow, flagged privacy_relay
throwaway123@gmail.comJunk usernamesOffreview until you turn it on
founder@startup.io (3 days)New domainOffallow until you turn it on

Exact domain rules

Your rule always wins. Nothing below can override it.

A rule means exactly what you type:

You typeIt matches
example.comexample.com and every subdomain
customer.duckdns.orgonly that hostname, not the rest of duckdns.org

That second row is the escape hatch. One real customer on a blocked zone gets an allow rule for their hostname, and the zone stays blocked for everyone else.

Free and dynamic-DNS domains

On by default. Blocks duckdns.org, pp.ua, No-IP and similar. Reason code INFRASTRUCTURE_ZONE, signal dynamic_dns.

Anyone can take a subdomain of these for free, in seconds, without owning anything. Real mailboxes almost never live there; self-hosted burner mail does.

The whole zone goes, subdomains and the zone name itself. bot@x.duckdns.org and owner@duckdns.org both stop here.

Blocked
{
"action": "block",
"primary_reason": "INFRASTRUCTURE_ZONE"
}

Got a genuine customer on one? Allow their exact hostname, like customer.duckdns.org.

Email relays and hidden addresses

Off by default. Covers Apple Hide My Email, Firefox Relay, DuckDuckGo, SimpleLogin and Proton Pass. Off, every check still flags them:

x8f2k9@duck.com, policy off
{
"action": "allow",
"signals": { "privacy_relay": true }
}

Turn it on and the same address returns block.

It is off by default because a relay address is a real mailbox that a real person reads. Blocking one turns away a customer for being private. Turn it on when that privacy costs you something you can name: trials farmed with a fresh alias each time, or chargebacks you cannot trace to a person.

Domains that cannot receive email

On by default. Blocks a domain that provably has no mail server and was registered more than 14 days ago. Reason code DOMAIN_UNDELIVERABLE.

The 14 days are fixed, not a setting. A brand-new domain may simply be mid-setup, so it is skipped rather than refused for it. The policy is also skipped entirely when the mail lookup fails, when the registration date is unknown, or when you send check_mx: false.

Do not confuse this with the new-domain policy above. There, a young domain is the reason to refuse. Here, being young is what earns an exemption.

New-domain policy

Off by default. Send recently registered domains to review or block; you pick the age and the action.

A domain registered three days ago is not proof of anything, which is why the useful setting is usually review rather than block. Review that signup, verify the email, hold the trial credits until they confirm.

Junk usernames

Off by default. This is about the username, the part before the @, not the domain. Disposable domains are already blocked separately.

Turns review into block when the username says outright that it is throwaway. Only action changes; these are flagged either way.

UsernameResultWhy
throwaway123@blockword, then digits
tempmail@blockword, then a mailbox noun
junk1987@no matcha word plus a birth year
junk.maria@no matchJunk is a surname
sample.accounting@no matchordinary word starting with one
test+work@no matchsomeone tagging their own mail

Custom and business domains are skipped. There, test@ and noreply@ are ordinary mailboxes.

Email memory

Off by default. Turn it on in Dashboard → Protection → Email memory. Nothing is recorded until you do. Once on, mailbox_alias reports that one mailbox reached you under two different spellings, because alias forms collapse to one address: f.o.o+trial2@gmail.com and foo@gmail.com are the same mailbox.

Sending the identical address again reports false. That is a retry, and your own records already cover it.

It reports a prior check of another spelling, not that an account exists. Pair it with your users table, which is the one thing that knows whether they already signed up.

Only an unreadable fingerprint is stored, never the address. See Privacy and retention.

Precedence

First match wins, top to bottom:

  1. Your exact allow or block rule
  2. Free and dynamic-DNS domains
  3. Email relays
  4. Domains that cannot receive email
  5. New-domain policy
  6. Junk usernames
  7. SignupScore's built-in email and domain checks

Worked example, with relay blocking on and an allow rule for duck.com:

AddressStops atResult
a@duck.com1, your allow ruleallow
b@mozmail.com3, relaysblock
c@x.duckdns.org2, dynamic DNSblock
d@stripe.com7, built-in checksallow

Unknown domain age

SignupScore cannot confirm a registration date for every domain. When the date is unknown, the age-based policies are skipped. A signup is never blocked just because age data is missing.