# Company Credit Data API - Credit Scores, Financials, Directors (`nabeelbaghoor/company-credit-data-api`) Actor

Search official company registers in over 100 countries and pull credit scores, credit limits, turnover, shareholders, directors and filed accounts as flat rows. Includes confidence matching to clean a messy company list, and director search. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/company-credit-data-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 results

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/platform/actors/running/actors-in-store#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

## Company Credit Data API

Search official company registers in over 100 countries and pull credit scores, credit limits, turnover, shareholders, directors and filed accounts as flat rows.

Marketing databases tell you what a company says about itself. A register tells you what it filed. This actor wraps a company credit and business information API that sits on national registers, so the rows it returns carry a registration number, a status, filed accounts dates and a credit rating rather than a scraped headcount estimate.

### Four modes

| Mode | What it does | What you give it |
| --- | --- | --- |
| `company-search` | Finds companies in the register and returns identity, status and address | A country plus a name, number or address |
| `credit-report` | Orders the full credit report for identifiers you already hold | A list of company ids |
| `confidence-match` | Scores a name and address against the register and reports how sure the match is | A list of company names |
| `director-search` | Finds company officers by name | A country plus a name |

Confidence match is the one worth knowing about. Feed it a messy list of company names from a CRM, set a threshold, and every candidate above that score comes back with a registration number and a confidence figure, so you can decide which matches to accept rather than trusting a fuzzy join.

### What comes back

Search rows carry the provider's cross-border company id, safe number, registration number and VAT number; company name, country, status, company type, office type and legal form; activity code, activity description, industry sector and classification; the full address split into street, house number, city, postcode, province and country; and the dates of the latest filed accounts and the latest register change.

Credit report rows add the credit rating value and description, credit limit and currency, contract limit, previous rating and the date it last changed; latest turnover and shareholders equity; date of incorporation; email addresses and websites; issued share capital, currency, number of shares issued and a shareholder count; a current director count and their names; an employee count; and a flag for whether the report carries negative information.

Match rows add `matchScoreConfidence`, the score that candidate reached.

Director rows carry the person id, first and last name, date of birth, country, status, local director number, and the company they are an officer of.

Every row carries `raw`, the untouched provider record, so nothing is lost by the flattening. A credit report is a large nested document and `raw` keeps all of it, including financial statements and group structure.

### Example output

```json
{
  "recordType": "credit-report",
  "matched": true,
  "connectId": "GB-0-01234567",
  "name": "Example Trading Limited",
  "country": "GB",
  "companyRegistrationNumber": "01234567",
  "companyStatus": "Active",
  "legalForm": "Private limited with share capital",
  "mainActivity": "Manufacture of electrical equipment",
  "activityCode": "27900",
  "creditRatingValue": "71",
  "creditRatingDescription": "Very low risk",
  "creditLimitValue": 250000,
  "creditLimitCurrency": "GBP",
  "latestTurnover": 18400000,
  "latestTurnoverCurrency": "GBP",
  "dateOfIncorporation": "2004-06-18",
  "city": "Manchester",
  "postalCode": "M1 2AB",
  "issuedShareCapital": 100000,
  "currentDirectorCount": 4,
  "employeeCount": 112,
  "hasNegativeInformation": false,
  "dateOfOrder": "2026-08-06T09:14:02Z"
}
```

### Pricing

Pay per result. You are charged once per record saved to the dataset. Duplicates are removed before charging, and an identifier or name that resolves to nothing is stored with `matched: false` free of charge, so a list of dead identifiers costs you nothing. Apify platform usage is included in the per-result price. Your own provider plan is billed separately by the provider, and credit reports consume report credits on that plan.

### Bring your own API key

This actor does not include data access. You use your own account with Creditsafe, which is the provider whose API this actor calls. That API issues short lived tokens rather than static keys, so the usual setup is to put your provider username in the username field and your password in the API key field: the actor exchanges them for a token and renews it silently whenever it expires. If you already hold a token, paste it into the API key field on its own and leave the username empty. Credentials travel in request headers, never in a URL, so they never appear in a log line or a redirect.

