# Kentucky Business Registry Scraper (`parseforge/kentucky-business-registry-scraper`) Actor

Scrape Kentucky business entities by name or ID: status, standing, type, dates, principal office, registered agent, officers and annual reports. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/kentucky-business-registry-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 business record scrapeds

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v3.webp)

## 🏛 Kentucky Business Registry Scraper

> 🚀 **Export Kentucky business entities in seconds.** Name, organization number, status, standing, type, dates, principal office, registered agent, officers and annual reports for entities in the official Kentucky Secretary of State database, with no account and no API key.

The Kentucky Secretary of State runs the Business Entity Search at sosbes.sos.ky.gov. This Actor searches it by entity name or organization number and returns one flat row per entity, with the principal office, registered agent, officers and annual reports when you ask for details.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| Sales and lead generation teams | Find registered Kentucky companies and confirm they are active |
| Lawyers and paralegals | Find the registered agent and principal office of a Kentucky company |
| Banks, KYC and compliance teams | Check existence, status and standing of a counterparty |
| Journalists and researchers | See who is listed on a Kentucky company profile |
| Insurance and credit teams | Verify business details before underwriting |
| Data teams | Seed or refresh a company table for Kentucky |

### 📋 What the Kentucky Business Registry Scraper does

> 💡 **Why it matters:** a company name alone proves nothing. The Secretary of State profile shows whether the entity exists, how it stands, and who is listed on it.

- Searches the official Kentucky Business Entity Search.
- Two search types: entity name and organization number.
- Returns status, standing, entity type and formation date.
- Optional detail pass adds the principal office, registered agent, officers and directors, and annual report history.
- Writes an unbilled error row when the registry refuses or finds nothing.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every row is one Kentucky business entity. Kentucky does not offer search by registered agent or officer. Filed document images are not returned.

| Field | Type | Description |
| --- | --- | --- |
| 🏢 `corporateName` | string | Legal name of the entity as the registry prints it |
| 🧾 `corporationType` | string | Entity type, for example corporation or LLC |
| 🔢 `documentNumber` | string | Kentucky organization number |
| 📅 `dateFiled` | string | Formation or registration date as the registry prints it |
| 📍 `state` | string | State or jurisdiction of formation |
| 🚦 `status` | string | Registry status of the entity |
| ✅ `standing` | string | Standing shown by the registry, for example G - Good |
| 📬 `principalAddress` | object | Principal office address: street, city, state, zip |
| 🧑‍💼 `registeredAgent` | object | Registered agent: name and address |
| 👥 `officers` | array | Officers and directors listed on the profile: title, name and address |
| 📑 `annualReports` | array | Annual report years and filing dates |
| 🔗 `detailUrl` | string | Link to the entity profile on sosbes.sos.ky.gov |
| 🕒 `scrapedAt` | string | ISO 8601 timestamp of the extraction |
| ❌ `error` | string | Error message on a failed row, null on a real record |

Real records from a run:

```json
[
  {
    "corporateName": "CHURCHILL DOWNS INCORPORATED",
    "corporationType": "Kentucky Corporation",
    "documentNumber": "0009274",
    "dateFiled": "2/17/1937",
    "state": "KY",
    "status": "A - Active",
    "standing": "G - Good",
    "principalAddress": {
      "street": "600 N. HURSTBOURNE PKWY, SUITE 400",
      "city": "LOUISVILLE",
      "state": "KY",
      "zip": "40222"
    },
    "registeredAgent": {
      "name": "CT CORPORATION SYSTEM",
      "address": "306 W. MAIN STREET, SUITE 512, FRANKFORT, KY, 40601"
    },
    "officers": [
      {
        "title": "Officer",
        "name": "Marcia A. Dall",
        "address": ""
      },
      {
        "title": "Officer",
        "name": "William C. Carstanjen",
        "address": ""
      },
      {
        "title": "Officer",
        "name": "William E. Mudd",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Karole Lloyd",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Douglas Grissom",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Paul C. Varga",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Andrea Carter",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Daniel P. Harrington",
        "address": ""
      },
      {
        "title": "Director",
        "name": "R. Alex Rankin",
        "address": ""
      },
      {
        "title": "Director",
        "name": "William C. Carstanjen",
        "address": ""
      }
    ],
    "annualReports": [
      {
        "year": "2026",
        "filedDate": "3/27/2026"
      }
    ],
    "detailUrl": "https://sosbes.sos.ky.gov/BusSearchNProfile/Profile.aspx/?ctr=51859",
    "scrapedAt": "2026-10-23T22:07:20.135Z",
    "error": null
  },
  {
    "corporateName": "CHURCHILL DOWNS AUXILIARY TO POST NO. 2921 LADIES AUXILIARY TO THE VETERANS OF FOREIGN WARS OF THE UNITED STATES, INC.",
    "corporationType": "Kentucky Corporation",
    "documentNumber": "0428228",
    "dateFiled": "2/7/1997",
    "state": "KY",
    "status": "A - Active",
    "standing": "G - Good",
    "principalAddress": {
      "street": "2902 SOUTH 7TH ST",
      "city": "LOUISVILLE",
      "state": "KY",
      "zip": "40216"
    },
    "registeredAgent": {
      "name": "MARIE WINBURN",
      "address": "2902 SOUTH 7TH ST, LOUISVILLE, KY, 40216"
    },
    "officers": [
      {
        "title": "President",
        "name": "Stasia Williams",
        "address": ""
      },
      {
        "title": "Secretary",
        "name": "JoAnn Clark",
        "address": ""
      },
      {
        "title": "Treasurer",
        "name": "MARIE WINBURN",
        "address": ""
      },
      {
        "title": "Vice President",
        "name": "MELODY WEBB",
        "address": ""
      },
      {
        "title": "Director",
        "name": "JENNIFER BANTA",
        "address": ""
      },
      {
        "title": "Director",
        "name": "JoAnn Clark",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Vivian McCauley",
        "address": ""
      },
      {
        "title": "Director",
        "name": "MARIE WINBURN",
        "address": ""
      }
    ],
    "annualReports": [
      {
        "year": "2026",
        "filedDate": "3/3/2026"
      }
    ],
    "detailUrl": "https://sosbes.sos.ky.gov/BusSearchNProfile/Profile.aspx/?ctr=330419",
    "scrapedAt": "2026-10-23T22:07:21.312Z",
    "error": null
  },
  {
    "corporateName": "CHURCHILL DOWNS CALIFORNIA COMPANY",
    "corporationType": "Kentucky Corporation",
    "documentNumber": "0474648",
    "dateFiled": "5/24/1999",
    "state": "KY",
    "status": "I - Inactive",
    "standing": "G - Good",
    "principalAddress": {
      "street": "700 CENTRAL AVENUE",
      "city": "LOUISVILLE",
      "state": "KY",
      "zip": "40208"
    },
    "registeredAgent": {
      "name": "REBECCA C. REED",
      "address": "700 CENTRAL AVENUE, LOUISVILLE, KY, 40208"
    },
    "officers": [
      {
        "title": "Secretary",
        "name": "Rebecca C Reed",
        "address": ""
      },
      {
        "title": "Treasurer",
        "name": "Michael W Anderson",
        "address": ""
      },
      {
        "title": "President",
        "name": "Steven P Sexton",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Rebecca C Reed",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Robert L Evans",
        "address": ""
      },
      {
        "title": "Director",
        "name": "Steven P Sexton",
        "address": ""
      }
    ],
    "annualReports": [
      {
        "year": "2007",
        "filedDate": "6/14/2007"
      }
    ],
    "detailUrl": "https://sosbes.sos.ky.gov/BusSearchNProfile/Profile.aspx/?ctr=372556",
    "scrapedAt": "2026-10-23T22:07:21.929Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **Official source.** Every row comes from sosbes.sos.ky.gov.
- **Agent, officers and annual reports.** All on the row with details on.
- **Status and standing.** Both on every row.
- **Honest limits.** Name and number search only, and the README says so.
- **Clean tables.** Fixed column order, ready for CSV, Excel, JSON or XML.

### 📈 How it compares to alternatives

| | This Actor | Multi-state registry scrapers | Manual lookups |
| --- | --- | --- | --- |
| Kentucky official source | ✅ SOS database | Sometimes | ✅ |
| Search by name and number | ✅ | Name only | ✅ one at a time |
| Registered agent and principal office | ✅ with details | Rare | ✅ one at a time |
| Officers and annual reports | ✅ with details | Rare | ✅ one at a time |
| Search by agent or officer | ❌ not offered | Varies | ❌ |
| Bulk export to CSV, Excel, JSON | ✅ | ✅ | ❌ |

### 🚀 How to use

1. Create a free Apify account. New accounts get $5 in free credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Kentucky Business Registry Scraper and click **Try for free**.
3. Choose the search type, then type the entity name (or part of it) or the organization number.
4. Set the maximum number of businesses you want.
5. Keep **Include full details** on if you need the registered agent, officers and annual reports, or turn it off for a faster list.
6. Click **Start** and watch the run log.
7. When the run finishes, open the **Storage** tab and download CSV, Excel, JSON or XML, or pull the same rows through the Apify API.

### 💼 Business use cases

#### Lead generation

Search a company name and keep only active entities in good standing.

#### Counterparty checks

Confirm a Kentucky entity exists and see its status and standing.

#### Legal and service of process

Pull the registered agent and its address.

#### Compliance monitoring

Read the annual report history to see whether filings are current.

### 🔌 Automating Kentucky Business Registry Scraper

- **Make and Zapier**: run the Actor on a schedule and push new entities into a CRM or a spreadsheet.
- **Slack**: post an alert when a watched business changes status.
- **Airbyte**: sync the dataset into a warehouse and join it to your own customer data.
- **GitHub Actions**: run weekly and commit the CSV so a status history builds itself.
- **Google Drive**: drop each export into a shared folder for the compliance team.
- **Apify Scheduler**: run daily, weekly or hourly with no external tooling at all.

### 🌟 Beyond business use cases

- **Research**: study formation trends and entity types in Kentucky.
- **Journalism**: check who stands behind a company named in a story.
- **Personal**: confirm that a contractor or a landlord is registered and in good standing.
- **Non-profit**: verify the legal status of partner organizations.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant:

> I am using the Kentucky Business Registry Scraper on Apify. It returns fields such as corporateName, documentNumber, status, standing, registeredAgent, officers and annualReports. Help me design a workflow that checks a list of Kentucky supplier names against the registry and flags the ones that are not in good standing.

### ❓ Frequently Asked Questions

#### 🔎 Which searches does it support?

Entity name and organization number.

#### 🌐 Which registry does it read?

The Kentucky Secretary of State Business Entity Search at sosbes.sos.ky.gov.

#### 📍 Why are some columns empty?

Addresses, agent, officers and annual reports come from the profile page and need full details on.

#### 📅 What date format is used?

The registry format, kept as printed.

#### 🔑 Do I need an account or API key for the registry?

No. The Actor reads the public Kentucky registry. There is nothing to sign up for and no key to paste.

#### 🧾 Is this personal data?

The Actor returns business entity records as the registry publishes them: legal name, ID, status, addresses of the business and its registered agent. It does not look anyone up elsewhere and adds nothing to what the registry prints. Use the data in line with the privacy and marketing laws that apply to you.

#### 📦 How many records can I export?

As many as the registry returns for the search, up to 1,000,000 on a paid plan. Free accounts are limited to 10 records per run.

#### 🔀 Can the same entity appear twice?

Not within one run for searches that list entities. Rows are deduplicated on the registry identifier where the registry lists several rows per entity.

#### 🌐 Do I need a proxy?

The default is Apify Proxy with a United States exit, which is enough in most cases. If the registry refuses it, the Actor retries from a residential US exit on its own.

#### 🛑 What happens when the registry does not answer?

The Actor writes one error row that says what went wrong and does not charge for it. A run that finds nothing says so on a row instead of finishing silently empty.

#### 💰 What am I charged for?

One result per business record delivered. Error rows and empty searches are not charged. The price per result is on the Pricing tab of the Actor page.

#### 📤 Which formats can I export?

CSV, Excel, JSON and XML from the Storage tab, or through the Apify API.

### 🔌 Integrate with any app

Every run writes to an Apify dataset you can read over the REST API, stream into a webhook, or export as CSV, Excel, JSON or XML. Apify's integrations cover Make, Zapier, Airbyte, Slack, Google Drive, GitHub, Google Sheets and plain HTTP webhooks, so the rows land wherever your team already works.

### 🔗 Recommended Actors

- [Sunbiz Florida Scraper](https://apify.com/parseforge/sunbiz-florida) for Florida business entities.
- [Texas SOS Business Scraper](https://apify.com/parseforge/texas-sos-business-scraper) for Texas business entities.
- [Delaware Business Search Scraper](https://apify.com/parseforge/delaware-business-search-scraper) for Delaware entities, where many corporations are incorporated.
- [NY Business Entity Scraper](https://apify.com/parseforge/ny-business-entity-scraper) for New York entities.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or connected to the Kentucky Secretary of State. It collects only publicly available data.

# Actor input Schema

## `searchTerm` (type: `string`):

A Kentucky entity name (or part of it) or an organization number, depending on the search type.

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

Maximum number of business records to collect. Free users are limited to 10 items, paid users can collect up to 1,000,000.

## `searchType` (type: `string`):

What the search term is matched against.

## `includeDetails` (type: `boolean`):

Open the profile of each entity to add the principal office, registered agent, officers and annual reports. Several extra requests per entity; turn it off for a faster name-and-status list.

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

Proxy used for registry requests. The default is Apify Proxy with United States exit. If the registry refuses it, the Actor retries from a residential US exit by itself.

## Actor input object example

```json
{
  "searchTerm": "Churchill Downs",
  "maxItems": 10,
  "searchType": "EntityName",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Key fields in a readable table.

## `fullData` (type: `string`):

Complete dataset with every field.

# 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 = {
    "searchTerm": "Churchill Downs",
    "maxItems": 10,
    "searchType": "EntityName",
    "includeDetails": true,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/kentucky-business-registry-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 = {
    "searchTerm": "Churchill Downs",
    "maxItems": 10,
    "searchType": "EntityName",
    "includeDetails": True,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/kentucky-business-registry-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 '{
  "searchTerm": "Churchill Downs",
  "maxItems": 10,
  "searchType": "EntityName",
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call parseforge/kentucky-business-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/kentucky-business-registry-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/LKUXhj27XU6La2HIN/builds/QtvZLbNKRaSF4W7GM/openapi.json
