Discover/Drimble API
live

Drimble APIdrimble.nl

Search and retrieve Dutch company data from Drimble.nl. Access KVK numbers, SBI codes, addresses, legal forms, and business descriptions via 2 endpoints.

Endpoints
2
Updated
2mo ago

What is the Drimble API?

The Drimble.nl API provides access to Dutch business listings through 2 endpoints, covering company search and full detail retrieval. The search_companies endpoint accepts keyword queries alongside geographic and SBI code filters to return paginated lists of companies. The get_company_details endpoint returns structured records including KVK numbers, legal form, employee counts, SBI classifications, and full address breakdowns for any company listed on Drimble.nl.

Try it
Buurt (Neighborhood) ID filter.
Gemeente (Municipality) ID filter.
Plaats (City) ID filter.
SBI code filter. Accepted values: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S.
Wijk (District) ID filter.
Page number for pagination.
Province ID filter (e.g. 27 for Noord-Holland, 28 for Zuid-Holland).
Keyword search for company name or related terms.
api.parse.bot/scraper/9681bf2d-0c8b-4bb8-b56b-ab6902bea290/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/9681bf2d-0c8b-4bb8-b56b-ab6902bea290/search_companies?page=1&query=bakker' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace drimble-nl-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Drimble.nl Business Listings API Client
Extract business listings and full company details from drimble.nl

Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Dict, Any


class ParseClient:
    """Client for interacting with the Parse API for Drimble.nl business listings."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: API key for authentication. Defaults to PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "9681bf2d-0c8b-4bb8-b56b-ab6902bea290"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError("API key not provided and PARSE_API_KEY env var not set")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """
        Make a request to the Parse API.

        Args:
            endpoint: The endpoint name (e.g., 'search_companies')
            method: HTTP method ('GET' or 'POST')
            **params: Query or body parameters depending on method

        Returns:
            Response JSON as a dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }

        if method.upper() == "GET":
            response = requests.get(url, headers=headers, params=params)
        elif method.upper() == "POST":
            response = requests.post(url, headers=headers, json=params)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def search_companies(
        self,
        query: Optional[str] = None,
        sbi: Optional[str] = None,
        prid: Optional[int] = None,
        gid: Optional[int] = None,
        pid: Optional[int] = None,
        wid: Optional[int] = None,
        bid: Optional[int] = None,
        page: Optional[int] = None
    ) -> Dict[str, Any]:
        """
        Search for companies on Drimble.nl using keywords and filters.

        Args:
            query: Keyword search for company name or related terms
            sbi: SBI code filter (e.g., 'F' for construction)
            prid: Province ID filter
            gid: Gemeente (Municipality) ID filter
            pid: Plaats (City) ID filter
            wid: Wijk (District) ID filter
            bid: Buurt (Neighborhood) ID filter
            page: Page number for pagination (default: 1)

        Returns:
            Dictionary containing companies list and available filters
        """
        params = {}
        if query:
            params["query"] = query
        if sbi:
            params["sbi"] = sbi
        if prid:
            params["prid"] = prid
        if gid:
            params["gid"] = gid
        if pid:
            params["pid"] = pid
        if wid:
            params["wid"] = wid
        if bid:
            params["bid"] = bid
        if page:
            params["page"] = page

        return self._call("search_companies", method="GET", **params)

    def get_company_details(self, url: str) -> Dict[str, Any]:
        """
        Get full details for a specific business listing.

        Args:
            url: The company detail page URL or relative path from search results

        Returns:
            Dictionary containing company details including address, SBI codes, and description
        """
        return self._call("get_company_details", method="GET", url=url)


