# Bulgarian Commercial Register Scraper (`deriverge/bulgarian-company-check`) Actor

\[$2.00 / 1K] Bulk Bulgarian company lookup by EIK or VAT number. Queries the Commercial Register and EU VIES. Returns the legal name in Cyrillic and Latin, legal form, registered seat, capital, activity and VAT validity. Sole traders are treated as natural persons. Unmatched rows are free.

- **URL**: https://apify.com/deriverge/bulgarian-company-check.md
- **Developed by:** [deriverge s.r.o.](https://apify.com/deriverge) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 company records

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Bulgarian Company Checker

### What does Bulgarian Company Checker do?

**Bulgarian Company Checker** verifies Bulgarian companies in bulk against the Commercial Register run by the Registry Agency, straight from its own data service, and cross-checks every company in the EU VIES system. Give it a list of EIK numbers and for each one you get back the legal name in Cyrillic and in Latin transliteration, the full name with legal form, the registered seat, the object of activity, the registered capital, and whether the EU confirms the company as a VAT payer.

- Bulgarian VAT numbers are the EIK with a BG prefix, so the VIES check needs no conversion and works for every company.
- Rows that cannot be matched are **free**. You only pay for entities we actually resolve.
- Typos never reach the register: every EIK is validated against its checksum locally first, and a failed checksum is reported as such, free of charge.

### Sole traders are people

The Commercial Register also contains sole traders (ЕТ). By law, a sole trader's trade name contains the person's own name, so returning it would mean returning personal data. This actor recognises sole traders by their legal form and **withholds the name and seat by design**. You still learn that the EIK exists and what it is. Fields listing managers and owners of companies are never read at all.

### Input

```json
{
  "companies": [
    "130007884",
    { "eik": "831915840", "reference": "supplier-42" }
  ],
  "includeVies": true
}
```

Strings and objects can be mixed freely. VAT numbers with the BG prefix work as well. The optional `reference` is returned unchanged so you can join results back to your own system.

### Output

One row per submitted company:

```json
{
  "input": "130007884",
  "matched": true,
  "entityType": "legal_entity",
  "eik": "130007884",
  "name": "БИЛЛА БЪЛГАРИЯ",
  "nameLatin": "BILLA BULGARIA",
  "fullName": "\"БИЛЛА БЪЛГАРИЯ\" ЕООД",
  "legalForm": "Еднолично дружество с ограничена отговорност",
  "seat": "Държава: БЪЛГАРИЯ Област: София (столица), Община: Столична ...",
  "vatNumber": "BG130007884",
  "vatValidVies": true,
  "viesName": "БИЛЛА БЪЛГАРИЯ ЕООД",
  "riskFlags": []
}
```

Every value carries provenance: which register said it, at which URL, and when. If a source was down, the affected fields are `null` and the provenance row says why, never silently guessed.

### Watch a list for changes

Checking a supplier once is useful. Checking the same list every morning and reading only what changed is what keeps you out of trouble. Give the run a watch name (or save it as a task and schedule it) and every later run compares its results with the previous one: a company that turned inactive, a new risk flag, a VAT registration cancelled, a published account that disappeared. The differences are stored in the `CHANGES` record of the run, ready for an integration or an email. The comparison itself is free.

### Pricing

| Event | Price |
|---|---|
| Run fee, a tenth of a cent per run that resolves at least one company | $0.001 |
| Company resolved | $0.004 |
| VIES confirmation returned | $0.001 |
| Company not found | **free** |

### Speed

The Registry Agency allows only a handful of requests per minute from one address. The actor spreads its requests and keeps a steady pace, so expect roughly forty companies a minute. Long lists simply take longer; nothing is skipped and nothing is guessed.

### Frequently asked questions

**What does an unmatched row cost?** Nothing. Rows that fail the checksum or that the register does not know are returned with an explanation and are never charged.

**Where does the data come from?** The Commercial Register of the Registry Agency (portal.registryagency.bg) and the EU VIES system. Every value carries its source and timestamp.

**Why is the name missing on some rows?** Because the EIK belongs to a sole trader. Their trade name contains their personal name, so it is withheld by design.

**Do you return insolvency or liquidation data?** Not yet. The Registry Agency publishes those only through its web application, not through the data service this actor uses. It is on the list.

This is the Bulgarian sibling of our [Czech and Slovak](https://apify.com/deriverge/czech-company-check), [Romanian](https://apify.com/deriverge/romanian-company-check), [Estonian](https://apify.com/deriverge/estonian-company-check), [Lithuanian](https://apify.com/deriverge/lithuanian-company-check) and [Latvian](https://apify.com/deriverge/latvian-company-check) company checkers. They share the same validation engine and the same billing rule: unmatched rows are free.

# Actor input Schema

## `companies` (type: `array`):

One entry per company: a 9-digit EIK (130007884), a VAT number (BG130007884), or an object with eik and an optional reference that is returned unchanged. Typos that fail the checksum are reported and never charged.

## `includeVies` (type: `boolean`):

Cross-check every company against the EU VIES system. Bulgarian VAT numbers are the EIK with a BG prefix, so no conversion is needed.

## `watchKey` (type: `string`):

Give the run a name such as "suppliers" and schedule it. Every later run with the same name compares its results with the previous one and stores the differences (status changes, new risk flags, removed accounts) in the CHANGES record. Comparison is free. Runs from a saved task are compared automatically even without a name.

## Actor input object example

```json
{
  "companies": [
    "130007884",
    {
      "eik": "831915840",
      "reference": "supplier-42"
    }
  ],
  "includeVies": true
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per submitted company, with identity, legal form, seat, capital, VAT validity and risk flags.

## `summary` (type: `string`):

How many entities were resolved, how many were not found and therefore not charged, and how many carry a risk flag.

# 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 = {
    "companies": [
        "130007884",
        {
            "eik": "831915840",
            "reference": "supplier-42"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("deriverge/bulgarian-company-check").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 = { "companies": [
        "130007884",
        {
            "eik": "831915840",
            "reference": "supplier-42",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("deriverge/bulgarian-company-check").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 '{
  "companies": [
    "130007884",
    {
      "eik": "831915840",
      "reference": "supplier-42"
    }
  ]
}' |
apify call deriverge/bulgarian-company-check --silent --output-dataset

```

## MCP server setup

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

```

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/eZxXl7u5CvK4OEExX/builds/0gKAeyIuZgDMuK9Ia/openapi.json
