# New Business Licenses — B2B Leads from 10 US & Canada Cities (`northbell/new-business-licenses`) Actor

Newly licensed businesses from city open data in Chicago, Los Angeles, San Francisco, Seattle, Calgary, Edmonton and more: name, activity, NAICS, address, start date. New-since-last-run filter. No login.

- **URL**: https://apify.com/northbell/new-business-licenses.md
- **Developed by:** [Northbell](https://apify.com/northbell) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 businesses

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

## New Business Licenses — B2B Leads from 10 US & Canada Cities

Get **businesses that just opened or just got their city business license** in **Chicago, Los Angeles, San Francisco, Seattle, New Orleans, Norfolk, Everett, Baton Rouge, Calgary and Edmonton**, from each city's official open data, one clean row per business: **business name and legal name, what it does (activity and NAICS code), the license type and number, the start date, the address and coordinates**. **$2 per 1,000 businesses**, no login, no API key.

Run it again, or put it on a daily schedule, and every row also tells you **whether the business is new since the last run** (`isNewSinceLastRun`). Set *What to return* to *Only new* and you pay only for businesses you have not seen before. In the week of 16–23 Oct 2026 these lists added about 700 new licenses, of which 432 were companies (Edmonton 127, Chicago 92, San Francisco 69, Seattle 65, Los Angeles 37 and the rest).

**Try it now. The input is already filled in.** Press **Start**: businesses licensed in the last 7 days in Chicago and Seattle, 20 per city — **40 businesses in about 5 seconds, for $0.09** (measured on 28 Oct 2026). Three of the rows:

| `city` | `businessName` | `licenseType` | `startedOn` |
| --- | --- | --- | --- |
| chicago | Ann Sather Restaurant | Retail Food Establishment | 2026-10-27 |
| chicago | Ace Parking III, LLC | Commercial Garage | 2026-10-27 |
| seattle | HALF GLASS | Business License Tax Certificate | 2026-10-28 |

Each row also has the licence number, activity, address and status, and whether it is new since your last run.

### What you get

| Field | What it is |
|---|---|
| `city`, `cityName`, `region`, `country` | the list the business came from (`chicago`, `seattle`…), its name, the state or province and `US` / `CA` |
| `isNewSinceLastRun` | `true` / `false` whether the business is new since your previous run of the same search (`null` on the first run) |
| `businessName`, `legalName`, `ownershipType` | the name the business trades under, its registered legal name where the city gives it, and the kind of owner (`LLC - Single Member`, `Corporation`…) in Seattle and Baton Rouge |
| `activity`, `naicsCode` | what the business does as the city describes it (`Retail Food Establishment`, `Mobile Food Services`…) and its NAICS industry code where given |
| `licenseType`, `licenseNumber`, `status` | the license or registration type, its number or account number, and its status |
| `startedOn` | the business or license start date (for Chicago, the day a new license was issued) |
| `address`, `cityOrTown`, `zip`, `area`, `latitude`, `longitude` | where the business is, with the neighbourhood or district in Calgary and Edmonton |
| `homeBased` | `true` for a home-based business in Calgary and Edmonton, whose address is not returned |
| `source`, `license`, `retrievedAt` | the open data list it came from, its licence, and when the row was collected |

### Run it again and again

- **On a schedule**: save your input as a task and add a **Schedule**: the same cities and keywords every morning. Send each run to Google Sheets, Slack or your CRM with an integration on the task.
- **Watch for changes**: Set **What to return** to *Only businesses that are new since the last run*.
- **In bulk**: All 10 cities, keywords and NAICS codes in one run.

### Use it for

- **Sales leads for new businesses**: POS, payroll, insurance, accounting, signage, cleaning and food suppliers: a daily list of businesses that just opened, with what they do and where
- **Restaurant and retail openings**: filter on `722` (restaurants and bars) or keywords like `coffee` or `salon`
- **Local market tracking**: how many new businesses open by city and industry, week by week
- **Real estate and retail site research**: which kinds of businesses are opening in which neighbourhoods

### Input

```json
{
  "cities": ["chicago", "seattle", "san-francisco"],
  "startedWithinDays": 3,
  "keywords": ["restaurant", "coffee"],
  "maxItemsPerCity": 200,
  "output": "new"
}
```

- **cities**: `chicago`, `los-angeles`, `san-francisco`, `seattle`, `new-orleans`, `norfolk`, `everett`, `calgary`, `edmonton`, `baton-rouge`. Empty means all of them.
- **startedWithinDays** (default 7, up to 365) — only businesses that started in the last N days. Dates after today are never returned (some cities list planned start dates months ahead).
- **keywords**: looked for in the business name and the activity, by the city's own server. Lines are combined with OR, words on one line with AND.
- **naicsPrefixes**: the first digits of a NAICS code (`722`, `8121`, `23`). Only Los Angeles, San Francisco, Seattle, Everett and Baton Rouge publish one.
- **maxItemsPerCity** (default 200, up to 5,000) — newest first, per city.

"Is it new" is remembered per search — the same cities, keywords and NAICS codes — in a named key-value store in your Apify account. A business counts as new when your previous run did not return it and it started no more than 7 days before the newest business that run returned for that city: cities add licenses days late (Chicago and Baton Rouge add some with earlier start dates), and those still come through. Businesses that the previous run left out because of *Maximum businesses per city* are remembered as seen and do not come back as new. A license added more than 7 days late can be missed by *Only new*; a run without it shows everything in the window.

**City of Chicago data disclaimer** (required by the City of Chicago's data terms of use): "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."

### Pricing

**$2 per 1,000 businesses**, plus $0.01 per run. Error rows (a city's server not answering) are free. With *Only new*, businesses you have already seen are skipped and not charged.

### Notes

- Source: each city's own open data portal (Socrata), read through its public JSON API (`/resource/<dataset>.json`), which needs no login or key. The robots.txt of every portal allows it and asks for one request a second, which the Actor keeps per portal. Each row names its dataset and licence: public domain for Los Angeles (CC0), San Francisco (ODC-PDDL), Seattle and Baton Rouge; the city's open data terms for Chicago, New Orleans, Norfolk and Everett; the Open Government Licence for Calgary and Edmonton.
- **Companies only — no sole proprietors and no owners.** The lists also carry owner names, contact persons, phone numbers and mailing addresses; the Actor never returns them. A business owned by a person (a sole proprietorship) is left out completely, including its trade name, because the trade name points to that person. A business is returned when the city marks the owner as a company (Seattle, Baton Rouge) or the legal name carries a company marker (LLC, Inc., Corp., Ltd…); in the four lists that give only one name (New Orleans, Norfolk, Calgary, Edmonton), the name must carry a company marker or a business word (Restaurant, Cafe, Salon, Construction, Services…). In the week above, 273 of 705 new licenses were left out this way; the run's `OUTPUT` record counts them as `hiddenSoleProprietors`.
- Home-based businesses in Calgary and Edmonton come back without an address or coordinates. Other addresses are the business location as the city publishes it; treat them with the care any business contact data needs, for example check the laws on unsolicited marketing where you use them.
- Fill rates differ by city. In a read of up to 40 businesses per city on 23 Oct 2026 (239 rows), 223 had an address, 192 an activity, 174 a legal name, 129 a NAICS code and 128 coordinates (Seattle publishes none). Los Angeles and Calgary update about once a week; the others most days.
- Reading a full week from all 10 cities took 11 seconds. If a city does not answer, the Actor retries twice, then adds a free error row for that city and goes on with the others.

For newly registered companies from US state registries, see [US New Business Registrations](https://apify.com/northbell/us-business-registrations). For building permits from the same kind of city open data, see [Building Permits Scraper](https://apify.com/northbell/building-permits-scraper).

### For AI agents

`{"cities": ["chicago"], "startedWithinDays": 3, "maxItemsPerCity": 5}` returns up to 5 rows, newest first, each with business name, activity, license, start date and address. Rows have `type`: `business` or `error`. Fields a city does not publish are `null`, never missing. Schedule the same input daily with `"output": "new"` to get only businesses that started since the previous run.

# Actor input Schema

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

Which city lists to read, one per line: chicago, los-angeles, san-francisco, seattle, new-orleans, norfolk, everett, calgary, edmonton, baton-rouge. Leave empty for all of them.

## `startedWithinDays` (type: `integer`):

Only businesses whose license or business start date is in the last N days (never a date after today: some cities list planned start dates). Most cities add new licenses each day; Los Angeles and Calgary about once a week. Run it daily with 3 and "Only new" below for a cheap feed.

## `keywords` (type: `array`):

Words to find in the business name or the business activity, one per line: "restaurant", "salon", "coffee", "construction". A business that matches any line is returned; words on one line must all appear. Case does not matter. Leave empty to skip.

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

Only businesses whose NAICS industry code starts with one of these, one per line: 722 for restaurants and bars, 812 for personal care, 23 for construction. Only Los Angeles, San Francisco, Seattle, Everett and Baton Rouge publish a NAICS code; the other cities give nothing when you set this. Leave empty for all.

## `maxItemsPerCity` (type: `integer`):

How many businesses to return from each city, newest first. You pay per business returned.

## `output` (type: `string`):

With "Only new", businesses you already got in an earlier run of the same search are skipped and not charged. A business counts as new when it started on a later day than the newest business your previous run returned for that city. The first run returns everything, because there is nothing to compare with yet.

## Actor input object example

```json
{
  "cities": [
    "chicago",
    "seattle"
  ],
  "startedWithinDays": 7,
  "maxItemsPerCity": 20,
  "output": "all"
}
```

# Actor output Schema

## `businesses` (type: `string`):

Business name, activity, license, start date and address for each new business.

# 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",
        "seattle"
    ],
    "startedWithinDays": 7,
    "maxItemsPerCity": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("northbell/new-business-licenses").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",
        "seattle",
    ],
    "startedWithinDays": 7,
    "maxItemsPerCity": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("northbell/new-business-licenses").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",
    "seattle"
  ],
  "startedWithinDays": 7,
  "maxItemsPerCity": 20
}' |
apify call northbell/new-business-licenses --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,northbell/new-business-licenses"
        }
    }
}
```

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/couzNZqF9yIXz69v1/builds/e2jKhiFWGLPg69LKW/openapi.json