def main():
    """
    Demonstrate practical workflow: search for companies and retrieve their details.
    """
    # Initialize the client
    client = ParseClient()

    print("=" * 70)
    print("Drimble.nl Business Listings API - Practical Business Intelligence")
    print("=" * 70)

    # Step 1: Search for IT/Software companies (SBI code 'J' for Information and Communication)
    print("\n📊 Step 1: Searching for IT/Software companies...")
    search_params = {
        "query": "software",
        "sbi": "J",
        "page": 1
    }
    print(f"   Search parameters: {search_params}")

    search_results = client.search_companies(**search_params)

    # Display search results summary
    if "data" in search_results:
        data = search_results["data"]
        companies = data.get("companies", [])
        print(f"\n✓ Found {len(companies)} software companies in results")

        # Display available SBI filters to understand the data structure
        if "sbi_filter" in data:
            sbi_options = data["sbi_filter"].get("options", [])
            print(f"\n📋 Available Industry Categories (SBI Codes): {len(sbi_options)} total")
            for sbi_option in sbi_options[:5]:
                print(f"   • {sbi_option.get('code')}: {sbi_option.get('description')}")

        # Display geographic filter options
        if "geolocation_filter" in data:
            geoloc = data["geolocation_filter"]
            print(f"\n🗺️  Geographic Filter Level: {geoloc.get('level')}")
            options = geoloc.get("options", [])
            if options:
                print(f"   Available regions: {len(options)}")
                for option in options[:5]:
                    print(f"   • {option.get('name')} (ID: {option.get('id')})")

        # Step 2: Process each company and get detailed information
        if companies:
            print(f"\n📝 Step 2: Retrieving detailed information for companies...")
            print("-" * 70)

            for idx, company in enumerate(companies[:3], 1):  # Process first 3 companies
                print(f"\nCompany #{idx}: {company.get('company_name', 'Unknown')}")
                print(f"   KVK Number: {company.get('kvk_number')}")
                print(f"   Branch Number: {company.get('branch_number')}")
                print(f"   Registration Date: {company.get('registration_date', 'N/A')}")

                # Fetch detailed information for this company
                company_url = company.get("url")
                if company_url:
                    try:
                        print(f"   → Fetching complete profile...")
                        details = client.get_company_details(url=company_url)

                        if "data" in details:
                            detail_data = details["data"]

                            # Display address information
                            if "address" in detail_data:
                                addr = detail_data["address"]
                                print(f"\n   📍 Address Information:")
                                print(f"      Street: {addr.get('street')} {addr.get('house_number')}")
                                if addr.get('house_number_extension'):
                                    print(f"      Extension: {addr.get('house_number_extension')}")
                                print(f"      Postcode: {addr.get('postcode')}")
                                print(f"      City: {addr.get('plaats')}")
                                print(f"      Municipality: {addr.get('municipality')}")
                                print(f"      Province: {addr.get('province')}")

                            # Display business details
                            print(f"\n   💼 Business Details:")
                            print(f"      Legal Form: {detail_data.get('legal_form', 'N/A')}")
                            print(f"      Employees: {detail_data.get('employees', 'N/A')}")

                            # Display SBI codes
                            if "sbi_codes" in detail_data:
                                sbi_codes = detail_data["sbi_codes"]
                                if sbi_codes:
                                    print(f"\n   🏭 Industry Classifications:")
                                    for sbi in sbi_codes:
                                        print(f"      • {sbi.get('code')}: {sbi.get('description', 'N/A')}")
                                else:
                                    print(f"\n   🏭 Industry Classifications: Not specified")

                            # Display business description
                            if "description" in detail_data:
                                description = detail_data["description"]
                                print(f"\n   📄 Business Description:")
                                # Truncate long descriptions
                                if len(description) > 150:
                                    print(f"      {description[:150]}...")
                                else:
                                    print(f"      {description}")

                    except requests.exceptions.RequestException as e:
                        print(f"      ✗ Error fetching details: {e}")
                    except Exception as e:
                        print(f"      ✗ Unexpected error: {e}")

        print("\n" + "-" * 70)
        print("✓ Analysis Complete!")
        print("\nKey Insights:")
        print(f"   • Total companies found: {len(companies)}")
        print(f"   • Companies processed: {min(3, len(companies))}")
        print(f"   • Available industry categories: {len(search_results['data'].get('sbi_filter', {}).get('options', []))}")
        if "geolocation_filter" in search_results["data"]:
            print(f"   • Geographic regions available: {len(search_results['data']['geolocation_filter'].get('options', []))}")

    print("\n" + "=" * 70)
    print("Workflow completed successfully!")
    print("=" * 70)


if __name__ == "__main__":
    main()
All endpoints · 2 totalmissing one? ·

Search for companies on Drimble.nl using keywords and filters (province, municipality, city, SBI code). Returns paginated company results along with available SBI and geographic filter options.

Input
ParamTypeDescription
bidintegerBuurt (Neighborhood) ID filter.
gidintegerGemeente (Municipality) ID filter.
pidintegerPlaats (City) ID filter.
sbistringSBI code filter. Accepted values: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S.
widintegerWijk (District) ID filter.
pageintegerPage number for pagination.
pridintegerProvince ID filter (e.g. 27 for Noord-Holland, 28 for Zuid-Holland).
querystringKeyword search for company name or related terms.
Response
{
  "type": "object",
  "fields": {
    "companies": "array of company objects with coc_number, kvk_number, branch_number, company_name, registration_date, and url",
    "sbi_filter": "object with options array containing available SBI code filters (code and description)",
    "geolocation_filter": "object with level string and options array containing geographic filter choices (name, id, slug)"
  },
  "sample": {
    "data": {
      "companies": [
        {
          "url": "www.drimble.nl/bedrijf/alkmaar/000064774538/haytak.html",
          "coc_number": "997218720000",
          "kvk_number": "99721872",
          "company_name": "Haytak",
          "branch_number": "000064774538",
          "registration_date": "2026-02-13T00:00:00"
        }
      ],
      "sbi_filter": {
        "options": [
          {
            "code": "A",
            "description": "Landbouw, bosbouw en visserij"
          }
        ]
      },
      "geolocation_filter": {
        "level": "Province",
        "options": [
          {
            "id": 30,
            "name": "Noord-Brabant",
            "slug": "noord-brabant"
          }
        ]
      }
    },
    "status": "success"
  }
}

About the Drimble API

Company Search

