# Government Contracts & Uncontested Awards (50+ countries) (`alamr/government-contracts-register`) Actor

Public procurement data from official open-data registers: every government contract of a supplier or category, contracts ending soon, awards made without a rival, and supplier search across 60+ countries.

- **URL**: https://apify.com/alamr/government-contracts-register.md
- **Developed by:** [Danilo Dzyuban](https://apify.com/alamr) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$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

## Government Contracts & Uncontested Awards (50+ countries)

Public procurement data from official open-data registers, normalized into one clean schema. Get every government contract a supplier has won, every contract in a category, contracts ending soon, and buyer–supplier pairs where awards went without a rival.

Data comes from the [Assay Systems procurement register](https://assay-systems.com/register/), which is built daily from official government publications (Open Contracting feeds, EU TED, CanadaBuys / open.canada.ca, USAspending and national registers) under their open licences. Each row carries its source and licence.

### What you can get

| Mode | What it returns | Countries |
|---|---|---|
| **Every contract of a supplier** | Each contract as a row: buyer, buying office and its contact, value, currency, signed and end dates, procedure, number of bidders, source reference | Canada, United States |
| **Every contract in a category** | The same rows for one category (for example *accounting-and-audit-services*) | Canada, United States |
| **Contracts ending before a date** | Contracts in a category that end before your date — re-tender leads | Canada, United States |
| **Awards won without a rival** | Buyer–supplier pairs with awards made without a competition or on a single bid, totals in USD, first and last award; also "locks" (a buyer's awards in one code division that all went to one supplier) and buyers ranked | 32 countries |
| **Find suppliers by name** | Supplier ID, country, line of business and register link | 60+ countries |

### Use cases

- **Sales and business development**: find contracts that end soon and the buying office to contact before the re-tender.
- **Competitive intelligence**: every public contract a competitor has won, with values and buyers.
- **Compliance, risk and journalism**: buyers that award without competition, single-bid awards and supplier lock-in.
- **AI agents and RAG**: clean JSON rows with source and licence on every record.

### Input

- `mode` — what to get (see table).
- `country` — two-letter code: `ca`, `us`, `fr`, `de`, `uk`, `cl`, `co`, …
- `query` / `supplierId` — supplier name or ID (from search).
- `categoryId` — category ID, shown as `line` in every contract row.
- `before` — only contracts ending before this date (YYYY-MM-DD).
- `buyer` — buyer filter.
- `uncontestedKind` — `pairs`, `locks` or `buyers`.
- `maxItems` — stop after this many results.

### Output example (contract row)

```json
{
  "id": "ca-f6340b397415fdd5",
  "country": "ca",
  "buyer": "Agriculture and Agri-Food Canada",
  "office_email": "aafc.escprocurement-cseapprovisionnement.aac@agr.gc.ca",
  "supplier": "DELOITTE LLP",
  "line": "accounting-and-audit-services",
  "description": "Accounting and audit services",
  "value": 339000,
  "currency": "CAD",
  "signed": "2026-06-23",
  "ends": "2027-03-31",
  "procedure": "competitive - open bidding",
  "bidders": 4,
  "record_ref": "C-2026-2027-Q1-00257",
  "licence": "Open Government Licence - Canada 2.0"
}
```

### Pricing

You pay per result (dataset item). Set `maxItems` or a spending limit on the run to control the cost.

### Licences

Source records keep their own open licences (Open Government Licence – Canada 2.0, TED CC BY 4.0, ChileCompra CC0, SECOP II CC BY-SA 4.0 and others); the licence is named on each row. Countries whose source is licensed for non-commercial use only are not served.

Questions and data licences: contact@assay-systems.com

# Actor input Schema

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

search: suppliers by name (60+ countries). supplier_contracts / category_contracts / ending: contract rows (Canada, United States). uncontested: buyer-supplier pairs and awards made without a rival (32 countries).

## `country` (type: `string`):

Two-letter country code, e.g. ca, us, fr, de, uk, cl, co. Contract rows: ca, us.

## `query` (type: `string`):

Name to search for (search mode), or to find the supplier for supplier_contracts when no Supplier ID is given.

## `supplierId` (type: `string`):

Supplier ID from search results (e.g. deloitte-llp). If empty, supplier_contracts uses the first search match for the name.

## `categoryId` (type: `string`):

Category (line) ID for category_contracts and ending, e.g. accounting-and-audit-services. Shown in every contract row as `line`.

## `before` (type: `string`):

For ending, supplier_contracts and category_contracts: only contracts that end before this date.

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

Buyer ID (contract rows) or buyer name (uncontested).

## `uncontestedKind` (type: `string`):

pairs: buyer and supplier pairs; locks: a buyer's awards in one code division that all went to one supplier; buyers: buyers ranked by awards without a rival.

## `maxItems` (type: `integer`):

Stop after this many results.

## Actor input object example

```json
{
  "mode": "uncontested",
  "country": "ca",
  "query": "Deloitte",
  "uncontestedKind": "pairs",
  "maxItems": 100
}
```

# Actor output Schema

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

No description

# 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 = {
    "query": "Deloitte"
};

// Run the Actor and wait for it to finish
const run = await client.actor("alamr/government-contracts-register").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 = { "query": "Deloitte" }

# Run the Actor and wait for it to finish
run = client.actor("alamr/government-contracts-register").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 '{
  "query": "Deloitte"
}' |
apify call alamr/government-contracts-register --silent --output-dataset

```

## MCP server setup

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

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/vKbf9k6HfLOSsK4Vd/builds/DRTB0O6VVejF3cPOq/openapi.json
