Canadian Federal Tender Alerts & Change Monitor
Pricing
from $5.00 / 1,000 delivered opportunity or changes
Canadian Federal Tender Alerts & Change Monitor
Find relevant Canadian federal tenders and detect amendments, deadline changes, and removals using the official CanadaBuys open-data feed.
Pricing
from $5.00 / 1,000 delivered opportunity or changes
Rating
0.0
(0)
Developer
Tender Signall
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn the official CanadaBuys open-tender feed into a focused, recurring opportunity watchlist. Get only the federal tenders that fit your business, then receive new notices, amendments, deadline changes, and meaningful field updates as clean rows for Apify, CSV, API, schedules, and webhooks.
Best for: Canadian suppliers, bid teams, consultants, contractors, software vendors, and procurement-intelligence workflows that cannot afford to re-read the same tender list every day.
No browser, proxy, CAPTCHA solver, AI model, external API key, or CanadaBuys login is required.
Unofficial tool. This Actor is not affiliated with, sponsored by, or endorsed by the Government of Canada, CanadaBuys, or Public Services and Procurement Canada. CanadaBuys remains the source of truth.
Start in 60 seconds
- Choose a Quick-start preset or keep Custom filters.
- Give the watchlist a stable
monitorId. - Click Start. The first run returns clearly labelled
baselinerows. - Inspect or export the clean Dataset table.
- Save the input as an Apify Task and schedule it daily with the same
monitorId.
The default custom example is ready to run for Canadian federal IT and software opportunities.
Example of what you receive
Illustrative Dataset view:
| Event | Score | Tender | Organization | Deadline | What changed |
|---|---|---|---|---|---|
amended | 83 | Cloud security services | Shared Services Canada | 2026-09-04 | amendment number, description |
deadline_changed | 76 | Data platform modernization | Public Services and Procurement Canada | 2026-09-12 | closing date |
new | 71 | Software licensing and support | Department of National Defence | 2026-09-18 | new since previous snapshot |
Every row links back to the official notice and explains why it matched. Actual results depend on the live source and your filters.
Why use this instead of checking CanadaBuys manually?
| Need | CanadaBuys website | This Actor |
|---|---|---|
| Official notice and bid documents | Source of truth | Direct official link on every result |
| Search current opportunities | Yes | Yes, through reusable filters and presets |
| Detect exactly which fields changed | Manual comparison | changedFields, previous values, and event types |
| Receive delta-only structured data | Limited manual/email workflow | Dataset, CSV, Excel, JSON, XML, RSS, JSONL, and API |
| Reuse the same watchlist every day | Saved search | Stateful monitorId, Task, Schedule, and webhook workflow |
| Audit source quality | Manual | Source metadata, schema guards, counts, warnings, and run summary |
CanadaBuys is free and authoritative. This Actor charges for the normalization, stateful comparison, precision filtering, and automation layer—not for ownership of the public data.
Quick-start presets
Choose a preset to replace the custom keyword and category fields:
| Preset | Designed to find |
|---|---|
| IT & software | Software, SaaS, cloud, digital services, IT, and data analytics |
| Cybersecurity | Cybersecurity, zero trust, assessments, penetration testing, SIEM, and SOC work |
| Construction | Federal construction, renovation, building, infrastructure, roofing, mechanical, and electrical work |
| Consulting | Advisory, professional services, project management, business analysis, and management consulting |
| Custom | Your own keywords, official categories, organizations, regions, and classification codes |
Presets are deliberately deterministic and visible—there is no hidden AI classification.
Custom input example
{"preset": "custom","monitorId": "canada-cyber-opportunities","keywords": ["cybersecurity", "zero trust", "penetration testing"],"excludeKeywords": ["physical security guard"],"matchMode": "any","categories": ["SRV", "GD", "SRVTGD"],"organizations": ["National Defence", "Shared Services Canada"],"regions": [],"gsinCodes": [],"unspscCodes": ["8111"],"publishedWithinDays": 0,"minDaysRemaining": 2,"closingWithinDays": 90,"minScore": 40,"outputMode": "changes_only","emitBaseline": true,"maxResults": 500,"resetState": false}
Precision controls
keywordsandexcludeKeywordsuse whole-word or exact-phrase matching across bilingual titles, descriptions, classifications, organizations, and regions.matchModecan require any configured keyword or all of them.categoriessupports the officialCNST,GD,SRV, andSRVTGDvalues.organizationsandregionsnarrow the feed to target buyers and delivery/opportunity regions.gsinCodesandunspscCodesaccept a full code or a broader prefix. A tender may match any configured code.publishedWithinDaysoptionally limits the original publication age. Keep it at0when older tenders may still receive important amendments.minDaysRemainingandclosingWithinDaysdefine an actionable deadline window.minScoresuppresses lower-priority rows:0maximizes recall,40is a useful clean-feed starting point, and70is strict.
What it detects
| Event | Meaning |
|---|---|
baseline | First reliable observation. It is deliberately not labelled “new.” |
new | The reference number was absent from the previous snapshot. |
amended | The official amendment number or amendment date changed. |
deadline_changed | The official tender closing value changed. |
updated | Another monitored field changed, such as title, description, organization, category, status, or official URL. |
removed_from_open | The record disappeared from the current open-tenders file. This does not by itself prove cancellation. |
unchanged | Returned only in all_matching mode. |
Multiple changes can occur together. eventType is the primary event; changeTypes and changedFields preserve the complete explanation.
Output
Each Dataset row includes:
- event type, all change types, changed fields, and previous amendment/deadline/status values;
- deterministic
relevanceScore, a plain-language reason, and matched keywords; - English and French titles and organizations when supplied upstream;
- categories, GSIN/UNSPSC codes, regions, dates, procurement method, and notice type;
- a short privacy-redacted description excerpt;
- an official notice or CanadaBuys search URL;
- source record ID, source URL, timezone, and collection timestamp.
Example JSON shape:
{"eventType": "deadline_changed","changeTypes": ["deadline_changed", "updated"],"changedFields": ["closingDate", "description"],"relevanceScore": 76,"relevanceReason": "Matched \"cloud\" in title and classification; closes in 18 days; closing deadline changed.","titleEn": "Cloud infrastructure services","organizationEn": "Shared Services Canada","closingDate": "2026-09-12T14:00:00","previousClosingDate": "2026-09-05T14:00:00","officialNoticeUrl": "https://canadabuys.canada.ca/en/tender-opportunities/tender-notice/example"}
The OUTPUT key-value record contains the auditable run summary: source metadata, validation counts, match counts, event counts, delivered rows, queued backlog, truncation reasons, baseline reason, and state status.
No-lost-change delivery
maxResults and Apify's maximum run-cost control can limit what is written in one run. Version 0.2 keeps every undelivered selected row in a private backlog and delivers that backlog before fresh results on the next run.
This means:
- a large change day does not silently consume unreturned alerts;
- a spending limit does not discard unpaid rows;
- already delivered rows are not deliberately repeated just to advance the snapshot;
- the run summary shows
pendingItemsAfterRunand why any rows were queued.
If another run updates the same monitor concurrently, the stale run cannot overwrite the newer state. Avoid overlapping runs with the same monitorId.
Pricing
Transparent pay-per-event pricing:
- $0.01 per Actor start;
- $0.005 per delivered Dataset row;
- Apify platform usage is included in those event prices.
Examples:
| Run result | Event charge |
|---|---|
| No changes | $0.01 |
| 1 delivered opportunity/change | $0.015 |
| 10 delivered opportunities/changes | $0.06 |
| 100 delivered opportunities/changes | $0.51 |
A first baseline can contain multiple chargeable rows. Use maxResults and the maximum run-cost control to bound the first run. The minimum allowed budget is $0.015, enough for the start and one result.
Daily alerts: Task, Schedule, and webhook
The official Open Tender Notices file is refreshed each morning between 7:00 and 8:30 at the source's documented UTC-05:00 clock. Hourly runs do not create fresher upstream data.
Recommended production setup:
- Run the Actor once and review its
baselinerows. - Click Save as new task and keep the tested input unchanged.
- Schedule the Task daily at 10:00 AM in
America/Toronto. Apify schedules support timezone/DST handling. - Reuse the exact same
monitorId; changing filters automatically starts a replacement baseline rather than generating false “new” alerts. - Add an
ACTOR.RUN.SUCCEEDEDwebhook from the Task to Make, Zapier, n8n, Slack, email, Google Sheets, or your own endpoint. - Read the Dataset for alerts and
OUTPUTfor the run receipt. A successful no-change run normally has an empty Dataset and a populatedOUTPUTsummary.
Apify references: Actor Tasks, Schedules, and webhook events.
How it works
- Downloads the authoritative CanadaBuys Open Tender Notices CSV over HTTPS.
- Rejects unexpected hosts, HTML responses, oversized files, missing headers, malformed CSV, or excessive invalid records.
- Normalizes bilingual source fields into a stable schema.
- Applies preset/custom business-fit and deadline filters.
- Compares matches with the previous successful snapshot for the same
monitorId. - Scores and sorts explainable opportunity events.
- Writes affordable, bounded output and queues anything not delivered.
- Saves the source snapshot and backlog only after successful parsing, output, and concurrency checks.
Relevance score
The auditable 0–100 score contains:
- keyword location: up to 65 points (title > classification > description > organization > region);
- closing urgency: up to 20 points;
- publication/amendment freshness: up to 10 points;
- new/amended/deadline event: 5 points.
Use it for triage, not as a legal or bid/no-bid decision.
Reliability, privacy, and compliance
- Hard-coded, allowlisted CanadaBuys HTTPS source; no user-supplied URL or SSRF surface.
- Download timeout, bounded retries, and a 25 MB source ceiling.
- Strict CSV column/header validation and an invalid-record quality threshold.
- Reference-number deduplication and conservative source-removal handling.
- Versioned state, watchlist fingerprints, stale-run concurrency protection, and persistent delivery backlog.
- Structured contact names, emails, phone/fax numbers, and postal addresses are not extracted.
- Common email addresses and North American phone numbers are redacted from description excerpts.
- No login, cookies, proxy, CAPTCHA bypass, or access-control circumvention.
Important limitations
- Version 0.2 monitors the federal Open Tender Notices file. It does not claim complete provincial or municipal coverage.
- An absent record is labelled
removed_from_open, not “cancelled.” Verify the final status on CanadaBuys. - Some notices originate in external procurement systems, so bilingual fields or direct URLs can be blank upstream.
- The Actor does not download or interpret attachments, submit bids, or provide procurement/legal advice.
- Always verify deadlines, amendments, requirements, and bid instructions on the official notice before acting.
Data source and licence
Contains information licensed under the Open Government Licence — Canada. The data is transformed and normalized by this unofficial Actor; the Government of Canada has not endorsed the transformation.
Local development
Requires Node.js 20+.
npm cinpm testnpm run checknpm run build
The production image uses the browser-free apify/actor-node:24 base and a multi-stage TypeScript build.