CanadaBuys Tender Opportunities Scraper avatar

CanadaBuys Tender Opportunities Scraper

Pricing

Pay per event

Go to Apify Store
CanadaBuys Tender Opportunities Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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

FieldDescription
titleTender/opportunity title
tenderIdID parsed from the CanadaBuys detail URL
solicitationNumberSolicitation number when available from detail pages
statusTender status when available
categoryCategory such as goods, services, or construction
organizationBuyer or issuing organization
regionRegion/location when available
openDateOpen or amendment date from the listing
closingDateClosing date
closingTimeClosing time when available
publicationDatePublication date when available
detailUrlCanadaBuys tender notice URL
sourceUrlSearch/listing URL used for the record
searchKeywordKeyword supplied in the input
scrapedAtExtraction 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

  1. Open the actor on Apify.

  2. Enter a keyword such as construction, software, or professional services.

  3. Keep Open opportunities only enabled for active bid monitoring.

  4. Set Maximum opportunities to your desired export size.

  5. Run the actor.

  6. 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 ApifyClient
client = 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

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.

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.