Identity Protection & Credit Monitoring

Your product already tells subscribers they were breached. Tell them before they type.

Monitoring is retrospective by construction: the alert fires because the data is already out. A feed of DNS-verified, currently-live phishing domains lets the same subscription intervene at the only moment in the timeline when the outcome is still cheap to change — the second before a credential leaves the keyboard.

200k+Active verified domains
24hFull database rebuild
100Domains per batch call
0.98Confidence on a hit
In-app link check
secure-account-verify.example-login.co
is_phishingtrue
categoryphishing/malware
dns_statusresolves
confidence0.98
last_checkedtoday
Browser extension blocking
Mobile VPN & DNS filtering
In-app link checker
Impersonation alerting
Restoration casework
Family & employer plans
Home / Use Cases / Identity Protection
The timeline problem

Everything the category sells happens after the damage

Breach notification, dark web monitoring and credit alerts all share one structural property: they fire once the subscriber's data is already in somebody else's hands.

Draw the timeline of a consumer identity incident and the products in this market cluster at one end of it. A credential is phished on a Tuesday. It is tested against a dozen other services by Thursday. It appears in a combolist some weeks later, is ingested by a monitoring provider, and produces an alert. By the time the subscriber's phone buzzes, the useful decisions have all been made by somebody else. The alert is real, the monitoring worked exactly as designed, and the subscriber is still going to spend a fortnight on the phone.

The shape of a consumer identity incident

The leverage curve is steepest at the start

This is not a criticism of monitoring — the market exists because that alert is genuinely worth having, and restoration support is worth more still. It is an observation about where the leverage sits. Every hour you move the intervention earlier reduces the cost of the incident by more than the previous hour did, and the curve is steepest right at the start. The single highest-leverage moment in the entire sequence is the one immediately before the subscriber types a password into a page that is pretending to be their bank. After that moment you are managing consequences. Before it, there are no consequences to manage.

The cheapest tool in that window

A known-bad domain lookup is the cheapest tool that operates in that window. It does not need to be clever, it does not need to understand the page, and it does not need to reason about intent. It needs to answer one question quickly and correctly: is this hostname currently a live, verified phishing site? When the answer is yes, the product can stop the navigation, or refuse to autofill, or throw an interstitial, and the entire downstream chain of alerts and restoration calls simply never begins for that subscriber.

The retention argument underneath it

There is a commercial argument sitting underneath the security one, and product teams in this category will recognise it immediately. Retention in identity protection is a function of perceived value, and perceived value is a function of the subscriber seeing the product do something. A monitoring product is silent for months and then delivers bad news — which is precisely the wrong emotional shape for a subscription renewal. A product that visibly stops something, that lets a subscriber check a suspicious text and get an answer in a second, that occasionally says "we blocked this for you," creates the daily engagement the category has always struggled to manufacture.

What follows

Components, alerting, casework, and the honest boundaries

The rest of this page is about where that lookup goes in a real product: the components that consume it, the alerting it makes possible, how it changes a restoration case, and the honest boundaries you have to design around so the in-app copy does not write cheques the data cannot cash.

Product surfaces

Five places this drops into a subscriber app

None of these require a new product line. Each one is a lookup added to a component the subscription already ships, and every one of them is server-side.

The browser extension

Most identity suites already ship an extension for password autofill or breach warnings. Giving it a blocklist turns it into an active control: on navigation, resolve the host against the local copy of the feed and interrupt before the page paints. Keep the list in the extension's own storage and refresh it from your backend, never call the API from the extension itself.

The mobile VPN or DNS component

If the app already routes traffic through a VPN profile or a custom DNS resolver for tracker blocking, phishing enforcement is the same mechanism pointed at a different list. This is the highest-coverage surface you own because it catches links opened from SMS and messaging apps, which is where most consumer phishing actually arrives.

The paste-a-link checker

A field in the app where a subscriber pastes a suspicious link and gets a verdict. Cheap to build, unusually sticky, and the only feature in most identity apps that a subscriber has a reason to open on a random Wednesday. The check endpoint strips protocol and path automatically, so a pasted full URL works without client-side parsing.

Targeted impersonation alerts

