New businesses are the best leads most sales teams never see. In their first weeks they buy insurance, payroll, POS systems, signage, websites, accounting and supplies, and nobody has pitched them yet.
California, Illinois and Pennsylvania don't publish a clean statewide feed of new companies, but their biggest cities do, as free open data with an API and no key:
- Los Angeles: the Office of Finance "Active Businesses" list on data.lacity.org, with a NAICS industry code and location start date.
- San Francisco: the Treasurer & Tax Collector "Registered Business Locations" on data.sfgov.org, also with NAICS.
-
Chicago: the BACP "Business Licenses" dataset on data.cityofchicago.org, updated daily.
application_type = 'ISSUE'means a brand-new license. - Philadelphia: the Licenses & Inspections "Business Licenses" table on OpenDataPhilly (a public Carto SQL API).
When I ran this on Oct 24, 2026 for the last 30 days, after keeping only real business entities (names with LLC, Inc, Corp... or a "Company" entity type):
| City | New businesses (30 days) | Notable slices |
|---|---|---|
| Los Angeles | 531 | |
| San Francisco | 445 | LA + SF combined: 180 construction (NAICS 23), 118 food service (72), 111 professional services (54) |
| Chicago | 455 new licenses | 80 retail food, 56 special-event food, 23 pop-up retail |
| Philadelphia | 182 active company licenses | 45 restaurants, 28 retail food stores, 22 mobile food, 7 auto repair |
1. Los Angeles and San Francisco (Socrata)
Both portals speak SoQL. This pulls new LA construction companies:
import requests
url = "https://data.lacity.org/resource/6rrh-rzua.json"
params = {
"$where": "location_start_date >= '2026-09-24' AND location_start_date <= '2026-10-24' "
"AND starts_with(naics, '23')",
"$order": "location_start_date DESC",
"$limit": 5000,
}
rows = requests.get(url, params=params, timeout=60).json()
print(len(rows), rows[0]["business_name"], rows[0]["primary_naics_description"])
Two gotchas:
- Future dates. Some rows have a start date in 2027 or 2028 (pre-registrations). Always cap the window at today.
- Personal names. About half the rows are sole proprietors filed under a person's name. For B2B outreach, and to stay clear of personal data, keep only names with an entity designator:
import re
ENTITY = re.compile(r"(?:^|[\s,.(])(LLC|L\.L\.C\.|INC\.?|CORP\.?|CORPORATION|CO\.?|COMPANY|LTD\.?|LP|LLP|PC)(?=$|[\s,.)])", re.I)
companies = [r for r in rows if ENTITY.search(" " + r["business_name"] + " ")]
San Francisco is the same idea at https://data.sf.gov/resource/g8m3-pdis.json, using ownership_name, self_reported_naics_code and location_end_date IS NULL to skip closed locations.
2. Chicago (Socrata, daily)
url = "https://data.cityofchicago.org/resource/r5kz-chrr.json"
params = {
"$select": "legal_name,doing_business_as_name,license_description,business_activity,date_issued,zip_code,community_area_name",
"$where": "date_issued >= '2026-09-24' AND application_type = 'ISSUE'",
"$order": "date_issued DESC",
"$limit": 5000,
}
rows = requests.get(url, params=params, timeout=60).json()
business_activity is the useful field for targeting: filter it for "Home Repair" to get newly licensed contractors, or use license_description for "Retail Food Establishment". community_area_name lets you work one neighborhood at a time (West Town, Logan Square, Loop).
3. Philadelphia (Carto SQL)
OpenDataPhilly exposes plain SQL:
sql = """
SELECT business_name, licensetype, initialissuedate, zip
FROM business_licenses
WHERE initialissuedate >= '2026-09-24'
AND legalentitytype = 'Company'
AND licensetype NOT IN ('Rental', 'Vacant Residential Property / Lot')
AND licensestatus = 'Active'
ORDER BY initialissuedate DESC
"""
rows = requests.get("https://phl.carto.com/api/v2/sql", params={"q": sql}, timeout=60).json()["rows"]
Excluding rental licenses matters: they're the biggest category, but they describe homes and landlords, not businesses you'd sell to.
Skip the plumbing
If you'd rather not maintain three APIs, the entity filter, apartment-address masking and paging, I packaged each one as an Apify Actor that returns clean JSON/CSV and can run on a schedule into Google Sheets or a CRM ($2 per 1,000 results):
- California New Business Leads (Los Angeles & San Francisco)
- Chicago, Illinois New Business Licenses
- Philadelphia, Pennsylvania New Business Licenses
Same idea for other states: New York, Connecticut, Colorado and Texas.
A note on using the data well
These are public records, but treat them respectfully: business entities only, no personal names, and follow CAN-SPAM and your local rules if you reach out. A short, relevant offer to a company in its first month beats a blast every time.
Free sample data
See the fields before you run anything:
Top comments (0)