{
  "openapi": "3.0.1",
  "info": {
    "title": "Norway Company Contacts Scraper — Brreg Enhetsregisteret",
    "description": "Bulk Norwegian company contacts from Brreg's Enhetsregisteret open API: registered e-mail, phone, mobile and website, plus NACE codes, addresses, headcount, VAT and bankruptcy flags. Main units AND the 864,237 sub-unit locations. Filters by municipality, industry, legal form and size. $0.003/row.",
    "version": "0.1",
    "x-build-id": "HDcjGAE3SWVdyKC6x"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~brreg-enhetsregisteret-contacts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-brreg-enhetsregisteret-contacts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/scrapersdelight~brreg-enhetsregisteret-contacts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-brreg-enhetsregisteret-contacts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/scrapersdelight~brreg-enhetsregisteret-contacts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-brreg-enhetsregisteret-contacts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "unitTypes": {
            "title": "Unit types to sweep",
            "uniqueItems": true,
            "type": "array",
            "description": "Which of the register's two endpoints to read. 'enheter' = main units, the 1.17 million registered companies, associations and sole traders. 'underenheter' = sub-units, the 864,000 individual operating locations (a branch, a shop, a depot), each linked to its parent by parentOrganisationNumber. Sub-units are where a chain's per-site contact details live. With both selected the row budget is split evenly between them, so a capped run returns a mix rather than only main units.",
            "items": {
              "type": "string",
              "enum": [
                "enheter",
                "underenheter"
              ],
              "enumTitles": [
                "Main units (enheter) — 1,174,639",
                "Sub-units / locations (underenheter) — 864,237"
              ]
            },
            "default": [
              "enheter",
              "underenheter"
            ]
          },
          "kommunenummer": {
            "title": "Municipality numbers",
            "uniqueItems": true,
            "type": "array",
            "description": "Four-digit Norwegian municipality numbers, e.g. 0301 Oslo, 4601 Bergen, 5001 Trondheim, 1103 Stavanger. Several are swept as one partition each, so the run stays under the register's 10,000-row-per-query paging cap. The register matches a main unit on its business address (forretningsadresse) and a sub-unit on its physical location (beliggenhetsadresse) — the operating address in both cases, not the postal one. Leave empty for the whole country. Note that Norway renumbered its municipalities in the 2020 reform; a pre-2020 code is rejected at input time rather than silently returning nothing.",
            "items": {
              "type": "string"
            }
          },
          "naeringskode": {
            "title": "Industry codes (NACE / SN2007)",
            "uniqueItems": true,
            "type": "array",
            "description": "Norwegian SN2007 industry codes, matched as a PREFIX across a unit's first, second and third industry code. '43' means all of specialised construction, '43.22' means plumbing, heating and ventilation as a group, '43.221' means plumbing alone. Several codes are combined with OR. Careful: Norway's five-digit codes are NOT the EU's — 43.220 does not exist here and the register answers an unknown code with a perfectly successful, completely empty result, so every code you give is probed against the live register first and an unknown one is reported by name instead of silently contributing nothing.",
            "items": {
              "type": "string"
            }
          },
          "organisasjonsform": {
            "title": "Legal forms",
            "uniqueItems": true,
            "type": "array",
            "description": "Norwegian legal form codes, combined with OR. AS = aksjeselskap (limited company, 432,623 of them), ENK = enkeltpersonforetak (sole trader, 463,108), ASA = public limited, ANS / DA = partnerships, NUF = Norwegian branch of a foreign company, BEDR = sub-unit of a business, FLI = association, STI = foundation. Leave empty for all 44 forms.",
            "items": {
              "type": "string"
            }
          },
          "onlyWithContact": {
            "title": "Only return units that publish a contact",
            "type": "boolean",
            "description": "Drop every unit that has registered no e-mail address, no phone and no mobile number — and charge you for nothing that was dropped. The register holds a contact for roughly 38% of main units and 32% of sub-units, so this is the difference between a list you can work and a list you have to clean. The register offers no server-side filter for it, so the rows are read and then discarded on our side; the run summary reports exactly how many were examined against how many were delivered.",
            "default": false
          },
          "requireEmail": {
            "title": "Require an e-mail address specifically",
            "type": "boolean",
            "description": "Stricter than the setting above: keep only units with a registered e-mail address, ignoring phone-only ones. About 26% of main units qualify. Same deal — you are charged only for what is delivered.",
            "default": false
          },
          "registrertIMvaregisteret": {
            "title": "VAT registered",
            "enum": [
              "any",
              "true",
              "false"
            ],
            "type": "string",
            "description": "Limit to units that are ('true') or are not ('false') in the VAT register. VAT registration is the closest thing the register has to a proof of real trading activity: 410,012 of the 1.17 million main units are registered, and their contact fill rate is far higher than the register average.",
            "default": "any"
          },
          "konkurs": {
            "title": "Bankrupt",
            "enum": [
              "any",
              "true",
              "false"
            ],
            "type": "string",
            "description": "Limit to units flagged bankrupt ('true', about 3,250 at any time) or exclude them ('false'). Main units only — the sub-unit endpoint rejects this filter, so sub-unit rows are never filtered by it and the run summary says so when you combine the two.",
            "default": "any"
          },
          "underAvvikling": {
            "title": "Under liquidation",
            "enum": [
              "any",
              "true",
              "false"
            ],
            "type": "string",
            "description": "Limit to units under voluntary liquidation, or exclude them. Main units only, like the bankruptcy filter.",
            "default": "any"
          },
          "fraRegistreringsdatoEnhetsregisteret": {
            "title": "Registered on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Earliest registration date in Enhetsregisteret. Newly registered companies are the classic prospecting list — they need an accountant, insurance, banking and software — but note they are also the thinnest on contact details: units registered since 2025-01-01 carry a contact only about 11% of the time, against 38% register-wide. Both ends of the range are inclusive."
          },
          "tilRegistreringsdatoEnhetsregisteret": {
            "title": "Registered on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Latest registration date in Enhetsregisteret. Inclusive. This is also the axis the actor splits on internally when a single query would exceed the register's paging cap."
          },
          "fraAntallAnsatte": {
            "title": "Minimum employees",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest registered headcount. Beware what zero means here: the register omits the employee field entirely both for a unit that registered zero and for one that never registered a count at all, and its own filter lumps the two together (996,848 units sit in the 0-0 bucket, exactly the register total minus the 177,791 with one or more). Set this to 1 to get only units that have actually reported staff."
          },
          "tilAntallAnsatte": {
            "title": "Maximum employees",
            "minimum": 0,
            "type": "integer",
            "description": "Largest registered headcount. Combine with the minimum to target a size band — 5 to 50 employees is 64,205 main units."
          },
          "institusjonellSektorkode": {
            "title": "Institutional sector code",
            "type": "string",
            "description": "Statistics Norway institutional sector code, e.g. 2100 for private non-financial limited companies (426,413 units) or 7000 for non-profit organisations. Main units only — the sub-unit endpoint rejects it."
          },
          "navn": {
            "title": "Company name contains",
            "type": "string",
            "description": "Free-text name search run by the register itself. Be aware it is case-sensitive in a way that is not documented: 'Equinor' returns 179 hits and 'equinor' returns 240 against the same register. Treat it as a convenience lookup, not as a reliable filter for a bulk pull."
          },
          "organisasjonsnummer": {
            "title": "Organisation numbers",
            "uniqueItems": true,
            "type": "array",
            "description": "Look up specific nine-digit Norwegian organisation numbers instead of sweeping. Useful for enriching a list you already have with the register's contact details.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum rows to return",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on delivered rows, and on what you are charged — you pay per row delivered, so a cap is a budget. Split evenly across the unit types you selected. Set to 0 for no cap. One thing to know: the register refuses to page more than 10,000 rows deep into any single query, so while this stays at or under 10,000 the actor reads a big municipality straight through; raise it past 10,000 (or set 0) and the actor automatically splits the query into registration-date slices that each fit under the cap, and asserts that every slice came back whole.",
            "default": 100
          },
          "pageSize": {
            "title": "Rows per request",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Advanced. The register serves up to 10,000 rows in one response, but big bodies truncate under HTTP 200: ten parallel 1,000-row requests produced a torn response, while 500 at the shipped concurrency produced none over repeated trials. 500 is the measured-safe default and there is little reason to change it. Every page is checked against its own declared size, so a torn body is retried rather than mistaken for the end of the data.",
            "default": 500
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Advanced. How many register pages to read at once. 6 is the measured safe ceiling at the default page size; higher values start tearing response bodies rather than going faster.",
            "default": 6
          },
          "maxPartitions": {
            "title": "Maximum partitions",
            "minimum": 1,
            "type": "integer",
            "description": "Advanced. Safety guard on how many separate register queries one run may plan. Municipalities multiply by industry codes, so 40 municipalities and 10 codes is already 400 partitions before a single row is read. Raise it for a whole-register sweep, which needs roughly one date slice per 10,000 rows.",
            "default": 400
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "Advanced. Per-request timeout. The register answers a 500-row page in about a second directly and two to three seconds through a proxy.",
            "default": 90
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional, and off by default on purpose. data.brreg.no is open government data with no anti-bot of any kind: the same request measured 1.0s direct, 2.0s through the Apify datacenter proxy and 3.0s through residential, all returning byte-identical HTTP 200. A proxy here buys nothing and costs you two to three times the wall-clock you are billed for. Turn it on only if your own network needs it.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}