NYC PASSPort Procurement Opportunities and Contracts
We turn New York City's PASSPort Public procurement portal, published as a browser-only data table, into clean dataset records: open and historic bidding opportunities (solicitations) and awarded contracts with vendor, amounts, and dates. One record is one solicitation or one contract, sharing a common core schema so both modes can sit in the same table.
- Size
- 12,113 solicitations and 61,888 contracts
- Refresh
- Daily (the City regenerates the files)
- Price
- $10 per 1,000 records
Who uses this
Bid aggregators and govtech SaaS
Get NYC coverage without maintaining a scraper against a portal that ships its data as a JavaScript blob.
NYC vendors and M/WBE firms
Filter method to M/WBE and track the noncompetitive small-purchase pipeline for their industry, newest first.
Prime contractors and sales teams
Research who already holds a contract with a given agency, for how much, and until when.
Researchers, journalists and watchdogs
Study award patterns, vendor concentration, or M/WBE participation over time.
Sample records
Real records from the source, shown with a subset of the fields. Every run returns the full field set below.
| id | mode | title | agency | status | releaseDate |
|---|---|---|---|---|---|
| 38092 | solicitations | 85026B0100-PWQMAHVAC Maspeth Town Hall HVAC Upgrade | DEPARTMENT OF DESIGN AND CONSTRUCTION | Planned | 2025-11-21T00:00:00-05:00 |
| 38077 | solicitations | 07126B0002-DHS On-Call Travel Reservation and Ticketing Services | DEPARTMENT OF HOMELESS SERVICES | Released | 2026-08-20T16:00:00-04:00 |
| 5757824 | contracts | 12" Red-Amber-Green LED 3-section bicycle signal face | DEPARTMENT OF TRANSPORTATION | Registered | 2026-09-01 |
Sample rows taken from the PASSPort Public data files on 2026-08-23, shown in the actor's output shape.
Fields
The most used fields in each record. The Apify listing documents the full output schema.
- id
- Source record id (RFP-ID for solicitations, CTR-ID for contracts); dedupe key.
- mode
- Which dataset the record came from: solicitations or contracts.
- title
- Procurement or contract title, source-derived and whitespace-trimmed.
- agency
- The city agency running the solicitation or holding the contract.
- method
- Procurement method, e.g. Competitive Sealed Bid, RFI (M/WBE), Sole Source.
- status
- Current status, e.g. Released, Planned, Selections Made, Registered.
- releaseDate
- Solicitation release date (with NY time and offset) or contract start date (calendar date only).
- dueDate
- Solicitation due date (with NY time and offset) or contract end date (calendar date only).
How it works
1
Run it on Apify
Open the listing, sign in to Apify, and press Start. The actor reads the public source directly, normalizes each record, and writes the results to your Apify dataset. You can also schedule it to run on a cadence.
2
Filter to what you need
- •mode: solicitations or contracts, default solicitations.
- •keyword: case-insensitive substring across title, agency and record number.
- •agency: case-insensitive substring on the agency name.
- •method: case-insensitive substring on the procurement method, e.g. RFI, M/WBE, Sole Source.
- •category: case-insensitive substring on the industry category or sub-category.
- •releasedAfter: solicitation release date, or contract registration date, on or after this ISO date.
- •dueAfter: solicitation due date, or contract end date, on or after this ISO date.
- •statuses: exact, case-insensitive status match array, e.g. ["Released","Planned"].
- •maxResults: 1 to 20000, default 1000; this is the cost cap since billing is per delivered record.
- •includeRaw: attach a raw object with the source-derived columns under their portal names.
3
Export or connect
Download the dataset as CSV, JSON, or Excel from the Apify console, or pull it straight into your own system through the Apify API and integrations.
Default input (no fields set) returns the newest solicitations with maxResults default 1000 (1 to 20000 allowed; this is the buyer's cost cap since billing is per delivered record). One HTTP request per run for one file, descriptive User-Agent, no parallelism, no cross-run cache. Worst measured case (contracts, maxResults 20000, includeRaw true) peaked at 496 MB; the build declares 2048 MB. No scheduled run is configured by default, so buyers who want to track the portal's daily refresh must add their own schedule.
Pricing
$10 per 1,000 records
Pay per result, billed through your Apify account at $0.01 per record. You are charged only for the records the run delivers to your dataset, so a filtered run that matches nothing costs nothing. No subscription, no minimum.
Source, refresh, and licence
- Source
- City of New York: PASSPort Public procurement transparency portal
- Size
- 12,113 solicitations + 61,888 contracts (61,870 unique after dedupe) = 74,001 source rows, counted 2026-08-23
- Refresh
- The city regenerates both source files itself, typically once a day; each run reports the file's Last-Modified timestamp. Observed Last-Modified: Sat, 22 Aug 2026 05:37:07 GMT for both files during testing. No Apify schedule is configured by default, so the buyer must schedule runs to track the portal's own refresh.
- Licence
- No explicit reuse licence, open-data dedication, or API terms were located for the portal, and robots.txt is unreadable (returns an S3 AccessDenied). This is public transparency data from the City of New York; the portal states it is intended for use as a transparency tool, not as a way to do business with the City. Buyers are responsible for their own use of the data; see the City's terms of use (https://www.nyc.gov/main/terms-of-use).
- Attribution
- Data is read from the City of New York's PASSPort Public portal, a public transparency site. This Actor is not affiliated with or endorsed by the City of New York.
Questions buyers ask
Does this cover every NYC government contract?
No. It covers mayoral-agency procurement processed in PASSPort, which the city's own disclaimer says has been live since January 2020, not every historic NYC contract. For citywide spend outside PASSPort, the README points to Checkbook NYC.
How often is the data refreshed?
The city regenerates its source files itself, roughly once a day (a Last-Modified of Sat, 22 Aug 2026 05:37:07 GMT was observed on both files during testing). Running the actor on a schedule tracks the portal's own refresh; no faster feed exists without a PASSPort vendor login.
What license or terms govern reuse of this data?
No explicit reuse licence, open-data dedication, or API terms were found for the portal, and its robots.txt is unreadable. The data is public transparency information from the City of New York, and buyers are responsible for their own use; see the City's terms of use at nyc.gov/main/terms-of-use.
Pull the data you need
Run it yourself on Apify, or ask us for a custom extract, a join against another dataset, or a scheduled delivery.
We are not affiliated with or endorsed by City of New York. The actor reads the public dataset linked above and adds no data of its own.