Chicago Open Data Scraper avatar

Chicago Open Data Scraper

Pricing

Pay per usage

Go to Apify Store
Chicago Open Data Scraper

Chicago Open Data Scraper

Chicago Open Data Scraper pulls crimes, business licenses, and building permits straight from the City of Chicago SODA API. Pick a mode or any Socrata dataset id, add optional SoQL filters, and export clean rows to JSON, CSV, or Excel. No login needed. Handles paging, retries, and dedupe for you.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

BigiByte

BigiByte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Chicago Open Data Scraper: Chicago crimes, business licenses, and building permits

Chicago Open Data Scraper

Chicago Open Data Scraper provides Chicago crimes, business licenses, and building permits as structured dataset rows. No login or signup is required. You can export the run as JSON, CSV, or Excel.

The actor has three built-in modes for crimes, business licenses, and building permits. A fourth mode, dataset, works with any public dataset id you supply.

Use cases

  • Crime extracts: recent incidents with case number, primary type, block, ward, and arrest flag
  • License lists: legal name, doing-business-as name, address, and ward from business licenses
  • Permit watch: building permits with permit number, review type, street, and fees
  • Filtered results: narrow and sort output with the optional filter and order inputs
  • Scheduled CSV: rerun the same input and download a fresh table

Modes

  • Crimes (crimes): Chicago crime incidents.
  • Business licenses (licenses): Chicago business license records.
  • Building permits (permits): Chicago building permit records.
  • Any dataset (dataset): any public dataset id you set in datasetId.

Input

ParameterTypeDefaultDescription
modestringcrimescrimes, licenses, permits, or dataset.
datasetIdstringemptyPublic dataset id, used only in dataset mode.
wherestringemptyOptional filter expression. Leave empty to skip it.
orderstringemptyOptional sort, for example date DESC.
maxItemsinteger100Row cap. Hard maximum 1000.
requestDelaySecsnumber0.5Delay between requests in seconds. Never faster than 0.5.
timeoutSecsinteger300Stop the run after this many seconds.
requestTimeoutSecsinteger30Per-request timeout in seconds.
proxyConfigurationobjectNo proxyOptional. Default {"useApifyProxy": false}.

Example input

{
"mode": "crimes",
"datasetId": "",
"where": "",
"order": "date DESC",
"maxItems": 100,
"requestDelaySecs": 0.5,
"timeoutSecs": 300,
"requestTimeoutSecs": 30,
"proxyConfiguration": { "useApifyProxy": false }
}

Output data

Each row includes the available source fields plus mode, source_url, and scraped_at. The description field is stored as incidentDescription. A few other fields are renamed when they would collide with reserved names. The location object is preserved.

{
"id": "14348063",
"case_number": "JK438266",
"date": "2026-10-03T00:00:00.000",
"block": "064XX S ELLIS AVE",
"iucr": "1090",
"primary_type": "ARSON",
"incidentDescription": "ATTEMPT ARSON",
"location_description": "VEHICLE NON-COMMERCIAL",
"arrest": false,
"domestic": false,
"beat": "0314",
"district": "003",
"ward": "20",
"community_area": "42",
"fbi_code": "09",
"x_coordinate": "1184164",
"y_coordinate": "1862455",
"year": "2026",
"updated_on": "2026-10-10T15:41:23.000",
"latitude": "41.778045",
"longitude": "-87.601234",
"location": {"type": "Point", "coordinates": [-87.601234, 41.778045]},
"mode": "crimes",
"source_url": "<reference URL for this record>",
"scraped_at": "2026-10-12T00:00:00+00:00"
}

Failures are recorded as error rows with error, input, and status, and the run continues. Duplicate records are removed.

FieldTypeDescription
idstringRecord id.
case_numberstringCrime case number when present.
datestringCrime date.
blockstringAddress block.
primary_typestringPrimary crime category.
incidentDescriptionstringOffense text.
arrestbooleanArrest flag when present.
legal_namestringBusiness legal name on license rows.
permit_stringPermit number on building permit rows.
permit_typestringPermit type.
modestringcrimes, licenses, permits, or dataset.
source_urlstringReference URL for the record.
scraped_atstringUTC time the row was saved.
errorstringFailure message on error rows.
inputstringIdentifier that failed.
statusintegerStatus code, or 0 if none.

License and permit rows also include their other available fields, such as doing_business_as_name, ward, work_description, and fee fields.

Limits

This actor caps a run at 1000 rows and stops at maxItems.

Data reflects what the city has published. The city decides when a dataset is refreshed.

FAQ

Do I need a login or signup? No. You can run it right away without an account.

How fresh is the data? Each run returns current data. Freshness follows the city's update schedule, not a cache in this actor.

Why is the crime description called incidentDescription? It is the same value, renamed to avoid a reserved field name.

What happens if the dataset id is wrong? An invalid id produces a single error row, and an id that does not exist also produces a single error row.

Can I export CSV? Yes. Open the dataset and download JSON, CSV, or Excel.

If you plan to map or join these rows, a geocoding pass or a quick CSV cleanup are the usual next steps. BigiByte also builds scrapers for other open-data portals when you need them as a separate job.

Need another city's open data, a scheduled monitor, or a custom pipeline? BigiByte builds custom scrapers and APIs: https://bigibyte.com

Trademark Notice

Chicago Open Data and related names, logos, and trademarks belong to their respective owners. Their use in this documentation is solely to identify the source of the data and does not imply affiliation, sponsorship, endorsement, or partnership.

Disclaimer

Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, sponsored by, or otherwise officially associated with Chicago Open Data or its owners. All data is collected from publicly available sources. Users are responsible for complying with the source's terms of use, rate limits, and attribution or licensing requirements.

This Actor only collects publicly available data from Chicago Open Data, without logging in or bypassing any access controls. Scraping public data is generally legal, but how you use it matters:

  • Personal data: If the results include personal data (for example names, emails, or profile details), laws such as the GDPR in the EU and the CCPA in California may apply. Only collect and store personal data when you have a legitimate reason.
  • Copyright: Some content (articles, images, descriptions) may be protected by copyright. Do not republish full copyrighted content without permission.
  • Terms of use: Respect the source's terms, stated rate limits, and any attribution or non-commercial-use requirements listed in the Limits section.
  • Legal advice: This is general information, not legal advice. If you're unsure, consult a lawyer.

To learn more, read Apify's guide: Is web scraping legal?