Chicago Contract Recompete & Extension Radar avatar

Chicago Contract Recompete & Extension Radar

Pricing

$15.00 / 1,000 contract opportunities

Go to Apify Store
Chicago Contract Recompete & Extension Radar

Chicago Contract Recompete & Extension Radar

Find expiring City of Chicago incumbent contracts, filterable by expiration window, department and minimum award amount, with revision-safe extension history for recompete prospecting.

Pricing

$15.00 / 1,000 contract opportunities

Rating

0.0

(0)

Developer

Luke Hunter

Luke Hunter

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Categories

Share

For public-sector capture teams and sellers who need a City of Chicago incumbent-contract renewal watchlist. One run returns contracts approaching their latest published end date, with the incumbent vendor, department, revision count and whether the City has already extended them. Pay-per-result: $0.015 per contract opportunity — 100 contracts = $1.50. You pay only for results delivered, capped by maxItems. Try it free with Apify's monthly platform credit.

This Actor collapses the City's revision history to one current row per purchase order, compares the original and latest end dates, counts revisions, exposes the incumbent and latest contract PDF when published, and returns a rolling expiration pipeline ready for CRM or scheduled alerts.

Defensible USP: competing Chicago Actors primarily extract/filter contract records. This Actor performs revision-history intelligence: the highest numeric revision controls the current expiration, stale earlier end dates are never treated as current, and each result shows originalEndDate, endDate, revisionCount, derivedExtensionDays, and derivedWasExtended. That answers a more valuable question: “What incumbent work is actually nearing its current end date, and has it already been extended?”

Quick start (2 minutes)

  1. Open the Input tab (no City of Chicago account or key needed — the source is public).
  2. Use this prefill for high-value technology contracts nearing their latest end date:
{"daysAhead":180,"minAwardAmount":100000,"department":"DEPARTMENT OF TECHNOLOGY AND INNOVATION","maxItems":250}
  1. Click Start. Export the resulting watchlist to CSV/JSON, or pull it via API into your CRM.

Use cases

  • Incumbent displacement: find contracts nearing their current published end date, with the incumbent vendor and department attached.
  • Extension-aware capture planning: distinguish an untouched expiration from a contract whose end date has already moved by months or years.
  • Account prioritization: filter by original published award amount, department, or procurement type before reviewing the contract PDF.
  • Competitive account research: see revision count, latest approval date, and extension history before spending time on outreach.

Why this is different from a Chicago contract scraper

Raw extraction is useful for historical analysis. Recompete prospecting has a different failure mode: an old revision can show an end date that is no longer current. The City dataset contains modifications and extensions, so treating every revision as an opportunity creates stale signals. This Actor fetches the revision history, groups by purchase order, and lets the latest numeric revision control eligibility.

The Actor does not claim an expiring contract will be rebid. Expiration and extension history are evidence for prospecting; they are not a City forecast.

Input

FieldDefaultMeaning
daysAhead180Latest published end date must fall 1–730 days ahead
minAwardAmount0Minimum amount on the earliest numeric revision; $0 may mean Depends Upon Requirements
departmentnullExact City department filter
procurementTypenullExact source procurement-type filter
maxItems1000Hard output and billing cap, max 10,000

Example — high-value technology contracts nearing their latest end date:

{"daysAhead":180,"minAwardAmount":100000,"department":"DEPARTMENT OF TECHNOLOGY AND INNOVATION","maxItems":250}

Output

Source facts and Actor-derived values are deliberately separated.