You know which institutions a subscriber has connected — their bank, their card issuer, sometimes their employer. Watching the daily feed for newly added domains that imitate those specific brands turns a generic threat stream into a personal notification that names an organisation the subscriber recognises.

Breach-alert enrichment

A breach notification is more useful when it says what comes next. Populations exposed in a breach are targeted by follow-on phishing that impersonates the breached brand, so pairing the alert with the current verified domains imitating that brand converts a passive warning into an actionable one.

What all five have in common, and the one rule that governs them

Every surface above consumes the same primitive — a hostname, a verdict — and none of them should ever hold your API key. The key is the username chosen at registration, and anything shipped to a subscriber device is public. Extensions get a list pushed from your infrastructure; mobile clients ask your backend, which asks ours; the link checker posts to your own endpoint where you can rate-limit, cache and log. Build the caching layer early: subscriber traffic is enormously repetitive, and a short-lived cache in front of the check endpoint will absorb most of it before a single credit is spent.

The engagement feature

"Check this link" is the daily-active-use problem, solved

Identity products are bought once and opened rarely. A verdict tool is the rare feature subscribers have a genuine reason to return to, and it is a two-week build.

The problem: an app nobody opens

Ask anyone who has run growth on a consumer security product what their engagement numbers look like and you will get the same answer: the subscriber signs up, completes onboarding, connects a couple of accounts, and then does not open the app again until something goes wrong. Every feature added to fix this — dashboards, scores, educational content — competes for attention against everything else on a phone and generally loses, because none of them answer a question the subscriber is actually asking at that moment.

The fix: a question they are already asking

A link checker does. People receive suspicious messages constantly and have nowhere to take them. The current options are to ignore it, to click and find out, or to ask a relative who is assumed to be good with computers. A field in an app they already pay for, which returns a clear verdict in under a second, fills a real gap in a real moment. It also has the property every retention feature wants and few have: the subscriber arrives with intent, gets an answer, and associates the answer with the subscription they are paying for.

The build

Client posts a string, your backend calls the check endpoint

The implementation is small. The client posts a pasted string to your backend. Your backend normalises it and calls the check endpoint, which strips http://, https:// and any path segments automatically — so a mangled forwarded URL still resolves to a domain without client-side parsing. The response returns is_phishing, category, dns_status, last_checked and a confidence of 0.98 on a confirmed hit or 0.0 when there is no match. one lookup per API call, and a rate limit of ten requests per second per key that a normal consumer app will never approach.

Two verdicts are easy to write. One is hard.

The design work is in the copy, not the code, and it is where most implementations of this feature go wrong. Two verdicts are easy to write and one is hard. A confirmed hit is unambiguous: this address is a known phishing site, do not enter anything, here is what to do if you already did. A malformed input is easy too. The hard one is a clean result, because the honest meaning is "this is not on our list of known phishing domains" and the tempting meaning is "this is safe." Those are not the same sentence and a subscriber who is later defrauded by a domain that was too new to be listed will remember which one you showed them.

Write the clean state as a status, and give it somewhere to go

Say that no match was found against a database of over 200,000 verified live phishing domains updated every 24 hours, then immediately give the subscriber the checks the tool cannot do for them: did you expect this message, does the domain match the organisation exactly, and would you reach the same page by typing the address yourself. That framing is more useful than a green tick and it protects the product from a complaint you would otherwise deserve.

Never render a clean lookup as a safety certification. The service answers "is this a known, currently-live phishing domain?" — a no is the absence of a match, not the presence of trust. Product, legal and support should all sign off on the exact wording of that state before launch.
It is a domain lookup, so build the UX around hosts. Verdicts apply to a hostname, not to an individual page or path. If your interface implies you evaluated the specific page a subscriber pasted, it is describing something the API does not do.
Cache aggressively and batch the rest. Popular domains repeat constantly across a subscriber base. A short cache plus the batch endpoint at up to 100 domains per request keeps credit consumption roughly flat while usage grows.
What you are integrating against

The properties of the data, stated plainly

Product decisions downstream of a threat feed depend on knowing exactly what it contains and how often it moves. These are the numbers to plan against.

