# Albania QKB Scraper: Company Registry & Beneficial Owner Data (`getascraper/albania-qkb-scraper`) Actor

Look up Albanian companies in QKB, the national registry, by NIPT, name, or watchlist. Get legal details plus beneficial owner name, nationality, birth year/month, and ownership percent, fields the closest Slovakia UBO actor can't return. Built for KYC, AML, and due diligence. $3.50/1,000 companies.

- **URL**: https://apify.com/getascraper/albania-qkb-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.63 / 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?

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

## 🇦🇱 Albania QKB Scraper: Company Registry & Beneficial Owner Data

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EFF3F7;border:1px solid #C7D4E0;border-top:4px solid #1E3A5F;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Get the beneficial owners other registries hide</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Look up any Albanian company by NIPT or name and pull its legal record plus a full beneficial ownership extract: owner name, nationality, year and month of birth, and ownership percentage, straight from Albania's own public registry.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D4E0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#16293F">🕵️ Full beneficial ownership</span><br>
<span style="font-size:12px;color:#57534E">Owner name, nationality, birth year and month, ownership percentage, and control type, sourced from Albania's public UBO register</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D4E0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#16293F">🔁 Built for repeat checks</span><br>
<span style="font-size:12px;color:#57534E">Load a watchlist of NIPTs once and re-run it on a schedule for ongoing KYC refresh</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D4E0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#16293F">🚩 Risk flags included</span><br>
<span style="font-size:12px;color:#57534E">Registry-published red flags on ownership, admin, and financial filings, at no extra cost</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D4E0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#16293F">📄 Official documents on request</span><br>
<span style="font-size:12px;color:#57534E">Fetch the official Simple and Historical extract PDFs alongside the structured data</span>
</td>
</tr>
</table>

