# OpenCorporates Real-Time Data | Leads & Contacts (`b2b_leads/opencorporates-real-time-data-scraper`) Actor

Stream live company data from 140+ registers to your dataset. Search by name, then pull full profiles, officers & directors, ownership and control records, filing history, and contact details. Enable only the features you need — rows land in real time, with webhooks. Free plan: 2 results per run.

- **URL**: https://apify.com/b2b\_leads/opencorporates-real-time-data-scraper.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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/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

## OpenCorporates Real-Time Data

**Live company intelligence from the world's largest open register — 140+ jurisdictions, streamed straight into your dataset.**

OpenCorporates Real-Time Data turns the public record into an always-fresh data feed: search companies by name across every jurisdiction, pull the full published profile, map the people and owners behind them, and add the contact details you need for outreach. Every row is written to your Apify dataset the moment it is collected, so a 10-row demo finishes in seconds and a 50,000-row campaign never has to wait for the run to end.

**Free plan note:** runs on the Apify free plan are capped at **2 results per run** so you can try the Actor risk-free. Paid plans return the full requested volume — every extra row is only charged when it is delivered.

***

### Who this is for

Agencies, sales and BD teams, local SEO specialists, recruiters, compliance and risk analysts, investigative journalists, and anyone building a CRM or lead pipeline from company records.

**Typical use cases**

1. **Prospect lists** — find every active company in a sector, country, or legal type and export name, number, jurisdiction, status, address, and previous names.
2. **Decision-maker mapping** — search a surname and get every director/officer appointment with the company it belongs to.
3. **Beneficial-ownership checks** — who really controls a supplier or counterparty, with control mechanisms and percentages.
4. **Company monitoring** — watch a target's filing history for new share issues, name changes, or strike-off notices.
5. **Lead enrichment** — add website, email, phone, and social profiles to companies you already track.
6. **Refresh-by-link** — keep a pipeline of company/person/ownership links warm with a single re-run.

***

### Feature matrix

| Checkbox | What you get | Default |
| --- | --- | --- |
| **Company Search** | One row per discovered company, across 140+ jurisdictions | ✅ On |
| ↳ Enrich with full company details | Merges the full published profile into the same row (`detailsFetched: true`) | Off |
| ↳ Search filters | Jurisdiction, company type, status, result order | Empty |
| **People & Officers** | One row per person/company appointment: role, company, dates | Off |
| **Company Details** | Full public profile for the companies you name | Off |
| **Filings** | One row per filed document, newest first, capped per company | Off |
| **Ownership & Control** | One row per control record: owner, mechanisms, percentages, UBO flag | Off |
| **Lead details enrich** | Website, email, phone, socials added to company rows (additive only) | Off |
| **Scrape By URL** | One row per company, person, or ownership link you paste | Off |
| **Webhook** | Real-time JSON or Slack push alongside the dataset | Off |
| **Proxy settings** | Apify residential, US default, changeable per run | On |

Enrichment never removes anything: every discovered record is saved, and optional details are added to the row that already exists.

***

### Input reference

| Field | Type | Default | Example |
| --- | --- | --- | --- |
| `enableCompanySearch` | boolean | `true` | `true` |
| `searchKeywords` | array | `["monzo", "tesla"]` | `["solar panels", "dental clinic"]` |
| `searchMaxResults` | integer (1–500) | `10` | `10` |
| `searchFetchFullDetails` | boolean | `false` | `true` |
| `searchJurisdiction` | string | `""` | `gb`, `us_de`, `ca_bc`, `de`, `br` |
| `searchCompanyType` | string | `""` | `Private Limited Company` |
| `searchStatus` | `all` | `active` | `inactive` | `all` | `active` |
| `searchSort` | `name` | `oldest` | `newest` | `name` | `newest` |
| `enableOfficerSearch` | boolean | `false` | `true` |
| `officerKeywords` | array | `[]` | `["Piracha", "Smith"]` |
| `officerMaxResults` | integer (1–500) | `10` | `10` |
| `officerJurisdiction` | string | `""` | `gb` |
| `officerStatus` | `all` | `active` | `inactive` | `all` | `inactive` |
| `enableCompanyDetails` | boolean | `false` | `true` |
| `companyRefs` | array | `[]` | `["https://opencorporates.com/companies/gb/00445790", "us_de/2655168"]` |
| `enableFilings` | boolean | `false` | `true` |
| `filingsMaxPerCompany` | integer (1–500) | `10` | `10` |
| `enableOwnership` | boolean | `false` | `true` |
| `ownershipMaxPerCompany` | integer (1–500) | `10` | `10` |
| `enableLeadDetails` | boolean | `false` | `true` |
| `webhookUrl` | string | `""` | `https://hooks.slack.com/services/…` |
| `webhookFormat` | `json` | `slack` | `json` | `slack` |
| `enableScrapeByUrl` | boolean | `false` | `true` |
| `scrapeUrls` | array | `[]` | `["https://opencorporates.com/companies/gb/00445790"]` |
| `proxyConfiguration` | object | Apify residential, US | — |

