VAT Validation with Make
For an n8n workflow, follow the n8n VAT validation guide.
Make (formerly Integromat) does not have a native VAT validation module. You can call Avatcado from any Make scenario using the HTTP module, which supports custom headers and JSON response parsing. No code required.
This guide walks through setting up a Make scenario that validates a VAT number and routes the result to different actions.
When to use this
Make is a good fit when you want to validate VAT numbers as part of a multi-step automation. Common use cases:
- Validate a VAT number when a new CRM record is created (HubSpot, Salesforce, Pipedrive)
- Validate when a form submission comes in (Typeform, Google Forms, Tally)
- Validate as part of a customer or partner onboarding scenario
- Periodic revalidation of existing records using a scheduled scenario
Setting up the HTTP module
Add an HTTP module to your scenario and configure it to call the Avatcado API.
1. Add the module
In your scenario, add a new module. Search for "HTTP" and select "Make a request" as the action.
2. Configure the request
- URL:
https://api.avatcado.com/v1/validate?vat_number={{vat_number}}(map the VAT number from a previous module) - Method: GET
- Headers: add a header with name
Authorizationand valueBearer avat_live_your_api_key - Parse response: set to Yes so Make exposes the JSON response fields as variables in subsequent modules
3. Test the module
Run the module once with a real or test VAT number. Make will display the parsed response. You should see data.valid, data.company.name, and data.country_code as available fields. A real Avatcado response looks like this:
{
"data": {
"valid": true,
"vat_number": "NL123456789B01",
"country_code": "NL",
"company": {
"name": "EXAMPLE B.V.",
"address": "KEIZERSGRACHT 100, 1015 AA AMSTERDAM"
},
"requested_at": "2026-08-07T10:30:00.000Z"
},
"meta": {
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"cached": false
}
}Every field under data becomes a mappable variable in later modules, referenced as {{2.data.valid}} or {{2.data.company.name}} (where 2 is the HTTP module's position in the scenario).
Using the result
After the HTTP module, use a Router to branch the scenario based on the validation result.
- Valid branch: add a filter that checks
data.validequals true. In this branch, update the CRM record with the registered company name fromdata.company.name. - Invalid branch: add a filter that checks
data.validequals false. Send a notification (Slack, email, or a task in your project management tool) so someone can follow up.
You can also skip the Router and use a single Filter module if you only need to act on one outcome (e.g., only notify on invalid numbers).
Handling errors and non-200 responses
The HTTP module in Make does not automatically fail a scenario on a non-200 status code unless you check "Evaluate all states as errors (except for 2xx and 3xx)" in the module's advanced settings. For VAT validation, decide deliberately: a 422 means the VAT number is malformed (checksum or format failure), and a 503 means the upstream registry (VIES, HMRC, or a national registry) is temporarily unavailable.
- 422 invalid_vat_format: Treat this as a user input error. Route it to a branch that flags the record for manual review instead of retrying automatically.
- 503 upstream_unavailable: Avatcado already serves a cached, stale result when one exists (check
meta.stalein the response). If there is no cached result, add a retry with Make's built-in error handler and a short delay before failing the run. - 429 rate_limit_exceeded: If you are validating many records in a loop, add a Sleep module between iterations or reduce the scenario's execution frequency to stay within your plan's rate limit.
Scheduled revalidation
VAT registrations can lapse, so periodic revalidation of existing CRM records is common practice for subscription businesses. Build a second scenario on a schedule trigger (for example, monthly) that:
- Retrieves a batch of existing accounts from your CRM with a Search Records module
- Uses an Iterator to loop over each account's stored VAT number
- Calls the same HTTP module pattern described above for each one
- Writes the updated validation result and timestamp back to the record
A monthly revalidation cadence is long enough that the scenario mostly hits fresh upstream data rather than the cache, which is the point: you want to catch VAT numbers that were deregistered since the last check.
Limitations
- Not built for bulk backlogs. Make supports iterators and aggregators for processing multiple items within a single scenario run, but each item still makes a separate HTTP request and counts against your Make operations quota. For validating thousands of existing records in one pass, the Avatcado batch endpoint (up to 50 numbers per request) is far more efficient, and the async endpoint handles even larger volumes via webhooks.
- No native retry/backoff. Unlike a purpose-built SDK, Make's HTTP module does not retry failed requests automatically. You need to configure Make's error handler directives (Resume, Ignore, Rollback, Break, Commit) explicitly if you want resilience against transient upstream failures.
- Field mapping is manual. Every response field you want to use downstream must be mapped explicitly in each subsequent module. There is no schema validation to catch a typo in a mapped field name until the scenario runs and the field resolves to empty.
Get started
Create a free Avatcado account →
Read the API documentation for the full endpoint reference. For a broader overview of CRM integration patterns, see the CRM validation guide.
Frequently asked questions
Does Make have a native VAT validation module?
No. You call Avatcado from Make (formerly Integromat) using the generic HTTP module, which supports custom headers and JSON response parsing, so no code is required. The setup: add an HTTP 'Make a request' module, set the URL to the Avatcado validate endpoint with the VAT number mapped from a previous module, choose GET as the method, add an Authorization header of Bearer plus your API key, and switch 'Parse response' to Yes. That last setting is the important one, because it makes every response field a mappable variable in later modules, referenced like {{2.data.valid}} or {{2.data.company.name}} where 2 is the HTTP module's position in the scenario. From there, the typical scenario adds a Router with a valid branch (update the CRM record with the registered company name) and an invalid branch (notify someone to follow up). Common triggers include new CRM records, form submissions, partner onboarding scenarios, and scheduled revalidation runs.
How do I route a Make scenario based on whether a VAT number is valid?
After the HTTP module, add a Router with two branches, each guarded by a filter on the parsed response. The valid branch filters on data.valid equals true and typically updates the CRM record, writing the registered company name from data.company.name back to the account. The invalid branch filters on data.valid equals false and sends a notification (Slack, email, or a task in your project tool) so someone can follow up. If you only need to act on one outcome, skip the Router and use a single Filter module instead. One subtlety to get right: routing on data.valid only works for 200 responses, and Make's HTTP module does not treat non-200 statuses as errors unless you enable 'Evaluate all states as errors (except for 2xx and 3xx)' in its advanced settings. Decide deliberately how a 422 invalid_vat_format (malformed input, flag for manual review) and a 503 upstream_unavailable (registry down, retry via an error handler) should route, so they do not silently fall through a filter.
Is Make suitable for validating large numbers of VAT records?
Make handles moderate volumes better than Zapier: iterators and aggregators let a single scenario run loop over a batch of CRM records, and a scheduled scenario that searches records, iterates their VAT numbers, and writes results back is a workable monthly revalidation pattern. But each iteration still makes a separate HTTP request and consumes Make operations against your plan's quota, and the HTTP module has no automatic retry or backoff, so resilience against transient upstream failures means configuring Make's error handler directives (Resume, Ignore, Rollback, Break, Commit) yourself. For thousands of records in one pass, the Avatcado batch endpoint is far more efficient: up to 50 numbers per request on Pro and Business plans with per-item results, and the async endpoint raises that to 200 or 1,000 per submission with delivery via webhook. The practical split: use Make for event-driven validation and modest scheduled sweeps, take genuine backlogs straight to the batch API, and add a Sleep module between iterations if a loop approaches your rate limit.
Sources
- HTTP app (Make a request module) Make, accessed August 13, 2026
- Router Make, accessed August 13, 2026
- Resume error handler Make, accessed August 13, 2026
- Make pricing (operations) Make, accessed August 13, 2026
Related guides
Validate VAT Numbers in Your CRM
How to add real-time VAT number validation to CRM account creation and lead qualification workflows. Covers Salesforce, HubSpot, and no-code automation tools.
VAT Validation with Zapier
How to validate VAT numbers in a Zapier workflow using the Webhooks by Zapier action and the Avatcado REST API. No code required.
Salesforce VAT Validation
How to validate VAT numbers inside Salesforce using Apex HTTP callouts. Covers Named Credentials and writing the validated company name back to Account records.
VAT Number Validation for Xero and QuickBooks
Neither Xero nor QuickBooks validates VAT numbers on contacts against a government registry. Learn the gap and how to add validation with Avatcado.