REST API for querying 34M+ European companies. Authentication required.
Base URL: https://btob.dev/api/v1
Europe's B2B Data Layer · REST API v1
https://btob.dev/api/v1Join the waitlist or email [email protected] to get your key. It starts with btob_live_ and arrives by email.
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/search?q=renewable+energy&country=DE&limit=5"{
"query": "renewable energy",
"total": 847,
"count": 5,
"has_more": true,
"next_offset": 5,
"results": [
{
"id": "c8f4e2a1-3b5d-4f7e-9a1c-2d3e4f5a6b7c",
"name": "SolarWind GmbH",
"slug": "solarwind-gmbh-de",
"country": "DE",
"city": "München",
"industries": ["Renewable Energy"],
"trustLevel": "verified_registry"
}
]
}Getting Started
Every API request requires an API key. Include it in one of two ways. Your key starts with btob_live_ and was sent to your email.
Option A — Bearer token (recommended)
Authorization: Bearer btob_live_YOUR_KEYOption B — X-API-Key header
X-API-Key: btob_live_YOUR_KEYEndpoints
/api/v1/suppliers/searchFull-text keyword search across 34 million European companies. Matches against company names, descriptions, industries, and products. Includes trigram matching for typo tolerance.
| Parameter | Type | Description |
|---|---|---|
| qRequired | string | Search query (max 200 characters, max 10 words) |
| country | string | ISO 3166-1 alpha-2 country code (e.g. DE, FR, GB) |
| limit | integer | Results per page. Maximum: 100. |
| offset | integer | Pagination offset. Minimum: 0. |
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/search?q=automotive+parts&country=DE&limit=10"{
"query": "automotive parts",
"total": 18342,
"count": 10,
"has_more": true,
"next_offset": 10,
"results": [
{
"id": "3f8a2b1c-4d5e-6f7a-8b9c-0d1e2f3a4b5c",
"name": "Continental AG",
"slug": "continental-ag-de",
"country": "DE",
"city": "Hannover",
"industries": ["Automotive", "Manufacturing"],
"description": "Technology company specializing in automotive parts...",
"qualityScore": 85,
"trustLevel": "verified_registry",
"employeeRange": "5001+",
"registrationNumber": "HRB 3527"
}
]
}| Parameter | Type | Description |
|---|---|---|
| query | string | Echo of your search query |
| total | integer | Total matching companies |
| count | integer | Companies in this response |
| has_more | boolean | Whether more results exist |
| next_offset | integer | null | Offset for the next page (null if last) |
| results | Supplier[] | Array of supplier objects |
/api/v1/suppliers/semanticNatural language similarity search using nomic-embed-text (768-dimensional embeddings). Returns companies whose descriptions are semantically similar to your query — not just keyword matches.
Use this for concept-level queries like “companies that manufacture lithium-ion batteries for EVs” rather than exact keyword matching.
| Parameter | Type | Description |
|---|---|---|
| qRequired | string | Natural language query — the more descriptive, the better. |
| limit | integer | Results to return. Maximum: 100. |
| offset | integer | Pagination offset. Maximum: 100,000. |
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/semantic?q=industrial+robot+manufacturers+in+europe&limit=5"/api/v1/suppliers/{id}Get full details for a specific company by UUID. Returns all available metadata including certifications.
| Parameter | Type | Description |
|---|---|---|
| idRequired | uuid | Supplier UUID (e.g. c8f4e2a1-3b5d-4f7e-9a1c-2d3e4f5a6b7c) |
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/c8f4e2a1-3b5d-4f7e-9a1c-2d3e4f5a6b7c"{
"id": "c8f4e2a1-3b5d-4f7e-9a1c-2d3e4f5a6b7c",
"name": "SolarWind GmbH",
"slug": "solarwind-gmbh-de",
"country": "DE",
"regionCode": null,
"city": "München",
"postalCode": "80333",
"website": "https://solarwind.de",
"description": "Engineering and installation of solar energy systems...",
"registrationNumber": "HRB 234567",
"vatNumber": null,
"legalForm": "GmbH",
"companyType": null,
"employeeRange": "51-200",
"revenueRange": null,
"industries": ["Renewable Energy", "Engineering"],
"productsServices": ["Solar panels", "Energy consulting"],
"capabilities": null,
"qualityScore": 72,
"trustLevel": "verified_registry",
"status": "active",
"verifiedAt": null,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-03-20T14:22:00.000Z",
"certifications": [
{ "id": "...", "supplierId": "...", "name": "ISO 9001", "issuedBy": "TÜV", "validUntil": "2027-06-30" }
]
}/api/v1/suppliers/by-slug/{slug}Get supplier details by URL slug. Same response shape as the by-ID endpoint. Slugs follow the pattern company-name-countrycode.
| Parameter | Type | Description |
|---|---|---|
| slugRequired | string | URL slug (e.g. solarwind-gmbh-de) |
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/by-slug/solarwind-gmbh-de"/api/v1/countriesReturns all countries with indexed companies, sorted by supplier count descending. Response is cached for 1 hour.
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/countries"{
"countries": [
{ "country": "FR", "supplier_count": 11537981 },
{ "country": "RO", "supplier_count": 6685844 },
{ "country": "DE", "supplier_count": 5943680 },
{ "country": "GB", "supplier_count": 5171886 },
{ "country": "BE", "supplier_count": 1808989 },
{ "country": "PL", "supplier_count": 1800000 },
{ "country": "NO", "supplier_count": 1130421 },
{ "country": "FI", "supplier_count": 890000 },
{ "country": "IE", "supplier_count": 770887 },
{ "country": "LV", "supplier_count": 473028 },
{ "country": "EE", "supplier_count": 368011 },
{ "country": "SI", "supplier_count": 276289 }
]
}/api/v1/industriesReturns distinct industry categories with supplier counts, sorted by count descending. Covers all sectors — manufacturing, services, technology, healthcare, retail, logistics, and more. Response is cached for 1 hour.
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/industries"{
"industries": [
{ "industry": "Wholesale Trade", "supplier_count": 3200000 },
{ "industry": "Construction", "supplier_count": 2800000 },
{ "industry": "Retail", "supplier_count": 2400000 },
{ "industry": "Professional Services", "supplier_count": 1900000 },
{ "industry": "Manufacturing", "supplier_count": 1750000 },
{ "industry": "Information Technology", "supplier_count": 1200000 },
{ "industry": "Transportation & Logistics", "supplier_count": 980000 },
{ "industry": "Healthcare", "supplier_count": 750000 }
]
}Formats
Every company has three machine-readable representations beyond the JSON API. These are designed for AI agents, knowledge graphs, and LLM context windows.
| Format | Endpoint | Use Case |
|---|---|---|
| JSON-LD | /suppliers/{slug}/business.json | EU Business vocabulary, knowledge graphs |
| Markdown | /suppliers/{slug}/profile.md | LLM context injection, RAG pipelines |
| MCP | /mcp | Agent tool calls (7 tools) |
curl "https://btob.dev/suppliers/solarwind-gmbh-de/business.json"curl "https://btob.dev/suppliers/solarwind-gmbh-de/profile.md"See the MCP documentation for adding btob.dev as an agent skill, or the Formats reference for schema details.
Patterns
All list endpoints use offset-based pagination. Every paginated response includes total, count, has_more, and next_offset.
| Field | Type | Description |
|---|---|---|
| total | integer | Total matching records across all pages |
| count | integer | Number of records in this response |
| has_more | boolean | true if additional pages exist |
| next_offset | integer | null | Pass this as offset for the next page. null on the last page. |
# Page 1
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/search?q=logistics&limit=100&offset=0"
# Page 2
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/search?q=logistics&limit=100&offset=100"
# Page 3
curl -H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/search?q=logistics&limit=100&offset=200"All API endpoints are rate-limited to protect service quality.
| Tier | Rate | Scope |
|---|---|---|
| Standard | 60 requests / minute | Per API key |
| Network | 60 requests / minute | Per IP address |
| Header | Description |
|---|---|
| X-Request-Id | Unique request identifier — include when reporting issues |
| X-API-Version | API version date (e.g. 2026-03-29) |
| X-Total-Count | Total matching records (search endpoints only) |
| Retry-After | Seconds until rate limit resets (429 responses only) |
# When you exceed the limit, you'll get:
# HTTP/2 429
# Retry-After: 30
#
# {"error":{"code":"rate_limit_exceeded","message":"Rate limit exceeded."}}
#
# Wait for the Retry-After period, then retry.Need higher limits? Contact [email protected].
All errors follow a consistent envelope. Use error.code for programmatic handling and error.request_id when contacting support.
{
"error": {
"code": "not_found",
"message": "Supplier not found.",
"status": 404,
"docs": "https://btob.dev/docs/api",
"request_id": "req_a1b2c3d4"
}
}| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing or malformed parameter, invalid UUID, or query exceeds limits |
| 401 | authentication_required | API key is missing, invalid, or has been revoked |
| 404 | not_found | Resource does not exist |
| 429 | rate_limit_exceeded | Too many requests — wait and retry |
| 500 | internal_error | Unexpected server error — we've been notified |
| 503 | service_unavailable | Endpoint temporarily unavailable |
# Check for errors in the response:
curl -s -w "\n%{http_code}" \
-H "Authorization: Bearer btob_live_YOUR_KEY" \
"https://btob.dev/api/v1/suppliers/invalid-uuid"
# → {"error":{"code":"invalid_request","message":"Invalid supplier ID format",...}}
# → 400Reference
34M+ companies across 12+ European countries and steadily growing. All data sourced from official government business registries.
| Country | Code | Companies |
|---|---|---|
| France | FR | 11,537,981 |
| Romania | RO | 6,685,844 |
| Germany | DE | 5,943,680 |
| United Kingdom | GB | 5,171,886 |
| Belgium | BE | 1,808,989 |
| Poland | PL | 1,804,996 |
| Norway | NO | 1,130,421 |
| Finland | FI | 890,095 |
| Ireland | IE | 770,887 |
| Latvia | LV | 473,028 |
| Estonia | EE | 368,011 |
| Slovenia | SI | 276,289 |
| Total | 34,862,107 |
New countries and companies are added regularly. Call /api/v1/countries for the latest list.
Questions, feature requests, or need higher rate limits?
[email protected]