vatnode vs Vatstack
Vatstack validates the number and stops. vatnode returns everything you need to issue a legally compliant invoice — local VAT name, abbreviation, all rate tiers, currency — in a single API call.
What you get in one API call
{
"valid": true,
"vatId": "IE6388047V",
"countryCode": "IE",
"countryName": "Ireland",
"companyName": "GOOGLE IRELAND LIMITED",
"companyAddress": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
"source": "VIES",
"checkId": "019d2a8c-5f3a-7d12-a901-bc23de456f78",
"verifiedAt": "2026-03-30T10:00:00.000Z",
"countryVat": {
"vatName": "Value Added Tax", // local tax name — print on Irish invoices
"vatAbbr": "VAT", // abbreviation your UI needs
"currency": "EUR", // ISO 4217
"standardRate": 23,
"reducedRates": [9, 13.5],
"superReducedRate": null, // included for all 27 countries
"parkingRate": null, // included for all 27 countries
"vatNumberFormat": "IE + 8-9 chars",
"vatNumberPattern": "^IE[0-9A-Z+*]{7}[A-Z]{1,2}$",
"ratesUpdatedAt": "2026-03-30"
}
}Vatstack does not return vatName, vatAbbr, superReducedRate, parkingRate, or currency in the validation response. You maintain a separate lookup table or make a second API call.
Feature Comparison
| Feature | vatnode | Vatstack |
|---|---|---|
| Local VAT name in response (Umsatzsteuer, TVA, ALV…) | ||
| VAT abbreviation (MwSt, TVA, ALV…) | ||
| Super-reduced rate in response | ||
| Parking rate in response | ||
| Currency (EUR, BGN, HUF…) in response | ||
| Webhook: COMPANY_NAME_CHANGED | ||
| Webhook: COMPANY_ADDRESS_CHANGED | ||
| VAT number format + regex pattern in response | ||
| German BZSt fallback (when VIES down) | ||
| EU VAT validation (VIES) | ||
| Company name + address | ||
| Standard + reduced rates in response | ||
| HTTPS on all plans | ||
| VAT monitoring + webhooks | From €19/mo | Paid plans |
| Uptime SLA | 99.9% | Not published |
| Entry paid plan | €19/mo — 1,000 req/mo | $15/mo — 500 req/mo |
Granular webhook events
vatnode fires specific events — not just "something changed". Subscribe to any VAT number and get notified precisely:
VAT_BECAME_INVALIDCustomer's VAT registration lapsed — stop applying reverse charge immediately
VAT_BECAME_VALIDPreviously invalid number reactivated — update invoice settings
COMPANY_NAME_CHANGEDLegal name changed — update your customer records and invoices
COMPANY_ADDRESS_CHANGEDRegistered address changed — update your records for compliance
German BZSt fallback
When the German VIES node is rate-limited or unavailable, vatnode automatically retries against the Bundeszentralamt für Steuern (BZSt). Your integration keeps working without any retry logic on your side. The response shows "source": "BZST" so you know which authority answered.
Try vatnode free — no credit card required
20 free API calls per month. See the full response for yourself.