Minimal run — click Start and results arrive in seconds:

```json
{
    "enableCompanySearch": true,
    "searchKeywords": ["monzo", "tesla"],
    "searchMaxResults": 10
}
```

Full example — a lead list with enrichment, ownership, and a Slack push:

```json
{
    "enableCompanySearch": true,
    "searchKeywords": ["dental clinic", "solar installer"],
    "searchJurisdiction": "us_ca",
    "searchStatus": "active",
    "searchMaxResults": 10,
    "searchFetchFullDetails": true,
    "enableLeadDetails": true,
    "companyRefs": ["https://opencorporates.com/companies/gb/00445790"],
    "enableOwnership": true,
    "ownershipMaxPerCompany": 5,
    "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
    "webhookFormat": "slack"
}
```

***

### Output reference

Every row carries `featureType`, `scrapedAt`, and `url` (the public record it came from).

**Shared company fields** — `company_name`, `company_number`, `company_url`, `jurisdiction_code`, `jurisdiction_name`, `company_status`, `company_type`, `registered_address`, `previous_names[]`, `industry_codes[]{code,description,scheme}`, `branches[]`, `officers_count`, `former_officers_count`, `ubo_count`, `filings_count`, `registry_attributes{}` (register-specific public facts such as agent, latest accounts date, or other identifiers).

**Lead fields** (when Lead details enrich is on) — `website`, `email`, `emails[]`, `phone`, `phones[]`, `socials{}`.

**By feature**

| `featureType` | Notable fields |
| --- | --- |
| `company_search` | shared company fields + `detailsFetched`, `search_keyword`, `position` |
| `company_details` | shared company fields |
| `officers` | `officer_name`, `officer_url`, `officer_role`, `officer_status`, `appointed_on`, `resigned_on`, `company_name`, `search_keyword` |
| `filings` | `filing_date`, `filing_title`, `filing_description`, `filing_url` |
| `ownership` | `owner_name`, `owner_type`, `owner_nationality`, `owner_country_of_residence`, `owner_date_of_birth`, `owner_address`, `control_level`, `control_mechanisms[]`, `mechanism_details[]`, `controlling_entities[]`, `is_ultimate_beneficial_owner`, `notified_on`, `ceased_on`, `statement_url` |
| `scrape_by_url` | `pageType` (`company` | `officer` | `ownership`) plus that record's fields |

`OUTPUT` also reports `totalPushed`, `spendingLimitReached`, and a `paywall` block (`detected`, `isPaying`, `pricingTier`, `limited`, `blocked`, `freeTierMaxItems`).

***

### Webhook guide

Point **Webhook URL** at any service that accepts a POST — Slack incoming webhook, Discord, Zapier, Make, n8n, a CRM, or a Google Sheet. Each new record is sent right after it is saved, in addition to the dataset. Delivery failures never stop the run.

**JSON (`webhookFormat: "json"`)** — the full record:

```json
{
    "featureType": "company_search",
    "scrapedAt": "2026-09-29T12:00:00.000Z",
    "url": "https://opencorporates.com/companies/gb/00445790",
    "company_name": "TESCO PLC",
    "company_number": "00445790",
    "jurisdiction_name": "United Kingdom",
    "company_status": "Active",
    "search_keyword": "tesco",
    "position": 1
}
```

**Slack (`webhookFormat: "slack"`)** — a compact message:

```json
{
    "text": ":office: *TESCO PLC (00445790)*\n*Feature:* company_search  •  *Jurisdiction:* United Kingdom  •  *Status:* Active\n<https://opencorporates.com/companies/gb/00445790|Open public record>"
}
```

***

### MCP / AI-agent usage

