Skip to content

Status

All systems answering

Checked at 20 Oct 2026, 22:45 UTC. The live facts — components, latency, availability and dataset freshness — are served as JSON at GET /api/v1/status/data without authentication, so a monitor can poll them. The measured quality below is weekly, dated, and deliberately not in that payload.

Components

Each part behind an answer, reported separately. A premium check that was never switched on for this deployment reads "not configured" rather than degraded, and is not counted against the headline above.

component statedetail
Database operationalQueries are answering.
IP geolocation operationalThe geolocation database is installed.
Mailbox handshake operationalMailboxes are being probed as usual.
Live carrier check not configuredNot switched on for this deployment: phone verdicts come from the numbering data alone.
Server-side rendering operationalPages are rendered on the server before they are sent.

Availability, last 90 days

100.00% of the 22,206 requests recorded in the last 90 days were answered without a fault on our side. 28 of those 90 days recorded at least one request; 62 recorded none. 68 of those requests were answered, 22,138 were refused as answers about the request, and 0 failed here.

23 Jul 2026today, so far
  • nothing failed here
  • requests failed here
  • nothing recorded

What this counts

For each UTC day, the share of the requests we recorded that were not answered with a fault on our side — a 500 or above. A refusal that is an answer about the request, such as an empty balance, a rate limit or a validation error, is not counted against it: the same rule the percentiles below follow. The days older than a week are read from a daily rollup, because the per-request rows behind them are deleted after seven days.

What it cannot see

This is measured from our own request table, so it only counts requests that reached this server and were recorded. Read it as a floor on the bad days, never as proof of a good one.

  • An outage that took the server off the network — a failed deploy, a DNS fault, a machine that was off — records nothing at all. If it lasted the whole day the day is grey, and grey is never counted as good. If it lasted an hour, the other twenty-three are all that is here, and the day can read as a clean 100%. A partial outage is the common case, and this strip is close to blind to it.
  • A fault that also stops the recording write — a database incident, which is the likeliest cause of a real burst of 5xx — takes those failures out of the figure along with everything else. The recorder is deliberately allowed to fail silently rather than break a request, so the worst incidents are the ones this number understates most.
  • It says nothing about how fast an answer was. The latency figures below are a separate measurement with separate limits of their own.

We publish no uptime commitment, and this strip is not one. The incident log is where an outage is actually described, because a person writes it.

Incidents

Written by hand, so this page carries what we found and wrote down: the strip above counts requests and cannot say why a day was bad. Each report says what went wrong, who it reached and what changed afterwards. The Atom feed at /status.rss carries the same entries.

  • Four datasets stopped refreshing and nobody was told

    Four datasets behind the answers had stopped refreshing, the oldest copy dating from 6 September, and the daily check that exists to catch exactly that reached nobody. A fifth was flagged by a freshness window set too tight.

    16 Oct 2026

  • Two datasets had stopped syncing and nothing said so

    Two weekly data syncs were failing, and because a scheduled background task throws its output away, the failures left no trace anywhere. The datasets were missing from the status page before anyone noticed.

    8 Sep 2026

  • IP answers lost their location and network flags

    Files a scheduled job had synced correctly were written into directories the web process could not enter, so IP lookups answered with no location and no network operator, and the datacenter, VPN and Tor flags read false.

    5 Sep 2026

  • Documentation and content pages answered 500 in production

    A class the app loads at runtime was only installed for development, so every documentation page, content page and the sitemap failed on the production server while the lookup endpoints kept answering.

    3 Sep 2026

The full incident history

Measured latency

Time spent inside the service per request, recorded after each response is sent. It excludes the network between you and us. Percentiles cover the requests we answered: a refused key, a rate limit or a validation error returns in a millisecond or two and is no evidence that the API is fast, so refusals are counted in the success rate instead. Groups appear once they have at least 20 requests in the window.

endpoint group windowp50p95 success rate requests
Not enough requests in the last 24 hours to publish a figure.

Measured quality

Everything above says whether we answered, and how fast. These say something harder and much smaller: how often the answer was right. Each product is measured a different way, because the honest measurement available differs by product, and each one below states what it is counted from, over what window, and what it cannot tell you. None of them is an accuracy rate, and we do not have one. They are measured once a week rather than live, so each carries the date it was taken, and they are not part of the JSON above.

Email verification: what senders came back and told us

Too little has been reported to publish a share: 0 reported outcomes on addresses we had called deliverable, from 0 accounts. A share appears here once there are 100 of them, from at least 3 accounts, with no single account more than 50% of them. Of the 15 addresses verified in the last 30 days, 0 were reported back on: 0.0%. 0 outcomes arrived in that window in total; an outcome can be about an address verified before it, or be a second report about one address, so that count is not divided by anything.

