Watch open government contract opportunities from SAM.gov, CanadaBuys and UK Contracts Finder in one feed. Each notice comes with its closing date, buyer, description and direct links to the bid documents, plus a new-or-changed-since-last-run mode for scheduled watches.
- Total runs
- 235
- Bookmarked
- 0
- Last modified
- 2 days ago
This scraper was last updated on .
What does the Government Contract Watch Scraper return?
Government Contract Watch Scraper
Track open government contract opportunities from SAM.gov, CanadaBuys, SEAO Quebec and UK Contracts Finder in one feed, with their closing dates and their bid documents. Every notice comes as a flat row with the buyer, the deadline, the notice type, the description and direct links to the RFP, SOW and addenda where the portal publishes them. No API key, no login. Export to CSV, JSON, Excel, or XML.
Opportunities are scattered across four public portals, each with its own search, its own export limits and its own idea of what "open" means. CanadaBuys is the Canadian federal portal and SEAO is the Quebec provincial one, so a Quebec notice never shows up on CanadaBuys. This Actor queries all four from one search term, drops the notices whose deadline has already passed, and returns what is left in a single schema. It can also remember what it has already given you, so a daily schedule returns only what is new or has been amended.
| Who uses it | What they watch it for |
|---|---|
| Real estate and facilities teams | Government space, lease and fit-up solicitations before the deadline |
| Bid managers | New opportunities in their category across the US, Canada and the UK |
| Sales teams | A qualified pipeline of public-sector work with contacts attached |
| Market researchers | Which agencies are buying what, and on what timeline |
What it does
- 🔍 One search across four portals: SAM.gov for US federal opportunities, CanadaBuys for Canadian federal tenders, SEAO for Quebec provincial and municipal ones, UK Contracts Finder for British notices.
- 📎 Bid documents: turn on Include bid documents and each notice comes back with its attachment list: filename, file type, size and a direct download link. A live US Army office-space solicitation in Nashville returns fourteen of them, including the RLP, the sample lease and the design criteria.
- ⏰ Deadlines you can trust: every source keeps notices flagged open whose deadline has already passed. In a measured run, nine rows out of twenty-one. With Open opportunities only on, those are dropped.
- 🔔 New or changed only: the Actor remembers every notice it has delivered and, on the next run, returns only what is new or has been amended since. Schedule it daily and you are billed for the new work, not for the same list again.
- 🎯 NAICS and UNSPSC filters: narrow the US results to one NAICS code, 531190 is Lessors of Other Real Estate Property, and the Quebec results to one or many UNSPSC codes, 80131500 is Lease and rental of property or building and 8013 is the whole real estate services family. Both are language independent.
- 📊 One schema for four portals: source, country, title, buyer, closing date, notice type, solicitation number, description, attachments, and the notice URL.
What you can do with it
🏢 Watch for government space requirements.
Search office lease, filter to NAICS 531190, and schedule it daily. You get GSA and agency solicitations for space, with the response deadline, the place of performance down to the ZIP code, and the lease exhibits attached.
📌 Never miss an amendment.
The watch keys on the notice's last-modified date, so an amended solicitation comes back as new rather than staying hidden behind the version you already saw.
📥 Feed a bid library.
Every attachment row carries a direct link, so the documents can be pulled straight into your own storage.
🌍 Compare across borders.
The same keyword runs against all three portals in one call, so a category can be sized across the US, Canada and the UK without three integrations.
Sources
| Source | What it returns | Bid documents |
|---|---|---|
| SAM.gov | Open US federal opportunities: presolicitations, solicitations, combined synopses and sources sought, with response deadline, place of performance and NAICS | Yes, the full attachment list |
| CanadaBuys | Every open Canadian federal tender from the official open-data extract, with closing date, contracting entity, contact email and UNSPSC codes | Yes, where the notice hosts them. Around four in ten do |
| SEAO (Quebec) | Quebec provincial, municipal, health and education notices, with the closing date in Quebec legal time, the buying body with its address and a named contact, the contract nature, the UNSPSC codes, the trade agreements, the region of delivery and the estimated value where it is published. Notices are written in French | The document inventory, with filename, document type, language and page count. Quebec keeps the files themselves behind a free SEAO account, so those entries link to the notice the document is ordered from |
| UK Contracts Finder | British notices from the OCDS feed, with value, CPV code, buyer and tender period | Sometimes. The feed carries documents on roughly one notice in twelve |
| USAspending (opt-in) | US federal contracts that were already awarded. Market intelligence, not opportunities | No |
| USITC HTS (opt-in) | Tariff schedule lines. Trade reference data, not tenders | No |
| CBP CROSS (opt-in) | Customs rulings. Trade reference data, not tenders | No |
Configure the run
The Input tab lists every parameter. maxItems is the total for the run, shared evenly across the sources you select. Earlier builds applied it per source, so five sources at 200 could quietly bill 1,000 rows.
Office space opportunities with their documents:
{
"query": "office lease",
"sources": ["samgov", "canadabuys", "contractsfinder"],
"maxItems": 60,
"openOnly": true,
"includeAttachments": true
}
A daily watch that only returns what is new:
{
"query": "office lease",
"sources": ["samgov", "canadabuys"],
"maxItems": 100,
"openOnly": true,
"includeAttachments": true,
"onlyNewOrChanged": true,
"watchKey": "office-space"
}
Quebec real estate and facility opportunities, by UNSPSC rather than by keyword, which sidesteps the language of the notice. Several codes go in one field, one per line or separated by commas, and a notice matching any of them is returned. A shorter code covers everything under it: 80131500 is only Lease and rental of property or building, 8013 is every real estate service. Here the leasing class, the management support class and HVAC maintenance, which SEAO files refrigeration work under:
{
"query": "",
"sources": ["seao"],
"unspscCode": "80131500, 80161500, 72151200",
"maxItems": 100,
"openOnly": true,
"includeAttachments": true
}
US federal real estate only, by NAICS:
{
"query": "",
"sources": ["samgov"],
"naicsCode": "531190",
"maxItems": 100,
"openOnly": true,
"includeAttachments": true
}
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Government Contract Watch Scraper.
- Set your search term and sources, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/us-gov-contract-watch-scraper"
Troubleshooting
A source returned fewer rows than my share of maxItems.
That source ran out of matches. UK Contracts Finder is the usual one: its feed has no server-side keyword search, so the Actor scans the most recent notices and filters locally within a time budget. A rare keyword will find fewer.
Why is my watch returning nothing?
That is the watch working. It returns only notices it has not delivered before under that watch name. Change the watch name, or turn the mode off, to get the full list again.
Two schedules are hiding each other's results.
Give them different watch names. Watches with the same name share one memory of what has been delivered.
Why do some notices have no attachments?
Not every notice publishes its documents on the portal. Many Canadian ones point bidders at MERX or Ariba instead, and those rows carry an externalNoticeUrl you can follow.
The run takes longer with bid documents on.
SAM.gov needs one extra request per notice for its attachment list and one for the full description, so a large pull with documents on is slower than one without.
FAQ
| Question | Answer |
|---|---|
| Do I need an API key? | No. All four portals are read through public endpoints with no registration. |
| Are these open opportunities or past awards? | Open opportunities, by default. USAspending is available as an opt-in source and returns contracts that were already awarded. |
| Does it return the closing date? | Yes, on every source, with the time zone where the portal publishes one. |
| Can I download the bid documents? | SAM.gov, CanadaBuys and UK Contracts Finder come back as direct links with filename, type and size, and fetching the files is up to you. SEAO is the exception: Quebec publishes the inventory, with filename, document type and page count, but puts the files behind a free SEAO account, so those entries link to the notice instead. |
| How does the watch decide something changed? | It keys on the notice id plus its last-modified or amendment date, so an amended notice comes back as new. |
| Can I filter by location? | US results carry the place of performance with city, state and ZIP, Canadian and Quebec ones carry the regions of delivery, and you can filter the exported dataset on those. The NAICS filter narrows the US source directly. |
| What export formats are supported? | CSV, JSON, Excel, or XML from the Apify platform. |
| Why does my search return nothing from SEAO? | Quebec publishes its notices in French. An English keyword that works on the other three portals returns zero there: "office lease" returns nothing, "espace bureau" returns seven. Use a French term, or the UNSPSC filter, which does not depend on the language. Accents do not matter, "deneigement" and "déneigement" both return 99. |
| Is this legal? | All four portals publish this information for public use. This Actor accesses only publicly available data. |
🆘 Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
⚠️ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by the US General Services Administration, Public Services and Procurement Canada, or the UK Cabinet Office. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL.
What input does the Government Contract Watch Scraper accept?
| Field | Type | What it does | Default |
|---|---|---|---|
| query | string | Free-text keyword applied to every selected source. Leave empty to return everything the sources publish. SEAO publishes in French, so an English term returns nothing from Quebec: use a French term for it, or the UNSPSC code filter, which does not depend on the language. | office lease |
| sources | array | Which portals to query. The default is the four tender sources. CanadaBuys is the Canadian federal portal and SEAO is the Quebec provincial one, so a Quebec notice only shows up on SEAO. USAspending returns contracts that were already awarded, and the last two are trade reference data rather than tenders, so they are opt-in. | ["samgov","canadabuys","seao","contracts |
| maxItems | integer | Total rows for the whole run, shared across every selected source. This is a change from earlier builds, where the limit applied per source and five sources at 200 could bill 1,000 rows. | 20 |
| openOnly | boolean | Skip closed, cancelled and already-awarded notices. | true |
| includeAttachments | boolean | Return the RFP, SOW and addenda file links for each notice that publishes them, with filename, type and size. CanadaBuys and UK Contracts Finder carry them in the feed. SAM.gov needs one extra request per notice, so runs take longer with this on. SEAO publishes the document inventory, with page count and filename, but Quebec keeps the files themselves behind a free SEAO account, so those entries link to the notice the document is ordered from. | false |
| onlyNewOrChanged | boolean | Remembers every notice already delivered and returns only what is new or has been amended since. Turn this on for a scheduled watch so you are not billed for the same list every day. | false |
| watchKey | string | Keeps separate watches apart. Two schedules with different search terms should use different names so they do not hide each other's results. | default |
| unspscCode | string | Narrow the Quebec results to one or more UNSPSC codes, one per line or separated by commas. A short code covers everything under it: 8013 is the whole Real estate services family, 80131500 only Lease and rental of property or building. A notice matching any of the codes is returned. You can paste lines like "8013 Real estate services", the description is ignored. | not set |
| naicsCode | string | Narrow the US federal results to one NAICS code. 531190 is Lessors of Other Real Estate Property, 236220 is Commercial Building Construction. | not set |
| proxyConfiguration | object | CanadaBuys blocks unproxied datacenter addresses, so a proxy is required. The default is fine. | {"useApifyProxy":true} |
How much does the Government Contract Watch Scraper cost?
from $6.68 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.006675 to $0.0075 |
| SAM.gov bid documents and notice detail | Only with Include bid documents on: one per SAM.gov notice whose attachment list or notice detail came back (files, description, NAICS, place of performance). | $0.00445 to $0.005 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
How do I call the Government Contract Watch Scraper API?
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~us-gov-contract-watch-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "office lease",
"sources": [
"samgov",
"canadabuys",
"seao",
"contractsfinder"
],
"maxItems": 20,
"openOnly": true,
"includeAttachments": false
}' What example inputs can I use?
Use these inputs to see how a run is configured.
{
"query": "office lease",
"sources": [
"samgov",
"canadabuys",
"seao",
"contractsfinder"
],
"maxItems": 20,
"openOnly": true,
"includeAttachments": false
} What do users say about the Government Contract Watch Scraper?
No reviews yet. Be the first.
How do I report an issue with the Government Contract Watch Scraper?
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
