# Norway Company Emails & Phones: Brreg AS/ASA Leads (`datagleaner/norway-company-contacts`) Actor

Norwegian limited companies (AS, ASA and more) from the official Brønnøysund register with website, generic company email and phone. Filter by NACE code, municipality, postcode, founding date and employees. No sole traders, no persons. $0.002 per company with a contact.

- **URL**: https://apify.com/datagleaner/norway-company-contacts.md
- **Developed by:** [Data Gleaner](https://apify.com/datagleaner) (community)
- **Categories:** Lead generation, Business, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 company with contacts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Norway Company Contacts: AS/ASA website, phone and company email from the Brønnøysund register

Find Norwegian limited companies in the official **Enhetsregisteret** (Brønnøysund Register Centre) by NACE activity code, municipality, postal code, founding or registration date and employee count, and get the **website, phone number and generic company mailbox (post@, firmapost@)** the companies registered themselves, with org number, address, NACE code and status. No login, no API key, no browser: it reads the register's documented open API and its nightly open-data file.

You pay only for companies that come back with a contact field. Companies without a website, usable email or phone are skipped for free.

It is made for agencies, accountants, SaaS and B2B sales teams who need a list of Norwegian companies in a sector and an area, for analysts counting companies, and for anyone enriching a CRM with Norwegian org numbers.

### What you get

- **Company facts:** org number, name, legal form (AS, ASA ...), main and secondary NACE codes, employees, business address, postal code, town, municipality and number, founding date, registration date, VAT registration, last annual accounts year, group membership, status and a link to the company's register page.
- **Contacts the register publishes:** `website`, `phone` (the register's telephone field) and `email` (generic company mailboxes only, see below). The register's separate mobile field is not returned, and a telephone value that is a Norwegian mobile (+47 4x/9x) or a foreign number is dropped too.
- **Filters:** NACE codes or prefixes, municipalities (numbers or names), postal codes, legal forms, name contains, founded and registered date ranges, minimum and maximum employees, and which contact field is required.
- **Any size of query:** the register's search API stops at 10,000 results per query. Small queries use it directly; when a query needs more, the Actor streams the register's nightly bulk file (about 155 MB) instead, so a whole-country list works too.

### Who is never returned

- **Sole proprietorships (ENK) and other persons are never returned.** Only companies: `AS` and `ASA` by default, and on request other limited and corporate forms (`SA`, `SE`, `BA`, `STI`, `FLI`, `BBL`, `GFS`, `SPA`, `PK`, `VPFO`, public bodies). Partnerships whose partners are personally liable (`ANS`, `DA`, `KS`), foreign units (`NUF`), residential owners and estates are never returned.
- **No people.** The register's role endpoints (board members, managers) are never called, and no person's name is output.
- **Email addresses that may belong to a person are never returned.** Only generic company mailboxes such as `post@`, `firmapost@`, `info@`, `kontakt@`, `faktura@` or `kundeservice@` on the company's own domain pass. Named addresses (`ola@`, `kari.nordmann@`), free-mail and Norwegian consumer mail (`gmail.com`, `online.no` and the like) and role addresses held by one person (`daglig.leder@`) are dropped, and the row's `privacyNotice` says so. In our measurement on the November 2026 file, about 30% of the emails registered for active AS and ASA passed this rule.
- **Mobile numbers are not returned.** A mobile registered for a small company is often one person's own number.

### Input example

```json
{
  "naceCodes": ["62"],
  "municipalities": ["Oslo"],
  "requireContact": "email",
  "maxItems": 200
}
```

Leave the input empty to get a built-in example of up to 5 companies (AS in Oslo, NACE 62).

- NACE codes work as prefixes: `62` covers every IT services code, `43.2` covers electrical and plumbing installation, `62.100` is one code.
- Municipalities take the 4-digit number (`0301` Oslo, `4601` Bergen, `5001` Trondheim, `1103` Stavanger) or the name.
- `registeredFrom` finds newly registered companies, e.g. everything registered since the 1st of the month.
- `requireContact` is `any` (default), `email`, `website`, `phone` or `emailOrWebsite`.

### Output example

A fictional company, in the Actor's exact output shape:

```json
{
  "orgNumber": "999000001",
  "companyName": "FJORDKODE AS",
  "legalForm": "AS",
  "legalFormDescription": "Aksjeselskap",
  "naceCode": "62.100",
  "naceDescription": "Dataprogrammeringstjenester",
  "secondaryNaceCodes": [],
  "employees": 12,
  "email": "post@fjordkode.example",
  "website": "https://www.fjordkode.example",
  "domain": "fjordkode.example",
  "phone": "+4722000001",
  "address": "Eksempelveien 1",
  "postalCode": "0150",
  "city": "OSLO",
  "municipality": "OSLO",
  "municipalityNumber": "0301",
  "foundedDate": "2020-05-04",
  "registeredDate": "2020-05-10",
  "vatRegistered": true,
  "lastAnnualAccounts": "2025",
  "inGroup": false,
  "status": "active",
  "registerUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/999000001",
  "privacyNotice": null,
  "source": "Contains data under the Norwegian licence for Open Government data (NLOD) distributed by the Brønnøysund Register Centre (Enhetsregisteret). Changed by Keencrest: filtered, and email addresses that may belong to a person removed.",
  "licenceUrl": "https://data.norge.no/nlod/en/2.0",
  "query": "forms=AS,ASA nace=62 municipality=0301",
  "scrapedAt": "2026-11-02T10:00:00+00:00"
}
```

### Pricing

Pay per event, no subscription.

| Event | Price | When |
|---|---|---|
| Company with contact | $0.002 | each company returned; every returned company has at least one contact field |

Companies without the contact field you asked for are not returned and not billed, and neither are notice rows.

Worked examples:

- Empty input (example): up to 5 companies, at most $0.01.
- 200 IT companies in Oslo with a contact: $0.40.
- 1,000 companies: $2.00.
- 5,000 companies from the bulk file: $10.00.

Set a maximum charge on the run to cap what you spend; the Actor stops at it.

### Limits

- Coverage is what companies registered. In the November 2026 register file, 87,480 of 423,922 active AS and ASA (21%) have a usable contact field: 15% a phone, 8% a website, 6% a generic company email. Sectors with more websites (IT, consulting) score higher.
- The search API returns at most 10,000 results per query; auto mode then reads the nightly bulk file, which takes about 1-3 minutes more. The bulk file is produced once a night, so changes from today appear tomorrow.
- The register publishes no rate limit. Searches are paced at 0.5 s and a `429` answer is backed off and retried from the same address; if the register keeps refusing, the run ends with what it has and says so.

### FAQ

**Where does the data come from?** From the Brønnøysund Register Centre's open data service for Enhetsregisteret, under the Norwegian licence for Open Government data (NLOD 2.0), which allows commercial reuse with attribution. Every row carries the attribution in `source`.

**Is this scraping a website?** No. It calls the register's documented open API and downloads its published open-data file, as the register's documentation recommends for reading more than 10,000 units.

**Why is the email empty when the register has one?** Because it may belong to a person: Norwegian law treats a person's work address like any other personal address. See `privacyNotice`.

**Can I get board members or managers?** No. This Actor is company-level only.

### Lawful use: can you email these companies?

This is our reading of the rules, not legal advice; check with your own adviser before a campaign.

- **Email to a generic company mailbox is allowed without prior consent.** Markedsføringsloven § 15 bans electronic marketing to *natural persons* without prior consent. The Consumer Authority's guidance on § 15 says marketing may be sent to addresses "som ikke tilhører en bestemt fysisk person, f.eks. post@firmaX.no". That is why only generic mailboxes are returned.
- **Email to a person needs prior consent, even at work and even if the address is in the register.** The same guidance says the ban covers a person's own work address such as ola.nordmann@firmaX.no "selv om en fysisk persons e-postadresse er registrert som kontaktadresse til et foretak i Brønnøysundregisteret", and that where it is unclear whether an address belongs to a person, a breach is found if it in fact does. Sole proprietors are natural persons. We drop such addresses, but our filter can be wrong: if a returned mailbox turns out to reach one person, stop emailing it.
- **Every message must say who sends it, that it is marketing, and offer a free, easy opt-out** (ehandelsloven § 9 and the § 15 guidance). Honour every opt-out at once and keep a record of it, and drop opted-out addresses from later lists.
- **The stakes are real.** A substantial breach of § 15 can be punished with fines or up to 6 months in prison (§ 48), the Consumer Authority can impose infringement fees (§ 42), and its orders can also be aimed at those who help a breach (§ 39(3), *medvirkning*). Do not use this data for anything that would breach § 15.
- **Phone calls to companies** are outside § 15's consent rule, and the Reservasjonsregisteret (§ 12) protects consumers, not companies. **Text messages** to a person need prior consent under § 15 (its definition of electronic mail includes text messages), so do not use the phone numbers for text-message marketing.
- **The GDPR still applies to you** for any data that relates to a person: keep a lawful basis (usually legitimate interest for B2B contact), tell recipients where you got their data, and honour objections. NLOD 2.0 itself does not license personal data (section 3).
- Outside Norway, your own country's rules for B2B email apply as well.

### Purpose limit

The data is for building lists of companies (legal entities), market sizing and CRM enrichment. It is not for tracing, profiling or contacting individuals.

### Removal requests

If a record concerns you or your company and you want it excluded, email **datagleaner@gmail.com** (Keencrest, the publisher; replies come from an AI agent, Crest, and the business is owner-operated) with the org number, website domain or email address. We add it to the Actor's exclusion list (`src/optout_dids.txt`, loaded at the start of every run) within 30 days, answer you, and keep a dated record of the request and our answer. To change what the register itself shows, update your details with the Brønnøysund Register Centre.

### Source and licence

Contains data under the Norwegian licence for Open Government data (NLOD) distributed by the Brønnøysund Register Centre. Changed by Keencrest: filtered by your criteria, and email addresses that may belong to a person removed. Licence: https://data.norge.no/nlod/en/2.0

# Actor input Schema

## `naceCodes` (type: `array`):

Optional. Norwegian NACE codes or prefixes, e.g. `62` (IT), `62.100` (programming), `43.2` (electrical and plumbing), `69.201` (accounting). A prefix matches every code under it; several codes are OR-ed.

## `municipalities` (type: `array`):

Optional. Municipality numbers such as `0301` (Oslo), `4601` (Bergen), `5001` (Trondheim), `1103` (Stavanger), or names such as `Oslo`. Matches the business address.

## `postalCodes` (type: `array`):

Optional. Four-digit postal codes of the business address, e.g. `0150`.

## `legalForms` (type: `array`):

Optional. Default `AS` and `ASA`. Also accepted: `SA`, `SE`, `BA`, `STI`, `FLI`, `BBL`, `GFS`, `SPA`, `PK`, `VPFO`, `IKS`, `KF`, `FKF`, `SF`, `KOMM`, `FYLK`, `STAT`, `ORGL`, `KIRK`, `SÆR`. Sole proprietorships (`ENK`), partnerships with personally liable partners (`ANS`, `DA`, `KS`), foreign units (`NUF`) and residential owners are never returned.

## `nameQuery` (type: `string`):

Optional text the company name must contain, e.g. `regnskap`.

## `foundedFrom` (type: `string`):

Optional date `YYYY-MM-DD` (stiftelsesdato).

## `foundedTo` (type: `string`):

Optional date `YYYY-MM-DD`.

## `registeredFrom` (type: `string`):

Optional date `YYYY-MM-DD` of registration in Enhetsregisteret; use it to find newly registered companies.

## `registeredTo` (type: `string`):

Optional date `YYYY-MM-DD`.

## `minEmployees` (type: `integer`):

Optional. The register shows no count below 5 employees, so any value from 1 keeps only companies with a registered count at or above it.

## `maxEmployees` (type: `integer`):

Optional upper bound on the registered employee count (companies with no count pass).

## `requireContact` (type: `string`):

Only companies with this contact field are returned, and only returned companies are billed. Companies without it are skipped for free.

## `includeInactive` (type: `boolean`):

Off by default: companies under bankruptcy, liquidation or forced dissolution are skipped.

## `mode` (type: `string`):

The register's search API stops at 10,000 results per query. Auto uses it first and switches to the register's nightly bulk file (about 155 MB, streamed, about 1-3 minutes) only when a query needs more.

## `maxItems` (type: `integer`):

Upper limit of companies returned (and billed).

## `requestDelayMs` (type: `integer`):

Polite pacing for the register's search API. The API publishes no rate limit; 429 answers are backed off.

## Actor input object example

```json
{
  "naceCodes": [
    "62",
    "63.1"
  ],
  "municipalities": [
    "0301",
    "4601"
  ],
  "postalCodes": [
    "0150",
    "0151"
  ],
  "legalForms": [
    "AS",
    "ASA"
  ],
  "nameQuery": "regnskap",
  "foundedFrom": "2025-01-01",
  "foundedTo": "2026-10-31",
  "registeredFrom": "2026-10-01",
  "registeredTo": "2026-10-31",
  "minEmployees": 5,
  "maxEmployees": 50,
  "requireContact": "any",
  "includeInactive": false,
  "mode": "auto",
  "maxItems": 10,
  "requestDelayMs": 500
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "naceCodes": [
        "62"
    ],
    "municipalities": [
        "0301"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagleaner/norway-company-contacts").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "naceCodes": ["62"],
    "municipalities": ["0301"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("datagleaner/norway-company-contacts").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "naceCodes": [
    "62"
  ],
  "municipalities": [
    "0301"
  ],
  "maxItems": 10
}' |
apify call datagleaner/norway-company-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datagleaner/norway-company-contacts"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cqUZYq19HKBIZWERH/builds/7q2I3gtQ4Idjmyl1n/openapi.json
