EuroScrape

← All articles

Zero-rating an intra-EU invoice? Without a VIES consultation number, you may owe the VAT yourself

cover

When an EU business sells B2B to another member state, the invoice usually goes out without VAT - the customer self-accounts for it. One condition: the seller must have verified the customer’s VAT number in VIES, the European Commission’s registry. If the number turns out invalid and you can’t prove you checked, the tax authority can make you pay the VAT.

VIES has a public page, but checking 300 customers by hand every quarter is nobody’s idea of a job. So I built a bulk validator on Apify: EU VAT Number Validator (VIES). A few things I learned about the API on the way:

curl -X POST https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number \
  -H 'content-type: application/json' \
  -d '{"countryCode":"IE","vatNumber":"6388047V","requesterMemberStateCode":"FR","requesterNumber":"40303265045"}'

A real answer:

{
  "valid": true,
  "name": "GOOGLE IRELAND LIMITED",
  "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
  "requestIdentifier": "WAPIAAAAaD5Jk8-i"
}

That requestIdentifier only appears when you pass your own VAT number as requester. It is the consultation number: the Commission’s dated record that you performed the check. Store it next to the invoice; it’s exactly what an auditor asks for.

Quirks worth knowing

Monitoring beats checking

A VAT number isn’t valid forever - companies deregister, merge, go bankrupt. The validator has a monitor mode: schedule it monthly on your customer list, and it flags became_invalid numbers and pushes a Telegram/Slack/webhook alert, before the next invoice goes out wrong.

1,000 checks cost about $2, consultation proof included. Input templates and sample outputs: github.com/EuroScrape/apify-actors.


Part of the EuroScrape actor collection — all articles.

The data in this article comes from the EuroScrape Actors on Apify Store: pay per result, no subscription. See all the Actors.