Add this Actor to the [Apify MCP server](https://docs.apify.com/platform/mcp) and your agent can run it for you.

Example prompt: *"Find 10 active private limited companies in the UK matching 'dental clinic' from OpenCorporates, then send each one to my webhook."*

Your agent reads the input schema above, calls the Actor with `enableCompanySearch: true`, `searchKeywords: ["dental clinic"]`, `searchJurisdiction: "gb"`, `searchStatus: "active"`, `searchCompanyType: "Private Limited Company"`, and `searchMaxResults: 10`, and returns the dataset items.

### Contact coverage — what to expect

**Lead details enrich** adds `website`, `email`, `phones[]` and `socials` to every company row it can, and never removes a row when it can't. Two rules keep the output trustworthy for outreach:

- A discovered domain must actually carry the company's own name. Formation agents, company directories and registries are filtered out, so a row never points at a site that merely profiles the company.
- A site that yields nothing usable (no email, no phone, no social presence) is left out rather than reported as the company's website. An empty field is better than a wrong one.

Contacts come from the company's **own** public web presence. That means coverage tracks reality: operating companies with a real website return emails, phones and socials, while dissolved shells, one-person entities and holding-company subsidiaries that have no public site return empty fields.

To maximise coverage, search the **legal name** the register is likely to hold — `monzo bank`, `tesla motors`, `greggs` — rather than a bare brand word. A broad word like `tesla` returns 5,000+ entities, most of them unrelated one-person companies, and `searchMaxResults` cuts the list before the brand entity appears.

***

### FAQ

**Why do I need a proxy?**
Runs use Apify residential connections by default so results stay reliable at volume and from any country. You can pick a different egress country or supply your own proxy in **Proxy settings** — nothing else changes.

**What do I get on the free plan?**
Two results per run, so you can verify output quality before committing budget. Every paid run returns the full volume you asked for.

**How fresh is the data?**
Every row carries `scrapedAt`, the moment it was written, and `url`, the public record it came from. Re-run the Actor whenever you need a refresh — scheduled runs and webhooks make that hands-free.

**Which countries are covered?**
140+ jurisdictions. Leave **Jurisdiction** empty to search all of them, or enter a code (`gb`, `us_de`, `ca_bc`, `de`, `br`, …) to stay in one register.

**Some fields are empty. Why?**
Registers publish different facts. Rather than guess, the Actor saves exactly what the register publishes for that company — `registry_attributes` shows anything register-specific. Enrichment only adds; it never removes.

**Why is `website` or `email` empty on some rows?**
The company has no public web presence of its own — common for dissolved shells, one-person entities and dormant subsidiaries. See [Contact coverage](#contact-coverage--what-to-expect). If you already know a company's site, paste it into **Scrape By URL** or switch **Lead details enrich** on for a **Company Details** run.

**Why did my run stop early?**
Check the run log for `spending limit reached` — that means your configured max-spend cap was hit and the run finished gracefully. Free-plan runs also stop after the 2-result trial cap.

**Can I watch a company over time?**
Yes. Put its link in **Companies**, enable **Filings**, and schedule the Actor. New filings arrive as new rows with webhooks pushed in real time.

***

### Local development

```bash
npm install
npm run typecheck     # 0 errors
npm run build         # compiles to dist/
npm run smoke         # live checks against the public records
cp local.input.example.json local.input.json
cp .env.example .env  # add your proxy credentials (git-ignored)
npm run start:local   # writes output/local_results.jsonl
```

`.env` and `local.input.json` are git-ignored and are never committed. `.env.example` and `local.input.example.json` are the templates.

# Actor input Schema

## `enableCompanySearch` (type: `boolean`):

Live company search across 140+ jurisdictions — company names, previous names, and registration numbers. On by default and prefilled so you can click Start and get results in seconds.

## `searchKeywords` (type: `array`):

One search per entry — company names or keywords, e.g. "monzo", "tesco", "solar panels". Required when Company Search is on.

## `searchMaxResults` (type: `integer`):

Maximum company rows to collect for each entry above (1–500). Default 10 — perfect for instant demo runs.

## `searchFetchFullDetails` (type: `boolean`):

When on, each search result stays ONE row (featureType company\_search, detailsFetched=true) but is enriched in place with the full company profile: legal type, status, registered address, industry codes, previous names, branches, officer and owner counts, and every other public fact the jurisdiction publishes. Adds a little extra time per company. When off, you get fast cards with name, number, jurisdiction, status, address, and previous names. Every discovered company is always saved — never filtered out.

## `searchJurisdiction` (type: `string`):

Optional. Restrict results to one register using its jurisdiction code, e.g. "gb" (United Kingdom), "us\_de" (Delaware), "ca\_bc" (British Columbia), "de" (Germany), "br" (Brazil). Leave empty to search every jurisdiction.

## `searchCompanyType` (type: `string`):

Optional. Only companies of this legal type, exactly as the register names it — e.g. "Private Limited Company", "Public Limited Company", "Limited Liability Company", "Corporation".

## `searchStatus` (type: `string`):

Optional. Return every company, or only active / inactive ones.

## `searchSort` (type: `string`):

Optional. How results are ordered: alphabetical by name, or by incorporation date.

## `enableOfficerSearch` (type: `boolean`):

Search directors, officers, and other registered persons by name and get every company appointment attached to them — role, company, jurisdiction, and appointment dates. This is the fastest way to map who runs a business before you approach it.

## `officerKeywords` (type: `array`):

One search per entry — a full name or surname, e.g. "Piracha", "Smith". Required when People & Officers is on.

## `officerMaxResults` (type: `integer`):

Maximum people rows to collect for each entry above (1–500).

## `officerJurisdiction` (type: `string`):

Optional. Restrict people search to one register using its jurisdiction code, e.g. "gb" or "us\_mi".

## `officerStatus` (type: `string`):

Optional. Every appointment, or only current / former ones.

## `enableCompanyDetails` (type: `boolean`):

Full public profile for each company in the shared company list below: legal type, status, registered address, industry codes, previous names, branches, officer and owner counts, plus any jurisdiction-specific facts that register publishes (agent, latest accounts date, other identifiers).

## `companyRefs` (type: `array`):

Company page links from OpenCorporates (e.g. https://opencorporates.com/companies/gb/00445790) or jurisdiction/number pairs (e.g. gb/00445790). Required when Company Details, Filings, or Ownership & Control is on.

## `enableFilings` (type: `boolean`):

One row per document a company has filed: filing date, title, and description, newest first, with a link to the public record. Ideal for watching what a company is doing — new share issues, name changes, strike-off notices, annual returns.

## `filingsMaxPerCompany` (type: `integer`):

Maximum filing rows to collect for each company (1–500), newest first.

## `enableOwnership` (type: `boolean`):

One row per published control record for each company: who owns or controls it, the control mechanisms behind that claim (share ownership, voting rights, right to appoint directors) with their percentage ranges, the owner's nationality and country of residence where published, and the ultimate-beneficial-owner flag.

## `ownershipMaxPerCompany` (type: `integer`):

Maximum ownership rows to collect for each company (1–500).

## `enableLeadDetails` (type: `boolean`):

Add publicly available contact details to each company row — website, email, phone, and social profiles — when they can be found. Everything is ADDED to the row; companies with no findable details are still exported, so run cost and timing stay predictable. A site is only reported when its domain carries the company's own name, and only when it yields a usable contact, so a row never points at a directory or an unrelated site. Adds a little extra time per company.

## `webhookUrl` (type: `string`):

Optional. Every record is always saved to the run dataset — this webhook is an ADDITIONAL real-time push. Each new row is also POSTed to this URL (CRM, Slack, Zapier, Make, n8n, Google Sheets).

## `webhookFormat` (type: `string`):

json = full record object; slack = Slack-friendly message payload.

## `enableScrapeByUrl` (type: `boolean`):

Paste any company, person, or ownership record link from OpenCorporates and get a structured row back — ideal for refreshing a list you already track. The kind of row is detected from the link itself, so one list can mix all three.

## `scrapeUrls` (type: `array`):

Company page, person, or ownership record links from OpenCorporates, e.g. https://opencorporates.com/companies/gb/00445790.

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

Residential connections are used by default for reliable results at scale. Change here only if you need custom proxy URLs or a different egress country.

## Actor input object example

```json
{
  "enableCompanySearch": true,
  "searchKeywords": [
    "monzo",
    "tesla"
  ],
  "searchMaxResults": 10,
  "searchFetchFullDetails": false,
  "searchJurisdiction": "",
  "searchCompanyType": "",
  "searchStatus": "all",
  "searchSort": "name",
  "enableOfficerSearch": false,
  "officerKeywords": [
    "Piracha"
  ],
  "officerMaxResults": 10,
  "officerJurisdiction": "",
  "officerStatus": "all",
  "enableCompanyDetails": false,
  "companyRefs": [
    "https://opencorporates.com/companies/gb/00445790"
  ],
  "enableFilings": false,
  "filingsMaxPerCompany": 10,
  "enableOwnership": false,
  "ownershipMaxPerCompany": 10,
  "enableLeadDetails": false,
  "webhookUrl": "",
  "webhookFormat": "json",
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://opencorporates.com/companies/gb/00445790"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Full dataset for this run (every featureType).

## `overview` (type: `string`):

Core company fields across features, including detailsFetched and contact fields.

## `company_search` (type: `string`):

featureType=company\_search only. One company = one row; the full profile is merged in when "Enrich with full company details" is enabled.

## `company_details` (type: `string`):

featureType=company\_details — only from the Company Details feature (links you supplied), not from search enrichment.

## `officers` (type: `string`):

featureType=officers — one row per person/company appointment.

## `filings` (type: `string`):

featureType=filings — one row per filed document.

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

featureType=ownership — one row per published control record.

## `scrape_by_url` (type: `string`):

featureType=scrape\_by\_url — one row per link you supplied.

# 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 = {
    "enableCompanySearch": true,
    "searchKeywords": [
        "monzo",
        "tesla"
    ],
    "searchMaxResults": 10,
    "searchFetchFullDetails": false,
    "searchJurisdiction": "",
    "searchCompanyType": "",
    "searchStatus": "all",
    "searchSort": "name",
    "enableOfficerSearch": false,
    "officerKeywords": [
        "Piracha"
    ],
    "officerMaxResults": 10,
    "officerJurisdiction": "",
    "officerStatus": "all",
    "enableCompanyDetails": false,
    "companyRefs": [
        "https://opencorporates.com/companies/gb/00445790"
    ],
    "enableFilings": false,
    "filingsMaxPerCompany": 10,
    "enableOwnership": false,
    "ownershipMaxPerCompany": 10,
    "enableLeadDetails": false,
    "webhookUrl": "",
    "webhookFormat": "json",
    "enableScrapeByUrl": false,
    "scrapeUrls": [
        "https://opencorporates.com/companies/gb/00445790"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/opencorporates-real-time-data-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 = {
    "enableCompanySearch": True,
    "searchKeywords": [
        "monzo",
        "tesla",
    ],
    "searchMaxResults": 10,
    "searchFetchFullDetails": False,
    "searchJurisdiction": "",
    "searchCompanyType": "",
    "searchStatus": "all",
    "searchSort": "name",
    "enableOfficerSearch": False,
    "officerKeywords": ["Piracha"],
    "officerMaxResults": 10,
    "officerJurisdiction": "",
    "officerStatus": "all",
    "enableCompanyDetails": False,
    "companyRefs": ["https://opencorporates.com/companies/gb/00445790"],
    "enableFilings": False,
    "filingsMaxPerCompany": 10,
    "enableOwnership": False,
    "ownershipMaxPerCompany": 10,
    "enableLeadDetails": False,
    "webhookUrl": "",
    "webhookFormat": "json",
    "enableScrapeByUrl": False,
    "scrapeUrls": ["https://opencorporates.com/companies/gb/00445790"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/opencorporates-real-time-data-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 '{
  "enableCompanySearch": true,
  "searchKeywords": [
    "monzo",
    "tesla"
  ],
  "searchMaxResults": 10,
  "searchFetchFullDetails": false,
  "searchJurisdiction": "",
  "searchCompanyType": "",
  "searchStatus": "all",
  "searchSort": "name",
  "enableOfficerSearch": false,
  "officerKeywords": [
    "Piracha"
  ],
  "officerMaxResults": 10,
  "officerJurisdiction": "",
  "officerStatus": "all",
  "enableCompanyDetails": false,
  "companyRefs": [
    "https://opencorporates.com/companies/gb/00445790"
  ],
  "enableFilings": false,
  "filingsMaxPerCompany": 10,
  "enableOwnership": false,
  "ownershipMaxPerCompany": 10,
  "enableLeadDetails": false,
  "webhookUrl": "",
  "webhookFormat": "json",
  "enableScrapeByUrl": false,
  "scrapeUrls": [
    "https://opencorporates.com/companies/gb/00445790"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call b2b_leads/opencorporates-real-time-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/opencorporates-real-time-data-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/Hv7nPzdZBR3zuoLXt/builds/pzLkzjBuWXcdVexkm/openapi.json
