# Québec Contractor Check: RBQ, RENA, penalties, public contracts (`tolca/quebec-contractor-check`) Actor

Check Québec construction contractors in bulk from 4 official open-data sources: active RBQ licence, RENA public-contract ban, environmental penalties, and public contracts won on SEAO (count, total, buyers). One verdict per contractor: ok, review, blocking or not_found.

- **URL**: https://apify.com/tolca/quebec-contractor-check.md
- **Developed by:** [Yasser Boughazli](https://apify.com/tolca) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 contractor checks

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

## Québec Contractor Check: RBQ licence, RENA, penalties, public contracts

Check a list of Québec construction and renovation contractors before you hire them or put them on a public contract. For each contractor, this Actor cross-checks **four official public data sources** and returns one clear verdict: **ok**, **review**, **blocking** or **not_found**, with the reasons and the source dates.

Doing this by hand means four government websites and 25 to 45 minutes per contractor (the SEAO history alone requires downloading monthly files of several hundred MB). Here it takes one call and $0.10.

### What it checks

| Source | What you learn |
|---|---|
| Régie du bâtiment du Québec (RBQ) | Licence active or not, type, work subcategories, restrictions, bond |
| RENA (Autorité des marchés publics) | Businesses barred from public contracts and public subcontracts |
| Environmental administrative penalties (MELCCFP) | Penalties issued under environmental laws |
| SEAO, public contracts awarded (last 12 months) | How many public contracts the business has won, total amount, main public buyers, most recent awards |

Official open data (Données Québec, CC-BY 4.0), refreshed daily (SEAO: weekly). Businesses only.

### Why the SEAO history matters

A contractor that has been awarded contracts by a city, a school board or a hospital has already passed a public procurement process. The number of contracts, the amounts and the buyers tell you in seconds whether you are dealing with an established business or an unknown. This history is not available as a search on any government site: it has to be rebuilt from the monthly SEAO open-data files, which this Actor does for you.

### How to use it

1. Paste your contractors in **Contractors**, one per line: business name, NEQ (10 digits) or RBQ licence number.
2. Choose the language of the reasons (French or English).
3. Click **Start**. One row per contractor in the dataset, with the SEAO history in `public_contracts`. Export as Excel, CSV or JSON.

### Who it is for

- General contractors vetting subcontractors before a public tender
- Property managers, insurers and notaries
- Renovation platforms and quote-comparison sites
- Homeowners checking a contractor before signing

### Verdicts

- **ok**: active RBQ licence, not in RENA, no environmental penalty found under this name.
- **review**: something needs a human look (licence restriction, inactive licence, homonyms).
- **blocking**: listed in RENA (barred from public contracts) or no valid licence where one is required.
- **not_found**: no match. Try the NEQ or the licence number.

The SEAO history never changes the verdict: it is context, shown in the reasons and in `public_contracts` (contracts, total_cad, first_award, last_award, buyers, recent).

### Pricing

**$0.10 per contractor checked** (pay per event). A check that fails for a technical reason is not charged.

### Also available

- Companies outside Québec (sanctions, UK and Canadian registries): [Business Verification (KYB)](https://apify.com/tolca/business-verification)
- Single check with a card: https://tolca.tonbot.ca/verifier
- AI agents: x402 pay-per-call and a free MCP server, see https://tolca.tonbot.ca

### Disclaimer

Public data reproduced with attribution. Name matching is subject to homonyms: confirm with the NEQ or licence number. Not a substitute for verification with the RBQ or the AMP. Not legal advice.

# Actor input Schema

## `contractors` (type: `array`):

One contractor per line: business name, NEQ (10 digits) or RBQ licence number.

## `language` (type: `string`):

fr or en

## Actor input object example

```json
{
  "contractors": [
    "Hydro-Québec",
    "Pomerleau inc."
  ],
  "language": "fr"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `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 = {
    "contractors": [
        "Hydro-Québec",
        "Pomerleau inc."
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tolca/quebec-contractor-check").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 = { "contractors": [
        "Hydro-Québec",
        "Pomerleau inc.",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tolca/quebec-contractor-check").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 '{
  "contractors": [
    "Hydro-Québec",
    "Pomerleau inc."
  ]
}' |
apify call tolca/quebec-contractor-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tolca/quebec-contractor-check"
        }
    }
}
```

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/hAcPCbym8qjo1LkQp/builds/ZIgOMjuENgkpgG1Kf/openapi.json