QKB (Qendra Kombëtare e Biznesit, Albania's National Business Center) is the country's official
company registry. This Actor searches it by NIPT, legal name, or trade name, and enriches every
match with a structured beneficial ownership extract: the same anonymous UBO data Albania started
publishing under its 2025 transparency reform. No login, no data broker, no manual PDF reading.

### 🔍 Who this is for

- **KYC and AML analysts** onboarding an Albanian counterparty who need the ownership chain before
  they sign, not after.
- **Due-diligence teams** checking an Albanian supplier, partner, or acquisition target's legal
  standing and registered owners in one search.
- **Cross-border finance and legal teams** who re-check the same Albanian relationships
  periodically and want a watchlist they can re-run on a schedule instead of retyping names.

No other Apify Actor covers Albania today. The closest comparable Actor on the Store, a
beneficial-ownership scraper for Slovakia's registry, cannot return date of birth, nationality, or
ownership percentage at all, because Slovakia's own register redacts those fields. Albania's
register doesn't, so this Actor does.

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `nipt` | string | No | Exact-match lookup by NIPT (the company's unique registration number). |
| `companyName` | string | No | Contains-match search on the registered legal name. |
| `tradeName` | string | No | Contains-match search on the registered trade name. |
| `niptList` | array of strings | No | A watchlist of known NIPTs to look up and re-check in one run. |
| `legalForm` | enum | No | Restrict results to one legal form (SHPK, SHA, Person Fizik, and others). |
| `ownershipType` | enum | No | Restrict results by ownership nationality mix (Albanian, foreign, mixed, state-owned). |
| `region` | enum | No | Restrict results to one of Albania's 12 regions (qarqe). |
| `city` | string | No | Restrict results to a specific municipality. |
| `registeredFrom` | date | No | Only include companies registered on or after this date. |
| `registeredTo` | date | No | Only include companies registered on or before this date. |
| `administrator` | string | No | Contains-match search on a listed administrator's name. |
| `shareholder` | string | No | Contains-match search on a listed shareholder or partner's name. |
| `sector` | string | No | Contains-match search on the declared business activity. |
| `address` | string | No | Contains-match search on the registered address. |
| `fetchBeneficialOwners` | boolean | No | Fetch and structure the beneficial ownership extract per company. On by default. |
| `fetchSimpleExtract` | boolean | No | Fetch the official Simple Extract document per company. Off by default. |
| `fetchHistoricalExtract` | boolean | No | Fetch the official Historical Extract document per company, showing filing history. Off by default. |
| `maxItems` | integer | No | Maximum number of companies to process in this run (up to 50). |
| `proxyConfiguration` | proxy | No | Apify Proxy configuration. Datacenter proxy is the default and is sufficient for this target. |

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EFF3F7;border:1px solid #C7D4E0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Enter your search</span><br>
<span style="font-size:12px;color:#57534E">A NIPT, a company name, or a watchlist of NIPTs to re-check.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF3F7;border:1px solid #C7D4E0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">The Actor checks the registry</span><br>
<span style="font-size:12px;color:#57534E">It matches your search against Albania's national business registry.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF3F7;border:1px solid #C7D4E0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1E3A5F;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get structured results</span><br>
<span style="font-size:12px;color:#57534E">Legal details, beneficial owners, and risk flags land in your dataset, with PDFs on request.</span>
</td>
</tr>
</table>

### 📤 Data table

| Field | Type | Description |
|---|---|---|
| `nipt` | string | The company's registration number. |
| `legalName` | string | Registered legal name. |
| `tradeName` | string | Registered trade name, when different from the legal name. |
| `legalForm` | string | Legal form (SHPK, SHA, Person Fizik, and others). |
| `status` | string | Current registration status. |
| `registrationDate` | string | Date the company was registered. |
| `sector` | string | Declared business activity. |
| `city` | string | Registered municipality. |
| `ownershipNationalityMix` | string | Whether ownership is Albanian, foreign, mixed, or state-owned. |
| `adminAndShareholders` | array of strings | Names of listed administrators and shareholders. |
| `hasRedFlag` | boolean | Whether the registry has published any risk indicator for this company. |
| `rppRedFlagText` | string | Risk indicator text related to beneficial ownership, when present. |
| `bilanciRedFlagText` | string | Risk indicator text related to financial filings, when present. |
| `adminRedFlagText` | string | Risk indicator text related to administrators, when present. |
| `beneficialOwnersCount` | integer | Number of beneficial owners found in the ownership extract. |
| `beneficialOwners` | array of objects | Full name, nationality, birth year and month, ownership percentage, control type, and the date each person was designated a beneficial owner. |
| `uboExtractStatus` | string | Whether the ownership extract was found and successfully read for this company. |
| `uboExtractPdfUrl` | string (link) | Link to the official beneficial ownership document. |
| `simpleExtractPdfUrl` | string (link) | Link to the official Simple Extract document, when requested. |
| `historicalExtractPdfUrl` | string (link) | Link to the official Historical Extract document, when requested. |
| `sourceUrl` | string (link) | The registry search page this data came from. |
| `scrapedAt` | string | When this record was retrieved. |

#### Example output

```json
{
  "nipt": "M64525802A",
  "legalName": "EUROPA PROFIL TIRANA",
  "tradeName": "EUROPA PROFIL TIRANA",
  "legalForm": "SHPK",
  "status": "Aprovuar",
  "registrationDate": "2026-09-25",
  "sector": "Import-export of aluminum profiles and related construction materials",
  "city": "Vlore",
  "ownershipNationalityMix": "Shqiptare (100%)",
  "adminAndShareholders": ["Harallamb Tavo", "Kosta Lapa"],
  "hasRedFlag": false,
  "beneficialOwnersCount": 2,
  "beneficialOwners": [
    {
      "fullName": "Harallamb Tavo",
      "nationality": "Shqiptar/e",
      "birthYear": 1987,
      "birthMonth": 7,
      "controlType": "Holder of 25% or more of capital shares",
      "ownershipPercentage": 50,
      "designatedDate": "2026-09-22"
    },
    {
      "fullName": "Kosta Lapa",
      "nationality": "Shqiptar/e",
      "birthYear": 1981,
      "birthMonth": 1,
      "controlType": "Holder of 25% or more of capital shares",
      "ownershipPercentage": 50,
      "designatedDate": "2026-09-22"
    }
  ],
  "uboExtractStatus": "fetched",
  "uboExtractPdfUrl": "https://api.apify.com/v2/key-value-stores/.../records/RPP-M64525802A",
  "sourceUrl": "https://format.qkb.gov.al/kerko-per-subjekt/",
  "scrapedAt": "2026-09-27T23:02:25.762Z"
}
```

### 💰 Pricing

This Actor is pay per result: **$3.50 per 1,000 companies** (discounted further on Starter, Scale,
and Business plans), with no subscription and no charge for an empty run. You only pay for the
companies you actually get back. Free plan runs are limited to 25 companies per run, 3 runs per
day, and a short wait between runs. Upgrade to a paid Apify plan for unrestricted use.

### ⭐ Enjoying Albania QKB Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#EFF3F7;border:1px solid #C7D4E0;border-left:5px solid #1E3A5F;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If this saved you a manual registry lookup or a translated PDF, let us know.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other compliance and due-diligence teams find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1E3A5F;border:1px solid #C7D4E0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/albania-qkb-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Is this beneficial ownership data legal to access?**
Yes. Albania made this data anonymously public under its 2025 beneficial ownership transparency
reform. This Actor reads the same registry pages available to anyone, with no login and no
paywall.

**Does this cover every company in Albania?**
A single search returns up to 50 matching companies, matching the registry's own limit. Narrow
your search by name, NIPT, or the filters above to find a specific company; for a watchlist of
companies you already know, use the NIPT list input instead.

**What if a company has no beneficial ownership extract?**
Some entity types, most notably sole proprietorships, don't have a separate beneficial owner
record because the individual registered is already the owner. This Actor reports that clearly
rather than guessing or leaving the field blank without explanation.

**Can I use this for ongoing KYC monitoring?**
Yes. Save your list of counterparties in the NIPT watchlist input and schedule this Actor to run
on Apify's built-in scheduler to re-check them periodically.

### 🔗 Other actors

- [Japan Company Scraper: 4.5M+ gBizINFO Records](https://apify.com/getascraper/gbizinfo-japan-company-scraper) ↗ - looks up Japanese companies by name or registration number with financial and filing history.
- [Wyoming Business Search Scraper: Filings, Agent & Monitor](https://apify.com/getascraper/wyoming-business-registry-scraper) ↗ - searches Wyoming's business registry for filings and registered agent details.
- [Bizi.si Slovenia Scraper: Slovenska podjetja for Business Leads](https://apify.com/getascraper/bizi-si-business-scraper) ↗ - looks up Slovenian companies for leads and business details.
- [BUSINESS.bg scraper: Bulgarian company leads, фирмени контакти](https://apify.com/getascraper/business-bg-company-leads-scraper) ↗ - finds Bulgarian company contact details for lead generation.
- [Qatar MOCI Business Map Scraper: منشأة اقتصادية Records, Stats](https://apify.com/getascraper/qatar-moci-business-map-scraper) ↗ - looks up registered businesses in Qatar's official commercial registry.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/albania-qkb-scraper/changelog.md

# Actor input Schema

## `nipt` (type: `string`):

Exact-match lookup by a subject's NIPT (the unique Albanian tax/registration number, e.g. M64525802A). This is the fastest and most precise way to look up a specific company, since QKB's own search treats NIPT as an exact key rather than a text search.

## `companyName` (type: `string`):

Contains-match search on the subject's registered legal name. Prefilled with a common example term so this Actor returns real results out of the box; replace it with the company you're actually looking for, or clear it and use NIPT / NIPT Watchlist / Filters instead.

## `tradeName` (type: `string`):

Contains-match search on the subject's registered trade name (brand name), which can differ from its legal name.

## `niptList` (type: `array`):

A list of known NIPTs to look up and re-check in a single run, one search plus detail fetch per NIPT. This is the recurring-use path: an EU/UK compliance team keeps a watchlist of Albanian counterparties and re-runs this Actor on a schedule (weekly or monthly) as part of ongoing KYC refresh, instead of re-typing each name one at a time. Combine with a saved schedule in Apify Console to automate periodic recheck.

## `legalForm` (type: `string`):

Restrict results to a specific legal form (company type), matching QKB's own "Formë ligjore" filter.

## `ownershipType` (type: `string`):

Restrict results by the nationality mix of ownership, matching QKB's own "Pronësia" filter.

## `region` (type: `string`):

Restrict results to one of Albania's 12 prefectures (qarqe), matching QKB's own "Qarku" filter.

## `city` (type: `string`):

Restrict results to a specific municipality (e.g. "tirane", "durres", "kuçove"). QKB's own form only shows municipalities that belong to the Region selected above; this field accepts free text, so make sure the city you enter actually belongs to that region, or leave Region blank to search by city alone.

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

Only include subjects registered on or after this date.

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

Only include subjects registered on or before this date.

## `administrator` (type: `string`):

Contains-match search on the name of a listed administrator.

## `shareholder` (type: `string`):

Contains-match search on the name of a listed shareholder or partner (ortak/aksioner).

## `sector` (type: `string`):

Contains-match search on the subject's declared business activity description.

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

Contains-match search on the subject's registered address.

## `fetchBeneficialOwners` (type: `boolean`):

For each matched subject, fetch and structurally parse QKB's anonymous beneficial-ownership (UBO) PDF extract: full name, nationality, year and month of birth, ownership percentage, control type, and the date each person was designated a beneficial owner. This data became anonymously public under Albania's May-2025 transparency reform and is the core reason this Actor exists: the closest comparable Apify actor (Slovakia's RPVS Beneficial Owners Scraper) cannot return date of birth, nationality, or ownership percentage at all, because Slovakia's own register redacts those three fields. Adds one extra request per matched subject.

## `fetchSimpleExtract` (type: `boolean`):

For each matched subject, fetch QKB's official "Ekstrakt i Thjeshtë" (Simple Extract) PDF and store it in this run's key-value store, with a link added to that subject's dataset row. Adds one extra request per matched subject.

## `fetchHistoricalExtract` (type: `boolean`):

For each matched subject, fetch QKB's official "Ekstrakt Historik" (Historical Extract) PDF, showing the subject's full filing history, and store it in this run's key-value store, with a link added to that subject's dataset row. Adds one extra request per matched subject.

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

Maximum number of matched subjects to process (search plus any enabled detail fetches) in this run. QKB's own search endpoint returns at most 50 results per query with no pagination, so raising this above 50 has no effect; narrow your search with the Filters above instead of raising this value.

## `proxyConfiguration` (type: `object`):

QKB's servers show no IP-quality gating (confirmed live), so the datacenter default below is the cheapest correct choice. Residential proxy is not required for this target.

## Actor input object example

```json
{
  "nipt": "",
  "companyName": "Tirana",
  "tradeName": "",
  "niptList": [],
  "legalForm": "",
  "ownershipType": "",
  "region": "",
  "city": "",
  "registeredFrom": "",
  "registeredTo": "",
  "administrator": "",
  "shareholder": "",
  "sector": "",
  "address": "",
  "fetchBeneficialOwners": true,
  "fetchSimpleExtract": false,
  "fetchHistoricalExtract": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `documents` (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 = {
    "nipt": "",
    "companyName": "Tirana",
    "tradeName": "",
    "niptList": [],
    "legalForm": "",
    "ownershipType": "",
    "region": "",
    "city": "",
    "registeredFrom": "",
    "registeredTo": "",
    "administrator": "",
    "shareholder": "",
    "sector": "",
    "address": "",
    "fetchBeneficialOwners": true,
    "fetchSimpleExtract": false,
    "fetchHistoricalExtract": false,
    "maxItems": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/albania-qkb-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 = {
    "nipt": "",
    "companyName": "Tirana",
    "tradeName": "",
    "niptList": [],
    "legalForm": "",
    "ownershipType": "",
    "region": "",
    "city": "",
    "registeredFrom": "",
    "registeredTo": "",
    "administrator": "",
    "shareholder": "",
    "sector": "",
    "address": "",
    "fetchBeneficialOwners": True,
    "fetchSimpleExtract": False,
    "fetchHistoricalExtract": False,
    "maxItems": 15,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/albania-qkb-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 '{
  "nipt": "",
  "companyName": "Tirana",
  "tradeName": "",
  "niptList": [],
  "legalForm": "",
  "ownershipType": "",
  "region": "",
  "city": "",
  "registeredFrom": "",
  "registeredTo": "",
  "administrator": "",
  "shareholder": "",
  "sector": "",
  "address": "",
  "fetchBeneficialOwners": true,
  "fetchSimpleExtract": false,
  "fetchHistoricalExtract": false,
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/albania-qkb-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/albania-qkb-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/Yar4CGyeThYHXfZLF/builds/n3UNxyWSy5wUEXYR9/openapi.json
