Chicago Business Licenses - Full History & Active
Pricing
from $0.06 / 1,000 chicago business license records
Chicago Business Licenses - Full History & Active
Chicago business licenses (public open data, 1.2M records, full history since 2002): every license event with licensee and DBA, address / ward / community area, class, business activity and the application-to-expiration lifecycle. Filter by class/status/name/ward/date or pull the live slice.
Pricing
from $0.06 / 1,000 chicago business license records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Chicago Business Licenses - Full History, Since 2002
The City of Chicago publishes its entire business-license register - every license event back to 2002, live - as open data. This actor turns that file into a charged-per-record business-intelligence tool over 1.2 million records.
Built for: B2B sales and territory teams finding businesses by class and neighborhood, commercial real-estate and retail-site research, food-and-beverage and liquor diligence, vendor onboarding (is this restaurant actually licensed?), and market analysis of where Chicago business is opening and closing.
What it covers
1,206,033 license records since 2002, live (new issuances land within the week). This is the full history, not the current-license view: every original issue, renewal, location change and expiration is a row.
The register is dominated by a few classes:
| License class | Records |
|---|---|
| Limited Business License | 482,012 |
| Retail Food Establishment | 187,525 |
| Regulated Business License | 73,484 |
| Tobacco | 58,113 |
| Consumption on Premises (incidental) | 41,030 |
| Home Occupation / Home Repair / Tavern / Package Goods / Manufacturing | the long tail |
Each record carries the business, the place, and the full application lifecycle:
- the legal name and the DBA (they differ -
PETSMART LLCdoing business asPETSMART, Inc. #2525) - the address with ward, community area, neighborhood, police district and latitude/longitude
- the license code and class, plus the business-activity array (a single license carries a pipe-delimited set of activities, e.g. "Provide Animal Grooming Services | Operate a Pet Shop / Sales of Animals | Retail Sales of General Merchandise")
- status, and the full timeline: application created -> requirements complete -> payment -> conditional approval -> approved for issuance -> license start -> date issued -> expiration
Licensing clusters where Chicago business is: ward 42 (the Loop and Near North, 104,268 records), ward 34, ward 27, ward 2 - and by community area, Near North Side (97,454), Loop (92,223), Near West Side, West Town, Lake View.
The live slice is 4.6% of the file
Only ~54,000 records are live right now - which is the single most important thing to understand about this dataset. A license is active when it is not terminal (license_status AAI or AAC) and its expiration date is still ahead. Read the status letters alone and you get 1.2 million "active" rows; read the file as "current licenses" and you are 95% wrong. (This figure drifts down as expirations pass - treat it as an order of magnitude, not a constant.)
So the actor separates the two questions cleanly. rows (the default) gives you the full history - every license a business ever held - while active gives you who is licensed right now, and recent gives this month's issuances. Each renewal re-appears as its own row, so "every license this business held" and "is this business licensed today" are genuinely different queries, both supported.
One business can hold several live licenses at once, so the live slice is counted in licences, not businesses: the ~54,000 active rows resolve to roughly 37,000 distinct businesses. Both counts are in the output - licenseNumber and accountNumber - so you can pick the unit your question is about.
Status is the city's 5 exact codes: AAI (active) 1,125,751 / AAC (active, cancellation pending) 78,804 / REV (revoked) 1,464 / REA / INQ. Application type is 6: RENEW 917,580 / ISSUE 269,841 / C_LOC (location change) / C_EXPA / C_SBA / C_CAPA.
Typical questions
- "Every active Tavern in Chicago, with address and expiration." (~774 active)
- "Is this restaurant currently licensed - and what is its full license history?"
- "Every license held by this business name."
- "New businesses licensed in the last 30 days."
- "What is licensed in ward 42 / the Loop right now?"
- "Food-and-beverage licensing across the city: aggregate by class, ward or community area."
- "Who holds a Tobacco or Package Goods license - retail diligence."
Inputs
| Input | What it does |
|---|---|
mode | rows (full history, default) / active (live now) / recent (last 30 days) / aggregate |
licenseClass | the class (fuzzy): 'Retail Food Establishment', 'Tavern', 'Package Goods', 'Peddler', 'Valet Parking', 'Tobacco', ... |
status | exact code: AAI / AAC / REV / REA / INQ |
applicationType | exact: RENEW / ISSUE / C_LOC / C_EXPA / C_SBA / C_CAPA |
licenseNumber | exact number - all events for that license |
name / address | business/DBA name and street (fuzzy) |
ward / communityArea | exact ward number; fuzzy community-area name |
issuedFrom/To, expiresFrom/To | issue and expiration windows |
groupBy | aggregate over licenseClass / status / applicationType / ward / communityArea / issueYear |
maxResults | cap records (default 50) |
Default run = the 50 most recently issued rows (mode defaults to rows) - fast for the daily auto-test. For "who is licensed now" use active; for a broad view use aggregate.
Low cost
From $0.00006 per record - billed only for the rows you use, at the low end of the store. A street-level look at one neighborhood, or a whole food-and-beverage sweep, costs pennies.
The file is the trap. "Active" is a two-column question - a status code and an expiration date - and taking either alone is wrong on 95% of the file; the register is history, so a business appears once per renewal and a naive "licenses in Chicago" count is inflated by decades of past terms. The status letters are opaque (AAI, AAC are not obviously "active"), and the same account number recurs across events, so joining on it to "get the business" silently multiplies rows. The activity array and the class name are free text (~25 headline classes over 150 distinct code values), so a class filter lives or dies on matching the description the city actually writes. Normalizing all of that into a register where active really means active and a licenseClass / ward query returns exactly the businesses you mean is the actual product. Every pull is integrity-checked against the file's known shape, so a degraded source fails loudly instead of returning bad rows.
Source
- Chicago Open Data: Business Licenses - the City of Chicago's published license register. Reflects the city's record as of each refresh; not a verification of any business's current standing.