Changelog

What changed, and when. Written from your side rather than ours: not "refactored the waterfall", which is a fact about our week, but what it does to your bill.

Last shipped 2026-08-30, 8 days ago.

Proofwire in n8nadded2026-08-30

A community node, installable from Settings - Community Nodes as n8n-nodes-proofwire. Email verification and finding, phone, IP and company profiles, each paired back to the row it came from. The node emits the verdict as a field rather than throwing on an inconclusive one, so it feeds a Switch with three outputs instead of an IF with two - an IF cannot express a catch-all domain, which is the case worth catching. Every call carries an idempotency key derived from the execution, so an n8n retry replays the stored answer rather than spending again. Zapier and Make are being built; neither is listed yet, and those directories publish on their own review schedule rather than ours.

The TypeScript client described fields the API does not sendfixed2026-08-30

Version 0.2.0 corrects the response types, and anyone on 0.1.0 should update. IpAttributes.operator and PhoneAttributes.country do not exist - the API sends asnOrg and countryCode - so both were undefined at runtime while TypeScript insisted they were strings. lineType omitted satellite and unknown, and ProviderTrace.status omitted not_applicable, which is the status behind most unbilled calls. Nine further fields the API does return were missing entirely, among them recent SIM swap, do-not-call listing, domain age and suggested correction. The renames break compilation for anyone who read them, which is why this is 0.2.0 and not a patch: failing to build is better than reading undefined. The Python client was unaffected. A check now asserts the client types identical to the ones the API returns, in both directions, and runs on every typecheck.

Email finder that checks instead of guessingadded2026-08-29

POST /v1/find-email takes a name and a domain and returns the address, or nothing. Other finders answer with the most common pattern and a confidence percentage attached to a guess; this probes each candidate and returns one only when the server accepted it and rejected a control address that cannot exist. It will find fewer addresses than they do - the ones it does not find are the ones they are wrong about. When the domain accepts every address, nobody can answer the question and you are not charged for it.

Company profilesadded2026-08-29

POST /v1/company takes a domain and returns what can be established about the company behind it: which operator handles their mail and what that implies for reaching them, how much of SPF, DMARC and DKIM is actually in place, when the domain was registered, and - if you send a VAT number - the registered legal name and address from the official EU registry. Everything comes from a source that will say where it got the answer, and every profile names what it could not establish. Five credits, and nothing at all when it establishes nothing.

Twenty more free toolsadded2026-08-29

Forty now, all still free with no signup and no quota. New this round: an SPF lookup counter that follows every nested include and tells you how close you are to the limit that fails silently; BIMI, MTA-STS, DNSSEC, CAA, NS and TXT record checks; an email normalizer and list deduplicator that catch the duplicates exact matching misses; toll-free, premium-rate and country lookups for phone numbers; and a CIDR calculator, range checker and bogon checker for networks. Every one says plainly what it cannot tell you.

Preview deployments no longer touch productionchanged2026-08-29

There is now a separate staging database and API, and preview builds of the site talk only to those. More usefully, an environment is enforced rather than labelled: anything not marked production refuses to start holding a live payment key or pointed at the production database, has its email provider removed so nothing reaches a real inbox, and has its upstream budget forced to zero so it cannot spend. Refusals in code, because a convention is what gets forgotten in a hurry.

Webhooksadded2026-08-28

Events for the one thing here that is genuinely asynchronous: bulk jobs finishing or failing, plus credit thresholds. Signed with HMAC-SHA256 and a timestamp, retried across about nine hours, and every attempt is recorded with the status code and the response body your server sent back. Delivery is at-least-once and unordered - dedupe on the event id. Signature verification ships in both SDKs, because that is the half that is easy to get wrong.

Sign-in attempts are now limitedsecurity2026-08-28

Password attempts were unlimited, which made every account worth as much as its owner's password reuse. They are now counted by address and by account - the per-address limit alone is defeated by having more addresses. Neither locks an account: a limit that locks you out is one somebody else can aim at you. A successful sign-in refunds its attempt, so using three devices in a morning costs nothing. The free tools got a ceiling too; they had none.

TypeScript and Python SDKsadded2026-08-28

`@proofwire/sdk` and `proofwire`, both with no runtime dependencies. Neither has a `result.valid` boolean, deliberately: it would file every inconclusive answer under "not valid", and inconclusive is the case worth surfacing. TypeScript will not compile a handler that forgets `unknown`; Python raises at the call site. Every request carries an idempotency key, so retrying after a timeout replays the answer instead of spending again.

MCP server for AI agentsadded2026-08-28

`@proofwire/mcp` puts validation inside Claude Desktop, Claude Code, Cursor and anything else speaking the Model Context Protocol. Twenty checks work with no account at all. Built around the observation that an agent is the worst possible consumer of a binary validator: a person told an address is valid still hesitates before sending, and an agent does not.

Welcome emails pointed at localhostfixed2026-08-28

Every link in every email we sent went to `http://localhost:3000`, because the app URL was never configured in production and the default is the developer one. Nothing failed and nothing warned. There is now a startup check for settings that are individually valid and wrong in combination, and `/status` reports whether it passes, so this class of mistake is visible from outside instead of hiding in a log nobody opens.

A guided first calladded2026-08-28

Signing up used to hand you a key and a dashboard of zeroes. There is now a first request you can run in about thirty seconds, and it deliberately defaults to a catch-all domain rather than a working address - a first response reading "valid" demonstrates nothing a cheaper provider would not also return.

A monthly ceiling on what we spend upstreamadded2026-08-28

Crossing it degrades rather than breaks: billed providers stop, the free tiers keep answering, and the verdict comes back inconclusive with a line saying why - unbilled, so nobody pays for the shallower answer. Trial accounts draw on a separate share, so however many appear, an account that paid for depth still gets it.

Legal pages, and the benchmark datasetadded2026-08-28

Terms, privacy, acceptable use and the full subprocessor list, with retention periods imported from the same constants the deletion job enforces - so the document cannot drift from the behaviour. The labelled benchmark dataset is downloadable in full, including the cases we get wrong.

Real upstreams replaced the simulatorschanged2026-08-27

Carrier lookups, mailbox probes and IP attribution now run against live data. Every one of them exposed a bug the simulator had hidden, because a simulator always returns something plausible. IP addresses no operator claims now come back unattributed rather than guessed at: null means "not known", not "no".

Landlines are no longer charged for a mobile queryfixed2026-08-27

A London landline was being sent to the mobile network, which answered with a carrier name and a positive signal for a number that was never on it. Non-mobile line types now skip that tier entirely and are not charged for it.

Prices rebuilt on published vendor rateschanged2026-08-27

The cost model used estimates. It now uses each supplier's published price, with the source and the date recorded next to the number, and a check that refuses to ship a plan priced below what it costs to serve.

Proofwireadded2026-08-26

Email, phone and IP validation with three-state verdicts. Every answer carries the evidence that produced it, inconclusive answers are never billed, and the accuracy benchmark is published with the dataset so anyone can rerun it.

Fixes are listed as plainly as features. A changelog that only ever announces good news reads as marketing, and the entries that earn the most trust are the ones admitting something was wrong — because the alternative reading, that nothing ever goes wrong, is one nobody believes.

Current availability is on the status page.