# Multi-State Childcare Licensing + Inspections (`civicdataforge/multistate-childcare-licensing`) Actor

Licensed childcare facilities across NY, NJ, CO, CT and DE in one unified schema — name, type, address, county, capacity, license status — plus the compliance record where the state publishes it: inspection counts (CT, DE) and cited-deficiency detail (DE).

- **URL**: https://apify.com/civicdataforge/multistate-childcare-licensing.md
- **Developed by:** [Bryan](https://apify.com/civicdataforge) (community)
- **Categories:** Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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

## Multi-State Childcare Licensing + Inspections

Every licensed childcare facility across **five states — New York, New Jersey, Colorado, Connecticut
and Delaware — in ONE unified schema.** Daycares, licensed centers, family child-care homes: name,
type, address, county, capacity, license status, and published **compliance records** where available.
Each facility carries its inspection count when the state publishes one and, for Delaware,
cited-deficiency counts with the top regulations cited. The Actor's advantage is a stable API/Apify
handoff across these five official state sources, not a claim that no other service normalizes childcare data.

Sister actor to our single-state [Texas Childcare Licensing + Violations] — same buyers, wider map.

### Coverage (all endpoints data-layer verified 2026-07-12)

| State | Facilities | Inspection data | Deficiency data |
|---|---|---|---|
| **NY** New York | 16,798 | — | — |
| **NJ** New Jersey | 4,163 | — | — |
| **CO** Colorado | 4,508 | — | — |
| **CT** Connecticut | 16,188 | inspection\_count (97,283-row feed, join verified 107/107) | — |
| **DE** Delaware | 1,249 | inspection\_count (visits) | deficiency\_count + top regulations cited (11,853-row feed, join verified 165/165) |

### Unified record

```json
{
  "state": "DE",
  "name": "YMCA Of Delaware / Central Branch",
  "type": "Licensed Early Care and Education",
  "address": "11 W 11TH ST",
  "city": "WILMINGTON", "county": "New Castle", "state_code": "DE", "zip": "19801",
  "license_number": "27399", "license_status": "Licensed",
  "capacity": 120, "issue_date": null, "expiration_date": null,
  "inspection_count": 6,
  "deficiency_count": 14,
  "deficiency_details": { "non_compliance_count": 9, "top_regulations_cited": [ { "desc": "Ratios, Group Size, and Supervision", "count": 3 } ] },
  "raw": { "...": "full original source row" }
}
```

Compliance fields are **null, never fabricated**, for states/facilities where the source publishes no
inspection data. NY suppresses the street address for 655 family day-care homes (`address_omitted`) —
those are honest nulls too.

### Who uses this

- **Compliance and quality teams** — review published licensing and deficiency history across states.
- **Childcare SaaS & marketplaces** — market sizing and facility research spanning states in one shape.
- **Franchise & site-selection teams** — capacity and competitor gaps by county across states.
- **Journalists & researchers** — cross-state compliance analysis.

### Input examples

- Low-cost default sample (Connecticut, no inspection merge): `{}`
- All five states, full compliance merge: `{ "states": ["NY","NJ","CO","CT","DE"], "includeInspections": true }`
- Just the inspection states: `{ "states": ["CT", "DE"] }`
- One county: `{ "states": ["DE"], "county": "Sussex" }`
- Compliance screen (DE deficiencies): `{ "states": ["DE"], "minDeficiencies": 5 }`
- Fast licensing-only pull: `{ "includeInspections": false }`

### Input reference

| field | meaning |
|---|---|
| `states` | subset of `["NY","NJ","CO","CT","DE"]` (default: Connecticut) |
| `county` | one county; server-side where the feed has a county column (CT has none) |
| `licenseStatus` | case-insensitive substring on license status |
| `includeInspections` | merge inspection/deficiency feeds (CT, DE). default `false` |
| `minDeficiencies` | only facilities with ≥ N cited deficiencies (DE only) |
| `maxRecordsPerState` | cap facilities per state |
| `maxInspectionRows` | cap inspection rows read per state before building the lookup |

### Proof

`npm run smoke` (or `node test_smoke.mjs`) pulls real rows from every state against the live endpoints,
asserts content + state tagging, and proves the CT/DE compliance joins produce non-null counts on real
facilities. No account, no cost — all sources are public state open-data portals accessed logged-out.

### Source & legality

Official state open-data portals (data.ny.gov, data.nj.gov, data.colorado.gov, data.ct.gov,
data.delaware.gov), public, accessed logged-out via the Socrata SODA API. Re-run monthly for current
license and compliance status.

[Texas Childcare Licensing + Violations]: ../childcare-licensing-tx

# Actor input Schema

## `states` (type: `array`):

Which states to pull. Available: NY (16.8k facilities), NJ (4.2k), CO (4.5k), CT (16.2k + inspections), DE (1.2k + inspections & deficiencies). Leave empty for all five.

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

Filter to one county (e.g. 'Sussex', 'Oneida', 'Boulder'). Applied server-side where the state feed carries a county column; CT publishes no county so a county filter returns no CT rows. Leave empty for statewide.

## `licenseStatus` (type: `string`):

Case-insensitive substring match on the facility's license status (e.g. 'ACTIVE', 'License', 'Licensed'). Leave empty for all statuses.

## `includeInspections` (type: `boolean`):

When on, fetch each state's inspection/deficiency feed and merge per-facility inspection\_count and (DE) deficiency\_count + top cited regulations. Turn off for a faster, licensing-only pull. Only affects CT and DE.

## `minDeficiencies` (type: `integer`):

Only return facilities with at least this many cited deficiencies (compliance screening). Deficiency counts are published only by Delaware; other states have none, so this filter excludes them.

## `maxRecordsPerState` (type: `integer`):

Cap the number of facility records pulled from each state (leave empty for the full registry).

## `maxInspectionRows` (type: `integer`):

Cap the inspection/deficiency rows fetched per state before building the per-facility compliance lookup (leave empty to read the full feed; CT ships ~97k inspection rows).

## Actor input object example

```json
{
  "states": [
    "CT"
  ],
  "includeInspections": false,
  "maxRecordsPerState": 25,
  "maxInspectionRows": 50
}
```

# Actor output Schema

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

API URL for the default dataset items produced by this 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 = {
    "states": [
        "CT"
    ],
    "includeInspections": false,
    "maxRecordsPerState": 25,
    "maxInspectionRows": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("civicdataforge/multistate-childcare-licensing").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 = {
    "states": ["CT"],
    "includeInspections": False,
    "maxRecordsPerState": 25,
    "maxInspectionRows": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("civicdataforge/multistate-childcare-licensing").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 '{
  "states": [
    "CT"
  ],
  "includeInspections": false,
  "maxRecordsPerState": 25,
  "maxInspectionRows": 50
}' |
apify call civicdataforge/multistate-childcare-licensing --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,civicdataforge/multistate-childcare-licensing"
        }
    }
}

```

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/DDy9hjKyAsSXiGG8E/builds/sd8heBEbqX1JkbLDV/openapi.json
