Domain Impersonation Scanner — Typosquat & Phishing Finder avatar

Domain Impersonation Scanner — Typosquat & Phishing Finder

Pricing

from $1.50 / domain scanned

Go to Apify Store
Domain Impersonation Scanner — Typosquat & Phishing Finder

Domain Impersonation Scanner — Typosquat & Phishing Finder

Find domains impersonating your brand. Generates typosquat, combosquat, homograph (punycode) and TLD-swap permutations, checks which are actually registered, then profiles each: mail servers, TLS, live pages, login forms and brand mentions. Returns a 0-100 risk score with takedown steps.

Pricing

from $1.50 / domain scanned

Rating

0.0

(0)

Developer

Cerridwen

Cerridwen

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Domain Impersonation Scanner — Typosquat & Phishing Domain Finder

Find the domains impersonating your brand before your customers do.

Give it a domain you own. It generates thousands of realistic impersonation candidates — typos, combosquats, TLD swaps, Unicode homographs — checks which ones are actually registered, then profiles each one to answer the question that matters: can this domain be used to attack us right now?

A lookalike with a working mail server can send fake invoices to your customers today. One that merely exists cannot. This actor tells the two apart.

Why this instead of a free typosquat generator

Tools like dnstwist list permutations. That is the easy half. The hard half is deciding which of the 60 registered lookalikes deserve your lawyer's attention this week — and that needs mail, TLS, page content and parking signals, scored together.

  • Capability-weighted risk score (0-100) — MX records and credential forms outweigh cosmetic similarity
  • Explains every score — each finding lists the exact reasons and any mitigating factors, so you can audit it rather than trust it
  • Separates threats from your own defensive registrations — a lookalike that redirects to you is scored down, not up
  • Resolver-hardened — see Accuracy below
  • Actionable output — each finding carries concrete takedown steps

What it detects

TechniqueExample for example.comWhy it matters
Combosquattingexample-login.com, secure-example.comThe most common credential-phishing pattern
TLD swapexample.co, example.io, example.ruCheapest lookalike to register
Unicode homographexаmple.com (Cyrillic а → xn--exmple-4nf.com)Visually identical in most browsers and mail clients
ASCII homoglyphexarnple.com (rn for m), examp1e.comPasses a quick glance
Typosexmaple.com, examle.com, exampple.comCatches fat-finger traffic
Hyphenationex-ample.comCommon in ad-fraud and resale
Subdomainex.ample.comExploits the dot as a visual separator
Additionexamples.comAdjacent-brand confusion
Bitsquattingsingle bit-flip variantsOpt-in; low yield, high volume

Signals collected per registered lookalike

DNS — A/AAAA addresses, MX records with mail-provider identification (Google Workspace, Microsoft 365, Zoho, ImprovMX…), nameservers, SPF, DMARC policy, domain-parking network detection

Mail is classified by how it came to exist, not merely that it exists:

CapabilityExamplesWeight
mailboxGoogle Workspace, Microsoft 365, self-hostedFull
forwardingNamecheap eforward, ImprovMX, Cloudflare Email RoutingReduced
parkingpark-mx.above.com, NameBrightNone

The distinction matters: registering a domain at Namecheap switches on free forwarding automatically. Scoring that like a deliberately provisioned mailbox put five unrelated domains at HIGH in a single scan. Only a real mailbox triggers the invoice-fraud recommendation.

TLS — certificate presence, issuer, validity start, certificate age (a certificate issued last week on a lookalike is a setup-in-progress signal)

HTTP — status, final URL after redirects, page title, password-field detection, brand mentions in page content, "for sale" parking pages

Risk scoring

LevelScoreTypical meaning
CRITICAL70-100Impersonation evidence plus the capability to act on it
HIGH50-69Registered with working mail or a live site
MEDIUM30-49Registered and resolving, limited capability
LOW15-29Registered, mostly dormant
INFO0-14Parked, for sale, or redirecting to you

Capability is not intent. Mail servers, TLS and SPF describe how much damage a domain could do; they say nothing about whether it is pretending to be you. An established unrelated business one keystroke from your name has the same capability profile as a well-provisioned phishing domain.

So CRITICAL requires at least one piece of impersonation evidence — the page references your brand, hosts a login form, or uses confusable Unicode. Without any of those the score is capped at HIGH and the finding says so explicitly, rather than telling you to file a takedown against a real company.

Findings that redirect to your own domain are scored down by 45 points, as are domains held at a corporate brand-protection registrar (MarkMonitor, CSC, Com Laude) — nobody phishes from those, so a hit there means you already own it.

Re-scanning

Brand protection is a standing task, not a one-off. Pass the domains you have already cleared — localised sites, defensive registrations, partner domains — in allowlist, and they drop out of findings into an allowlisted count. A monthly re-scan then surfaces only what changed.

{
"domains": ["yourbrand.com"],
"allowlist": ["yourbrand.ca", "yourbrand.de", "yourbrand.fr"],
"minRiskScore": 30
}

Input