200,000+DNS-verified phishing domains active at any moment
04:30 UTCWhen the rebuilt daily database lands
10 / secRequest rate limit per API key
$0.0008Lowest per-lookup cost at the Scale package

Why the 24-hour cycle decides your architecture

Two of those numbers deserve unpacking because they shape architecture rather than just budget. The 24-hour rebuild cycle is the reason a locally-held copy of the feed is viable for real-time enforcement: a browser extension or DNS component that refreshes daily is never more than one build behind the service itself, so pushing the list to the client costs you nothing in freshness compared with querying live. The 04:30 UTC landing time is what your scheduler should be built around, with a check that the file you fetched is genuinely newer than the one you are replacing.

Only live domains, so the payload stays bounded

The verification standard is the other thing worth understanding. Every domain in the database is confirmed via rotating proxy infrastructure to have an active A record, and only resolving domains are included. That is why the active figure sits at roughly 200,000 against nearly half a million observed all-time — the file is a snapshot of what is live rather than a growing archive. For a client-side list this matters enormously, because the size of the payload you push to a subscriber's browser stays bounded instead of climbing forever, and entries that have gone dark stop consuming memory and match time on a device you do not control.

Caching dominates the arithmetic, not the tier

Per-lookup pricing runs from $0.0040 on the Growth package down to $0.0008 on the $499/month Scale package, with lookups reset monthly. For a subscriber base of any size the arithmetic is dominated by how much you cache rather than by which tier you buy, which is why the caching layer is worth building before you tune the package choice. Teams running the feed rather than per-query lookups can ignore the credit maths for enforcement entirely and reserve credits for the analytical work: batch-checking domains extracted from a breach corpus, validating a support ticket, or confirming a host during a live restoration case.

The pipeline

From daily build to a subscriber who never sees the page

Four stages, each of which you own except the first. The point of drawing it this way is that the subscriber-facing part is the shortest and simplest piece.

Ingest the daily build

A scheduled pull of the CSV or JSON feed shortly after 04:30 UTC, plus the changelog of domains added and removed since the last build.

Normalise and index

Load into whatever your services query — a hash set, a Bloom filter for the client payload, a table joined against your subscriber institution map.

Distribute to components

Push a compact list to extensions and mobile clients, expose an internal verdict endpoint for the link checker, and feed the diff into your alerting engine.

Intervene at the click

Block the navigation, suppress the autofill, or surface an interstitial. The subscriber sees a warning instead of a login form, and nothing else happens.

Stage two

Where the engineering judgement lives

A server-side hash set of a few hundred thousand hostnames is trivial. A client-side list is more interesting: shipping the raw file to every browser extension is wasteful, so most teams build a probabilistic structure — a Bloom filter sized for a low false-positive rate — push that to the client for instant local rejection, and confirm any positive against your backend before showing the subscriber anything. That gives you sub-millisecond local checks, no per-navigation network call, and no possibility of an incorrect block reaching a subscriber's screen.

Stage three

Where the daily diff earns its place

Alerting needs to know what is new, not what exists — a component that re-scans the entire database daily to find newly-added domains impersonating a subscriber's bank is doing hundreds of thousands of comparisons to surface a handful of rows. The changelog collapses that to the additions and removals since yesterday, which is both cheaper and semantically correct: "this appeared today" is the fact you want to notify on.

Stage four

Worth deliberately under-designing

The temptation is to build a rich warning experience with education, reporting and follow-up actions. In practice the subscriber is mid-task, mildly alarmed, and wants two things: confirmation that they should not proceed, and a way out. Give them a clear statement, the hostname, one primary action that takes them somewhere safe, and a small secondary link to a longer explanation. Anything more is designed for your product review rather than for the person on the other end.

Personalised alerting

When a domain imitating their bank goes live today

The difference between a threat feed and a product feature is whose name is on it. You already know which institutions matter to each subscriber.

The asset you already hold

An institution map, collected at onboarding

Identity products accumulate a quietly valuable asset during onboarding: a map of the institutions each subscriber actually deals with. Which bank, which card issuers, sometimes the employer through a benefits-sponsored plan, often the brokerage or the mortgage servicer. That map is normally used for monitoring coverage. It is also exactly the join key that turns a generic list of newly-registered phishing domains into a notification a subscriber will read.

