# New Restaurant Openings NYC + Chicago (Pre-Opening Inspections) (`implementable_antler/restaurant-opening-signals`) Actor

Free feed of restaurants about to open in New York City and Chicago, from official pre-opening health inspections. Separates new operators from relicenses and re-inspections and names the prior business at the address.

- **URL**: https://apify.com/implementable_antler/restaurant-opening-signals.md
- **Developed by:** [Blake Runckel](https://apify.com/implementable_antler) (community)
- **Categories:** Lead generation, Business, Real estate
- **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?

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

## New Restaurant Openings API: NYC + Chicago Pre-Opening Health Inspections

Restaurants **about to open** (or opening this week) in **New York City** and **Chicago**, taken from the official health inspection each new food business must pass before it gets its permit or license:

- **NYC**: DOHMH "Pre-permit (Operational / Non-operational)" inspections (NYC Open Data, 43nn-pn8j)
- **Chicago**: CDPH "License" inspections (City of Chicago Data Portal, 4ijn-s7e5)

One row per establishment, with a **signal type** that separates real new operators from paperwork:

| signalType | Meaning |
|---|---|
| `new_operator_new_food_address` | First-ever food inspection at this address. A new food space. |
| `new_operator_existing_food_space` | A different business taking over a former food space. `priorBusinessAtAddress` names the previous one. |
| `relicense_same_name` | Same name as the last business at the address: ownership or license change, not a new restaurant (excluded by default). |
| `existing_license_reinspection` | License already inspected before the window (excluded by default). |

**Who it is for:** POS and payments sales teams, restaurant suppliers and food distributors, linen, pest control, grease-trap and hood-cleaning services, beverage reps, commercial insurers, and local media. You reach the business, at its storefront, the week it opens.

### Sample (run 2026-10-21, last 30 days)

| City | Business | Category | ZIP | Stage | Signal | Prior business at address | Latest inspection |
|---|---|---|---|---|---|---|---|
| New York | 44 & X | American | 10036 | pre_opening_in_progress | new_operator_existing_food_space | SENZA GLUTEN BY JEMIKO | 2026-10-17 |
| New York | ADDA KITCHEN | Bangladeshi | 11372 | pre_opening_in_progress | new_operator_new_food_address |  | 2026-10-17 |
| New York | BAR LOLA | New American | 10036 | passed_pre_opening_inspection | new_operator_existing_food_space | TITO MURPHY'S | 2026-10-17 |
| Chicago | BEST AMIGOS GRILL | Restaurant | 60651 | pre_opening_in_progress | new_operator_existing_food_space | SO SOULFUL EATERY | 2026-10-19 |
| Chicago | JUST BUTTER CHICKEN | Restaurant | 60657 | passed_pre_opening_inspection | new_operator_existing_food_space | TASTE OF EGG | 2026-10-16 |
| Chicago | DADDY FOOD | Grocery Store | 60639 | passed_pre_opening_inspection | new_operator_existing_food_space | NORTH FAMILY MART INC. | 2026-10-16 |

Last 30 days (run 2026-10-21): **308 new operators** (240 NYC, 68 Chicago) out of 511 establishments with a pre-opening inspection; 157 had already passed, 150 were still in progress.

### Input

| Field | Default | Notes |
|---|---|---|
| `days` | 30 | Inspection window |
| `cities` | nyc, chicago | |
| `newEstablishmentsOnly` | true | Keep only the two new-operator signal types |
| `stages` | all | `pre_opening_in_progress`, `passed_pre_opening_inspection`, `closed_by_dohmh`, `not_opening` |
| `zipCodes`, `keyword` | | Territory and cuisine filters |

### Output fields

`id, city, sourceId, businessName, akaName, category, address, borough, zip, latitude, longitude, stage, latestInspectionDate, latestInspectionType, latestResult, preOpeningInspections, firstPreOpeningDate, firstEverInspectionDate, isNewEstablishment, signalType, priorBusinessAtAddress, priorLastInspectionDate, riskLevel, nycScore, nycGrade, sourceUrl, source`

### Privacy

Neither source has owner or personal fields, and this Actor outputs **no phone numbers or emails**. Rows are businesses at commercial premises. Use for B2B outreach only, and follow CAN-SPAM, TCPA and do-not-call rules.

### Accuracy (hand-checked 2026-10-21)

We hand-checked a random sample of **50 output rows** (seed 20261021; 43 NYC, 7 Chicago) against the raw city inspection history for the same license/CAMIS, the same address and the same business name.

- **New operator vs. not:** 48 of 50 (96%) were genuinely new operators. 0 were re-inspections of an existing license. 2 were probably ownership or entity changes of a business already at the address: one Chicago paleteria relicensed under a slightly different name the day the old license closed, and one NYC business re-permitted under a new LLC name.
- **Exact signal type and prior business:** 46 of 50 (92%). Beyond the 2 rows above, 1 row was marked `new_food_address` because the earlier tenant was recorded as "7 AVENUE" and the new one as "7TH AVE". The other was in a multi-tenant building (1501 Broadway), where `priorBusinessAtAddress` named a co-tenant rather than a former occupant.
- A 50-row check has about ±7 points of sampling error. Treat these numbers as a guide, not a guarantee.

### Coverage and limits

- **Two cities only:** New York City (all 5 boroughs, DOHMH pre-permit inspections) and Chicago (CDPH license inspections, food facility types by default). No other cities.
- **Coverage is limited to what gets inspected.** Businesses that open without a pre-opening inspection in these datasets are missing. Some NYC permit records show up only after the first inspection.
- **Airports, malls, food halls and large buildings** share one street address, so "new food address" and "prior business" are weakest there.
- **Freshness depends on the portals.** NYC typically lags a few days and Chicago about one day.
- An ownership change under a new name looks the same as a new operator in this data. The source has no owner fields, so the Actor can't tell them apart.
- Address matching uses house number plus street name. Unusual spellings can hide a prior tenant.

### Attribution and terms

Sources: NYC Department of Health and Mental Hygiene via NYC Open Data (43nn-pn8j); City of Chicago Data Portal (4ijn-s7e5). Modifications: violation rows merged to one row per establishment, signal type and prior business derived by Ledger. Requests follow each portal's robots.txt Crawl-delay.

This site provides applications using data that has been modified for use from its original source, www.cityofchicago.org, the official website of the City of Chicago. The City of Chicago makes no claims as to the content, accuracy, timeliness, or completeness of any of the data provided at this site. The data provided at this site is subject to change at any time. It is understood that the data provided at this site is being used at one's own risk.

# Actor input Schema

## `days` (type: `integer`):

Inspection window in days.

## `cities` (type: `array`):

Cities to include.

## `newEstablishmentsOnly` (type: `boolean`):

Keep only new_operator_new_food_address and new_operator_existing_food_space rows (drops same-name relicenses and re-inspections).

## `stages` (type: `array`):

Leave empty for all stages.

## `zipCodes` (type: `array`):

Optional 5-digit ZIP filter.

## `keyword` (type: `string`):

Optional filter on business name or cuisine/category, e.g. 'pizza'.

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

Maximum rows returned.

## Actor input object example

```json
{
  "days": 30,
  "cities": [
    "nyc",
    "chicago"
  ],
  "newEstablishmentsOnly": true,
  "maxItems": 2000
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "days": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("implementable_antler/restaurant-opening-signals").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 = { "days": 30 }

# Run the Actor and wait for it to finish
run = client.actor("implementable_antler/restaurant-opening-signals").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 '{
  "days": 30
}' |
apify call implementable_antler/restaurant-opening-signals --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,implementable_antler/restaurant-opening-signals"
        }
    }
}
```

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/aDnJMAMnYcpaBCx0A/builds/BRdUS8LLRj181ICal/openapi.json
