CanadaBuys Tender Opportunities Scraper
Pricing
Pay per event
CanadaBuys Tender Opportunities Scraper
Scrape public CanadaBuys tender opportunities with title, buyer, category, closing date, status, source link, and optional detail text.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
Extract public Canadian federal procurement opportunities from CanadaBuys into clean Apify datasets.
Use this actor to monitor open opportunities, build bid-intelligence feeds, enrich CRM records, or export tender rows for analysis.
What does CanadaBuys Tender Opportunities Scraper do?
CanadaBuys Tender Opportunities Scraper collects tender notices from the public CanadaBuys tender opportunities index.
It reads the server-rendered CanadaBuys listing pages and saves one structured dataset item per notice.
The actor is designed for repeatable procurement monitoring rather than manual copy and paste.
It can search by keyword, filter open opportunities, and optionally keep only specific organizations, categories, regions, or dates.
Who is it for?
Capture teams use it to find new Canadian federal bid leads.
Suppliers use it to monitor relevant opportunities by category or keyword.
Consultants use it to track demand signals across government buyers.
Procurement data platforms use it to ingest CanadaBuys notices into downstream databases.
Sales teams use it to enrich CRM accounts with active public-sector buying intent.
Why use this scraper?
CanadaBuys is a high-value public procurement source.
Manual monitoring is slow and easy to miss.
This actor turns public tender pages into stable JSON, CSV, Excel, or API output.
It is HTTP-first, lightweight, and suited for scheduled monitoring runs.
What data can it extract?
The actor extracts the core fields shown on CanadaBuys tender listings.
Optional detail-page enrichment is available when CanadaBuys permits direct detail access.
Listing records are always saved even if a detail page blocks repeated direct requests.
Data fields
| Field | Description |
|---|---|
title | Tender/opportunity title |
tenderId | ID parsed from the CanadaBuys detail URL |
solicitationNumber | Solicitation number when available from detail pages |
status | Tender status when available |
category | Category such as goods, services, or construction |
organization | Buyer or issuing organization |
region | Region/location when available |
openDate | Open or amendment date from the listing |
closingDate | Closing date |
closingTime | Closing time when available |
publicationDate | Publication date when available |
detailUrl | CanadaBuys tender notice URL |
sourceUrl | Search/listing URL used for the record |
searchKeyword | Keyword supplied in the input |
scrapedAt | Extraction timestamp |
How much does it cost to scrape CanadaBuys tender opportunities?
This actor uses pay-per-event pricing.
There is a small run-start charge and a per-item charge for each saved tender opportunity.
Final Store pricing is calculated from cloud test costs before publication.
Use a small maxItems value for smoke tests and a larger value for scheduled monitoring.
Input options
keywords searches CanadaBuys for a procurement keyword or phrase.
startUrls accepts CanadaBuys search URLs or direct tender notice URLs.
openOnly requests open CanadaBuys opportunity filters by default.
statuses lets you keep specific status labels after extraction.
organization filters buyer names after extraction.
category filters tender categories after extraction.
region filters enriched region/location fields when present.
dateFrom and dateTo filter against closing, publication, or open dates.
maxItems controls the number of saved records.
includeDetails opens tender notice pages for additional metadata when available.
requestDelayMs adds polite delay between requests.
Example input
{"keywords": "construction","openOnly": true,"maxItems": 50,"includeDetails": false}
Example output
{"title": "Construction of 6 New Buildings","tenderId": "mx-444049429558","category": "Construction","organization": "Construction de Défense Canada - Région…","openDate": "2026/06/29","closingDate": "2026/07/15","detailUrl": "https://canadabuys.canada.ca/en/tender-opportunities/tender-notice/mx-444049429558","searchKeyword": "construction","scrapedAt": "2026-07-07T03:11:37.402Z"}
How to scrape CanadaBuys tenders
-
Open the actor on Apify.
-
Enter a keyword such as
construction,software, orprofessional services. -
Keep
Open opportunities onlyenabled for active bid monitoring. -
Set
Maximum opportunitiesto your desired export size. -
Run the actor.
-
Download results from the dataset as JSON, CSV, Excel, XML, RSS, or HTML.
Monitoring workflow
Schedule the actor daily or weekly.
Use stable keywords that match your sales or bid strategy.
Export new records into your CRM, data warehouse, or notification workflow.
Use detailUrl as the persistent source link for deduplication.
Bid intelligence workflow
Combine this actor with CRM enrichment.
Match organization to account records.
Use category, title, and closingDate to prioritize opportunities.
Route promising records to capture managers.
Integrations
Send results to Google Sheets for a shared bid tracker.
Use webhooks to notify Slack when new opportunities appear.
Use the Apify API to load records into Snowflake, BigQuery, Airtable, or HubSpot.
Use dataset exports for BI dashboards.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/canadabuys-tender-opportunities-scraper').call({keywords: 'construction',openOnly: true,maxItems: 50,});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/canadabuys-tender-opportunities-scraper').call(run_input={'keywords': 'construction','openOnly': True,'maxItems': 50,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~canadabuys-tender-opportunities-scraper/runs?token=YOUR_APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"keywords":"construction","openOnly":true,"maxItems":50}'
MCP usage
Use the actor from Claude Desktop or Claude Code through Apify MCP.
MCP server URL:
https://mcp.apify.com/?tools=automation-lab/canadabuys-tender-opportunities-scraper
Claude Code
$claude mcp add --transport http apify-canadabuys "https://mcp.apify.com/?tools=automation-lab/canadabuys-tender-opportunities-scraper"
Claude Desktop
Add this server to your Claude Desktop JSON config:
{"mcpServers": {"apify-canadabuys": {"url": "https://mcp.apify.com/?tools=automation-lab/canadabuys-tender-opportunities-scraper"}}}
Cursor
Open Settings → Tools & MCP → Add custom MCP and use the MCP server URL above.
VS Code
Open the Command Palette, choose MCP: Add Server, select HTTP, and use the MCP server URL above.
Example prompts:
-
"Find recent CanadaBuys construction opportunities and summarize closing dates."
-
"Extract CanadaBuys software tenders and group them by buyer organization."
-
"Build a shortlist of open Canadian procurement leads for professional services."
Tips for better results
Use broad keywords first, then filter by organization or category.
Use maxItems 20-50 for testing.
Use maxItems 100+ for realistic monitoring runs.
Disable detail enrichment when you only need listing fields.
Enable detail enrichment only for smaller high-value runs.
Troubleshooting
If a detail page is not enriched, the actor still saves the listing record.
CanadaBuys may reject repeated direct detail-page requests with HTTP 403.
If you receive fewer records than expected, broaden the keyword or remove post-extraction filters.
If dates look unusual, check the original detailUrl; some legacy notices contain placeholder dates.
Legality
Is it legal to scrape CanadaBuys?
This actor extracts publicly available tender opportunity pages.
You should use the data responsibly and comply with CanadaBuys terms, Apify terms, and applicable laws.
Do not use the actor to overload the website.
Respect source links and verify critical procurement details on CanadaBuys before bidding.
Related scrapers
-
https://apify.com/automation-lab/samgov-government-contracts-scraper
-
https://apify.com/automation-lab/singapore-gebiz-tender-opportunities-scraper
-
https://apify.com/automation-lab/boamp-public-tenders-scraper
FAQ
Can I scrape only open CanadaBuys tenders?
Yes. Keep openOnly enabled, which is the default.
Can I monitor one department?
Yes. Use a broad keyword and set organization to part of the department name.
Can I export to Excel?
Yes. Apify datasets support Excel, CSV, JSON, XML, RSS, and HTML exports.
Does the actor use a browser?
No. It uses lightweight HTTP and Cheerio parsing for the public listing page.
Why are some detail fields empty?
Some CanadaBuys notice detail pages can reject repeated direct requests. Listing fields are still extracted reliably.
Can I run it on a schedule?
Yes. Use Apify schedules and webhooks to create an automated procurement monitor.
Support
If you need a new field, open an issue on the actor page.
Include the CanadaBuys URL and a sample expected output field.
Changelog
Initial version extracts public CanadaBuys tender opportunity listing rows with optional detail-page enrichment.