1

Join the changelog against the institution list

The mechanics are unglamorous and that is the point. Take today's added-domains changelog. Match it against your institution list using whatever brand-token matching you trust — this is your matching logic, not something the API performs, and it is worth being conservative because a false match generates a frightening notification about a bank the subscriber depends on. When a confident match appears, notify the subscribers connected to that institution: a domain imitating their bank was verified live today, here is the hostname, your product is already blocking it on the devices where our extension is installed, and here is what a message from that domain would look like.

2

Point the same idea at breach disclosures

Breach-alert enrichment is the same idea pointed at a different trigger. When a breach is disclosed and part of your subscriber base is in it, the notification you send is usually a description of exposure plus generic advice. The population in that breach is about to be targeted by follow-on phishing that impersonates the breached brand, because attackers know exactly the same thing you do about who is anxious and who is expecting a message from that company. Attaching the currently-verified domains imitating that brand turns "your data may have been exposed" into "here is the specific thing that is about to arrive in your inbox, and we are blocking these hosts already."

That notification does something no monitoring alert can. It is timely rather than retrospective, it names an organisation the subscriber recognises, it arrives before anything bad has happened to them personally, and it demonstrates that the subscription is doing work on their behalf continuously rather than waiting for a disaster. Teams already running this kind of watch programme for their own brand will recognise the pattern from the brand protection use case; the difference here is that you are running it on behalf of institutions you do not own, for subscribers who do business with them.

Why a targeted alert lands differently
Be disciplined about volume

The failure mode for all personalised alerting is habituation: a subscriber who receives four of these a week stops reading them, and then does not read the one that mattered. Rate-limit per subscriber, collapse multiple domains impersonating the same institution into one notification, and set a high bar for the brand-match confidence. A quiet channel that fires rarely and is always right is worth more than a busy one that is usually right.

Casework and self-defence

Two jobs the same lookup does inside your own business

One faces the restoration specialist working an active case. The other faces the fraud team defending the brand a fake "your identity was stolen" page is imitating.

1

Restoration starts with fragments, not facts

Start with restoration, because it is the part of these products that subscribers value most and that gets the least engineering attention. A specialist picks up a case with a distressed person on the other end who cannot reliably reconstruct what happened. The single most useful early question is what they visited and what they typed, and the answers arrive as fragments: a screenshot, a forwarded text, a half-remembered address, a browser history export the subscriber managed to produce.

2

A batch call turns the narrative into a fact

Running those fragments through the batch endpoint — up to a hundred domains per request, one lookup each — turns a vague narrative into an established fact within a minute. When a hostname comes back confirmed, the specialist knows which credentials to treat as compromised, can date the exposure against last_checked, and can stop guessing about scope. When nothing matches, that is genuinely useful too: it is not proof of safety, but it redirects the investigation away from a phishing hypothesis toward the other ways an identity gets compromised. Either way the case notes now contain something verifiable, which matters if the case ever ends up in front of an insurer or a bank's fraud department. The workflow parallels the one described on the incident response page, scaled down to one victim.

The uncomfortable structural problem

The second job is defending yourself, and this industry has an uncomfortable structural problem. A fake page announcing "your identity has been stolen — verify your account immediately" converts extraordinarily well, because it manufactures precisely the panic that overrides careful behaviour. Identity protection brands are therefore attractive to impersonate, and your subscribers are pre-conditioned to expect alarming messages from you. Every reassuring email you send teaches your own users to respond to a template that somebody else can copy.

What to do about it, in practice

Practically this means running the same domain surveillance on your own brand that you run on behalf of subscribers' banks, and it means being unusually strict about your outbound communication patterns. Decide once that your alerts never contain a login link, say so in every message, and then never make an exception for a campaign. Publish the domains you send from. Watch the daily changelog for hosts imitating your own name and the names of the insurers or employers who white-label your service, because a fake page targeting an employer's benefits portal will use the employer's brand rather than yours and will not appear in a search for your own trademark.

A support-desk benefit worth mentioning

When a subscriber forwards something claiming to be from you and asks whether it is genuine, the agent should not be making a judgement call from a screenshot. A verified lookup against the hostname gives a defensible answer in seconds, and gives your fraud team a running count of which impersonation campaigns are actually reaching your users rather than which ones you happened to notice.

