DGFiP: France VAT register
dgfipFrance publishes its list of active intra-Community VAT numbers as an open dataset rather than as a lookup service, and the list carries numbers and nothing else. So a French fallback is two calls: the dataset decides whether the number is active, and the public company search supplies the name and address to go with it.
DGFiP is run by the French Directorate General of Public Finances, and its data is published at data.economie.gouv.fr. It is one of the 10 national registers Avatcado consults on the Pro and Business plans when VIES cannot answer for France, and it never replaces a VIES answer that does arrive. The national registry fallback guide covers the full precedence order.
What DGFiP publishes
- A dataset of active French intra-Community VAT numbers, around 4.8 million rows, republished daily by the tax administration
- A queryable interface over that dataset, so a single number can be looked up without downloading the whole file
- No company details of any kind: the list is a set of numbers, which is why a second source is needed for the name and address
- The public company search run separately by the state, which resolves the company identifier inside a French VAT number to a name and a registered office address
How Avatcado uses it
A French fallback runs both calls at once. The dataset query decides validity: a hit means the number is on the current list of active intra-Community numbers, and nothing else in the response is consulted. The company search runs in parallel purely to enrich the answer, and it is allowed to fail. When it does, the validation is still served with source dgfip and company null rather than being held back, which is why France is the one register whose company data is conditional.
DGFiP answers per number, so Avatcado calls it while your request is open, with a 10 second timeout. There is no snapshot to go stale (queried live on the request), so a fallback answer reflects the register as it stood at that moment. If the register is slow or down as well, the request falls through to the cache.
The rule that matters most is that a register can only ever confirm a registration. A miss, whether DGFiP says not registered or simply has no record, is never turned into valid: false: the request falls through to the stored result instead. An answer that does come from here carries source: "dgfip" and source_status: "fallback", and no consultation_number field at all, because only VIES issues those.
What a DGFiP answer contains
| Field | DGFiP |
|---|---|
| Company name | Yes, when the company search answers |
| Company address | Yes, when the company search answers |
| Consultation number | No, VIES only |
Data quirks worth knowing
- VAT status from the DGFiP list of active intra-EU VAT numbers (refreshed daily)
- Name and address both come from the public company search (recherche-entreprises.api.gouv.fr), and the answer carries company null when that second call fails
- Validity and company details come from two different services, so a French answer can be confirmed and still carry no name
- The list is a daily republication, so a registration made in the last day or so can be genuine and not yet present
- The company identifier inside a French VAT number is what the company search is keyed by, and a search that returns a different identifier is discarded rather than used
Try it
Validating a France VAT number takes the same call whichever source answers it. This one uses FR 59 542 051 180, a real registered number:
curl "https://api.avatcado.com/v1/validate?vat_number=FR59542051180" \
-H "Authorization: Bearer avat_live_your_api_key"import Avatcado from "@avatcado/node";
const avatcado = new Avatcado("avat_live_your_api_key");
const { data, error } = await avatcado.vat.validate({
vatNumber: "FR59542051180",
});
if (data?.meta.source === "dgfip") {
// VIES was unavailable; DGFiP confirmed the registration.
console.log(data.meta.source_status); // "fallback"
}On an ordinary day that answer comes from VIES, with source_status: "live". Only when VIES cannot answer for France does DGFiP step in, and then meta.source_status reads "fallback" and meta.source reads "dgfip". The register fallback is included in the Pro and Business plans; the free tier covers 500 validations per month from VIES and the cache. Get an API key or read the API documentation.
Frequently asked questions
Where does the French list of intra-EU VAT numbers come from?
It is published by the French tax administration as an open dataset on the ministry's open data platform, and it holds the intra-Community VAT numbers that are currently active, refreshed daily. It is a list of numbers only, with no company details attached, and it is queryable one number at a time rather than only as a bulk download. Avatcado queries it during a French member state outage to decide whether a number is registered. Because the file is republished each day rather than updated live, a registration issued very recently can be legitimate and still missing, which is one more reason a miss is never served as invalid.
Why can a French fallback answer have no company name?
France is the only register in the fallback path where the VAT status and the company details come from two different public services. The dataset that decides whether the number is active carries no names or addresses, so the name and address are fetched from the state company search using the company identifier embedded in the VAT number. That second call can fail or time out on its own, and when it does the validation is still returned, with the company field null. The alternative would be to throw away a confirmed answer because an enrichment call was slow, which is the wrong trade during an outage.
Keep reading
Sources
- Numeros de TVA intracommunautaires francais (open dataset) French Directorate General of Public Finances (DGFiP), accessed September 4, 2026
- Recherche d'entreprises (public company search API) Direction interministerielle du numerique (DINUM), accessed September 4, 2026