The search_companies endpoint accepts a query string alongside optional geographic filters — prid for province, gid for gemeente (municipality), pid for plaats (city), wid for wijk (district), and bid for buurt (neighborhood). You can also filter by sbi code (single-letter values A through S covering Dutch standard industrial classification sectors). Results are paginated via the page parameter. Each company record in the response includes company_name, coc_number, kvk_number, branch_number, registration_date, and a url field used as input to the detail endpoint.

Company Details

Passing a url from search_companies results to get_company_details returns the full record for that business. The address object includes street, house_number, house_number_extension, postcode, plaats, municipality, province, and a formatted_address string. Additional fields cover legal_form (e.g. Eenmanszaak, BV), employees, kvk_number, branch_number, registration_date, description (a free-text business activity summary), and sbi_codes — an array of SBI classification objects describing the company's registered activities.

Filters and Navigation

The search_companies response also returns a sbi_filter object listing available SBI sector options with codes and descriptions, and a geolocation_filter object with a level string and a set of geographic options (name, ID, slug). These can be used to progressively narrow searches without hardcoding geography IDs. Province ID 27 corresponds to Noord-Holland and 28 to Zuid-Holland; other province IDs follow the same pattern.

Reliability & maintenance

The Drimble API is a managed, monitored endpoint for drimble.nl — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when drimble.nl changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official drimble.nl API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a prospect list of companies in a specific Dutch municipality filtered by SBI sector code
  • Enrich a CRM with KVK numbers, legal forms, and registered addresses for Dutch business contacts
  • Map Dutch SME density by province or neighborhood using geographic filter IDs
  • Monitor new business registrations in a target sector by checking registration_date fields
  • Validate and standardize Dutch company addresses using the structured address object fields
  • Classify a portfolio of companies by SBI code to analyze sector distribution
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Drimble.nl offer an official developer API?+
Drimble.nl does not publish an official developer API or documented public endpoints for third-party use. This Parse API provides structured programmatic access to the data available on the site.
What geographic granularity is available in search_companies?+
The endpoint supports five levels: province (prid), gemeente/municipality (gid), plaats/city (pid), wijk/district (wid), and buurt/neighborhood (bid). The geolocation_filter object in each response lists the available options at the next level down, so you can drill progressively from province to neighborhood without knowing IDs upfront.
Does the API return contact details like phone numbers or email addresses?+
Not currently. The get_company_details endpoint covers address, KVK number, legal form, SBI codes, employee count, and business description, but does not expose phone numbers or email addresses. You can fork this API on Parse and revise it to add those fields if Drimble.nl surfaces them on the detail page.
Are historical registration changes or previous addresses available?+
Not currently. The API returns the current registered address and a single registration_date. Historical address changes or past SBI classifications are not part of the response. You can fork this API on Parse and revise it to capture additional historical data if the source exposes it.
How does SBI code filtering work in search_companies?+
The sbi parameter accepts a single letter from A to S, each corresponding to a sector in the Dutch Standard Industrial Classification (e.g. G for wholesale/retail, I for hospitality). The sbi_filter object returned alongside results lists all available codes with their descriptions, which you can use to determine valid values for subsequent queries.
Page content last updated . Spec covers 2 endpoints from drimble.nl.
Related APIs in B2b DirectorySee all →
stagemarkt.nl API
Search for Dutch MBO internship companies on Stagemarkt.nl and access detailed information including contact details, addresses, and their available internship specializations with sector and qualification levels. Get company recommendations and browse comprehensive profiles to find the perfect internship match.
dnb.com API
Search millions of companies in Dun & Bradstreet's global business directory to find detailed company profiles and verify D-U-N-S numbers. Look up key business information like company details and identifiers to support due diligence, sales prospecting, and business intelligence needs.
11880.com API
Search and discover millions of German businesses from 11880.com's comprehensive directory, instantly accessing company contact details, locations, and trade information. Get intelligent autocomplete suggestions for trades and cities to refine your business searches and find exactly who you're looking for.
krak.dk API
Search for businesses and people in Denmark, retrieve detailed information like contact details and company profiles, and look up phone numbers to identify callers or report spam statistics. Find what you're looking for in the Danish business and person directory with instant access to company details, personal information, and caller identification data.
yandex.ru API
Search for businesses on Yandex Maps and instantly access their names, addresses, phone numbers, websites, social media links, hours of operation, and categories. Get detailed company information to find local services, verify business details, or build comprehensive business directories.
allabolag.se API
Search and retrieve detailed information about Swedish companies, including their industry classifications and historical financial records from annual reports. Access comprehensive company profiles to analyze financial performance and business data for any registered Swedish business.
registroimprese.it API
Search Italian companies by name or ID to instantly access official business registration details including company status, founding information, and corporate structure from the authoritative Italian Business Registry. Get comprehensive company profiles with verified legal and operational data all in one place.
einforma.com API
Search for companies, self-employed individuals, and executives across Spain's business directory, then access detailed company profiles including financial and operational information. Perfect for business research, lead generation, and competitive intelligence.