Swedish Company Search API — Search All Swedish Companies

Updated · 4 min read

Sweden has about 1.3 million registered companies. If you want to search them in code, you quickly run into client certificates, OAuth2 flows, and two separate government APIs: SCB for search and Bolagsverket for lookup.

Apiverket puts both behind the same API key.

The Problem with Direct Access

Direct access usually means setting up both of these:

  1. SCB Företagsregister — name search, but requires a client certificate (.pfx) and a separate agreement
  2. Bolagsverket HVD — org.nr lookup, but requires OAuth2 client credentials

Both paths involve registration, approval, and custom auth. For a simple "find companies named Volvo", that is a lot of setup before you even get data back.

One GET Request Instead

SCB + Bolagsverket Direct

// 1. Load client certificate
const agent = new https.Agent({
  pfx: fs.readFileSync("cert.pfx"),
  passphrase: "YOUR_PASSWORD"
});

// 2. POST search query
const res = await fetch(
  "https://privateapi.scb.se/..." +
  "/api/je/hamtaforetag",
  { method: "POST", agent,
    body: JSON.stringify({
      "Företagsstatus": "1",
      variabler: [{
        Variabel: "Namn",
        Operator: "Innehaller",
        Varde1: "Volvo", Varde2: ""
      }]
    })
  }
);

Apiverket

const res = await fetch(
  "https://apiverket.se/v1/companies" +
  "/search?q=Volvo",
  {
    headers: {
      Authorization:
        "Bearer sk_live_YOUR_KEY"
    }
  }
);

const { data } = await res.json();
// data.total = 81
// data.companies[0].name
//   = "AKTIEBOLAGET VOLVO"
// data.companies[0].city
//   = "GÖTEBORG"

No certificates. No OAuth2 work in your app. Apiverket handles SCB's client certificate auth and Bolagsverket's OAuth2, then returns clean JSON with your API key.

What You Get

The company endpoints give you the fields teams usually need for search, enrichment, and internal tools:

Fields are normalized for stable integrations and may be null when SCB or Bolagsverket does not provide a value. Apiverket does not expose raw source payloads, owner names, or detailed workplace/CFAR rows on this endpoint.

Available Endpoints

The usual flow is simple: search by name, save the org_number, then use organisation-number lookup whenever you need to enrich the same company again.

Endpoint Description Source
/v1/companies/search?q=nameSearch companies by name when you do not know the org number. Separate company-search quota applies.SCB Företagsregister
/v1/companies/{orgnr}Look up one exact organisation number and return stable registry fields such as address, legal form, SNI codes, F-tax, VAT, employer status, and size classes when available.Bolagsverket + SCB enrichment/fallback
/v1/vat/validate/{vatNumber}EU VAT number validationVIES

Try It Now

# Search by name
curl -H "Authorization: Bearer sk_test_demo" \
  "https://apiverket.se/v1/companies/search?q=spotify"

# Look up by org.nr
curl -H "Authorization: Bearer sk_test_demo" \
  https://apiverket.se/v1/companies/5560125790

Test keys return curated sandbox companies only. Use a live key when you need to search or look up real organisations from SCB and Bolagsverket. The lookup response is normalized; it does not dump raw registry payloads.

Handling company-search limits

/v1/companies/search has its own daily quota because it protects the shared SCB certificate: free 20/day, starter 100/day, pro 500/day, business 2,000/day, enterprise 10,000/day. Organisation-number lookups use your regular API quota.

If search returns 429 with error.rate_limit.scope = "company_search_daily", pause the search job until error.rate_limit.reset_at. Do not retry in a loop. For per-minute limits, respect Retry-After and use exponential backoff with jitter.

Add Swedish company data to your app

Start with the test key. No certificates, no OAuth2 setup, no XML parsing.

Open the API docs

View pricing plans — company search quotas scale by tier