FieldMeaning
purchaseOrderNumber, specificationNumberCity identifiers
vendorName, vendorId, departmentPublished incumbent/buyer facts from the latest numeric revision
sourceOriginalAwardAmountAward amount on the earliest numeric revision; source fact, not a computed contract value
sourceLatestRevisionAwardAmountAward amount on the latest numeric revision; source fact and may represent a modification
originalEndDateEnd date on earliest numeric revision
endDateEnd date on latest numeric revision; controls inclusion
latestApprovalDateApproval date on latest numeric revision
revisionCountCount of numeric revisions observed for the purchase order
daysUntilExpirationDerived: calendar days to latest published end date
derivedExtensionDaysDerived: latest end date minus original end date
derivedWasExtendedDerived: true only when that difference is positive
derivedPrioritySignalDerived: <=30, <=90, or within requested window
contractPdfUrlLatest-revision City contract PDF URL when published
sourceDatasetTotalTotal source rows observed during the run

Illustrative shape (not a claimed live row):

{
"purchaseOrderNumber":"108283",
"vendorName":"SAFEWARE",
"revisionCount":3,
"sourceOriginalAwardAmount":16270800,
"originalEndDate":"2024-08-14T00:00:00.000Z",
"endDate":"2027-08-17T00:00:00.000Z",
"derivedExtensionDays":1098,
"derivedWasExtended":true
}

The dates/vendor in that example mirror a publicly verifiable City contract history, but the amount semantics remain exactly as the dataset publishes them; the Actor does not invent a “current contract value.”

FieldValue
purchaseOrderNumber108283
vendorNameSAFEWARE
revisionCount3
sourceOriginalAwardAmount16270800
originalEndDate2024-08-14T00:00:00.000Z
endDate2027-08-17T00:00:00.000Z
derivedExtensionDays1098
derivedWasExtendedtrue

(Illustrative shape, as noted above — not a claimed single live row.)

Source integrity

Source: official City of Chicago Contracts dataset, Socrata resource rsxa-ify5. The City describes it as contracts and modifications since 1993, maintained by Procurement Services and updated daily. The source explicitly warns that only blanket contracts have FMPS end dates, $0 can mean Depends Upon Requirements, and negative modification amounts can delete scope/money. Those caveats are why this Actor avoids a black-box opportunity score or invented current-value metric.

Legacy/non-numeric revision histories are excluded fail-closed because the Actor cannot safely determine “latest” from them. A latest revision with no end date is also excluded; the Actor never borrows an older end date.

Run it weekly

This is built for a recurring renewal watchlist, not a one-off pull:

  1. Set your department/minAwardAmount/daysAhead filters, then click Schedule on the run page (or create one under Schedules in the Apify Console).
  2. Run it weekly (or daily on a shorter horizon) with the same filters each time.
  3. Keep purchaseOrderNumber as your dedupe/tracking key across runs. Changes in latestRevisionNumber, endDate, derivedExtensionDays, or latestApprovalDate between runs are your review trigger — they mean the City touched that contract since your last pull.
  4. This Actor returns the current snapshot each run; it does not itself persist or diff runs, so keep results in your CRM/sheet to compare over time.

Reliability and billing

The source is paginated with bounded retry/backoff, request timeouts, and a hard pagination ceiling. Empty matching output fails loudly. Data is pushed before billing; the platform-confirmed chargedCount is authoritative; migration-safe pre-charge state prevents duplicate charging; post-charge logging errors cannot fail a billed run.

Pricing

$0.015 per contract opportunity (100 contracts = $1.50), charged only for contracts actually delivered. maxItems is the hard result and billing cap; filtered records, retries and empty runs are not charged.

FAQ

Is this a bid or solicitation feed? No. It is an incumbent contract expiration/extension signal built from awarded-contract history.

Does an end date mean a recompete is coming? No. The City may renew, extend, rebid, replace, or take no comparable action.

Why fetch revision history? Because a superseded revision can contain an old end date. For capture work, the current latest-revision end date is the safer signal.

Why are some contracts absent? Standard contracts may not have FMPS end dates, and ambiguous nonnumeric revision histories are excluded fail-closed.

What should I monitor on recurring runs? Purchase order, latest revision, latest end date, extension days, approval date, incumbent, and contract PDF.

Other data tools from the same developer, built to the same standard: official or public sources, hard cost caps, and honest documentation of limits.