Aanmelden
Gratis account aanmaken
Wil je een indruk krijgen van de mogelijkheden van Innovatiespotter? Maak nu een gratis account aan en krijg een selectie van innovatieve bedrijven.
*: verplicht
Met een gratis account zie je van elke zoekvraag de eerste 10 resultaten. Wil je alle bedrijven zien en deze kunnen exporteren? Mail ons voor toegang tot alle gegevens en meer informatie.
Wil je een indruk krijgen van de mogelijkheden van Innovatiespotter? Maak nu een gratis account aan en krijg een selectie van innovatieve bedrijven.
*: verplicht
Vind snel de bedrijven die je zoekt
De Innovatiespotter is een krachtige online tool die 24/7 het internet afspeurt naar bedrijven die actief zijn met innovatie, technologie, en duurzaamheid.
Use our REST API to integrate our data with your datawarehouse or CRM and get advantage of our API exclusive capabilities
https://online.innovatiespotter.nl/api/companies?page_size=1
curl -u "email@example.com:password" \ "https://online.innovatiespotter.nl/api/companies?page_size=1"
{ "companies": [{ ... }], "count": 1, "total": 12345, "page": 1, "pages": 12345 }
bedrijventerrein
has_website_content
ecosysteem
keywords
has_website_content
Caption: API = API exclusive features • NEW = Recently added • BETA = Experimental
Advanced Filters (_exclude, _and): Enhanced Boolean logic for complex filtering scenarios, allowing precise data selection and exclusion criteria.
Bedrijventerrein: Comprehensive business park information including location details, environmental zones, and company counts for companies located on registered industrial estates.
Domeinsamenvatting (BETA): ML-generated company domain analysis and summaries based on website content, providing insights into business focus and activities.
Duurzaamheid: Sustainability classifications including SDG mappings, sustainability claims, and environmental certifications to identify environmentally conscious companies.
Innovatie-ecosysteem: Structured ecosystem data mapping companies to innovation networks, awards, patents, subsidies, and accelerator programs with historical tracking.
Keywords-Snippet: AI-powered content analysis providing highlighted search results with relevance scoring and context snippets from company websites.
sbi_code_exclude=09,139
themas_exclude=im_public_bouw
ecosysteem_exclude=rvo
bedrijventerrein=50001
has_website_content=true
ecosysteem_and=award,startup
keywords="innovation AI"
"Bedrijventerrein": { "rin_nummer": 50001, "plan_naam": "Amsterdam Science Park", "kern_naam": "Amsterdam", "gem_namen": "Amsterdam", "prov_namen": "Noord-holland", "aantal": 535, "milieuzone": "Onbekend" }Domeinsamenvatting (BETA):
"Domeinsamenvatting": { "inbiome.com": "This company specializes in molecular diagnostics and microbiome analysis using their patented Molecular Culture technology..." }Duurzaamheid data:
"Duurzaamheid": { "Duurzaamheidsclaims": ["Keurmerk", "Richtlijn"], "SDG's": {"dz_sdg_sdg13": "SDG 13"}, "Duurzaamheidsthema's": [] }
"Innovatie-ecosysteem": { "netwerk_life-science-at-work": "LifeSciences@Work", "patent_patenten-rvo": "Patent", "subsidie_rvo_eurostars-2020": "EUROSTARS (2020)" }Keywords-Snippet data:
"Keywords-Snippet": "Partnerships and services to drive ##HLS##innovation##HLE##. At inbiome research and development is at the heart of...", "Keywords-Matched": ["innovation", "environment"], "Score": 6.917399
Note: Keywords snippets use ##HLS## and ##HLE## markers to highlight matching terms.
Query insights show the processed search logic: "query_insights": {"keywords": "+(keywords:innovation keywords:environment keywords:agrifod)"}
# Create .env file first: # API_EMAIL=your-email@example.com # API_PASSWORD=your-password import requests import os from dotenv import load_dotenv load_dotenv() # Load .env file response = requests.get( 'https://online.innovatiespotter.nl/api/companies', auth=(os.getenv('API_EMAIL'), os.getenv('API_PASSWORD')) ) response.raise_for_status() # Raise exception for HTTP errors companies = response.json() print(f"Found {companies['total']} companies")
Azure provides Python SDKs for secure credential management in cloud environments
# pip install azure-keyvault-secrets azure-identity requests import requests from azure.keyvault.secrets import SecretClient from azure.identity import DefaultAzureCredential # Azure credentials managed via environment/managed identity credential = DefaultAzureCredential() client = SecretClient( vault_url="https://your-vault.vault.azure.net/", credential=credential ) email = client.get_secret("api-email").value password = client.get_secret("api-password").value response = requests.get( 'https://online.innovatiespotter.nl/api/companies', auth=(email, password) ) response.raise_for_status() data = response.json()
# Save as .env in your project root API_EMAIL=your-email@example.com API_PASSWORD=your-secure-password API_BASE_URL=https://online.innovatiespotter.nl/api
<?php // Save as config.php (never commit to git) return [ 'api_email' => 'your-email@example.com', 'api_password' => 'your-secure-password', 'api_base_url' => 'https://online.innovatiespotter.nl/api' ];
Fetch API is the modern standard for HTTP requests in browsers, replacing XMLHttpRequest
// Modern JavaScript approach with environment variables const credentials = btoa(`${process.env.API_EMAIL}:${process.env.API_PASSWORD}`); fetch('https://online.innovatiespotter.nl/api/companies?page_size=1', { headers: { 'Authorization': `Basic ${credentials}` } }) .then(response => { if (!response.ok) throw new Error(`HTTP ${response.status}: ${response.statusText}`); return response.json(); }) .then(data => { console.log('Success:', data); document.getElementById("api_test").innerHTML = JSON.stringify(data, null, 4); }) .catch(error => { console.error('Error:', error); document.getElementById("api_test").innerHTML = `Error: ${error.message}`; });
// Load credentials from config.php file (placed outside web root with proper permissions) $config = require_once 'config.php'; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $config['api_base_url'] . '/companies', CURLOPT_RETURNTRANSFER => true, CURLOPT_USERPWD => $config['api_email'] . ':' . $config['api_password'], CURLOPT_HTTPAUTH => CURLAUTH_BASIC ]); $response = curl_exec($curl); $data = json_decode($response, true); curl_close($curl); // Alternative: Using environment variables // $curl = curl_init(); // curl_setopt_array($curl, [ // CURLOPT_USERPWD => $_ENV['API_EMAIL'] . ':' . $_ENV['API_PASSWORD'], // // ... other options // ]);
Code to check API connectivity/functionality quickly in localhost
// Modern secure approach - get credentials from user input or env const getCredentials = () => { // Option 1: Get from environment (Node.js/build tools) return { username: process.env.API_EMAIL || '', password: process.env.API_PASSWORD || '' }; }; const { username, password } = getCredentials(); $.ajax({ url: "https://online.innovatiespotter.nl/api/companies?page_size=1", type: "GET", headers: { "Authorization": 'Basic ' + btoa(username + ":" + password), "X-Requested-With": "XMLHttpRequest" }, complete: function(data) { let output, output_formatted; if (data.responseJSON) { output = data.responseJSON; output_formatted = JSON.stringify(data.responseJSON, null, 4); } else { output = data.statusText + " => See more in console/Network."; output_formatted = output; } console.log(output); document.getElementById("api_test").innerHTML = output_formatted; } });
401 | Invalid credentials - Check email/password |
403 | Access denied - Account may be inactive |
400 | Bad request - Check parameter syntax |
404 | Endpoint not found - Check URL path |
500 | Server error - Contact support |
Access comprehensive Dutch innovation data through our RESTful API endpoints
search performs comprehensive multi-criteria search across all available data, while quicksearch focuses on companies within your subscription for faster results.
Parameter | Type | Required | Default |
---|---|---|---|
q |
string | ✅ | - |
page_size |
integer (0-50) | ❌ | 10 |
page_number |
integer | ❌ | 1 |
Example URL | Description |
---|---|
/api/search?q=b.v
|
Basic search for "b.v" (10 results) |
/api/search?q=b.v&page_size=20
|
Search with 20 results per page |
/api/search?q=b.v&page_size=20&page_number=2
|
Second page of results |
$.get('https://online.innovatiespotter.nl/api/search', { 'q': 'b.v.', 'page_size': 20 }, function(data) { console.log('Found ' + data.total + ' companies'); // Handle response data });
200 | Success - Request completed |
4XX | Client error (auth, parameters) |
5XX | Server error |
Retrieve comprehensive company information with advanced filtering capabilities including location, innovation themes, business types, and ecosystem memberships. Perfect for data analysis and business intelligence applications.
Parameter | Range/Options | Default |
---|---|---|
page_size |
1-100 | 100 |
page_number |
1-∞ | 1 |
sort_column |
Various fields | datum_toegevoegd |
sort_direction |
asc, desc | asc |
id
, bedrijfsnaam
, adres
, postcode
,
plaats
, provincie
, werknemers
, jaar
,
rechtsvorm
, bag
, kvk
, datum_toegevoegd
,
geregistreerd
, status_aangepast
, score
Note: For keywords filter, only 'score' sort is available
bag | Building function types |
jaar | Year ranges (0 - current year) |
plaats | City names |
postcode | Postal codes (4 or 6 digits) |
provincie | Province names |
rechtsvorm | Legal entity types |
type_bedrijf | Business categories |
vestigingstype | Branch types |
werknemers | Employee ranges |
bedrijventerrein | Business park ID (rin_nummer) |
economischactief | Boolean: true/false |
ecosysteem | Innovation ecosystem categories |
geregistreerd | Boolean: true/false |
has_website_content | Boolean: true/false |
keywords | Website Content search queries |
sbi_code | SBI Code |
sbi_tekst | SBI Hoofdactiviteit |
themas | Innovation themes |
kvk | 8-digit KvK numbers |
vestigingsnummer | 12-digit branch numbers |
All filter values available from:
/api/filter_values/{filter_name}
Add _exclude
suffix to exclude specific values from results.
sbi_code_exclude | Exclude SBI codes & subcategories |
themas_exclude | Exclude innovation themes |
ecosysteem_exclude | Exclude ecosystem categories |
Add _and
suffix to require ALL specified values (API exclusive).
themas_and | Require ALL innovation themes |
ecosysteem_and | Require ALL ecosystem categories |
Check the response of the examples above by entering those urls in your browser. You should see a json response.
$.get('https://online.innovatiespotter.nl/api/companies', {'themas': 'im_proef_energie'}, yourOnSuccessFunction() );
200 -> OK
4XX -> client error (login, wrong parameters etc)
5XX -> server error
These are the names we use in the backend for referring to the themes you see in the frontend, so for example if you want to filter by the theme "Energie", you have to use the label name im_proef_energie in your request.
So we use this endpoint to provide you with the backend filter names you need to use when you are filtering in companies endpoint.
q -> text (required) [case insensitive]Possible values: all, rechtsvorm, type_bedrijf, Type Bedrijf, bag, bedrijventerrein, ecosysteem, sbi_code, werknemers, themas, Thema's, plaats.
Check the response of the examples above by entering those urls in your browser. You should see a json response.
$.get('https://online.innovatiespotter.nl/api/filter_values/themas', yourOnSuccessFunction() );
200 -> OK
4XX -> client error (login, wrong parameters etc)
5XX -> server error
Request detailed company data using internal company IDs. You can fetch 1 company using the URL path, or up to 10 companies using the id parameter with comma-separated values.
Parameter | Type | Required | Description |
---|---|---|---|
id |
integer(s) | ✅ | Company ID(s), comma-separated for multiple |
Example URL | Description |
---|---|
/api/company_full/3441068
|
Single company by ID |
/api/company_full?id=3441068,3593466,2678774
|
Multiple companies by parameter |
$.get('https://online.innovatiespotter.nl/api/company_full/3441068', function(data) { console.log('Company:', data.bedrijfsnaam); // Handle company data });
200 | Success - Request completed |
4XX | Client error (auth, parameters) |
5XX | Server error |
Field | Present in endpoints | Premium field |
---|---|---|
Adres | 1, 2, 4 | |
BAG | 1, 2, 3, 4 | |
Bedrijfsnaam | 1, 2, 4 | |
Bedrijventerrein NEW API | 2, 3 | |
Datum Toegevoegd | 1, 2, 4 | |
Domeinsamenvatting NEW API BETA | 2 | |
Duurzaamheid NEW | 2 | |
E-mails | 4 | |
Gemeente | 1, 2, 4 | |
Geregistreerd | 1, 2, 4 | |
Geregistreerde Status Aangepast | 1, 2, 4 | |
Handelsnamen | 1, 2, 4 | |
ID | 1, 2, 4 | |
Innovatie-ecosysteem NEW API | 2, 3 | |
Innovatie-footprint | 1, 2, 4 | |
in_subscription | 1, 4 | |
Jaar | 1, 2, 4 | |
Keywords-Snippet NEW API | 2 | |
KvK-Nummer | 1, 2, 4 | |
4 | ||
Plaats | 1, 2, 3, 4 | |
Postcode | 1, 2, 4 | |
Provincie | 1, 2, 4 | |
Rechtsvorm | 1, 2, 3, 4 | |
SBI Branche | 4 | |
SBI Code NEW | 1, 2, 4 | |
SBI Hoofdactiviteit | 1, 2, 4 | |
Telefoon | 4 | |
Thema's | 1, 2, 3, 4 | |
Topics | 1, 2, 3, 4 | |
Type Bedrijf | 2, 3, 4 | |
Vestiging | 1, 2, 4 | |
Vestigingsnummer | 4 | |
Websites | 1, 2, 4 | |
Website Content Available NEW API | 2 | |
Werknemers | 1, 2, 3, 4 |
Detailed explanation of complex response field structures and their usage
When filtering by bedrijventerrein using rin_nummer
values, each company in the response includes a bedrijventerrein field containing an associative array with detailed business park information:
{ "bedrijventerrein": { "rin_nummer": 4870, "jaar": 2022, "plan_naam": "Eemspoort", "kern_naam": "Groningen", "start_jaar": 1997, "gem_namen": "Groningen", "prov_namen": "Groningen", "aantal": 177, "ha_netto": "83.00", "milieuzone": "Ja", "max_milieu": "4" } }
Note: The bedrijventerrein field is only populated when companies are located on a registered business park. Companies not on business parks will have this field as null
or empty.
sbi_code
, sbi_tekst
SBI (Standaard Bedrijfsindeling) is the Dutch Standard Business Classification system. The API uses hierarchical wildcard matching - searching for a parent code automatically includes all subcategories.
Default (Flat List):
/api/filter_values/sbi_code
Returns 2-3 digit codes in "code: name" format
Hierarchical Format:
/api/filter_values/sbi_code?format=hierarchy
Returns nested structure with 2-4 digit codes (keys can be used with sbi_code filter, values with sbi_tekst filter)
Exact matching is available only for:
sbi_tekst
using the exact SBI Hoofdactiviteit text value01
→ matches 01*
(all Agriculture activities)63
→ matches 63*
(all IT services)721
→ matches 721*
(Scientific research and development + subcategories)01: Landbouw, jacht en dienstverlening... ├── 011: Teelt van eenjarige gewassen ├── 012: Teelt van meerjarige gewassen └── 013: Teelt van sierplanten 63: Dienstverlenende activiteiten op het gebied van informatie └── 631: Gegevensverwerking, webhosting en aanverwante activiteiten; webportals └── 639: Overige dienstverlenende activiteiten op het gebied van informatie 072: Speur- en ontwikkelingswerk ├── 721: Natuurwetenschappelijk speur- en ontwikkelingswerk │ ├── 7211: Biotechnologisch speur- en ontwikkelingswerk │ └── 7219: Overig natuurwetenschappelijk speur- en ontwikkelingswerk └── 722: Maatschappij- en geesteswetenschappelijk onderzoek
ecosysteem
?ecosysteem=key
"Innovatie-ecosysteem": {key:value}
/api/filter_values/ecosysteem
Structure: Each key-value pair represents an ecosystem membership where:
award_mkbtop100-2015
, netwerk_pioneering
)This field contains detailed information about companies' innovation ecosystem memberships and awards. Each entry provides both the technical identifier and human-readable description:
{ "Innovatie-ecosysteem": { "award_mkbtop100-2015": "MKB Innovatie Top 100 (2015)", "netwerk_pioneering": "Pioneering", "award_fast50-2015": "Deloitte Fast 50 (2015)", "netwerk_tfhc": "Task Force Health Care" } }
The ecosysteem filter allows you to filter companies by their innovation footprint categories. The filter uses keys returned from the /api/filter_values/ecosysteem
endpoint, which provides a hierarchical structure of ecosystem categories.
The /api/filter_values/ecosysteem
endpoint returns a nested JSON structure organized by categories:
{ "award": { "accenture": { "award_accenture-2020": "Accenture Innovation Awards 2020" }, "fd-gazellen": {…} }, "investering": { "investering_prime-ventures": "Prime Ventures", "investering_techstars": "Techstars" }, "rvo": { "horizon": {…} } }
You can use any key from the ecosysteem response structure as a filter value. This includes:
patent
, rvo
, techleap
to get all companies in that categorychallenger50
, fd-gazellen
to get companies in specific award programsaward_winnaars-social-impact-lab-pwc
for precise filteringcategory_*-year
.
*
acts as a wildcard and matches any type within the chosen category for the specified year.award_*-2024
will match all awards given in 2024, regardless of the specific program.subsidie_rvo_*-2024
will match all RVO subsidies in 2024, regardless of the specific subsidy type.
Note: The filter keys correspond exactly to the keys available in the Innovatie-ecosysteem
response field and from the /api/filter_values/ecosysteem
endpoint.
import requests import pandas as pd import json import time from requests.auth import HTTPBasicAuth # Configuration (see Environment Variables Version) USERNAME = 'your-email@example.com' PASSWORD = 'your-password' BASE_URL = 'https://online.innovatiespotter.nl/api/companies' def fetch_companies_to_csv(): start_time = time.time() df = pd.DataFrame() # Fetch data from multiple pages for page_num in range(1, 10): try: # Build URL with filters url = f"{BASE_URL}?sort_direction=desc&sort_column=werknemers&werknemers=Cat. 01: 1 - 1,Cat. 07: 100 - 249&geregistreerd=true&page_number={page_num}" # Make request with authentication response = requests.get(url, auth=HTTPBasicAuth(USERNAME, PASSWORD)) response.raise_for_status() # Parse JSON response data = response.json() companies = data['companies'] # Append to DataFrame page_df = pd.DataFrame(companies) df = pd.concat([df, page_df], ignore_index=True) print(f"Fetched page {page_num} - {len(companies)} companies") time.sleep(1) # Rate limiting if len(companies) == 0: break except Exception as e: print(f"Error on page {page_num}: {e}") continue # Export to CSV if not df.empty: df.to_csv('innovatiespotter_companies.csv', index=False) print(f"Exported {len(df)} companies to CSV") end_time = time.time() print(f"Total execution time: {end_time - start_time:.2f} seconds") # Run the function if __name__ == "__main__": fetch_companies_to_csv()
import os import requests import pandas as pd from requests.auth import HTTPBasicAuth # Use environment variables for security USERNAME = os.getenv('INNOVATIESPOTTER_EMAIL') PASSWORD = os.getenv('INNOVATIESPOTTER_PASSWORD') if not USERNAME or not PASSWORD: raise ValueError("Please set environment variables") # Your API code here...