Tax ID validation API for SaaS billing
The idea
Every SaaS selling into the EU or UK has the same grubby corner in its billing code: someone typed a VAT number at checkout, and now you either trust it, hand-check it on the VIES website, or write your own wrapper around a SOAP service that goes down weekly and rate-limits per member state. Getting it wrong is not cosmetic — reverse-charge treatment without validation evidence is a tax-audit finding. 1Lookup’s $230k MRR proves developers pay recurring usage fees for boring validation endpoints; it does phone, email, and IP, and leaves tax IDs untouched.
The wedge is reliability plus evidence: one REST call that hides VIES flakiness behind retries and cached fallbacks, merges UK registries into the same shape, and stores an immutable consultation record you can hand an auditor. That last part turns a utility into a compliance product, which is what makes it sticky.
Who pays
Developers and billing engineers at SaaS companies with EU/UK customers — the people integrating Stripe Tax adjacent logic who want validation plus proof, not a tax engine. Usage pricing from a free tier through $29-99/mo, metered via Stripe. Distribution is classic dev-tool inbound: a free VAT checker page targeting validate VAT number API searches, real docs, and being the accepted answer in the Stack Overflow and GitHub threads where everyone currently shares broken VIES wrappers.
MVP scope
- POST /v1/validate covering EU VIES, UK Companies House, and HMRC VAT
- Retries, circuit breaker, and stale-cache fallback around VIES
- Immutable evidence records with consultation IDs and CSV export
- Reverse-charge determination in the response
- API keys, usage dashboard, and Stripe metered billing
- Skip for v1: non-EU/UK registries, batch file uploads, webhooks, Zapier, SDKs beyond curl and one JS snippet
Build TaxCheck, a REST API that validates business tax IDs. Core flow: a developer signs up, gets an API key, and calls POST /v1/validate with a tax ID and country hint. The service normalizes the input (strip spaces, infer country prefix), routes to the right source — the EU VIES SOAP service for EU VAT numbers, the UK Companies House API for UK company numbers and HMRC for UK VAT — and returns a normalized JSON response: valid, company name, registered address, source, checked_at, and a consultation_id. Every check is written to Postgres as an immutable evidence record; GET /v1/evidence/:id returns it, and the dashboard exports audit CSVs. The response includes a reverse_charge boolean computed from the merchant's home country and the validated buyer country. Because VIES fails constantly, wrap it with retries, a circuit breaker, and a cached-result fallback that returns the last good check with a stale flag and its age. Stack: Node with Hono and TypeScript, Postgres, VIES SOAP plus Companies House and HMRC REST upstreams, Stripe metered billing per lookup. Pages: landing page with a free interactive VAT checker for SEO, docs, dashboard with usage, keys, and evidence export. Non-obvious details: VIES returns requester consultation numbers only when you pass your own VAT ID — collect it at signup because that number is the legally citable proof; queue and batch VIES calls per member state to dodge per-state rate limits. Pricing: free 100 checks/mo, $29/mo for 2,500, $99/mo for 15,000, then $0.01 per lookup.
// More Dev tool ideas
-
Screen recorder that writes bug reports
Vague bug reports burn developer hours; a recorder for non-technical teammates that captures clicks, console, and network, then writes the repro steps.
Search demandLowCompetitionLowCustomer valueLow -
Analytics for documentation sites
Docs teams fly blind on what readers can't find; lightweight analytics surfaces failed searches, dead-end pages, and the articles you should write next.
Market read pendingWe are still researching this idea. -
Deprecation countdowns for the APIs you use
Stripe and Shopify deprecations hide in changelogs until things break; this scans your code for affected calls and gives you a countdown.
Search demandLowCompetitionLowCustomer valueLow -
App store reviews filed as GitHub issues
Bug reports buried in app store reviews never reach the tracker; this clusters new reviews and files deduped GitHub issues nightly.
Search demandLowCompetitionLowCustomer valueLow