/v1/bulkBulkuppslag
Slå upp flera företag i en enda förfrågan.
Översikt
Bulkuppslag-endpointen låter dig slå upp flera företag på organisationsnummer eller namn i en enda API-förfrågan. Detta är mer effektivt än att göra flera individuella förfrågningar när du behöver slå upp flera företag samtidigt. Organisationsnummer är det snabbare och mer kostnadseffektiva valet, särskilt för stora batcher.
Gränser & krediter
| Uppslag | Max per förfrågan | Kreditkostnad |
|---|---|---|
org_numbers |
500 (Free) / 5 000 (Starter & Pro) | 10 företag för 1 kredit (rundas uppåt) |
names |
100 per förfrågan | 1 kredit per lyckad matchning |
org_numbers är den effektivare vägen — högre gräns, 10× billigare och betydligt snabbare. En batch med 5 000 organisationsnummer returnerar på bara några sekunder, medan names-uppslag arbetar betydligt långsammare. Misslyckade uppslag debiteras aldrig.
Fuzzy-matchning
API:et returnerar alltid närmaste match. Bedöm kvaliteten via score: 1.0 = exakt, > 0.8 = mycket god, < 0.6 = tveksam (verifiera manuellt).
Förfrågan
Förfrågningskropp
Skicka ett JSON-objekt med en array av företagsnamn:
{
"names": ["Spotify AB", "Ericsson AB", "Skanska AB"]
}
Eller en array av organisationsnummer i stället. Det är den effektivare vägen (högre gräns, 10 företag för 1 kredit, och betydligt snabbare: tusentals nummer på några sekunder):
{
"org_numbers": ["5567037485", "5560042001", "5564831114"]
}
Ange names eller org_numbers
names eller org_numbers i samma förfrågan. Skickar du en tom kropp ({}) returneras 400 med felet Missing or invalid "names" array - det är backendens standardvalidering, men org_numbers är ett fullt giltigt alternativ (se exemplet ovan).Parametrar
| Parameter | Typ | Obligatorisk | Beskrivning |
|---|---|---|---|
| org_numbers | array | Antingen/eller | Array med 10-siffriga organisationsnummer att slå upp. Den effektivare vägen: högre gräns (upp till 5 000 för Starter/Pro), 10 företag för 1 kredit och betydligt snabbare. Bindestreck normaliseras automatiskt. Ange antingen org_numbers eller names — minst en av dem krävs. |
| names | array | Antingen/eller | Array med företagsnamn att slå upp. Maximalt 100 namn per förfrågan. Ange antingen names eller org_numbers — minst en av dem krävs. |
| has_annual_report | boolean | Valfri | Filtrera namnuppslag på årsredovisning. true = enbart företag med digital årsredovisning, false = enbart företag utan. Utelämnas parametern filtreras inte (alla företag matchas). Gäller endast names-uppslag. |
| include | string[] | Valfri | Opt-in-väljare för berikad data. Stödjer för närvarande "trademarks", som lägger till fälten trademarks och trademarkCount per matchat företag. Fungerar för uppslag både på names och org_numbers. Okända värden ignoreras. |
| response_fields | string | Valfri | Begränsar vilka fält som returneras per företag (minimal, core). Projektionen tillämpas endast på org_numbers-uppslag. För names-uppslag och för /v1/search ignoreras parametern och hela företagsobjektet returneras. |
Lägg till include för att berika svaret med varumärkesdata:
{
"names": ["Spotify AB", "Ericsson AB"],
"include": ["trademarks"]
}
Varumärkesdata överlever response_fields
"include": ["trademarks"] berikar varje matchat företag med fälten trademarks och trademarkCount (PRV-data). När response_fields-projektion används (endast på org_numbers-vägen, se parametern nedan) behålls dessa två fält i alla lägen, även minimal och core. Utan include saknas varumärkesfälten helt. Företag utan registrerade varumärken får [] respektive 0.Kodexempel
Här är exempel på flera programmeringsspråk:
curl -X POST 'https://data.foretagsapi.se/v1/bulk' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{"names": ["Spotify AB", "Ericsson AB", "Skanska AB"]}'
Svar
Lyckat svar (200 OK)
Returnerar ett JSON-objekt som innehåller en results-array med lyckat/misslyckat-status för varje uppslag:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071{
"results": [
{
"searchTerm": "Spotify AB",
"success": true,
"company": {
"id": 521294,
"name": "Spotify AB",
"orgNumber": "5567037485",
"legalForm": "AB",
"postalAddress": {
"street": "Regeringsgatan 19",
"city": "STOCKHOLM",
"postalCode": "11153"
},
"registrationDate": "2006-05-10",
"score": 1.0,
"hasDigitalAnnualReport": false,
"financials": null,
"revenue_estimate": {
"value": 10000000000,
"type": "interval",
"interval_low": 10000000000,
"interval_high": null,
"reference_year": 2025,
"source": "scb",
"scb_class": "fin_21",
"label_sv": "≥ 10 mdkr"
},
"employees_estimate": {
"value": 1100,
"type": "interval",
"interval_low": 1000,
"interval_high": 1499,
"source": "scb",
"scb_class": "anst_10",
"label_sv": "1 000–1 499 anställda"
}
}
},
{
"searchTerm": "Ericsson AB",
"success": true,
"company": {
"id": 123456,
"name": "Telefonaktiebolaget LM Ericsson",
"orgNumber": "5560000000",
"legalForm": "AB",
"score": 0.85
}
},
{
"searchTerm": "Unknown Company XYZ",
"success": true,
"company": {
"id": 789012,
"name": "XYZ Company AB",
"orgNumber": "5560001234",
"legalForm": "AB",
"score": 0.51
}
}
],
"metadata": {
"totalSearches": 3,
"successfulSearches": 3,
"processingTimeMs": 150,
"timestamp": "2024-01-15T10:35:00Z",
"mode": "api"
}
}
Svarsfält
| Fält | Typ | Beskrivning |
|---|---|---|
| results | array | Array med resultatobjekt, ett för varje begärt namn |
| results[].searchTerm | string | Den ursprungliga söktermen från förfrågan |
| results[].success | boolean | Om en matchning hittades (alltid true med fuzzy-matchning) |
| results[].company | object | Företagsdata med närmaste matchning. Kontrollera score-fältet för matchningskvalitet. |
| results[].company.score | number | Matchningspoäng 0.0-1.0. Lågt värde (<0.6) indikerar osäker matchning. |
| results[].error | string | Felmeddelande (endast närvarande om success är false, sällsynt med fuzzy-matchning) |
| metadata.totalSearches | number | Totalt antal företagsnamn som begärdes i batchen |
| metadata.successfulSearches | number | Antal uppslag som returnerade ett matchande företag |
| metadata.processingTimeMs | number | Behandlingstid i millisekunder |
| metadata.timestamp | string | Tidsstämpel för förfrågan (ISO 8601-format) |
Hantera osäkra matchningar
score-fältet för varje resultat. Vid låga poäng (<0.6) bör du verifiera matchningen manuellt eller flagga den för granskning.Finansiell data i bulkuppslag
financials, hasDigitalAnnualReport, revenue_estimate och employees_estimate ingår i svaret för varje matchat företag. Att financials är null betyder inte att företaget saknar omsättning. Oftast har företaget lämnat in sin årsredovisning på papper i stället för digitalt, och då har vi ingen åtkomst till siffrorna. Finansiell data finns för cirka 60 % av aktiva aktiebolag som lämnat in digital årsredovisning. SCB-intervall ger storleksindikation för ytterligare bolag, totalt cirka 85 %.revenue_estimate och employees_estimate är källmedvetna envelope-objekt: type: "exact" = värdet kommer från årsredovisningen, type: "interval" = SCB-baserat storleksintervall med interval_low/interval_high och en svensk etikett i label_sv, type: "none" = ingen storleksuppgift. Se /docs/api/search-by-name för fullständig fältlista och envelope-shape. Saknas all finansiell data returneras "financials": null och "hasDigitalAnnualReport": false.Felsvar
400 Bad Request
Returneras när förfrågan överskrider batchgränsen:
{
"error": "Too many companies. Maximum allowed: 100. Received: 101"
}
Eller när kroppen saknar både names och org_numbers (en tom kropp valideras mot names):
{
"error": "Missing or invalid \"names\" array"
}