OMNIA Partners Contracts Scraper avatar

OMNIA Partners Contracts Scraper

Pricing

from $3.00 / 1,000 contracts

Go to Apify Store
OMNIA Partners Contracts Scraper

OMNIA Partners Contracts Scraper

Export OMNIA Partners, NCPA and US Communities cooperative contracts to CSV, Excel or JSON: suppliers, lead agencies, expiration dates, categories and contract PDFs. Filter by program, industry or category and find contracts expiring soon (upcoming rebids).

Pricing

from $3.00 / 1,000 contracts

Rating

0.0

(0)

Developer

Alexei Pannicov

Alexei Pannicov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

OMNIA Partners, NCPA & US Communities cooperative contracts — export the full OMNIA Partners contract registry to CSV, Excel or JSON: suppliers, lead agencies, terms and expiration dates, categories, state adoptions and direct links to contract documents (PDF). Filter by program, industry or category and find contracts expiring soon — the upcoming rebids.

The Actor reads the registry from omniapartners.com — an OMNIA Partners contract search API alternative — and enriches every contract with supplier data.

It covers every program listed in the OMNIA contract search — OMNIA Public Sector, OMNIA Private Sector, NCPA, US Communities and more — including private-sector contracts.

What this Actor does

  • Uses OMNIA's own search API — reads the same JSON the website uses, so it is fast, needs no browser, proxy or login, and returns clean, typed data
  • Full registry, not just the first page — pages through all results and reconciles the collected count with the total reported by the API
  • Contract documents — every document comes with a direct download_url to the PDF
  • Supplier enrichment — each contract carries the supplier's website, industry, active contract count, first contract date and parent company
  • Rich filtering — full-text search, 8 server-side filters (industry, sector, cooperative, vertical, award structure, subcategory, lead agency, state) and 4 client-side filters (category, new only, state-adopted only, expiring within N days), plus maxItems
  • Apify platform advantages — run on a schedule, trigger via API, connect to integrations, and monitor runs from the Apify Console

Who is it for

  • Public-sector procurement teams checking which cooperative contracts already cover a need before running their own RFP
  • Supplier sales and business-development teams tracking competitors, lead agencies and contracts coming up for expiration
  • Market-intelligence analysts and consultants who need an up-to-date, machine-readable copy of the OMNIA contract registry

Use cases

NCPA contract list

Every contract awarded through NCPA (National Cooperative Purchasing Alliance), with lead agency, supplier, expiration date and contract PDFs.

{ "sourcingEntities": ["NCPA"] }

US Communities contracts

US Communities is now part of OMNIA Partners — its contracts sit in the same registry and are selected by program.

{ "sourcingEntities": ["US Communities"] }

Expiring cooperative contracts → upcoming rebids

Contracts that end in the next N days are the ones about to be re-solicited. Suppliers use this to prepare for the rebid or to reach agencies before the incumbent's contract runs out.

{ "expiresWithinDays": 90 }

K-12 and higher-education contracts

School districts, colleges and universities buy through cooperative contracts heavily. Filter by the industry the contract is open to:

{ "industries": ["k12"] }

⚡ Ready-made tasks

Start from a preconfigured task — open it, adjust the input if needed, and click Start:

🚀 How to use

  1. Open the Actor's Input tab. Leave everything empty to get the whole registry, or set a search query and filters.
  2. Optionally set maxItems for a cheap test run.
  3. Click Start.
  4. Open the Output tab when the run finishes, or fetch the dataset via the API in JSON, CSV, Excel and other formats.

Input

All input fields are optional. Empty fields mean "no restriction". Within a list field, values are combined with OR (a contract matches if it has at least one of them); different fields are combined with AND.

