API
Company data in your own systems
The same 3.6 million companies as in the portal, through a REST API that speaks JSON. Search is free, revealing contacts costs 1 credit per company, and anything your organization already revealed stays free.
Endpoints
Five endpoints, one data model
Base URL https://api.bizstackdata.com. Authenticate with a bearer key from the portal.
-
GET
/v1/companies/searchSearch by name, SBI, province, city, postcode, size, legal form, founding year and available contact fields.
Cost: Free -
GET
/v1/companies/{registration_number}The profile of one company by KVK number.
Cost: Free -
POST
/v1/companies/contactsEmail, phone, website and contact person for a list of KVK numbers.
Cost: 1 credit per company -
GET
/v1/usageYour allowance in the current period, split by portal and API.
Cost: Free -
GET
/v1/openapi.jsonThe full specification as an OpenAPI 3.1 document, no key needed.
Cost: Public
Example
Search in cURL, JavaScript or Python
Bakeries in Utrecht with a known email address. The response holds no contact values, only whether they are available.
curl --request GET \
--url 'https://api.bizstackdata.com/v1/companies/search?sbi=1071&province=Utrecht&has=email&limit=25' \
--header 'Authorization: Bearer YOUR_API_KEY'
const res = await fetch('https://api.bizstackdata.com/v1/companies/search?sbi=1071&province=Utrecht&has=email&limit=25', {
headers: { Authorization: `Bearer ${process.env.BZD_API_KEY}` },
});
const { data, meta } = await res.json();
import os, requests
res = requests.get(
'https://api.bizstackdata.com/v1/companies/search?sbi=1071&province=Utrecht&has=email&limit=25',
headers={'Authorization': f"Bearer {os.environ['BZD_API_KEY']}"},
)
print(res.json()['data'])
{
"data": [
{
"registration_number": "34512879",
"legal_name": "Bakkerij Voorbeeld B.V.",
"employees": "2-10",
"address": { "city": "Utrecht", "province": "Utrecht" },
"availability": { "email": true, "phone": false, "website": true, "contact_person": false }
}
],
"meta": { "count": 1, "total": 34, "credits_charged": 0 }
}
Details
Built for production
-
API keys
Live and test keys per organization, created and revoked in the portal. We only store a hash.
-
Rate limits
600 requests per minute per key. Going over returns 429 with a clear error code.
-
Request logs
Every call is listed in the portal with its request_id, status and credits used.
-
Sandbox
bzd_test_ keys return sample data in the same format and are never charged.
Documentation
The full reference with parameters, error codes and examples lives in the portal. The OpenAPI document is public.