Each row counts the outcomes reported for addresses carrying that verdict when the report arrived, so read a row against its own verdict: a bounce after deliverable is us being wrong, a bounce after undeliverable is us being right about an address somebody sent to anyway, and risky is the verdict that says we did not know. The last row is an outcome for an address we had given no verdict inside the window.

verdict we gave reported delivered reported bounced bounce share
We said deliverable00—
We said risky00—
We said undeliverable00—
No verdict on file00—

What it does not say. This is not an accuracy rate and must not be read as one: it counts only the outcomes customers chose to send back, and a bounce breaks a send and gets filed while a delivery is silence, so the share is biased upwards by an amount nobody can measure. It is also blind in one direction — an address we called undeliverable that would have been fine never gets reported, because nobody sends to it. Only what a customer's own mail system observed and filed counts here; outcomes typed into our dashboard are left out of the pooled figure on purpose. A verdict whose reports are too few, come from too few accounts, or come mostly from one of them shows a dash rather than a confident number: a rate over a handful of reports would move a percentage point per report, and three accounts where one of them holds nearly every row is a single customer's mail performance wearing a pooled figure's clothes. And the count it is weighed against is matched address by address, so a report that names a different spelling of a mailbox we verified reads there as never heard back — it understates how much comes back, which is the safe direction for a number whose job is to show how little does.

measured 18 Oct 2026, over 90 days of reports

Business verification: the register round trip

Every Sunday we take identifiers straight out of each installed register's own file and ask for them back through the ordinary lookup. It checks our plumbing, not a register: the file is written into our tables by one code path and read by another that folds what it is given, so an identifier stored in a shape the fold never produces would answer "not on the register" for every company in it, silently and with no error at all. A share of 100% means the round trip holds.

register sampled found again
Legal Entity Identifiers (GLEIF Level 1)2,0002,000 (100.0%)
UK companies (Companies House)2,0002,000 (100.0%)

What it does not say. It is a check on ourselves, so it says nothing about whether a register is complete or current — a company that was never filed in it is not in this measurement at all, and how old our copy is belongs to the freshness table below. Nor does it say the register is right about the company: we can only report what the publisher filed, and where two registers disagree an answer quotes both sides rather than picking one.

measured 18 Oct 2026, up to 2,000 identifiers per register

Measured on their own product pages

The other three measurements are published in full where the product they measure is described, so each figure lives in one place.

  • Address verification: the weekly register round trip

    The same check as the business one above, on postal addresses: rows taken out of each installed register's own file and sent back through the lookup. It is not a measure of how much of a country a register carries, and we do not have one.

  • Phone validation: shares of the regulators' tables

    How much of each installed numbering table can settle an answer — the share of blocks that are allocated, that name a holder, that fix a line type. Counted over the tables themselves, never over real traffic.

  • IP intelligence: agreement with operators' own declarations

    How often the location database agrees with the locations network operators publish for their own ranges. Agreement with a declaration is the best public reference there is; it is not ground truth about where a person sits.

Data freshness

Every answer names the datasets it used; this is the version each one carries. Where the publisher stamps its own release date in the file — a census snapshot, a quarterly register — that date is shown, so an old date can still be the newest release there is; otherwise it is the day we last built or synced the copy. Feed groups show the oldest sync date among the feeds they download, so the whole group is at least that fresh; a list that ships with the app is not synced, so it dates a group only when nothing else in that group is. A register published in several files, such as Brazil's 27 states, is counted the same way and shows a date only once every file has synced. Each row is judged against the same freshness window the daily sweep alerts us on, set from the sync's own schedule plus, where the date is the publisher's, the publisher's release cycle: for a copy dated by our own sync, current means the latest scheduled run landed, and a single missed run turns the row stale here rather than leaving a date you have to check yourself. A list we curate by hand — the sanctions and FATF lists, the satellite and mobile networks, the address formats — is judged against a review window instead, and reads stale once its check is overdue; the FATF lists' window counts from the plenary they reflect rather than the day we checked them, so they turn stale soon after the next plenary however recently they were checked. A version that is not a date — a library's semver, a publisher's release number — carries no age and is marked "not dated" rather than stale.

