# US New Business Licenses Scraper (`scrapyx/us-new-business-licenses-scraper`) Actor

Businesses newly licensed to operate in Chicago, Los Angeles and Seattle, from each city's official open data: name, DBA, activity or NAICS, start date, address; Seattle adds phone and ownership type. Filter by date, activity, NAICS, ZIP.

- **URL**: https://apify.com/scrapyx/us-new-business-licenses-scraper.md
- **Developed by:** [Ibnu Adzim](https://apify.com/scrapyx) (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 $0.84 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## US New Business Licenses Scraper (Chicago, LA, Seattle)

**Businesses newly licensed to operate** in **Chicago, Los Angeles and
Seattle**, from each city's official open data: legal and DBA name, business
activity or NAICS industry, start date and address — plus, in Seattle, the
business phone number and ownership type (LLC, sole proprietorship…), and
in Chicago every licence the location took out.

Filter by start date, activity words (`restaurant`, `salon`, `tax`), NAICS
code, name and ZIP. No key, no login, no proxy.

### What it is for

- **Leads on businesses that just opened** — POS, payroll, insurance,
  signage, cleaning, suppliers, accountants.
- **Local market tracking** — new restaurants, salons or contractors by
  neighbourhood and month.

### Input

| field | what it does |
| --- | --- |
| `cities` | `chicago`, `los_angeles`, `seattle` — one search each. |
| `dateFrom` / `dateTo` | Start-date window. Default: the last 30 days up to today. |
| `includeFutureStarts` | Also return businesses registered with a start date still ahead. |
| `includeRenewals` | Chicago: include licence renewals (off = new licences only). |
| `activityContains` | Words in the business activity / NAICS description. |
| `naicsPrefixes` | NAICS codes or prefixes (Los Angeles and Seattle). |
| `nameContains`, `zipCodes` | Name words; ZIPs or ZIP prefixes. |
| `sortBy` | Newest or oldest start date first. |
| `maxItems` | Per city, default 200; `0` = all. |

### Things about this data worth knowing

#### 1. Chicago's list is mostly renewals

Chicago publishes licence *applications*: in 2026 so far, 15,879 renewals
against 5,202 new licences. Only new ones (`ISSUE`) are returned unless you
turn on `includeRenewals`.

#### 2. One Chicago business, several licences

A location that takes out several licences appears once per licence in
Chicago's data (495 rows for 420 businesses in September). The Actor merges
them into one row with a `licenses` list, and when the same location takes
another licence later, keeps only its newest event (46 repeats skipped in a
1,500-row run).

#### 3. Businesses register before they open

Seattle has start dates as late as February 2027, and Los Angeles 210
locations starting after today. The default window ends today;
`includeFutureStarts` returns them too, flagged `startDateInFuture`.

#### 4. Seattle's list comes with phone numbers

84,247 of Seattle's 84,681 licensed businesses list a phone number. Chicago
and Los Angeles publish none.

#### 5. Placeholders

Los Angeles uses `0.0, 0.0` as coordinates for unmapped businesses and ZIPs
like `90026-`; the Actor turns those into `null` and `90026`.

### Output

One `NEW_BUSINESS` row per business location (the city's record(s) under
`source`) and one `SEARCH_SUMMARY` per city.

```json
{
  "recordType": "NEW_BUSINESS",
  "city": "seattle",
  "businessName": "GOING BANANAS",
  "dbaName": "GOING BANANAS",
  "activity": "Snack and Nonalcoholic Beverage Bars",
  "naicsCode": "722515",
  "startDate": "2027-02-01",
  "startDateInFuture": true,
  "address": "5859 WOODLAWN AVE N",
  "zip": "98103-5714",
  "phone": "9176088907",
  "ownershipType": "LLC - Multi Member"
}
```

### Speed

1,000 records per request, one request per second: 1,500 businesses from
each of the three cities took 19 seconds.

# Actor input Schema

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

One search per city.

## `dateFrom` (type: `string`):

YYYY-MM-DD, the licence / location start date. Default: 30 days ago.

## `dateTo` (type: `string`):

YYYY-MM-DD. Default: today.

## `includeFutureStarts` (type: `boolean`):

Businesses often register before they open (Seattle has start dates in 2027). Off: the window ends today.

## `includeRenewals` (type: `boolean`):

Chicago's data is licence applications, mostly renewals. Off = new licences only.

## `activityContains` (type: `string`):

e.g. 'restaurant', 'salon', 'tax', 'construction' -- matched against the business activity / NAICS description.

## `naicsPrefixes` (type: `array`):

e.g. '722' (food service), '5412' (accounting). Los Angeles and Seattle only.

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

Legal or DBA name, any case.

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

3-5 digits.

## `sortBy` (type: `string`):

By start date.

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

0 = every match.

## `minRequestInterval` (type: `number`):

Never below 1 (the portals' robots.txt Crawl-delay).

## Actor input object example

```json
{
  "cities": [
    "chicago",
    "los_angeles",
    "seattle"
  ],
  "dateFrom": "2026-09-01",
  "includeFutureStarts": false,
  "includeRenewals": false,
  "sortBy": "newest",
  "maxItems": 200,
  "minRequestInterval": 1
}
```

# Actor output Schema

## `items` (type: `string`):

One row per scraped record. See the dataset's default view for field definitions.

# 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 = {
    "cities": [
        "chicago",
        "los_angeles",
        "seattle"
    ],
    "dateFrom": "2026-09-01"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapyx/us-new-business-licenses-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 = {
    "cities": [
        "chicago",
        "los_angeles",
        "seattle",
    ],
    "dateFrom": "2026-09-01",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapyx/us-new-business-licenses-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 '{
  "cities": [
    "chicago",
    "los_angeles",
    "seattle"
  ],
  "dateFrom": "2026-09-01"
}' |
apify call scrapyx/us-new-business-licenses-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapyx/us-new-business-licenses-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/aP5dMhzKRGjUzuscz/builds/MfPCS4TfDZvSMe1RG/openapi.json
