# Bizi.si Scraper - Slovenia Company Register & Leads (`normdata/bizi-scraper`) Actor

Scrape Bizi.si, the Slovenian company register: every company and sole trader by activity, category, region, municipality, size, employees and legal form. Get tax number, address and GPS, plus phone, e-mail, website, VAT, capital, ownership, status and bank accounts.

- **URL**: https://apify.com/normdata/bizi-scraper.md
- **Developed by:** [Norm Data](https://apify.com/normdata) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 companies

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![Norm Data](https://raw.githubusercontent.com/FabriAV/normdata/refs/heads/main/assets/banner_norm2.png)

## 🏢 Bizi.si Scraper - Slovenia Company Register & Leads

Extract companies and sole traders from **Bizi.si**, the Slovenian business register with **254,000+ active companies**. Search by **SKD activity code** (1,724 codes), **Bizi category** (222), **region** (12) or **municipality** (212), and filter by **employees, company size, legal form, capital origin, ownership, registration date** and street. Every company comes with its **company number, tax number, address, GPS position, main activity and employees**. Turn on **Contacts** for the **phone, e-mail, website, fax and open job ads**, and **Registry data** for the **VAT number, legal form, status, share capital, ownership, other activities, past names and bank accounts (IBAN)**. It collects **1,000 companies in about 20 seconds** (about 100 seconds with both add-ons), and can run on a schedule to send you **only new companies**.

### 🎯 Who uses it?

#### 📞 Sales teams and lead generation agencies

Build call and e-mail lists of Slovenian companies by activity, region and size, ready for your CRM.

#### 🏦 Banks, credit and compliance teams

Check tax numbers, VAT status, legal form, share capital, ownership and bank accounts of Slovenian companies in bulk.

#### 🧑‍💼 Recruiters and HR agencies

Find companies that are hiring right now: the **Only companies with job ads** filter and the `jobAds` field list their open positions.

#### 📊 Market researchers and consultants

Count and map companies by SKD activity, municipality, size and capital origin, with GPS positions and registration dates.

### ✨ What it does

- **Every Slovenian company.** Leave everything empty for all 254,000+ active companies, or narrow it down with the fields below.
- **SKD activities:** pick any of the 1,724 codes or names (`C10`, `G47.810`, "Pogodbena priprava in dostava hrane"). A section or division includes its sub-activities.
- **Bizi categories:** the site's 222 business categories (Avtoservis, Avtodeli, Gradbeništvo...).
- **Regions and municipalities:** any of the 12 statistical regions or 212 municipalities, several in one run.
- **Filters:** employees from / to, company size (micro, small, medium, large), legal form (d.o.o., s.p., d.d. and 145 more), capital origin (domestic, foreign, mixed), ownership (private, state, cooperative...), registration date from / to (a date or "30 days"), street, only companies with job ads, only companies paid from public budgets, and only companies with a phone, an e-mail or a website.
- **Keywords:** alone they run the site's full-text search. Together with filters or places they match company names (current, long and past names).
- **Or paste links.** Search, category and company pages from bizi.si. Filters are ignored with links.
- **Contacts add-on:** phone, e-mail, website, fax and open job ads (title, link, date and places) from each company page.
- **Registry data add-on:** legal and short name, legal form, VAT number and VAT payer, status, size, main and other SKD activities, categories, institutional sector, share capital, capital origin, ownership, settlement, municipality, administrative unit, region, registration authority, registration date, last change and its date, past names, and bank accounts with IBAN, bank, opening and closing dates and account type.
- **Monitoring:** run it on a schedule with **Only new companies**, and each run saves only companies you haven't received yet. With a registration date of "30 days" you get the newly founded companies.

### 🏆 Why this scraper

- **Every filter of the site's advanced search**, plus activity codes, categories and municipalities from ready lists, so you never type a code by hand.
- **No 1,000-result wall.** Big searches are split by region and read in parallel: 1,500 micro companies in under 10 seconds.
- **Registry data nobody else gives:** VAT number, legal form, status, share capital, ownership, other activities, past names and bank accounts with IBAN.
- **Hiring signals:** open job ads per company, and a filter for companies that are hiring.
- **Clean, typed data.** Dates as `YYYY-MM-DD`, GPS and share capital as numbers, employees as bands (`10-19`, `1000+`), VAT payer as true or false.
- **Fast and light.** No proxy and no browser.

### ⚖️ How it compares

Based on each Actor's public input options, README and output fields (October 2026).

| | **This Actor** | memo23/bizi-scraper | blackfalcondata/bizi-si-scraper | getascraper/bizi-si-business-scraper |
| --- | --- | --- | --- | --- |
| Search by SKD activity code | ✅ 1,724 codes | ❌ | ❌ | ❌ |
| Bizi categories list | ✅ 222 | ❌ | ❌ | ❌ |
| Regions and municipalities lists | ✅ 12 + 212 | City text | ❌ (GPS radius) | Location text |
| Employees, size, capital, ownership, date filters | ✅ | ❌ | ❌ | ✅ |
| Legal form filter | ✅ 148 forms | ❌ | ❌ | ❌ |
| Hiring and public budget filters | ✅ | ❌ | ❌ | ❌ |
| Only with phone / e-mail / website | ✅ | ❌ | ❌ | ❌ |
| Phone, e-mail, website | ✅ add-on | ✅ (e-mail $0.05 each) | ❌ | ✅ |
| Open job ads | ✅ | ❌ | ❌ | ❌ |
| VAT number, legal form, status, share capital | ✅ add-on | ❌ | ❌ | VAT payer only |
| Bank accounts (IBAN), past names, other activities | ✅ add-on | ❌ | ❌ | ❌ |
| GPS position | ✅ | ❌ | ✅ | ✅ |
| Only new companies (monitoring) | ✅ | ❌ | ✅ | ✅ |

### 📦 What data you get

| Field | Description |
| --- | --- |
| `id` | Matična številka, the company number in the Slovenian register (10 digits). |
| `name` | Company name. |
| `taxNumber` | Tax number (davčna številka, 8 digits). |
| `vatNumber` | *(Registry)* VAT number (SI12345678) when it is a VAT payer. |
| `legalName`, `shortName` | *(Registry)* Full and short name in the register. |
| `legalForm` | *(Registry)* Legal form, like Družba z omejeno odgovornostjo. |
| `status` | *(Registry)* Register status, like POSLOVNI SUBJEKT POSLUJE (operating). |
| `phone`, `email`, `website`, `fax` | *(Contacts)* Phone, e-mail, website and fax. |
| `street`, `postalCode`, `city` | Street, postal code and post town. |
| `settlement`, `municipality`, `administrativeUnit`, `region` | *(Registry)* Settlement, municipality, administrative unit and statistical region. |
| `latitude`, `longitude` | GPS position. |
| `activityCode` | *(Registry)* SKD code of the main activity. |
| `activity` | Main activity (SKD, in Slovenian). |
| `employees` | Employees band, like 0, 3-4, 10-19 or 1000+. |
| `companySize` | *(Registry)* Size class in the register, like Mikro enote or Velike enote. |
| `sector` | *(Registry)* Institutional sector (SKIS). |
| `shareCapital`, `capitalOrigin`, `ownership` | *(Registry)* Share capital in euros, capital origin and ownership. |
| `registrationAuthority` | *(Registry)* Register office that keeps the entry. |
| `lastChange` | *(Registry)* Last change in the register, like Sprememba zastopnika. |
| `searchQuery` | The search that found it. |
| `isVatPayer` | *(Registry)* Whether it is registered for VAT. |
| `url` | Its Bizi.si page. |
| `jobAds` | *(Contacts)* Open job ads: title, places, date posted and link. |
| `otherActivities` | *(Registry)* Other registered activities (SKD code and name). |
| `categories` | *(Registry)* Bizi.si categories it is listed in. |
| `pastNames` | *(Registry)* Earlier names. |
| `bankAccounts` | *(Registry)* Bank accounts: IBAN, bank, opened and closed dates, open or not, and account type (letter and its meaning, in Slovenian). |
| `registeredAt`, `lastChangeAt` | *(Registry)* Date it was entered in the register (registeredAt) and date of its last change (lastChangeAt). |
| `scrapedAt` | When this row was saved. |
| `error` | Only present when a row failed. The fields that loaded are still there. |

Fields marked *Registry* or *Contacts* only appear when that add-on is on.

#### Example row (trimmed)

```json
{
  "id": "5494516000",
  "name": "ENGROTUŠ d.o.o.",
  "taxNumber": "87927497",
  "vatNumber": "SI87927497",
  "legalName": "ENGROTUŠ podjetje za trgovino, d.o.o.",
  "shortName": "ENGROTUŠ d.o.o.",
  "legalForm": "Družba z omejeno odgovornostjo",
  "status": "POSLOVNI SUBJEKT POSLUJE",
  "phone": "0597 33000",
  "email": "info@tus.si",
  "website": "https://www.tus.si",
  "fax": "0597 33045",
  "street": "Cesta v Trnovlje 10A",
  "postalCode": "3000",
  "city": "Celje",
  "settlement": "Celje",
  "municipality": "Celje",
  "administrativeUnit": "CELJE",
  "region": "SAVINJSKA",
  "latitude": 46.24371,
  "longitude": 15.28061,
  "activityCode": "G47.110",
  "activity": "Nespecializirana trgovina na drobno, predvsem z živili, pijačami ali tobačnimi izdelki",
  "employees": "1000+",
  "companySize": "Velike enote",
  "sector": "S.11002 - Nacionalne zasebne nefinančne družbe",
  "shareCapital": 546932,
  "capitalOrigin": "Domači kapital",
  "ownership": "Zasebna lastnina",
  "registrationAuthority": "Okrožno sodišče Celje",
  "lastChange": "Sprememba zastopnika",
  "searchQuery": "250+ employees",
  "isVatPayer": true,
  "url": "https://www.bizi.si/ENGROTUS-D-O-O/",
  "jobAds": [
    { "title": "Vodja trgovine, poslovodja m/ž, Tuš market Metlika", "places": ["Metlika"], "postedAt": "2026-10-29", "url": "https://www.mojedelo.com/oglas/vodja-trgovine-poslovodja-m-z-tus-market-metlika/fc54f26c-105e-4337-8b62-e4e9594f2b34" }
  ],
  "otherActivities": [
    "C19.200 Proizvodnja rafiniranih naftnih proizvodov in proizvodov iz fosilnih goriv",
    "G47.910 Posredniške dejavnosti za nespecializirano prodajo na drobno",
    "H53.200 Druga poštna in kurirska dejavnost"
  ],
  "categories": ["Trgovina"],
  "pastNames": ["ENGROTUŠ PODJETJE ZA TRGOVINO, D.D."],
  "bankAccounts": [{ "iban": "SI56 0400 1004 9165 409", "bank": "OTP banka d.d.", "openedAt": "2021-01-01", "closedAt": "2021-09-10", "isOpen": false, "typeCode": "T", "type": "TR za opravljanje plačilnega prometa" }],
  "registeredAt": "1990-04-26",
  "lastChangeAt": "2026-05-27",
  "scrapedAt": "2026-10-31T16:52:57.667Z"
}
```

### 💡 Use cases

**Car services in Gorenjska with an e-mail:**

```json
{
  "categories": ["Avtoservis"],
  "regions": ["Gorenjska"],
  "withEmail": true
}
```

**Food manufacturers with 10 to 249 employees, with registry data:**

```json
{
  "activities": ["C10"],
  "employeesMin": "10",
  "employeesMax": "200",
  "includeRegistry": true
}
```

**Foreign-owned companies in Ljubljana and Maribor:**

```json
{
  "municipalities": ["Ljubljana", "Maribor"],
  "capitalOrigin": "2",
  "includeContacts": true
}
```

**Companies hiring right now, with their job ads:**

```json
{
  "withJobAds": true,
  "includeContacts": true,
  "maxItems": 1000
}
```

**Newly founded companies every week (schedule this run):**

```json
{
  "registeredFrom": "7 days",
  "includeContacts": true,
  "onlyNew": true,
  "monitorName": "new-si-companies"
}
```

### ⚙️ How the input is organised

| Section | What it's for |
| --- | --- |
| **Maximum results** | Always first, caps the whole run. Empty means no limit. |
| **What to scrape** | Keywords, activities (SKD), categories, regions and municipalities. |
| **Filters** | Employees from, employees up to, company size, legal forms, capital origin, ownership, registered from, registered until, address contains, only hiring, only paid from public budgets, only with a phone, only with an e-mail and only with a website. |
| **Add-ons** | Contacts and registry. |
| **Monitoring** | Only new companies and monitor name. |
| **Links** | Links instead of the fields above. Filters are ignored with links. |

### 💰 Pricing

Pay-per-event: a one-time **$0.003** when the run starts, plus a price per company saved to your dataset. The price depends on your Apify plan tier:

| Your Apify plan | Price per company |
| --- | --- |
| Free | $0.013 |
| Bronze | $0.012 |
| Silver | $0.011 |
| Gold / Platinum / Diamond | $0.010 |

Approximate total cost:

| Companies collected | Free | Bronze | Silver | Gold+ |
| --- | --- | --- | --- | --- |
| 100 | $1.30 | $1.20 | $1.10 | $1.00 |
| 1,000 | $13.00 | $12.00 | $11.00 | $10.00 |
| 10,000 | $130.00 | $120.00 | $110.00 | $100.00 |

**Add-ons:** each one reads one more page per company, and adds one charge per company whose page was read:

| Your Apify plan | Contacts, per company | Registry data, per company |
| --- | --- | --- |
| Free | $0.006 | $0.004 |
| Bronze | $0.0055 | $0.0035 |
| Silver | $0.005 | $0.003 |
| Gold / Platinum / Diamond | $0.0045 | $0.0025 |

The phone, e-mail and website filters turn Contacts on. Companies whose page could not be read pay only the base price, and companies left out by filters are free. New Apify accounts start with $5 in free credit. On the Free plan, a run saves up to 10 companies.

### 🚀 Run it

1. Create a free Apify account with $5 in credit.
2. Open the Bizi.si Scraper.
3. Pick activities, categories, regions or municipalities (or keep the prefilled ones), add filters and add-ons, then click **Start**.
4. Export the results as CSV, Excel, JSON or XML from the Dataset tab.

### 🤖 Use with AI agents (MCP)

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client, then ask in plain words, for example: *"Find 300 construction companies in Osrednjeslovenska with 10 to 49 employees and their e-mails on Bizi.si"*. The agent runs this Actor and reads the results.

### 🔧 Troubleshooting

- **A value was skipped.** The log says when an activity, category, region, municipality or legal form is not one of the lists. Pick it from the dropdown, or type it under **Keywords**.
- **Keywords give few results with filters.** With filters or places, keywords only match company names. Use an activity or category instead, or run the keywords alone for the full-text search.
- **Many empty e-mails or websites.** Not every company publishes them. Use the **Only with an e-mail** or **Only with a website** filters.
- **Contact filters take longer.** The site has no such filter, so each company page is read and companies without the contact are left out (they are free).

### ❓ FAQ

**Is there a limit per search?** No. Searches over 500 results are split by region, and every page is read until **Maximum results** is reached.

**Can I get all Slovenian companies?** Yes. Leave every field empty (about 254,000 active companies).

**What is in the base price and what is in the add-ons?** The base row has the company number, name, tax number, address, GPS, main activity and employees. Contacts adds the phone, e-mail, website, fax and job ads. Registry data adds the legal form, VAT, status, size, capital, ownership, other activities, location units, registration and change dates, past names and bank accounts.

**Does it include directors or financial statements?** No. On bizi.si those are for paying subscribers only, and this Actor reads public pages only.

**Do I need a proxy?** No.

### 🛡️ Limits & responsible use

This Actor collects public company information from bizi.si. Use the data in line with the site's terms, the GDPR and Slovenian e-mail marketing rules, especially for sole traders (s.p.), whose data is personal data.

### 📧 Contact

Questions, bugs or a field you need: norm.data.scrapers@gmail.com

# Actor input Schema

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

Stop after this many companies in total. Leave empty for no limit. The Apify Free plan is always capped at 10.

## `keywords` (type: `array`):

Words like avtoservis, gradbeništvo or a company name. On their own they search the whole company text like the search box of the site; with any filter below they match company names only (that is how the site searches).

## `activities` (type: `array`):

Official activity codes (SKD 2025, 1,724 codes at every level: picking a section or a division includes everything in it). Matches the main activity of the company.

## `categories` (type: `array`):

Bizi.si categories (222, in Slovenian), like Avtoservis or Gradbeništvo. Companies can be in several.

## `regions` (type: `array`):

Statistical regions of Slovenia. Leave empty for the whole country.

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

Municipalities (212), on top of the regions picked.

## `employeesMin` (type: `string`):

Smallest number of employees (the site counts in bands).

## `employeesMax` (type: `string`):

Largest number of employees (the band it falls in is included).

## `companySize` (type: `string`):

Size class under Slovenian law (micro, small, medium, large).

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

Legal forms (148), like d.o.o., s.p. or d.d.

## `capitalOrigin` (type: `string`):

Where the capital comes from.

## `ownership` (type: `string`):

Kind of ownership.

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

Registered on or after this date: YYYY-MM-DD, or relative like 30 days or 1 year.

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

Registered on or before this date: YYYY-MM-DD, or relative like 6 months.

## `address` (type: `string`):

Words of the street or town, like Dunajska or Celje.

## `withJobAds` (type: `boolean`):

Only companies with job ads open on Moje delo right now.

## `budgetFunding` (type: `boolean`):

Only companies that received money from public budgets (ERAR records).

## `withPhone` (type: `boolean`):

Skip companies that show no phone. Turns on the Contacts add-on.

## `withEmail` (type: `boolean`):

Skip companies that show no e-mail. Turns on the Contacts add-on.

## `withWebsite` (type: `boolean`):

Skip companies that show no website. Turns on the Contacts add-on.

## `includeContacts` (type: `boolean`):

From the company page: phone, e-mail, website, fax and open job ads (title, places, date, link). One more request per company.

## `includeRegistry` (type: `boolean`):

From the business register page: full legal name, legal form, VAT number, status, size, SKD code and other activities, categories, capital, ownership, municipality, region, registration date, last change, past names and bank accounts (IBAN, bank, open or closed). One more request per company.

## `onlyNew` (type: `boolean`):

Skip companies saved by earlier runs with the same monitor name.

## `monitorName` (type: `string`):

Runs with the same name share their history. Use a different name for each schedule.

## `startUrls` (type: `array`):

Bizi.si search pages (https://www.bizi.si/iskanje?q=avtoservis), category pages (https://www.bizi.si/TSMEDIA/A/avtodeli-4672/) or company pages (https://www.bizi.si/BRINOX-D-O-O/). Filters are ignored with links.

## Actor input object example

```json
{
  "maxItems": 10,
  "categories": [
    "Avtoservis"
  ],
  "companySize": "2",
  "includeContacts": true,
  "includeRegistry": true
}
```

# 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 = {
    "maxItems": 10,
    "categories": [
        "Avtoservis"
    ],
    "companySize": "2",
    "includeContacts": true,
    "includeRegistry": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("normdata/bizi-scraper").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 = {
    "maxItems": 10,
    "categories": ["Avtoservis"],
    "companySize": "2",
    "includeContacts": True,
    "includeRegistry": True,
}

# Run the Actor and wait for it to finish
run = client.actor("normdata/bizi-scraper").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 '{
  "maxItems": 10,
  "categories": [
    "Avtoservis"
  ],
  "companySize": "2",
  "includeContacts": true,
  "includeRegistry": true
}' |
apify call normdata/bizi-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,normdata/bizi-scraper"
        }
    }
}
```

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/lQr9k5obcACZBly0R/builds/6Ng6XFkG1TgPZ0Hvl/openapi.json