FieldTypeWhere appliedDescription
querystringserverFull-text search over contract title and description
industriesstring[]servergovernment, higher_ed, k12, nonprofit, business_commercial, private_equity, real_estate
contractSectorsstring[]serverPublic, Private
sourcingEntitiesstring[]serverCooperative / program: OMNIA Public Sector, OMNIA Private Sector, NCPA, US Communities, BA, Prime Advantage, National IPA, Premier
verticalsstring[]servere.g. IT & Telecom, Furniture, Food and Nutrition (dropdown)
awardStructuresstring[]serverSingle-Award, Multi-Award
subcategoriesstring[]serverExact, case-sensitive match, e.g. Software
leadAgenciesstring[]serverExact, case-sensitive match, e.g. Region 4 Education Service Center
stateAdoptedStatesstring[]serverTwo-letter state codes, e.g. UT
categoriesstring[]ActorOne or more of 24 OMNIA categories (dropdown)
newOnlybooleanActorKeep only contracts OMNIA marks as new. false means no restriction, not "old only"
stateAdoptedOnlybooleanActorKeep only contracts adopted by at least one state
expiresWithinDaysinteger ≥ 0ActorKeep only contracts expiring within N days (0 = today or already expired)
maxItemsinteger ≥ 1lastCaps the number of delivered contracts, applied after all filters

Server-side filters are applied by the OMNIA API before paging, so fewer requests are made. Actor-side filters are applied after all pages are collected, because the API does not support them reliably.

Output

Each dataset item is one contract. Example (documents shortened):

{
"id": "150457",
"contract_number": "05-80",
"supplier_id": "5700",
"salesforce_id": "0014M00002LlCHKQA3",
"supplier": "iPARQ",
"website_display_name": "iParq",
"contract_title": "Parking Enforcement Software and Equipment",
"solicitation_number": "S1039",
"lead_agency": "Region 14 Education Service Center",
"lead_agency_id": "0016100000O6uSYAAZ",
"contract_sector": "Public",
"cooperative_scope": "NCPA",
"industries": ["k12", "higher_ed", "government", "nonprofit"],
"categories": ["Information Technology Services"],
"renewed_until": "2026-11-30",
"final_expiration": "2026-11-30",
"initial_term": "2022-09-01",
"days_to_expiration": 68,
"current_status": "Active",
"is_new": false,
"is_state_adopted": false,
"state_adopted_states": [],
"state_adoption_type": null,
"has_pricing_doc": true,
"has_executive_summary": true,
"document_types": ["Evaluation & Award Documents", "Master Agreement Documents"],
"document_count": 8,
"documents": [
{
"filename": "iParq_Award_Letter.pdf",
"file_group": "Master Agreement Documents",
"file_type": "",
"document_title": "Contract Award Letter",
"blob_path": "S1039/150457/Master_Agreement_Documents/iParq_Award_Letter.pdf",
"hidden": false,
"download_url": "https://www.omniapartners.com/api/document-download?contract=150457&filename=iParq_Award_Letter.pdf"
}
],
"contract_url": "https://www.omniapartners.com/suppliers/iparq/contracts/05-80",
"supplier_url": "https://www.omniapartners.com/suppliers/iparq",
"supplier_website": "www.iparq.com",
"supplier_industry": "Consumer Services",
"supplier_active_contract_count": 2,
"supplier_first_contract_date": "2022-09-01",
"supplier_parent_name": null
}

Key fields:

  • contract_url — the public contract page; null for Private-sector contracts, which have no public page on omniapartners.com.
  • documents[].download_url — direct PDF link; null if the document has no file name.
  • days_to_expiration — whole days (UTC) from the run date to final_expiration; negative for expired contracts, null if the date is missing or malformed.
  • supplier_* — supplier enrichment; null when the supplier could not be matched.

The Output tab shows an overview table with the most useful columns; the full item is available in every export format.

Input examples

Private-sector contracts for private equity:

{
"industries": ["private_equity"],
"contractSectors": ["Private"]
}

NCPA contracts expiring in the next 180 days:

{
"sourcingEntities": ["NCPA"],
"expiresWithinDays": 180
}

Full-text search plus a category, expiring within a year:

{
"query": "office chairs",
"categories": ["Furniture & Furnishings"],
"expiresWithinDays": 365
}

A quick test run over the whole registry:

{
"maxItems": 50
}

How it works

  1. The Actor calls OMNIA's public search API (POST /api/search) — the same endpoint the website uses — with your query and server-side filters. No browser is involved.
  2. It pages through all results, collecting contracts and suppliers, and stops when the collected count matches the total (found) reported by the API or when a page brings no new contracts. Network errors and 5xx responses are retried with backoff.
  3. Each contract is normalized and enriched with its supplier's data; document download links are built.
  4. Actor-side filters are applied, then maxItems.
  5. Contracts are written to the dataset.