### FAQ

#### What is a company credit data API?

A company credit data API returns register-sourced business information: legal identity, registration number, status, filed accounts, directors, shareholders and a credit score with a suggested credit limit. It differs from a marketing company database in that every field traces back to a filing rather than to a website. This actor wraps one and turns its results into a dataset you can export as CSV, JSON or Excel, or pull from another tool.

#### How do I check the credit risk of a list of customers?

Run `confidence-match` with your customer names and a country to get their register ids, take the `connectId` from the rows that scored high enough, then run `credit-report` with those ids. The report rows carry `creditRatingValue`, `creditLimitValue` and `latestTurnover`, which is what a credit committee actually asks for.

#### Why does every search need a country?

There is no single global index behind this API. Each country is a separate register with its own identifiers and its own searchable fields, so the country decides which register is queried and which criteria are allowed. A criterion one country supports may be rejected outright by another, and the error names the field when that happens.

#### What does the match threshold mean?

The confidence match returns a score per candidate and only keeps candidates at or above your threshold. The provider documents 898 as a good match on name alone, with higher bands requiring stronger agreement on identifiers and address. Raise the threshold when a false positive is expensive, lower it when you would rather review more candidates by hand.

#### Can I get directors and shareholders?

Yes. Credit report rows carry a current director count and their names, plus issued share capital, share currency, number of shares issued and a shareholder count, with the full director and shareholder records preserved under `raw`. To search officers by name instead of by company, use `director-search`.

#### Can I test without spending report credits?

Yes. Switch on the sandbox option and every request goes to the provider's sandbox environment instead of production, which is the safe way to check a filter set or a template name before a real run.

#### How do I get a full report for every company a search finds?

Switch on the option to order a report for each search hit. The run then makes one extra provider call per company and stores the full report row instead of the short search row. That consumes a report credit per company on your own plan, so pair it with a tight `maxResults`.

#### How many results can one run return?

Up to 25,000 per run, paged at up to 200 records per request.

#### Do I need my own API key?

Yes. This actor is bring your own key, and your usage is billed on your own provider plan. The actor charges separately for each result it returns.

### Keyword map

company credit data API, business credit score API, company credit check API, company registry API, company registration number lookup, business information API, firmographics API, company financials API, filed accounts data, director search API, shareholder data API, company status API, KYB data API, know your business API, confidence match API, company name matching API, credit limit API, international company data API

# Actor input Schema

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

What this run does. Company search finds companies in the register and returns their identity, status and address. Credit report orders the full report for identifiers you already hold. Confidence match scores a name and address pair against the register and tells you how sure the match is. Director search finds officers by name.

## `countries` (type: `array`):

Two letter ISO country codes to search, for example GB, US, DE. Required for every mode except credit reports. This API has no global index, so the country decides which register is queried and which search criteria are available. Confidence match uses the first country only.

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

The company name to look for. Partial names match unless exact matching is switched on.

## `exactName` (type: `boolean`):

Require the name to match exactly rather than partially. Availability varies by country.

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

The trading name, used in countries where the registered name is not unique.

## `acronym` (type: `string`):

A commonly known short name for the company, for companies better known by an acronym than by their full registered name.

## `regNo` (type: `string`):

The local company identifier from the domestic filing agency, for example a UK company number or a French SIREN or SIRET.

## `vatNo` (type: `string`):

The company VAT number.

## `safeNo` (type: `string`):

The provider's own company identifier in its home countries.

## `connectId` (type: `string`):

The provider's primary cross-border company identifier. Search by it when you already hold one.

## `website` (type: `string`):

The company website. Availability varies by country.

## `status` (type: `string`):

Restrict to companies with this registration status.

## `companyType` (type: `string`):

Limited, non-limited, or non-limited and unregistered. The last is only available in Norway.

## `officeType` (type: `string`):

Restrict to a kind of site, for example only head offices or only branches.

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

