Blog
Receipts, published as we collect them.
Benchmark methodology, honest data notes, and what we learn building a validation API in public.
LatestIPv4 vs IPv6: what developers actually need to know
The practical differences you actually hit in code — notation, address space, :: compression, embedded IPv4 — and why every field that takes an IP now has to accept both.
Validate a phone number in Ruby with phonelib
Validate a phone number in Ruby with the phonelib gem: check validity, format to E.164, and read line type locally for free, plus when to reach for an API.
September 3, 2026 · 4 min read · Thomas TsuiWhat bad phone data actually costs an outbound team
The cost of a wrong "valid" is never the credit — it is the rep-minutes, the routing spend and the forecast it quietly inflates. Here is how to price it with your own numbers.
September 2, 2026 · 5 min read · Thomas TsuiHow to validate a phone number in PHP
Validate a phone number in PHP with libphonenumber-for-php: parse, check validity, format to E.164, and read the line type — plus the honest line where an API earns its place.
August 31, 2026 · 5 min read · Thomas TsuiHow to validate a phone number in Java with libphonenumber
Validate a phone number in Java with Google's libphonenumber — isValidNumber, E.164, and line type — plus where an honest API fits past it: one contract across languages, with carrier and HLR named honestly, not faked.
August 28, 2026 · 5 min read · Thomas TsuiHow to validate a phone number in Go
Validate a phone number in Go with nyaruka/phonenumbers: parse, check validity, format to E.164, and read line type in-process for free. Plus where an API fits.
August 26, 2026 · 6 min read · Thomas TsuiWhat is phone line type? Mobile, landline, and VoIP
Phone number line type tells mobile from landline from VoIP. Learn where it comes from, what libphonenumber's labels mean, and where the plan can't tell.
August 24, 2026 · 5 min read · Thomas TsuiWhat is phone number porting (and why it breaks carrier lookups)?
Phone number porting moves a number between carriers while keeping the digits — the reason offline carrier lookups from libphonenumber quietly go stale.
August 21, 2026 · 5 min read · Thomas TsuiWhat is an HLR lookup? The live query behind whether a number rings
An HLR lookup is a live query to a carrier's Home Location Register: the only way to know a mobile number is active and reachable — metadata can't say.
August 19, 2026 · 5 min read · Thomas TsuiValidate a phone number in C# with libphonenumber-csharp
Validate a phone number in C# with libphonenumber-csharp: parse, check validity, format to E.164, and read line type — plus where an API honestly fits.
August 17, 2026 · 5 min read · Thomas TsuiHow to validate email, phone and IP in n8n
Validate email in n8n with the built-in HTTP Request node: configure the POST call, store your key in a credential, then branch on the result with an IF node.
August 14, 2026 · 5 min read · Thomas TsuiHow to validate phone numbers in Clay
Add phone validation to a Clay table with an HTTP enrichment column — no native app needed. Normalize to E.164, route by line type, and see exactly which checks ran.
August 12, 2026 · 5 min read · Thomas TsuiHow to normalize phone numbers to E.164
Normalize phone numbers to E.164 with libphonenumber in JavaScript and Python: parse messy input, supply a default region, and store the canonical +cc form once.
August 10, 2026 · 4 min read · Thomas TsuiHow to clean a phone number list before an outbound campaign
Clean a phone number list before you dial: bulk-validate with /v1/bulk/phone, drop unparseable rows, segment by line type. Metadata-grade, honestly bounded.
July 27, 2026 · 4 min read · Thomas TsuiCheck if an IP address is valid in Python
Validate an IP address in Python with the stdlib ipaddress module — check format, version, and whether it's private, loopback, reserved, or globally routable.
July 24, 2026 · 5 min read · Thomas TsuiHow to validate a phone number in Python
Validate a phone number in Python with the phonenumbers library: parse, check is_valid_number, and format to E.164 — plus the honest line where an API helps.
July 22, 2026 · 5 min read · Thomas TsuiHow to validate an email address in PHP
Validate email in PHP the right way: filter_var for syntax, checkdnsrr for MX, then an API for disposable and role detection. Real code, honest boundaries.
July 20, 2026 · 5 min read · Thomas TsuiHow to validate an email in Node.js (without fooling yourself)
Validate an email in Node.js the honest way: a regex for shape, dns.resolveMx for the domain, and an API for disposable and role checks. Real code, no lies.
July 18, 2026 · 5 min read · Thomas TsuiChoosing a phone validation API for outbound sales
The best phone validation API for outbound isn't the flashiest one — it's the one honest about what it checked. What to evaluate, and who's good at what.
July 18, 2026 · 5 min read · Thomas TsuiHow to block disposable email at signup
Read the disposable flag from one API call at signup, then choose to block, review, or tag — and handle the honest limit: no blocklist is ever complete.
July 18, 2026 · 5 min read · Thomas TsuiBulk phone number validation for outbound sales teams
Run your whole call list through one job: drop impossible numbers, normalize to E.164, and route by line type. Free 250 rows per job, no card, metadata-grade.
July 18, 2026 · 5 min read · Thomas TsuiHow to clean an email list before a cold outreach campaign
Clean your email list before cold outreach: bulk-validate to remove syntax, no-MX, disposable and role addresses before they bounce and sink sender reputation.
July 18, 2026 · 5 min read · Thomas TsuiHow to detect and stop fake account signups
Detect fake signups with a layered playbook: build honeypots and per-IP velocity limits yourself, then add disposable-email, phone, and IP signal checks.
July 18, 2026 · 6 min read · Thomas TsuiHow to detect VoIP phone numbers
Detect VoIP phone numbers with line-type metadata — flag numbers in VoIP-designated ranges before you dial, and stay clear on the VoIP metadata can't catch.
July 18, 2026 · 5 min read · Thomas TsuiDNC scrubbing vs phone validation: what's the difference?
DNC scrubbing checks numbers against Do-Not-Call registries. Phone validation checks a number is well-formed and its line type. Two jobs, run them in order.
July 18, 2026 · 4 min read · Thomas TsuiThe perfect email validation regex is a myth (RFC 5322 and what to do instead)
The perfect email validation regex doesn't exist. See why RFC 5322 fails both ways, a short strict-enough pattern with a 254 cap, and the checks that matter.
July 18, 2026 · 5 min read · Thomas TsuiEmail validation vs verification vs deliverability
Email validation, verification, and deliverability are three different things. Here is what each layer actually checks, and why an SMTP "yes" so often lies.
July 18, 2026 · 5 min read · Thomas TsuiLandline vs mobile: telling them apart before you dial or text
Route SMS to mobiles and calls to landlines. See how line_type metadata splits landline vs mobile — and where it honestly abstains and needs a live check.
July 18, 2026 · 6 min read · Thomas TsuiMulti-signal signup fraud prevention: phone, email, and IP
Combine disposable-email, phone plausibility, and IP classification into a signup-fraud risk score — plus a plain note on what Boundstone doesn't check.
July 18, 2026 · 5 min read · Thomas TsuiTCPA and cold calling: where phone validation fits (and where it does not)
TCPA phone validation, scoped honestly: it drops invalid numbers and segments by line type—but it isn't DNC scrubbing, consent, or legal advice.
July 18, 2026 · 5 min read · Thomas TsuiValidate an email address in Python: regex, stdlib, and API
A practical guide to checking email addresses in Python — the regex everyone pastes, the standard-library trap, the MX lookup that actually helps, and the checks no local code can do. With honest notes on what each layer proves.
July 18, 2026 · 4 min read · Thomas TsuiCheck if an IP address is valid in Node.js: stdlib, regex, and classification
How to validate an IP address in Node.js — why net.isIP beats a regex, how to handle IPv4 and IPv6, and the difference between a valid address and a trustworthy one.
July 18, 2026 · 5 min read · Thomas TsuiHow to validate leads before they hit your CRM
Bulk-validate email and phone at import so provably-bad rows never reach your CRM: drop the junk, normalize phones to E.164, and segment cleanly by line type.
July 18, 2026 · 4 min read · Thomas TsuiPhone number validation in JavaScript: regex, libphonenumber, and E.164
How to validate phone numbers in JavaScript — why the regex you found won't hold up internationally, how libphonenumber-js does it properly, and an honest account of what metadata can and can't tell you.
July 18, 2026 · 5 min read · Thomas TsuiWhat is a honeypot field?
A honeypot field is a form input hidden from humans but filled by bots. Learn how to build one, why it costs nothing, and the fraud it still can't catch.
July 18, 2026 · 5 min read · Thomas TsuiWhat is an MX record? And how email validation uses it
An MX record is the DNS record naming a domain's mail servers. Here's how MX priority, the A-record fallback, and a live MX lookup power email validation.
July 18, 2026 · 6 min read · Thomas TsuiWhat is a disposable email address (and what it costs you)?
A disposable email address is a throwaway inbox like Mailinator or Guerrilla Mail. Learn why they cost you, how detection works, and where it falls short.
July 18, 2026 · 4 min read · Thomas TsuiWhat is E.164? The phone number format, explained
E.164 is the international standard format for phone numbers. Here's what it is, how it's structured, why you should store numbers in it, and how to convert a number to E.164 correctly.