Pricing

This Actor uses the Pay Per Event pricing model — you are not charged for compute time.

  • Each contract written to the dataset is charged exactly one new-item event, so a run costs exactly as many events as the number of contracts it delivers.
  • The exact price per event is listed on the Pricing tab of the Actor page.
  • If you set a maximum cost per run limit in your Apify run settings, the Actor stops delivering contracts once that budget is reached instead of handing out contracts it can no longer charge for.

Limitations & notes

  • Private-sector contracts have contract_url: null — OMNIA publishes no public page for them.
  • subcategories, leadAgencies and stateAdoptedStates require an exact, case-sensitive match; there is no autocomplete, so a typo returns nothing (the Actor logs Filter matched no contracts). Blank values are ignored.
  • The OMNIA API silently ignores filter values it does not recognize and returns the whole registry instead. When server-side filters don't narrow the result, the Actor logs a warning so you can spot it.
  • With a text query, the API's found is only an estimate and is usually a bit higher than the number of contracts it actually returns; the Actor collects every unique contract the API returns.
  • final_expiration is returned exactly as published by the source, including occasional typos (e.g. 3031-07-31); the Actor does not "correct" source data.
  • The registry size changes over time; as of September 2026 it holds about 860 contracts from about 640 suppliers.

Legality

This Actor collects only contract data that OMNIA Partners publishes openly on omniapartners.com; it does not extract private user data. You are responsible for using the results in line with the source website's terms of service and the laws that apply to you. If the data you collect includes personal data, it may be protected by the GDPR or other regulations — consult your lawyers if you are unsure whether your use is legitimate.

❓ FAQ

Where can I find a list of NCPA contracts? NCPA contracts are part of the OMNIA Partners registry. Run the Actor with sourcingEntities: ["NCPA"] (or open the NCPA contracts task) and export the dataset to Excel or CSV.

Is US Communities part of OMNIA? Yes — US Communities contracts are published in the OMNIA Partners registry. Select them with sourcingEntities: ["US Communities"].

Why is my dataset empty? Most often a string filter (subcategories, leadAgencies, stateAdoptedStates) or a combination of filters matches nothing — these require an exact, case-sensitive value. The run log shows a Filter matched no contracts warning with the values you passed. Remember that different fields are combined with AND.

Why do some contracts have no contract_url? Private-sector contracts have no public page on omniapartners.com, so the Actor returns null instead of a broken link.

How do I get the contract PDFs? Use documents[].download_url — it is a direct download link for each document.

How much does a full run cost? One new-item event per delivered contract, so the whole registry costs roughly its size in events (about 860 as of September 2026). Use filters or maxItems to pay only for what you need.

Can I run this on a schedule? Yes. Use Apify Schedules, for example with expiresWithinDays to get a weekly list of contracts coming up for expiration.

📝 Changelog

See the Changelog tab (CHANGELOG.md) for what changed between releases.

  • Sourcewell awarded contracts & vendors — the Sourcewell cooperative contract registry with awarded suppliers, categories and an expiring-contracts filter. Use both to cover the largest US cooperative purchasing programs.
  • Open government RFPs & bids on Bonfire — open solicitations from hundreds of US and Canadian agencies on Bonfire / Euna Procurement. Use it to catch the new bid once a contract runs out.

From expiring contract to new bid: when a cooperative contract is about to expire, agencies that bought through it often run their own solicitation — and many of them publish it on Bonfire. Use expiresWithinDays here to see which contracts are ending, then watch for the rebid with the Bonfire scraper's keyword filter.

🛟 Support & feedback

Bugs and feature requests — via the Issues tab on this Actor's page. For programmatic access, see the API tab.

Development

npm install
npm run build
npm start # run the compiled Actor
npm run start:dev # run from TypeScript sources without building
npm test # build and run the test suite
apify run # run locally with the Apify CLI

Internal developer documentation (in Russian) lives in the docs/ folder of the source repository.