VIES and VAT numbers: selling to EU companies without getting the invoice wrong

Selling to a German or French company without charging Spanish VAT is perfectly legal — provided three conditions hold at once, which almost nobody checks together: you are in the ROI, the customer's VAT number is valid in VIES, and the invoice says so correctly. Miss any one of them and your "VAT-free" sale becomes a sale with uncollected VAT… paid by you.

First: your own registration (ROI)

To operate intra-community you must be in the Registro de Operadores Intracomunitarios (a checkbox on form 036). Without ROI, your Spanish tax number does not appear in VIES and your EU suppliers will charge you their local VAT — recoverable only the slow way. Registration can take weeks and sometimes triggers a census visit: apply before you need it.

Second: the customer's VAT number, validated in VIES

VIES is the EU database confirming whether a VAT number is active for intra-community transactions. Your exemption rests on that number being valid on the date of the transaction:

Keep dated proof of the validation — your defence if the customer is deregistered later. InvoSeal validates the VAT number against VIES right on the recipient's record and keeps the evidence: one click, and the invoice comes out with the correct treatment — always bilingual (customer's language + Spanish).

Third: the invoice mention and form 349

Mistakes we see daily

1. Validating the VAT number once and never again: numbers lapse and get revoked. 2. Invoicing EU companies VAT-free without your own ROI registration. 3. Mixing up goods (exemption, art. 25) and services (reverse charge): the mention differs. 4. Skipping the 349 "because it's already in the 303".

New EU customer? Create the recipient → VIES button → invoice. And for any odd case (VAT number pending, triangular deals): open a Support ticket before issuing.

Want to sort it out today?

InvoSeal complies with RD 1007/2023 in VeriFactu and Non-VeriFactu mode from day one. Statement of Responsibility published.

Try InvoSeal →
← Back to blog