Where it fits

Monitoring, prevention, and what each one can honestly claim

The two halves answer different questions at different points on the timeline. Product marketing gets into trouble when it lets one of them borrow the other's promise.

CapabilityMonitoring & breach alertingPhishing-domain blockingBoth in one subscription
When it actsAfter the data is already exposed Before the credential is typed Both ends of the timeline
What the subscriber experiencesA notification about something that happenedA page that will not load, or an autofill that refusesPrevention first, notification as the fallback
Handles a brand-new, never-seen domain Not its function No — it is a known-bad lookup Only with your own additional signals
Generates day-to-day engagement Silent for months at a time Link checks and block events A reason to open the app
Useful during restoration Establishes what leaked Establishes what the victim visited Both halves of the narrative
Unit of the verdictAn identity attribute or recordA hostname — not a page or a pathDesign the UX around both units explicitly
Cost shape as subscribers growScales with records monitoredFlat with a feed subscription; per-lookup on creditsFeed for enforcement, credits for analysis
Row three

A known-bad lookup, and nothing more than that

Row three is the one to internalise. This service is a known-bad lookup against a verified inventory of live phishing hosts. It does not classify pages it has never seen, it does not score unfamiliar domains heuristically, and it will not catch a hostname registered this morning and used for the first time this afternoon. Anything you build on top of it should treat a clean response as the absence of a match and pair it with your own signals — domain age if you have it, whether the subscriber has ever visited the host before, whether the link arrived from a channel you consider risky, whether the destination is asking for credentials at all.

That layering is normal and every serious deployment does it. The value of the known-bad layer is that it is unambiguous where it applies: a hit is a hit, the confidence is 0.98, the host is confirmed to resolve, and you can act on it without a human in the loop. Reserve your fuzzier signals for the cases the list does not cover, and keep the two verdicts visually distinct in the interface so a subscriber can tell the difference between "this is a known phishing site" and "we are not sure about this one."

On layering the known-bad verdict
Row seven — a planning note

Enforcement traffic — every navigation from every subscriber device — should never be billed per lookup, which is why the feed exists and why teams building the extension or the DNS component subscribe rather than metering. Credits are the right instrument for bounded, analytical work: restoration cases, support tickets, batch validation of a corpus, a one-off audit. Mixing those up is the most common way a team ends up with either a surprising bill or a component that cannot scale.

Content that writes itself

"New threats this week" straight from the changelog

The daily record of domains added and removed is not only an operational artefact. It is the raw material for the recurring content this category perpetually needs.

Every product here has a newsletter with nothing to say

Every subscription product in this market runs a newsletter, a dashboard panel, or an in-app feed that has to say something regularly. The people writing it are usually rewriting news coverage of last month's breach, which is neither timely nor differentiated — anyone can read the same article. The changelog gives you something nobody else is publishing: an observed, verified record of what actually appeared on the internet this week and what disappeared.

The additions half writes the obvious piece

Group this week's newly-verified domains by the sector or brand family they imitate, count them, and write two hundred words about the pattern. Banking impersonation was up this week; a cluster of new domains targeted parcel delivery notifications; the tax-season shape appeared again in February. You are describing your own data, so the claim is defensible, and you can be specific about method — these are hostnames confirmed to have an active A record, verified in the last 24 hours, not a list of things somebody reported.

The removals half nobody uses

The removals half is more interesting and almost nobody uses it. Domains leave the list when they stop resolving, which is what happens when infrastructure is taken down, abandoned, or rotated away from. Watching that churn illustrates the single most important thing a subscriber can understand about phishing: these sites are ephemeral. They exist for days. The instinct that "I would recognise a fake site" fails not because people are careless but because the site is new, the campaign is short, and recognition was never a viable defence. That is a genuinely educational message and it is far more persuasive when it is illustrated with movement in a real dataset than when it is asserted in a bullet list.

The same content as a dashboard panel

