Catch phishing domains impersonating your brand each morning
Every weekday we scan new security certificates for fake versions of your domain, check them for known abuse, and alert your team in Teams.
Every weekday at 8am, hunt for newly issued TLS certificates that impersonate our brand and alert our security team about the genuinely new ones. Use a cron trigger set to weekdays at 8am. Ask me at setup for our brand terms, our own domains, and our known partner domains, and keep the last two as an allowlist.
Discovery. Use the Censys "Run a Search Query" operation with a CenQL query that regex-matches our brand terms across certificate names and DNS names. Model the query on the progressive-filter shape Censys recommends in their own phishing-prevention writeup, replacing acme with our brand term: ((services.tls.certificate.names=/(.*acme.*)/ or name=/(.*acme.*)/ or dns.names=/(.*acme.*)/ or dns.reverse_dns.names=/(.*acme.*)/)). Build regex variations that catch typosquat and lookalike patterns: character swaps, doubled or omitted letters, homoglyph-style substitutions, added words like login, secure, account, verify, pay, billing and support, alternate TLDs, and hyphenated forms of our name. Censys receives certificates and their SubjectAltNames from certificate transparency logs in near real time, so this catches impersonation infrastructure before it is weaponized rather than after.
Filtering. Drop every result that matches one of our own domains or a known partner domain from the allowlist. Everything that remains is a candidate impersonation.
Enrichment. For each candidate, call the VirusTotal "Get a Domain Report" operation to see how many security engines already flag it (read the malicious and suspicious counts under last_analysis_stats) and to pull resolution detail showing whether the domain currently points at a live host. Then call the Censys "Get a Certificate" operation with the certificate's SHA-256 fingerprint to get the issuer organization and the validity period. VirusTotal's free tier allows roughly 4 requests per minute and 500 per day, so pace these lookups and cap the number of candidates enriched per run (25 is a sensible default) instead of letting the run fail on rate limits.
Deduplication, and this step is load-bearing rather than decorative. Before creating anything, use the Notion "Query a Data Source" operation against our "Brand Impersonation Watchlist" data source, filtering on the certificate fingerprint, to check whether we have already logged this certificate. Skip every certificate that is already present. Without this check the workflow re-alerts on the same lookalike certificate every single morning, and the team mutes the channel inside a week.
Logging. For each genuinely new finding, use the Notion "Create a Page" operation to add a row to the Brand Impersonation Watchlist recording the certificate SHA-256 fingerprint, the lookalike domain, the issuing certificate authority, the hosting IP, the VirusTotal verdict (malicious and suspicious counts out of total engines), the severity you assigned, and the date first seen. Log every new finding here regardless of severity.
Severity. Assign high, medium or low yourself, weighing three things: whether the certificate is already resolving to a live host, since live infrastructure is materially more dangerous than a parked or unresolved name; whether the issuer is a free certificate authority commonly abused for phishing, such as Let's Encrypt or ZeroSSL; and whether the name pattern targets a login or payment page, using tokens like login, signin, secure, verify, account, pay and billing. A live host on a free certificate with a login-themed name is high. An unresolved name with none of those signals is low. Existing VirusTotal detections should push severity upward.
Alerting. Finish with exactly one Microsoft Teams message using the "Create Channel Message" operation to our security channel, listing only the new high and medium severity impersonations. Give each one a single line: the lookalike domain, its severity, and a one-line reason such as "live host, free certificate, login-themed name". Reference the Notion page for full detail. Low severity findings are logged to Notion but never posted.
Silence on quiet days. If there are no new findings after deduplication, or no new findings that reach high or medium severity, post nothing at all. Do not send a "nothing to report" message and do not post an empty summary. Complete the run silently. Microsoft's terms also prohibit using Teams as a log file, so only ever send messages a human will actually read.
What does this prompt do?
- Scans newly issued security certificates every weekday morning for domains built to look like yours: character swaps, added words like "login" or "secure", alternate endings, and hyphenated variations.
- Cross-checks every suspicious domain against 70+ threat engines, then pulls who issued the certificate and whether it is already pointing at a live server.
- Keeps a running Notion watchlist so you hear about each impersonation once, when it first appears, instead of every morning forever.
- Posts a single Microsoft Teams message with only the high and medium risk findings and one line on why each matters, and stays completely silent on quiet days.
What do I need to use this?
- A Censys account. You will create a personal access token under Account Settings, plus your Organization ID if your account belongs to an organization.
- A VirusTotal account and its API key, found under your profile menu.
- A Notion workspace with a database called "Brand Impersonation Watchlist", shared with the General Input connection so it can read from and add to it.
- A Microsoft Teams account with permission to post in the channel where you want alerts.
- Your brand terms and spellings to watch, plus a list of your own domains and partner domains so they never get flagged.
How can I customize it?
- Which brand terms and misspellings to watch, and the allowlist of your own and partner domains that should never be flagged.
- The severity threshold for alerting. By default only high and medium findings reach Teams while everything is logged to Notion.
- The run time and days, and whether to keep the quiet-day silence or get a short "nothing new" confirmation instead.
FAQs
Will this alert me about the same fake domain every day?
What happens on days when nothing new turns up?
Does this work with a free VirusTotal account?
How does it decide what counts as high severity?
Can it post to Slack instead of Microsoft Teams?
Related templates
Open one screen each Monday to see which upcoming posts still have no image, generate three on-brand options, and file the one you pick.
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Open one screen to find every unavailable, stale, or low-battery device in your smart home, see which hub is really at fault, and clear out the dead entries in bulk.
See every open model your teams run in production, who approved it, and whether a quiet license change means it needs another look.
Stop checking a dozen agency sites by hand. Open one board of live solicitations, each scored against what your team can actually bid on.
Find the fake version of your domain before your customers do.
Set up a morning watch that catches brand impersonation the day the certificate is issued, not the day a customer gets phished.