Canadian Federal Tender Alerts & Change Monitor avatar

Canadian Federal Tender Alerts & Change Monitor

Pricing

from $5.00 / 1,000 delivered opportunity or changes

Go to Apify Store
Canadian Federal Tender Alerts & Change Monitor

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

Tender Signall

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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

  1. Choose a Quick-start preset or keep Custom filters.
  2. Give the watchlist a stable monitorId.
  3. Click Start. The first run returns clearly labelled baseline rows.
  4. Inspect or export the clean Dataset table.
  5. 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:

EventScoreTenderOrganizationDeadlineWhat changed
amended83Cloud security servicesShared Services Canada2026-09-04amendment number, description
deadline_changed76Data platform modernizationPublic Services and Procurement Canada2026-09-12closing date
new71Software licensing and supportDepartment of National Defence2026-09-18new 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?

NeedCanadaBuys websiteThis Actor
Official notice and bid documentsSource of truthDirect official link on every result
Search current opportunitiesYesYes, through reusable filters and presets
Detect exactly which fields changedManual comparisonchangedFields, previous values, and event types
Receive delta-only structured dataLimited manual/email workflowDataset, CSV, Excel, JSON, XML, RSS, JSONL, and API
Reuse the same watchlist every daySaved searchStateful monitorId, Task, Schedule, and webhook workflow
Audit source qualityManualSource 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:

PresetDesigned to find
IT & softwareSoftware, SaaS, cloud, digital services, IT, and data analytics
CybersecurityCybersecurity, zero trust, assessments, penetration testing, SIEM, and SOC work
ConstructionFederal construction, renovation, building, infrastructure, roofing, mechanical, and electrical work
ConsultingAdvisory, professional services, project management, business analysis, and management consulting
CustomYour 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

  • keywords and excludeKeywords use whole-word or exact-phrase matching across bilingual titles, descriptions, classifications, organizations, and regions.
  • matchMode can require any configured keyword or all of them.
  • categories supports the official CNST, GD, SRV, and SRVTGD values.
  • organizations and regions narrow the feed to target buyers and delivery/opportunity regions.
  • gsinCodes and unspscCodes accept a full code or a broader prefix. A tender may match any configured code.
  • publishedWithinDays optionally limits the original publication age. Keep it at 0 when older tenders may still receive important amendments.
  • minDaysRemaining and closingWithinDays define an actionable deadline window.
  • minScore suppresses lower-priority rows: 0 maximizes recall, 40 is a useful clean-feed starting point, and 70 is strict.

What it detects

EventMeaning
baselineFirst reliable observation. It is deliberately not labelled “new.”
newThe reference number was absent from the previous snapshot.
amendedThe official amendment number or amendment date changed.
deadline_changedThe official tender closing value changed.
updatedAnother monitored field changed, such as title, description, organization, category, status, or official URL.
removed_from_openThe record disappeared from the current open-tenders file. This does not by itself prove cancellation.
unchangedReturned 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 pendingItemsAfterRun and 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 resultEvent 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:

  1. Run the Actor once and review its baseline rows.
  2. Click Save as new task and keep the tested input unchanged.
  3. Schedule the Task daily at 10:00 AM in America/Toronto. Apify schedules support timezone/DST handling.
  4. Reuse the exact same monitorId; changing filters automatically starts a replacement baseline rather than generating false “new” alerts.
  5. Add an ACTOR.RUN.SUCCEEDED webhook from the Task to Make, Zapier, n8n, Slack, email, Google Sheets, or your own endpoint.
  6. Read the Dataset for alerts and OUTPUT for the run receipt. A successful no-change run normally has an empty Dataset and a populated OUTPUT summary.

Apify references: Actor Tasks, Schedules, and webhook events.

How it works

  1. Downloads the authoritative CanadaBuys Open Tender Notices CSV over HTTPS.
  2. Rejects unexpected hosts, HTML responses, oversized files, missing headers, malformed CSV, or excessive invalid records.
  3. Normalizes bilingual source fields into a stable schema.
  4. Applies preset/custom business-fit and deadline filters.
  5. Compares matches with the previous successful snapshot for the same monitorId.
  6. Scores and sorts explainable opportunity events.
  7. Writes affordable, bounded output and queues anything not delivered.
  8. 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 ci
npm test
npm run check
npm run build

The production image uses the browser-free apify/actor-node:24 base and a multi-stage TypeScript build.