A small module showing how many verified live phishing domains exist right now, when the database was last rebuilt, and how many were added since yesterday gives the subscriber a reason to glance at the app and a constant reminder that something is running on their behalf. The open /stats endpoint returns the database size and last update with no key, no credits and no authentication, which makes that panel trivial to build and impossible to get wrong. Teams doing this at scale usually pair it with the approaches on the threat intelligence and security awareness pages.

One caution about claims

Describe what the data is and resist the urge to extrapolate from it. The changelog tells you what was verified in this database over a period; it does not tell you what happened across the whole internet, and it is not a measurement of attack volume. Write "we verified this many new phishing domains this week" rather than anything that sounds like a global statistic, and your content stays accurate as it gets shared.

Common questions

What product and engineering teams ask before committing

Mostly about limits, cost shape, and how far the claims in the app can honestly go.

Can we call the API directly from our mobile app or extension?

No. The API key is the username chosen at registration and anything shipped to a subscriber device is recoverable, so a key embedded in a client is a key you have published. Route every request through your own backend, which lets you cache repeated hostnames, apply per-subscriber rate limits, and rotate the key without an app release. For enforcement components that need local decisions, push a derived list — a hash set or Bloom filter built from the feed — rather than exposing credentials to make live calls.

Is a clean lookup safe to present as "this link is safe"?

No, and this is the most important copy decision in the whole integration. The service answers whether a hostname is a known, currently-live phishing domain. A response of is_phishing: false with a confidence of 0.0 means no match was found, not that the destination has been evaluated and cleared. Write the clean state as a status — "not found in our database of known phishing domains" — and follow it with the checks the subscriber should still perform. Presenting it as certification is the one mistake that converts a helpful feature into a liability.

How should we handle a URL with a path, or a shortened link?

The check endpoint strips http://, https:// and path segments automatically, so a pasted full URL resolves to its domain without any client-side parsing on your side. Verdicts are per-domain, which means a hostile path on an otherwise legitimate host is outside what this answers. Shorteners need your own resolution step first — follow the redirect on your backend, then check the final hostname — and you should decide deliberately what to show when a shortener will not resolve, because that is a common state and it is neither a hit nor a clean result.

Should we use the feed or per-lookup credits?

Both, for different jobs. Anything driven by subscriber traffic volume — extension navigation checks, DNS-level enforcement, the link checker at scale — belongs on the Daily Threat Feed at $499 per month, because the cost is flat regardless of how much your users browse and the matching happens in your own infrastructure. Bounded analytical work belongs on credits: restoration cases, support escalations, batch validation. The annual feed plan includes 100,000 API credits, which covers that second category for most teams without a separate purchase.

What does the alerting integration actually need from the feed?

The daily changelog of added and removed domains, which ships with the feed subscription. Newly added rows are what you match against your subscriber institution map to produce a targeted alert; removals are what keep your own index from accumulating dead hosts. Note that the brand-matching logic is yours to build — the service tells you a domain is verified phishing infrastructure, not which company it is imitating — so budget engineering time for that matcher and tune it conservatively, since a false match produces an alarming notification about a subscriber's bank.

Are there push notifications or webhooks when a domain is added?

No — the model is pull-based. You schedule a fetch of the feed and the changelog after the daily build lands at 04:30 UTC and drive your own downstream events from the diff. In practice this is easier to operate than a push integration: there is no endpoint of yours to keep available, no delivery retry semantics to reason about, and a failed pull is a condition your scheduler already knows how to alert on. Enterprise arrangements can cover SFTP or S3 delivery and custom update frequencies if your pipeline prefers to be delivered to.

How do we evaluate this before signing anything?

Pick a monthly plan, then take a corpus you already trust — reported links from your support queue, hosts pulled from subscriber-forwarded messages over the last quarter — and run it through the batch endpoint at a hundred domains per request. That gives you a hit rate measured against your own traffic rather than a vendor's sample, which is the only number worth taking to a build decision. The /stats endpoint needs no key at all if you just want to confirm database size and freshness first, and the monthly plans carry a 14-day refund if under 10% of the credits are used.

Move your product one step earlier on the timeline

Start with a monthly plan sized to your first month and measure the hit rate against links your own subscribers have already reported. When the extension, the DNS component or the link checker is ready for real traffic, the daily feed makes enforcement flat-cost and keeps every lookup inside your own infrastructure.