Sourcewell Contract Scraper avatar

Sourcewell Contract Scraper

Pricing

from $5.00 / 1,000 new items

Go to Apify Store
Sourcewell Contract Scraper

Sourcewell Contract Scraper

Sourcewell contract search & awarded vendors list: export all ~1,060 Sourcewell cooperative purchasing contracts to CSV, Excel or JSON β€” suppliers, categories, descriptions and expiration dates. Filter by category or find contracts expiring in the next N days (upcoming rebids).

Pricing

from $5.00 / 1,000 new items

Rating

0.0

(0)

Developer

Alexei Pannicov

Alexei Pannicov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Sourcewell contract search & awarded vendors list β€” export every Sourcewell cooperative purchasing contract to CSV, Excel or JSON: ~1,060 contracts with awarded suppliers, descriptions, expiration dates and categories. Filter by category or find contracts expiring soon β€” the upcoming rebids.

The Actor collects the public contract registry from sourcewell-mn.gov and delivers it as a structured Apify Dataset β€” a Sourcewell contract search API alternative.

It covers the contract registry, not each contract's detail page β€” so no contract documents, supplier contacts, or full products & services list (see Roadmap).

What this Actor does

  • Official spreadsheet feed as the primary source β€” faster and more reliable than paging through HTML: one request returns all ~1,060 contracts with accurate supplier/description/solicitationTitle/maturityDate
  • Category enrichment β€” categories only exist on the HTML listing, so the Actor crawls it and merges categories into the feed rows by contractNumber
  • Category filter and limits β€” export a single category or cap the dataset size for a quick test run
  • Expiring contracts filter β€” expiresWithinDays keeps only contracts that expire in the next N days, so you see upcoming rebids months ahead
  • Apify platform advantages β€” run on a schedule, trigger via API, connect to integrations, and monitor runs from the Apify Console

Who is it for

  • Procurement and purchasing teams checking what's already covered by Sourcewell cooperative contracts before running their own RFP
  • Suppliers and bid consultants tracking competitor contracts and categories on Sourcewell
  • Sales and lead-gen teams building a list of active Sourcewell suppliers by category
  • Market-intelligence and compliance tools that need an up-to-date, machine-readable copy of the contract registry

Use cases

Find Sourcewell awarded vendors by category

Get the list of approved vendors (awarded suppliers) on Sourcewell contracts in one category β€” e.g. everyone awarded under Public Safety β€” with contract numbers and expiration dates. Export to Excel or CSV and filter it like any spreadsheet.

{ "category": "Public Safety" }

Track contracts expiring in the next 90 or 365 days (upcoming rebids)

A contract that expires soon is about to be re-solicited. Suppliers use this to prepare for the rebid or to approach agencies before the incumbent's contract ends; procurement teams use it to plan renewals.

{ "expiresWithinDays": 90 }

Check if a cooperative contract already covers your purchase (piggyback)

Before running your own RFP, search the registry for a Sourcewell contract you can piggyback on β€” filter by category, then search description and solicitationTitle in the exported spreadsheet.

⚑ 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 and optionally set category, expiresWithinDays or maxItems.
  2. Click Start. The Actor downloads the official contract-list spreadsheet feed and parses every contract row.
  3. It then crawls the /contract-search listing page by page to collect categories for each contractNumber.
  4. It merges both sources, optionally filters by category and expiresWithinDays, and trims to maxItems.
  5. The result is written to the run's Dataset β€” open the Output tab or fetch it via the API.

A full run takes a few minutes and returns the complete registry; no proxy, login, or configuration is required.

Input

All input fields are optional β€” see the Input tab for the full schema:

FieldTypeDescription
categorystringOne of the site's 14 top-level categories (dropdown); if omitted, contracts from all categories are returned
expiresWithinDaysinteger β‰₯ 1Keep only contracts whose maturityDate falls within the next N days (upcoming rebids); already expired and undated contracts are excluded
maxItemsintegerMaximum number of contracts in the resulting dataset β€” handy for a cheap test run; applied after the filters

Output

You can download the dataset in various formats such as JSON, CSV, Excel, or HTML via the Output tab or the API.

