# Canada Gov Contracts: Expiring, Tenders & Awards (`tendertrail/canada-government-contracts-expiring`) Actor

Find Canadian federal contracts ending soon, with the incumbent, value and possible re-tender. Plus open tenders, awards since 2022, and supplier/department profiles.

- **URL**: https://apify.com/tendertrail/canada-government-contracts-expiring.md
- **Developed by:** [John](https://apify.com/tendertrail) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Canada Gov Contracts: Expiring, Tenders & Awards

**Find Government of Canada contracts that are about to end, who holds them now, and whether a re-tender is already open.** Built for companies that sell to the federal government, bid consultants, and the agents they run.

### What you can get

| Mode | You get |
|---|---|
| **Contracts ending soon** | Incumbent supplier, department, value (CAD), end date, procurement method, a non-competitive flag, extension options stated in the award notice, and open tenders from the same department that may be the re-tender. Filter by keywords, department or category (the same categories as the free pages at [tendertrail.fly.dev/expiring](https://tendertrail.fly.dev/expiring)). Up to 1,000 rows. |
| **Open tenders** | Currently open CanadaBuys tenders by keyword, province and closing window, with the official notice link. |
| **Contract awards** | Awards since August 2022 (29k+, $100B+ CAD) by keyword, supplier, department, dates and value. |
| **Supplier profile** | One company's federal business: totals, top departments, categories, yearly trend, non-competitive share, contracts expiring in 12 months. |
| **Department profile** | One department's spend: top incumbents, categories, trend, expiring contracts and tenders open right now. |

### Example

*Keywords* `cybersecurity`, *ending within* `365` days, *minimum value* `100000` returns every matching federal contract ending in the next year, largest first, each with its incumbent and any likely re-tender.

### Notes

- Data: CanadaBuys tender and award notices, refreshed daily. Contains information licensed under the Open Government Licence – Canada.
- Extension options are quoted from the award notice when it states them. CanadaBuys doesn't publish whether options were exercised, and many notices don't mention them, so a blank means "not stated", not "no options".
- The re-tender match compares titles within the same department and is labelled *low* or *medium* confidence. Always confirm on the official notice.
- Contracting-officer personal contact details are not included.
- Independent; not affiliated with or endorsed by the Government of Canada.
- Also available to AI agents pay-per-call via x402 at https://tendertrail.fly.dev.

# Actor input Schema

## `mode` (type: `string`):

Contracts ending soon shows the incumbent, value, end date and any open tender from the same department that may be the re-tender.

## `keywords` (type: `string`):

e.g. cybersecurity, janitorial, translation, IT consulting

## `buyer` (type: `string`):

e.g. Shared Services Canada. For buyer profiles, the department name.

## `category` (type: `string`):

Contracts ending soon only. Product or service category (UNSPSC segment), matching the category pages at tendertrail.fly.dev/expiring.

## `supplier` (type: `string`):

For supplier profiles, the company name.

## `withinDays` (type: `integer`):

Contracts ending soon only.

## `minValueCad` (type: `integer`):

Contracts ending soon and awards.

## `excludeStandingOffers` (type: `boolean`):

Contracts ending soon only. Hides standing offers and supply arrangements (frameworks that aren't single contracts).

## `province` (type: `string`):

Open tenders only, e.g. Ontario.

## `closingWithinDays` (type: `integer`):

Open tenders only.

## `awardedFrom` (type: `string`):

Awards only.

## `awardedTo` (type: `string`):

Awards only.

## `maxResults` (type: `integer`):

Contracts ending soon: up to 1,000. Tenders and awards: up to 25.

## Actor input object example

```json
{
  "mode": "expiringContracts",
  "keywords": "cybersecurity",
  "withinDays": 365,
  "excludeStandingOffers": false,
  "maxResults": 100
}
```

# Actor output Schema

## `results` (type: `string`):

Contracts ending soon, open tenders, awards, or the requested supplier/department profile.

## `summary` (type: `string`):

Run summary (total matches and value in CAD), or the candidate list when a name was ambiguous.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": "cybersecurity"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tendertrail/canada-government-contracts-expiring").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": "cybersecurity" }

# Run the Actor and wait for it to finish
run = client.actor("tendertrail/canada-government-contracts-expiring").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": "cybersecurity"
}' |
apify call tendertrail/canada-government-contracts-expiring --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tendertrail/canada-government-contracts-expiring"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CLCq4TkRMUhLeSIM4/builds/uUvgNuinzfwXhFWbM/openapi.json