datasetversionfeedsstate freshness
IP geolocation, city 2026-10-01 installedcurrent
IP networks, ASN 2026-10-01 installedcurrent
ASN prefix index 2026-10-02 installedcurrent
Tor exits 2026-10-202 installedcurrent
Datacenter and cloud ranges 2026-10-2013 installedcurrent
VPN exits 2026-10-209 installedcurrent
iCloud Private Relay egress 2026-10-201 installedcurrent
Anycast ranges 2026-10-204 installedcurrent
Registry allocations 2026-10-205 installedcurrent
Threat blocklists (Spamhaus, abuse.ch) 2026-10-204 installedcurrent
Crawler ranges (Google, Bing, OpenAI, Perplexity, DuckDuckGo, Ahrefs) 2026-10-2012 installedcurrent
Discovered operator geofeeds 2026-10-181 installedcurrent
Corporate proxy ranges (Zscaler) 2026-10-208 installedcurrent
Tor exit history 2026-10-201 installedcurrent
Satellite operators 2026-09-121 installedcurrent
Mobile carriers 2026-09-121 installedcurrent
Attack-source lists 2026-10-203 installedcurrent
Compliance lists (OFAC, FATF) 2026-09-12 installedcurrent
GeoNames places (time zones, other names of towns) 2026-10-03 installedcurrent
Disposable email domains 2026-10-19 installedcurrent
Role addresses 2026-10-19 installedcurrent
Free mailbox providers 2026-10-19 installedcurrent
Phone numbering metadata 9.0.41 installednot dated
US number blocks (NANPA) 2026-10-19 installedcurrent
Canadian number blocks (CNAC) 2026-10-18 installedcurrent
UK number blocks (Ofcom) 2026-10-15 installedcurrent
French number blocks (ARCEP) 2026-10-19 installedcurrent
Australian number blocks (ACMA) 2026-10-19 installedcurrent
Dutch number blocks (ACM) 2026-10-19 installedcurrent
New Zealand number blocks (NAD) 2026-10-19 installedcurrent
Mexican number blocks (CRT, formerly IFT) 2026-10-19 installedcurrent
Polish number blocks (UKE) 2026-10-19 installedcurrent
Italian number blocks (MIMIT) 2026-10-12 installedcurrent
US rate centre names (NANPA) 2026-10-18 installedcurrent
North American area codes (NANPA) 2026-10-19 installedcurrent
Disposable phone numbers 2026-10-20 installedcurrent
US unwanted-call complaints (FTC) 2026-10-16 installedcurrent
Legal Entity Identifiers (GLEIF Level 1) 2026-10-17 installedcurrent
UK companies (Companies House) 2026-10-01 installedcurrent
Postal formats and postcode patterns 2026-09-05 installedcurrent
Postal box and delivery-point naming 2026-09-17 installedcurrent
US addresses (National Address Database) 2026-10-15 installedcurrent
French addresses (Base Adresse Nationale) 2026-10-17 installedcurrent
Swiss addresses (building directory) 2026-10-17 installedcurrent
Austrian addresses (Adressregister) © Österreichisches Adressregister, Stichtagsdaten vom 01.10.20262026-10-01 installedcurrent
Czech addresses (RÚIAN) 2026-09-30 installedcurrent
Norwegian addresses (Matrikkelen) 2026-10-10 installedcurrent
GB streets and postcode places (OS Open Names) 2026-10-01 installedcurrent
Belgian addresses, Flanders (BeST) 2026-10-17 installedcurrent
Belgian addresses, Wallonia (BeST) 2026-10-17 installedcurrent
Belgian addresses, Brussels (BeST) 2026-10-17 installedcurrent
Luxembourg addresses (BD-Adresses) 2026-10-17 installedcurrent
Australian addresses (G-NAF) 2026-08 installedcurrent
Latvian addresses (State Address Register) 2026-10-17 installedcurrent
Berlin addresses (Geoportal Berlin) 2026-10-01 installedcurrent
North Rhine-Westphalia building references (Geobasis NRW) 2026-10-01 installedcurrent
Rhineland-Palatinate house coordinates (LVermGeoRP) 2026-03-30 installedcurrent
Dutch addresses (BAG) 2026-09-08 installedcurrent
Danish addresses (Danmarks Adresseregister) 2026-09-26 installedstale, 24 days old
US house-number ranges (TIGER/Line) 2026-10-06 installedcurrent
Brazilian addresses (IBGE CNEFE 2022) 2024-05-1727 installedcurrent
GB postcodes (ONS Postcode Directory) 2026-08 installedcurrent
Postcodes outside Great Britain (GeoNames) 2026-10-17108 installedcurrent
Companies per address 2026-10-01 installedcurrent
Mailbox operator branches 2026-10-17 installedcurrent