[
{
"contractNumber": "030425-CEN",
"supplier": "22nd Century Technologies",
"description": "Public safety and law enforcement software solutions",
"solicitationTitle": "Public Safety Software",
"maturityDate": "2029-07-17",
"categories": ["Office & Technology", "Public Safety"],
"detailUrl": "https://www.sourcewell-mn.gov/cooperative-purchasing/030425-CEN"
}
]
FieldTypeDescription
contractNumberstringContract number (stable key, unique per contract)
supplierstringSupplier name
descriptionstringShort contract description
solicitationTitlestringSolicitation/RFP title
maturityDatestringContract expiration date (YYYY-MM-DD)
categoriesstring[]Contract categories β€” zero or more of the 14 top-level categories
detailUrlstringLink to the contract's page on the Sourcewell site

How it works

The Actor combines two public sources on the official Sourcewell site:

  1. The official contract-list spreadsheet feed β€” one request returns every contract with contractNumber, supplier, description, solicitationTitle and maturityDate. This feed has no categories.
  2. The /contract-search HTML listing β€” crawled page by page and used only to collect categories per contractNumber.

Both sources are merged by contractNumber, optionally filtered by category and expiresWithinDays, trimmed to maxItems, and written to the dataset.

Pricing

This Actor uses Pay Per Event pricing, with no charge for compute time itself. Each contract written to the dataset is charged one new-item event, so a run costs exactly as many events as the number of contracts it delivers. See the Pricing tab on this Actor's page for the exact price per event.

If you cap a run with Apify's maximum cost per run setting, the Actor stops delivering once that budget is reached instead of writing contracts it cannot charge for. The dataset then holds exactly what you paid for.

Limitations & notes

  • A few contracts have an empty categories array: they are present in the contract feed but not in the HTML listing the categories come from (1,056 of 1,063 contracts had categories in testing).
  • expiresWithinDays counts whole days from the run date (UTC) to maturityDate, inclusive of both ends.
  • maxItems trims the final list after both sources are merged, so it caps what you are charged for but doesn't make the run itself much faster.
  • Contract documents, supplier contacts, supplier websites and the full products & services list live behind each contract's detail page and are not collected by this Actor yet β€” see the Roadmap below.

πŸ—Ί Roadmap

Planned next, in order:

  1. Contract detail crawling β€” an optional, higher-priced mode that opens each contract's page to extract contract documents, supplier contacts and website, and the full products & services list.
  2. Wider source coverage β€” evaluating whether to also include the A–Z supplier listing and the construction contractors (IDIQ) registry, which sit outside the main contract search.

Need one of these sooner, or a field that isn't in the output yet? Open an issue on the Actor's Issues tab β€” requests with a concrete use case get prioritized.

Legality

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

❓ FAQ

How do I get a list of Sourcewell approved vendors? Run the Actor with no input (or pick a category) and export the dataset to Excel or CSV. Every row is an awarded contract with its supplier, so the supplier column is the awarded vendors list β€” or start from the awarded vendors task.

Which Sourcewell contracts expire soon? Set expiresWithinDays, e.g. 90 for the next quarter or 365 for the next year. The dataset then holds only contracts coming up for renewal, with their suppliers and categories.

Does the dataset include every Sourcewell contract, or only the ones matching my category filter? The Actor always downloads the full contract feed first; category only filters the final output, so switching categories between runs never requires a different crawl of the contract list itself.

Where do categories come from? From the /contract-search HTML listing, matched to feed rows by contractNumber β€” the spreadsheet feed itself has no categories. A contract that is in the feed but missing from the HTML listing comes back with an empty categories array.

How often is the underlying data updated? Sourcewell refreshes the contract feed on its own schedule, typically daily. The Actor always fetches the current version on each run.

Can I get supplier contacts, contract documents, or the full products & services list? Not yet β€” that data lives on each contract's detail page and is on the roadmap above.

Can I run this on a schedule? Yes. Use Apify's Schedules to run it daily or weekly β€” for example with expiresWithinDays for a weekly list of contracts coming up for renewal. Pair it with maxItems or the maximum cost per run setting to keep recurring runs predictable.

πŸ“ Changelog

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

  • OMNIA Partners / NCPA cooperative contracts β€” the same kind of registry for OMNIA Partners, NCPA and US Communities, with contract PDFs 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.
  • PlanetBids government bids & RFPs β€” open bids, RFPs and award results from city, county, school and water district portals on PlanetBids (mostly California).

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 or PlanetBids. Use expiresWithinDays here to see which contracts in your category are ending, then watch for the rebid with the Bonfire or PlanetBids 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.