Chicago Building Violations Scraper — Search by Address
Pricing
from $1.60 / 1,000 violation record returneds
Chicago Building Violations Scraper — Search by Address
Export City of Chicago building code violations by address, status, code or date from the official data portal, 2006 to today. USD 2 per 1,000 records.
Pricing
from $1.60 / 1,000 violation record returneds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Features
Share
Chicago Building Violations Scraper exports City of Chicago building code violations from the official Department of Buildings dataset, searchable by address, status, violation code, inspection, category and date, with one clean record per violation. It is built for property investors, buyers' agents, attorneys, tenant advocates and researchers who need violation history as data, and it costs USD 2.00 per 1,000 violation records on the FREE tier (USD 1.60 per 1,000 on GOLD).
The source is the City's open dataset Building Violations (22u3-xenr): about 2.03 million violations from January 2006 to the present, updated by the City.
What data does the Chicago building violations scraper return?
Each dataset row is one violation. Fields the City leaves blank are returned as null.
| Field | What it contains |
|---|---|
violationId | City violation ID (unique per row) |
violationDate, violationLastModifiedDate | Date the violation was written and last changed |
violationStatus, violationStatusDate | OPEN, COMPLIED or NO ENTRY, and when that status was set |
violationCode, violationDescription, violationOrdinance | Department of Buildings code, short description and ordinance text |
violationInspectorComments | Inspector's notes, for example what must be repaired |
violationLocation | Where in the building, for example OTHER:BASEMENT |
inspectionNumber, inspectionStatus, inspectionCategory, inspectionWaived | Inspection ID, PASSED/FAILED, category (COMPLAINT, PERIODIC, PERMIT, REGISTRATION) and waiver flag |
inspectorId, departmentBureau | Inspector ID and bureau, for example CONSERVATION |
address, streetNumber, streetDirection, streetName, streetType | Address in full and split into parts |
propertyGroup | City property-group ID that links violations on the same property |
ssa | Special Service Area number when the property is in one |
latitude, longitude | Coordinates |
communityAreaId, zipCodeId, wardId | Community area number (1–77), ZIP code and City Council ward number, from the City's own boundary mapping; null when the City has not mapped the record |
sourceUrl, retrievedAt | The exact API request and the retrieval time |
A run summary is saved in the OUTPUT key-value record with the record count, charged count, stop reason, pages fetched, applied filters, the query URL, whether maxResults cut the result, and warnings.
How do I search Chicago building violations by address?
Enter part of the address in Address Contains, pick a status, and run. Matching is case-insensitive and finds the text anywhere in the address, so 121 N LA SALLE matches City Hall's address.
{"address": "121 N LA SALLE","violationStatus": "OPEN","maxResults": 100}
Narrow it further with a date window (inclusive, YYYY-MM-DD):
{"address": "5200 N SHERIDAN","violationStatus": "COMPLIED","violationDateFrom": "2024-01-01","violationDateTo": "2026-10-26","order": "newest","maxResults": 250}
Every run filters on exactly one status. Violation Status defaults to OPEN; run again with COMPLIED or NO ENTRY for full history at an address. Use Property Group instead of the address when you already know the City's property-group ID.
Can I download a list of open building code violations in Chicago?
Yes. The default input returns the 100 newest OPEN violations, and one run can return up to 5,000. The City dataset holds about 1.16 million open, 865,000 complied and 7,300 no-entry violations (counts from 2026-10-26).
For larger exports, split by date or category and merge the datasets:
{"violationStatus": "OPEN","inspectionCategory": "COMPLAINT","violationDateFrom": "2026-09-01","violationDateTo": "2026-09-30","maxResults": 5000,"pageSize": 1000}
Advanced users can add one SoQL condition in Advanced SoQL Where with the City's field names, for example street_type = 'AVE' AND inspection_status = 'FAILED'. Do not include $where= and do not use semicolons. It is combined with the other filters using AND.
When should I use this Actor, and when not?
Use it when you need Chicago building code violation records as rows: due diligence before buying or leasing, monitoring a portfolio for new violations, finding properties with failed inspections, or research on code enforcement by area and category.
Use another Actor when:
- You need 311 service requests and complaints (any department, not only buildings): Chicago 311 Complaints & Service Requests.
- You need building permits and contractor contacts: Building Permits Scraper.
- You need owner, tax or assessor data for a parcel: County Property Records API.
- You need the text of a municipal code section: Municode Records Scraper.
This data is historical and informational. The City notes it is not a substitute for a title commitment, court records or a current inspection.
Use it from an AI assistant
Chicago Building Violations Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add it with https://mcp.apify.com/?tools=muhammadafzal/chicago-building-violations-scraper, then ask, for example: "List all open building violations at 5200 N Sheridan Rd in Chicago and summarize what the inspectors asked the owner to fix."
Run it with the API
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/chicago-building-violations-scraper').call({address: '121 N LA SALLE',violationStatus: 'OPEN',maxResults: 100,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.length, items[0]?.violationDescription);
Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("muhammadafzal/chicago-building-violations-scraper").call(run_input={"violationStatus": "OPEN", "inspectionCategory": "PERIODIC", "maxResults": 500})for v in client.dataset(run.default_dataset_id).iterate_items():print(v["violationDate"], v["address"], v["violationCode"], v["violationDescription"])
What does the output look like?
Two records from 2026-10-23 (shortened):
[{"violationId": "7560336","violationDate": "2026-10-23T00:00:00.000","violationLastModifiedDate": "2026-10-23T11:33:44.000","violationCode": "CN194039","violationStatus": "OPEN","violationStatusDate": null,"violationDescription": "REMOVE","violationLocation": "OTHER : :OTHER","violationInspectorComments": "CORRIDORS A THROUGH F FROM 1ST TO 3TH FLOORS / GARBAGE CHUTES - FULL OF TRASH.","violationOrdinance": "Remove","inspectionNumber": "14647994","inspectionStatus": "FAILED","inspectionCategory": "PERIODIC","departmentBureau": "CONSERVATION","address": "5200 N SHERIDAN RD","propertyGroup": "12042","latitude": 41.9764927208,"longitude": -87.6551336046,"communityAreaId": "77","zipCodeId": "60640","wardId": "48","sourceUrl": "https://data.cityofchicago.org/resource/22u3-xenr.json?%24select=...&%24limit=100&%24offset=0&...","retrievedAt": "2026-10-26T12:00:00.000Z"},{"violationId": "7559870","violationDate": "2026-10-23T00:00:00.000","violationCode": "CN194029","violationStatus": "COMPLIED","violationStatusDate": "2026-10-23T00:00:00.000","violationDescription": "PROVIDE","violationLocation": "OTHER:BASEMENT","violationInspectorComments": "INSTALL REFRIGERANT ALARM TIED INTO EXHAUST.","inspectionStatus": "PASSED","departmentBureau": "REFRIGERATION","address": "2444 W TOUHY AVE","propertyGroup": "241324","latitude": 42.0123527157,"longitude": -87.6919915117,"communityAreaId": "2","zipCodeId": "60645","wardId": "50","retrievedAt": "2026-10-26T12:00:00.000Z"}]
Pricing: how much do Chicago violation records cost?
Chicago Building Violations Scraper uses pay-per-event pricing. Platform usage is included in the event prices.
| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM / DIAMOND |
|---|---|---|---|---|---|
| Violation record returned (one dataset row) | USD 0.002001 | USD 0.00195 | USD 0.0019 | USD 0.0016 | USD 0.0016 |
| Actor start (per started GB of allocated memory) | USD 0.006251 | USD 0.006094 | USD 0.005938 | USD 0.005 | USD 0.005 |
Worked totals on the FREE tier at the default 256 MB memory (one start event):
- Default run, 100 open violations: 100 × USD 0.002001 + USD 0.006251 = USD 0.2064
- Maximum run, 5,000 violations: 5,000 × USD 0.002001 + USD 0.006251 = USD 10.0113
A search that matches nothing charges only the start fee. Set a maximum cost per run in Apify Console to cap spending.
What are the limits?
- 5,000 records per run, fetched in pages of up to 1,000 (each page is one request to the City API, with no browser).
- One status per run. Combine runs for
OPEN,COMPLIEDandNO ENTRYhistory. - Region fields follow the City's mapping.
communityAreaId,zipCodeIdandwardIdarenullfor a record the City has not placed on the map, for example one without coordinates. - Partial results are kept. If a later page fails (for example the City API rate-limits with HTTP 429), records already saved stay in the dataset and the error is written to
OUTPUT. - Input mistakes such as a bad date format stop the run before any request, with an
INVALID_INPUTmessage.
FAQ
How far back do Chicago building violation records go?
The City dataset starts on January 1, 2006. When this page was checked on 2026-10-26, the newest violation was dated October 23, 2026.
Is this the official City of Chicago data?
Yes. Every record comes from the City of Chicago Data Portal dataset 22u3-xenr, and each row keeps the exact API request in sourceUrl.
Does it include fines or hearing outcomes?
No. The dataset covers violations and inspections. Fines and administrative hearing results are not part of it.
Do I need a Chicago Data Portal account or app token?
No. The Actor uses the public endpoint without a key.
How do I monitor a property for new violations?
Schedule a run with the address or property group and a recent violationDateFrom, then compare violationId values with your previous dataset.
Can I report a building violation with this Actor?
No. It only reads public records. Report a problem through Chicago 311.
Can I get violations for other cities?
No. This Actor covers the City of Chicago only.
Related Actors
Public records and government data from the same developer:
- Chicago 311 Complaints & Service Requests for city service requests
- Building Permits Scraper and County Property Records API for permits and parcel data
- NYC Property Sales Scraper for New York sales records
- Healthcare.gov Scraper and NCES School Lookup for other official datasets
Legal and compliance
This Actor reads public open data that the City of Chicago publishes. It does not log in or bypass access controls. Violation records name addresses, not owners, but you are responsible for how you use them, including fair-housing, tenant-screening and consumer-reporting rules. The data is informational and not legal advice.
Last verified: 2026-10-27