A free-text address to match against, when you do not have it split into parts.

## `street` (type: `string`):

Street name.

## `houseNo` (type: `string`):

House or building number.

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

City or town.

## `postCode` (type: `string`):

Postcode or ZIP code. A partial code with a trailing asterisk widens the search to a region, for example SW1\*.

## `province` (type: `string`):

Province or state.

## `state` (type: `string`):

State, used by the confidence match in countries that split state from province.

## `phoneNo` (type: `string`):

Company phone number.

## `matchNames` (type: `array`):

One company name per line. Each is scored against the register in turn and every candidate above the threshold is stored with its confidence score. Confidence match mode only.

## `matchThreshold` (type: `integer`):

The minimum confidence score a candidate must reach. The provider documents 898 as a good match on name alone, and higher bands as stricter. Defaults to 898.

## `connectIds` (type: `array`):

The company identifiers to order full credit reports for. These are the connectId values that the company search returns. Credit report mode only.

## `fetchCreditReport` (type: `boolean`):

In company search mode, order the full credit report for each company found instead of returning the short search record. This is one extra provider call per company and is billed on your own plan accordingly.

## `reportLanguage` (type: `string`):

Two letter language code for report field content, for example EN. The report structure itself is the same in every language.

## `reportTemplate` (type: `string`):

An optional report template name that adds or removes report sections. Templates are specific to your own account.

## `includeIndicators` (type: `boolean`):

Add the provider's indicator scores, such as financial strength and payment behaviour, to the report.

## `reportCustomData` (type: `string`):

Extra report parameters some countries require, in the provider's key::value form, for example de\_reason\_code::1 for German reports.

## `firstName` (type: `string`):

The director's first name. Director search mode only.

## `lastName` (type: `string`):

The director's last name.

## `dateOfBirth` (type: `string`):

The director's date of birth, as YYYY-MM-DD or YYYY-MM.

## `peopleId` (type: `string`):

The provider's own person identifier, when you already hold one.

## `localDirectorNumber` (type: `string`):

The local register's identifier for the director, such as the PNR in Great Britain.

## `language` (type: `string`):

Language code for countries where a company is registered under more than one script or language, such as Japanese and English.

## `skipUnmatched` (type: `boolean`):

Leave unresolved identifiers and names out of the dataset entirely. By default they are stored with matched set to false, which is free, so you can see exactly which inputs failed to resolve.

## `maxResults` (type: `integer`):

Stop after this many records (1 to 25,000). You are charged per record returned.

## `pageSize` (type: `integer`):

How many records to request per call (1 to 200).

## `useSandbox` (type: `boolean`):

Send every request to the provider's sandbox instead of production. Useful for checking a filter set without consuming production report credits.

## `apiUsername` (type: `string`):

Your provider username. Give this together with your password in the API key field and the actor authenticates by itself, renewing the token whenever it expires. Leave empty only if you are pasting a pre-issued token into the API key field instead.

## `apiKey` (type: `string`):

Your provider password when a username is given above, or a pre-issued authentication token when it is not. Required. Sent in a request header and never logged or placed in a URL.

## Actor input object example

```json
{
  "mode": "company-search",
  "exactName": false,
  "matchThreshold": 898,
  "fetchCreditReport": false,
  "includeIndicators": false,
  "skipUnmatched": false,
  "maxResults": 100,
  "pageSize": 100,
  "useSandbox": false
}
```

# 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 = {
    "matchThreshold": 898,
    "maxResults": 100,
    "pageSize": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/company-credit-data-api").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 = {
    "matchThreshold": 898,
    "maxResults": 100,
    "pageSize": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/company-credit-data-api").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 '{
  "matchThreshold": 898,
  "maxResults": 100,
  "pageSize": 100
}' |
apify call nabeelbaghoor/company-credit-data-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/company-credit-data-api"
        }
    }
}

```

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/BMn7SUlm8seZlacy3/builds/fQJHeb0ECrDYMSEig/openapi.json
