Chicago eProcurement Bids and City Contracts Scraper
Pricing
from $5.00 / 1,000 results
Chicago eProcurement Bids and City Contracts Scraper
Scrape open City of Chicago bid solicitations and contract awards, filtered by keyword, department, award window and amount, with a flat price per result.
What does Chicago eProcurement Bids and City Contracts Scraper do?
It returns City of Chicago procurement data in one clean dataset: open bid solicitations (title, department, solicitation and specification numbers, advertisement date, questions deadline, response due date, compliance goals) and recently approved contract awards (vendor, department, award amount, approval date, contract type, start and end dates). Filter by keyword, department, award window and minimum amount to keep runs small. Pricing is per result.
Data source
Open solicitations are read from the City's public eProcurement solicitations page (no login needed), and contract awards from the City's public Contracts dataset on the Chicago Data Portal, which is updated as contracts are approved.
Why use it?
- Lead generation for vendors: see which departments are buying and who is winning.
- Bid monitoring: schedule a daily run and get new solicitations by department or keyword in Slack, email or a spreadsheet.
- Market research: track award amounts, contract types and incumbents by department.
- Replaces checking the portal by hand and exporting a stale spreadsheet.
How to use it
- Open the Actor and set the filters.
- Click Start. Download results as JSON, CSV or Excel, or read them through the API.
- Add a Schedule and an Integration (Slack, Google Sheets, webhook) to get new records automatically.
Input
| Field | Description |
|---|---|
dataTypes | bids, contracts, or both. Default both. |
keywords | Keep records whose title (and vendor name for contracts) contains any keyword. |
departments | Keep records from departments whose name contains any of these, for example Aviation. |
daysBack | Contracts approved in the last N days. Default 30. Does not apply to bids. |
minAwardAmount | Contracts only. Skip awards below this dollar value. |
includeClosedBids | Also return solicitations whose response date has passed. Default off. |
maxResults | Hard stop for the run. You are billed per result, so this caps the cost. |
proxyConfiguration | Apify proxy is recommended for larger runs. |
Example input:
{"dataTypes": ["bids", "contracts"],"keywords": ["software"],"departments": ["Technology"],"daysBack": 90,"maxResults": 100}
Output
Every record has a recordType of bid or contract. Example bid:
{"id": "bid:72293","recordType": "bid","title": "AED’s and Associated Support Materials at ORD MDW International Airports","department": "CHICAGO DEPARTMENT OF AVIATION","solicitationNumber": "72293","specificationNumber": "1281345A","category": "Commodities","status": "open","responseDueDate": "2026-11-30T11:00:00","advertisedDate": "2026-09-30T09:15:00","questionsDeadline": "2026-10-20T16:30:00","complianceGoals": "MBE 10%, WBE 4% and VBE 1%"}
Example contract:
{"id": "contract:216776:2","recordType": "contract","title": "CDPH-MNTL-HLTH: PO 192904 Inner City Muslim Action Network","department": "CHICAGO DEPARTMENT OF PUBLIC HEALTH","vendorName": "INNER-CITY MUSLIM ACTION","awardAmount": 0,"approvalDate": "2026-10-21","contractNumber": "216776","revisionNumber": "2","contractType": "DELEGATE AGENCY","vendorCity": "CHICAGO","vendorState": "IL"}
| Field | Meaning |
|---|---|
id | Stable key, safe for deduplication between runs |
recordType | bid or contract |
title | Solicitation title or contract description |
department | City department |
status | Bids only: open or closed, based on the response due date |
responseDueDate | Bids only: due date in Chicago local time, no time zone offset |
awardAmount | Contracts only: award value in USD (modifications can be 0) |
approvalDate | Contracts only: date the award or modification was approved |
contractNumber, revisionNumber | Contracts only: contract key. Each revision is its own record |
scrapedAt | When the record was collected |
Pricing
Pay per event: a small fee when a run starts, then a fixed price per result returned. You only pay for records that pass your filters. Set maxResults to cap any run.
Limitations
- The City's solicitations page shows its most recent 30 listings and most are usually already closed, so expect a handful of open bids per run. Run it on a schedule to catch new ones.
- Bid documents and addenda sit behind the City's supplier registration and are not downloaded. Each bid links to the public solicitations page.
- Non eProcurement courtesy notices posted as PDFs are not included.
- Contract records can include modifications with an award amount of 0.
FAQ
Is this legal? The Actor reads listings the site publishes for any visitor without a login and stores only business information published for that purpose. You are responsible for how you use the data.
Something is missing or broken? Open an issue in the Issues tab; response time is usually under a day.