FieldTypeDefaultDescription
domainsstring[]requiredDomains you want to protect. Bare domains or full URLs both work
techniquesstring[]all but bitsquattingWhich permutation families to generate
maxPermutationsinteger2500Ceiling per domain; low-yield techniques are dropped first
checkHttpbooleantrueFetch each registered lookalike's web page
allowliststring[][]Domains you have already cleared as your own; excluded from findings
minRiskScoreinteger15Omit findings below this score; 0 reports everything
maxDomainsinteger10Targets per run
resolversstring[]1.1.1.1, 8.8.8.8, 9.9.9.9Nameservers to query
dnsConcurrencyinteger60Parallel DNS queries
dnsTimeoutSecondsnumber4Per-query DNS timeout
httpTimeoutSecondsnumber8Per-request page timeout

Example input

{
"domains": ["yourbrand.com"],
"checkHttp": true,
"minRiskScore": 30
}

Output

The dataset contains one row per finding (recordType: "finding"), sorted highest-risk first, plus one summary row per target (recordType: "summary") so a clean scan never produces a confusingly empty dataset. The full summary is also written to the key-value store as SCAN_SUMMARY.

{
"recordType": "finding",
"target": "apify.com",
"impersonatingDomain": "apify.fr",
"punycode": null,
"technique": "tld-swap",
"riskScore": 100,
"riskLevel": "CRITICAL",
"reasons": [
"Domain is registered and resolves to an IP",
"Has MX records — can send or receive mail as your brand",
"Has a valid TLS certificate — renders with a padlock",
"SPF record published — mail sending is configured",
"Serves a live web page",
"Page content references your brand"
],
"mitigatingFactors": [],
"recommendations": [
"Content references your brand without redirecting to you — capture evidence (screenshot plus WHOIS) and open a trademark complaint with the registrar.",
"Mail is configured on this lookalike. Warn finance and AP teams about invoice fraud, and add the domain to your mail gateway's block list."
],
"hasMailServer": true,
"mxRecords": ["apify-fr.mail.protection.outlook.com"],
"mailProvider": "Microsoft 365",
"spf": "v=spf1 include:_spf-eu.ionos.com include:spf.protection.outlook.com ~all",
"hasTls": true,
"tlsIssuer": "Sectigo Limited",
"tlsAgeDays": 160,
"httpStatus": 200,
"finalUrl": "https://apify.fr/",
"mentionsBrand": true,
"isParked": false
}

Three dataset views are configured: Impersonation findings (default), High risk only, and Technical detail.

Accuracy

Two failure modes produce phantom findings in naive typosquat tools, and both are handled here.

NXDOMAIN hijacking. Many ISP, corporate and consumer-filtering resolvers answer a nonexistent domain with a sentinel IP (commonly 0.0.0.0) instead of an NXDOMAIN error. A scanner trusting the system resolver would report every single unregistered permutation as a live lookalike. This actor queries public resolvers directly and never reads the host's resolver configuration.

Wildcard TLDs and resolver quirks. Before each scan the actor resolves two guaranteed-nonexistent names — one under .com and one under the target's own suffix — and treats any address that comes back as noise for the remainder of the scan. That catches registry-level wildcards as well as resolver lies.

Domains with MX records but no A record are still reported: a lookalike set up purely for invoice fraud often has no website at all. A null MX (RFC 7505, the record 0 .) is the opposite case — the domain is explicitly declaring it accepts no mail — and is never counted as mail capability.

Self-references do not count as brand mentions. A parking page for yourbrand.nl naturally contains the string yourbrand, and aayourbrand.com contains it as a substring. Matching is word-bounded and strips the lookalike's own hostname first, so neither fires.

Parked domains are detected three ways — nameservers, mail exchangers, and the host a page redirects to. Relying on any single one is fragile: a DNS lookup that times out under load would otherwise flip a parked domain into an active threat.

Bot-challenge pages are marked, not interpreted. When a fetch returns a Cloudflare interstitial the real page was never seen, so no content signal is derived from it and the finding says the check was inconclusive.

For-sale detection runs against visible page text rather than raw HTML. Meta tags and inline scripts routinely contain parking-page phrasing — a WordPress maintenance plugin advertises itself as "coming soon" in a generator tag — without the page being parked at all.

Use cases

  • Brand protection — continuous monitoring for trademark and takedown teams
  • Anti-phishing — find credential-harvesting pages before the campaign lands
  • Invoice-fraud prevention — surface lookalikes with working mail servers
  • M&A and vendor due diligence — check a target company's exposure
  • Security audits — a concrete, evidence-backed deliverable for clients

Performance

A typical five-character brand generates ~300 candidates and completes in about a minute including page fetches. Longer names generate more. The pipeline is a funnel — thousands of cheap DNS lookups, then TLS and HTTP probes only against the small subset that is actually registered — so cost scales with the number of real lookalikes rather than the number of permutations.

Set checkHttp: false for a DNS-only scan that runs several times faster.

Local development

pip install -r requirements.txt
python3 test_local.py yourbrand.com
python3 test_local.py yourbrand.com --no-http --max 800
python3 test_local.py yourbrand.com --json > findings.json

Monetisation setup

The actor emits two pay-per-event charges:

EventWhen
actor-startOnce per run
domain-scannedOnce per target domain

Billing follows the work performed, not the number of findings — nothing here rewards reporting noise. Configure both events in the Apify Console under Monetization; until you do, the charge calls degrade silently and runs stay free.

Notes

This actor performs passive reconnaissance only: DNS queries and ordinary unauthenticated HTTP GET requests to publicly reachable hosts. It sends no email, submits no forms, and attempts no authentication.