# Connecticut Business Registry Scraper: Email, NAICS & Owners (`jserle/ct-business-registry-leads`) Actor

Connecticut business registry leads from the official Secretary of the State dataset: new registrations, published business emails, NAICS, principals, statutory agents and annual-report due dates. Find active businesses with upcoming report renewals. Filter by industry, county, town or ownership.

- **URL**: https://apify.com/jserle/ct-business-registry-leads.md
- **Developed by:** [JS Tech Solutions](https://apify.com/jserle) (community)
- **Categories:** Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 business registration records

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?

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

## Connecticut Business Registry: New Registrations with Email, NAICS & Principals

Pulls newly registered Connecticut businesses from the Secretary of the State business registry on data.ct.gov into clean JSON lead records: business name, entity type, status, registration date, **business email address**, **NAICS code**, annual report due date, business and mailing address, formation jurisdiction, and the registry's **woman, veteran, minority, disability and LGBTQI-owned** survey flags. Optionally joins each business to its **principals** (officers, directors, members, managers) and its **statutory agent** (with phone and email where published).

Connecticut's public registry carries a business email on nearly every new entity: 5,142 of the 5,143 Active businesses registered between 2026-07-23 and 2026-08-23 have one, and 5,073 (98.6%) carry a NAICS code. No scraping of the business.ct.gov website, no guessing, no enrichment: every field is exactly what the registry publishes.

### Who uses this data

- **B2B lead generation and local marketing agencies** reaching new Connecticut businesses in their first weeks, by industry (NAICS) and town, with a published email instead of a guessed one.
- **Supplier diversity and procurement programs** finding newly formed woman-, veteran-, minority-, disability- and LGBTQI-owned businesses from the registry's own survey flags.
- **Annual report, registered agent and compliance vendors** working the `annualReportDueDate` field and the statutory agent of record.
- **Banks, insurers, payroll and POS vendors** onboarding new LLCs and corporations by county.
- **Researchers and journalists** tracking business formation in Connecticut by industry, town and month.

### What you get

One dataset item per business entity, ordered by registry id. A real item from `{"includePrincipals": true, "includeAgent": true}`, trimmed for length:

```json
{
  "id": "0018y00000BrDk9AAF",
  "accountNumber": "3005525",
  "name": "Layla Contreras LLC",
  "businessType": "LLC",
  "status": "Active",
  "registrationDate": "2026-08-17",
  "annualReportDueDate": null,
  "citizenship": "Domestic",
  "formationState": "Connecticut",
  "email": "laylacontrerasauthor@gmail.com",
  "naicsCode": "711510",
  "naicsDescription": "Independent Artists, Writers, and Performers",
  "businessAddress": { "street": "32 Sherry Ln", "unit": null, "city": "New Milford", "state": "CT", "zip": "06776-4120", "country": "United States" },
  "businessCounty": "Litchfield",
  "mailingAddress": "32 Sherry Ln , ,New Milford ,CT ,United States ,06776-4120",
  "ownership": { "womanOwned": true, "veteranOwned": false, "minorityOwned": true, "disabilityOwned": false, "lgbtqiOwned": false },
  "registryRefreshedAt": "2026-08-23T00:12:04.026Z",
  "source": "https://data.ct.gov/resource/n7gp-d28j.json",
  "sourceUpdatedAt": "2026-08-23T08:30:19.000Z",
  "attribution": "Secretary of the State",
  "fetchedAt": "2026-08-23T16:36:56.584Z",
  "principals": [
    { "name": "Laura Veloz", "firstName": "Laura", "lastName": "Veloz", "designation": null,
      "businessAddress": { "street": "32 Sherry Ln", "city": "New Milford", "state": "CT", "zip": "06776-4120", "country": "United States" } }
  ],
  "agents": [
    { "type": "Individual", "name": "Laura Veloz", "phone": "8607171801", "email": "laura.veloz@yahoo.com",
      "businessAddress": { "street": "32 Sherry Ln", "city": "New Milford", "state": "CT", "zip": "06776-4120", "country": "United States" } }
  ]
}
```

Every item also carries `subStatus`, `beganTransactingInCtDate`, `organizationMeetingDate`, `dissolutionDate`, `administrativeDissolutionReason`, `formationPlace`, `formationCountry`, `nameInFormationJurisdiction`, `surveyEmail`, `naicsSubCode`, `recordsAddress`, `officeInJurisdictionAddress`, `mailingInJurisdictionAddress`, `mailingInternationalAddress`, `totalAuthorizedShares` and `sourceDatasetId`. Fields the registry left blank are `null`, never invented. Dates are ISO 8601 (`YYYY-MM-DD`). `businessCounty` is derived from the business address town through the state's own town-to-county crosswalk and is `null` for out-of-state addresses. A run summary (row counts, filters applied, malformed rows skipped, whether the charge limit stopped the run) is saved under the `OUTPUT` key.

### Input

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `registeredFrom` | date | 7 days ago | Registered (formed, or registered in CT for foreign entities) on or after this date. |
| `registeredTo` | date | none | Registered on or before this date. Set alone, it removes the 7-day default. |
| `status` | select | `Active` | `Active`, `any`, `Forfeited`, `Dissolved`, `Withdrawn`, `Revoked`, `Cancelled`, `Merged`, `Expired`, `Reserved`, `Expired Reservation`. |
| `businessType` | select | `any` | `LLC`, `Stock`, `Non-Stock`, `Limited Partnership`, `LLP`, `Religious`, `Statutory Trust`, `Special Chartered`, `General Partnerships`, `B Corp`. |
| `naicsPrefix` | string | none | 2 to 6 digits; keeps NAICS codes starting with them (`23` construction, `54` professional services, `72` food and lodging). |
| `county` | select | `any` | One of the 8 Connecticut counties, matched through the business address town (Connecticut addresses only). |
| `town` | string | none | Business address city, case-insensitive exact match, Connecticut addresses only. |
| `nameContains` | string | none | Case-insensitive substring of the business name. |
| `womanOwned`, `veteranOwned`, `minorityOwned`, `disabilityOwned`, `lgbtqiOwned` | boolean | `false` | Keep only businesses that answered yes on the registry survey. |
| `includePrincipals` | boolean | `false` | Attach `principals` from the Principals dataset (queried in batches of 100 entities, paged as needed). |
| `includeAgent` | boolean | `false` | Attach `agents` from the Agents dataset (queried in batches of 100 entities, paged as needed). |
| `maxResults` | integer | `100` | Records to deliver and your cost cap (1 to 50,000). |
| `includeRaw` | boolean | `false` | Attach the source rows under `raw`. |

All filters run on data.ct.gov, so a narrow query is as fast as a broad one and you only pay for what is delivered.

#### Example inputs

New construction businesses in Hartford County this quarter, with owners and agent:

```json
{ "registeredFrom": "2026-07-01", "county": "Hartford", "naicsPrefix": "23", "includePrincipals": true, "includeAgent": true, "maxResults": 500 }
```

Woman-owned businesses formed in Stamford this year:

```json
{ "registeredFrom": "2026-01-01", "town": "Stamford", "womanOwned": true, "maxResults": 1000 }
```

Every status, for a name check:

```json
{ "registeredTo": "2026-08-31", "status": "any", "nameContains": "harbor point", "maxResults": 50 }
```

### Pricing

$0.003 per delivered record. Nothing else is charged: a filter that matches nothing costs nothing, and `maxResults` is a hard cap.

### Data source, refresh and licence

- **Agency:** Connecticut Secretary of the State, Business Services Division, published through the Connecticut Open Data Portal (data.ct.gov).
- **Datasets:** [Connecticut Business Registry - Business Master](https://data.ct.gov/d/n7gp-d28j) (`n7gp-d28j`, 1,293,406 entities, 457,546 of them Active, on 2026-08-23); [Principals](https://data.ct.gov/d/ka36-64k6) (`ka36-64k6`, 1,782,672 rows); [Agents](https://data.ct.gov/d/qh2m-n44y) (`qh2m-n44y`, 1,308,139 rows, of which 728,074 carry an agent email and 607,744 a phone).
- **Refresh:** the portal lists the update frequency as Daily; on 2026-08-23 the Business Master was refreshed at 08:30 UTC and carried registrations dated that same day. 1,136 Active businesses carried a registration date of 2026-08-16 or later on 2026-08-23.
- **Licence:** the Business Master dataset's portal metadata states licence "Public Domain" and attribution "Secretary of the State". The Principals and Agents datasets carry the same attribution and no licence field in their metadata.
- **Attribution on every record:** `Secretary of the State`.
- **Politeness:** sequential requests, 1 second apart (the host's published Crawl-delay), no app token, a descriptive User-Agent.

Not affiliated with or endorsed by the Connecticut Secretary of the State or the Connecticut Open Data Portal.

### Limitations

- Emails, phones and names are delivered only when the registry publishes them. The actor never looks anything up elsewhere and never fills gaps.
- The registry has no county column and its geolocation column is empty on recent rows, so county filtering keys on the business address town; a business whose address city is misspelled or out of state will not match a county filter.
- `registrationDate` is the formation date for domestic entities and the Connecticut registration date for foreign ones, exactly as the registry defines it.
- A row missing a required field (id, name, type, status, account number, registration date) or with an unparseable date is skipped and counted in the run summary, never delivered.
- If the source stops serving data, shrinks implausibly, or changes its columns, the run fails with a clear message and nothing is charged. The default run also fails rather than reporting zero new businesses.

### FAQ

#### How do I get a list of new businesses in Connecticut?

Run with the default input: the 100 Active businesses registered in the last 7 days. Raise `maxResults` or widen `registeredFrom` for more.

#### Does the Connecticut business registry include email addresses?

Yes. The Business Master dataset publishes `business_email_address`, present on 5,142 of the 5,143 Active businesses registered between 2026-07-23 and 2026-08-23. It is delivered as `email`, unchanged.

#### Can I search Connecticut businesses by NAICS code?

Yes, with `naicsPrefix`. The registry publishes NAICS either as a bare code or as "Description (code)"; both forms are matched and split into `naicsCode` and `naicsDescription`.

#### How do I find woman-owned or minority-owned businesses in Connecticut?

Set `womanOwned`, `minorityOwned`, `veteranOwned`, `disabilityOwned` or `lgbtqiOwned` to `true`. These are the registry's own survey answers, delivered under `ownership` on every record.

#### Who are the owners or officers of a Connecticut LLC?

Set `includePrincipals` to `true`. Principals (officers, directors, members, managers, partners) are joined from the Principals dataset on the entity id, with the designation the registry recorded.

#### How do I look up a Connecticut registered agent?

Set `includeAgent` to `true`. The statutory agent of record is joined from the Agents dataset with type (individual or business), phone and email where published.

### Related datasets

Other open-data actors by the same author:

- [SAM.gov Federal Contract Opportunities](https://apify.com/jserle/samgov-contract-opportunities)
- [NYC PASSPort Procurement Scraper (RFPs, Bids & Contracts)](https://apify.com/jserle/nyc-passport-procurement)
- [E-Rate Form 470 RFP Scraper (USAC School & Library Bids)](https://apify.com/jserle/erate-form-470-rfp-feed)
- [Medicare Revalidation Due Date List (CMS) Scraper](https://apify.com/jserle/medicare-revalidation-due-leads)
- [Nursing Home Directory & Ownership (CMS Form 671) Scraper](https://apify.com/jserle/ltc-facility-characteristics)
- [New York Nursing Home Bed Availability (NYSDOH) Scraper](https://apify.com/jserle/ny-nursing-home-bed-census)

# Actor input Schema

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

ISO date, for example 2026-08-01. For domestic entities this is the formation date; for foreign entities, the date they registered in Connecticut. Defaults to 7 days ago when no window is set.

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

ISO date, for example 2026-08-31. Setting only this field removes the 7-day default and returns everything registered up to that date.

## `annualReportDueFrom` (type: `string`):

Inclusive start of the Connecticut annual-report due-date window. Searches established and newly registered businesses unless a registration-date range is also explicitly provided. Records without a published due date do not match.

## `annualReportDueTo` (type: `string`):

Inclusive end of the Connecticut annual-report due-date window. Set alone to find every active business with an annual report due by that date. Records without a published due date do not match.

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

Business status as published by the registry. Active is the default; "any" delivers every status including dissolved and forfeited entities.

## `businessType` (type: `string`):

LLCs are about 89% of recent registrations; Stock corporations about 8%.

## `naicsPrefix` (type: `string`):

2 to 6 digits. 23 = construction, 54 = professional services, 541511 = custom computer programming, 72 = accommodation and food services. About 98% of recent Active registrations carry a NAICS code.

## `county` (type: `string`):

Keeps businesses whose business address is in a Connecticut town in this county (the registry has no county column; the town to county mapping is the Office of Policy and Management crosswalk). Requires the business state to be CT.

## `town` (type: `string`):

Case-insensitive exact match on the business address city, restricted to Connecticut addresses. Examples: Stamford, New Haven, Glastonbury.

## `nameContains` (type: `string`):

Case-insensitive substring matched against the business name. Example: pizza

## `womanOwned` (type: `boolean`):

Keep only businesses that answered yes to woman-owned on the registry survey.

## `veteranOwned` (type: `boolean`):

Keep only businesses that answered yes to veteran-owned on the registry survey.

## `minorityOwned` (type: `boolean`):

Keep only businesses that answered yes to minority-owned on the registry survey.

## `disabilityOwned` (type: `boolean`):

Keep only businesses that answered yes to owned by a person with a disability on the registry survey.

## `lgbtqiOwned` (type: `boolean`):

Keep only businesses that answered yes to LGBTQI-owned on the registry survey.

## `includePrincipals` (type: `boolean`):

Attach a `principals` array (officers, directors, members, managers, partners) from the registry's Principals dataset, joined on the entity id. Queried in batches of 100 entities, paged as needed.

## `includeAgent` (type: `boolean`):

Attach an `agents` array (registered agent for service of process, with phone and email where the registry publishes them) from the registry's Agents dataset, joined on the entity id. Queried in batches of 100 entities, paged as needed.

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

How many business records to deliver. You are charged per delivered record, so this is also your cost cap.

## `includeRaw` (type: `boolean`):

Attach a `raw` object with the Socrata rows this record was built from (entity, and principals/agents when requested), under their data.ct.gov column names. Roughly doubles item size.

## Actor input object example

```json
{
  "status": "Active",
  "businessType": "any",
  "county": "any",
  "womanOwned": false,
  "veteranOwned": false,
  "minorityOwned": false,
  "disabilityOwned": false,
  "lgbtqiOwned": false,
  "includePrincipals": false,
  "includeAgent": false,
  "maxResults": 100,
  "includeRaw": false
}
```

# Actor output Schema

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

One item per Connecticut business entity delivered by this run: identity, status, dates, email, NAICS, addresses, ownership flags, and optionally principals and statutory agents.

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

Dataset read, publication date, row counts, which filters ran server-side, malformed rows skipped, delivered records, and whether the charge limit stopped the run.

# 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 = {
    "status": "Active",
    "businessType": "any",
    "county": "any",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("jserle/ct-business-registry-leads").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 = {
    "status": "Active",
    "businessType": "any",
    "county": "any",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("jserle/ct-business-registry-leads").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 '{
  "status": "Active",
  "businessType": "any",
  "county": "any",
  "maxResults": 100
}' |
apify call jserle/ct-business-registry-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jserle/ct-business-registry-leads"
        }
    }
}
```

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/ZudqtS6sbztTfd9YR/builds/q171gTgxadQfutR7l/openapi.json
