# LATAM Government Contracts & Suppliers: Brazil, Colombia (`latsouth/latam-gov-contracts`) Actor

Public contracts awarded to companies in Brazil (PNCP) and Colombia (SECOP II) in one English schema, with USD values, plus a supplier view: totals, top buyer and category, industry and size from the company registry. Monitor new awards. Company data only.

- **URL**: https://apify.com/latsouth/latam-gov-contracts.md
- **Developed by:** [LatSouth Data](https://apify.com/latsouth) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 result rows

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

## LATAM Government Contracts & Suppliers: Brazil and Colombia

**By [LatSouth](https://latsouth.com).** Every public contract awarded to a **company** in **Brazil** (PNCP, the national
public procurement portal) and **Colombia** (SECOP II), in one English schema with values in local currency **and
USD**, plus a **supplier view**: one row per company that wins public contracts, with how much it won, from whom, in
which category, and its industry, size and region from the official company registry.

Brazil: contracts published on PNCP **2025-01-01 to 2026-10-22**; Colombia: SECOP II contracts signed **2015-06-11 to 2026-10-20** (all history).

| | |
|---|---|
| Contracts | 3,982,827 (Brazil 3,181,269 · Colombia 801,558), US$486.9B awarded |
| Suppliers | 369,754 companies (Brazil 268,216 · Colombia 101,538) |
| Data as of | 2026-10-23 (both countries downloaded that day); every row carries `data_as_of` |
| Price | US$0.005 per row returned: **1,000 rows = US$5**; the 10-row example = US$0.05 |
| Typical run | 7-8 s on the platform (both prefilled-style examples, 10 rows) |

Company data only: suppliers who are natural persons (Brazilian CPF, Colombian cédula, sole traders/MEI) are not in the
data, sole-owner company names are masked (`***`), and no e-mail, phone or legal-representative field exists.

### Who it's for

- **Vendors selling to Latin American governments**: see who buys what you sell, at what price, from whom. Search
  awarded contracts by keyword ("software", "licencia", "ambulância"), category (UNSPSC in Colombia) and buyer.
- **B2B prospecting of companies that win public contracts**: the `suppliers` mode is a pre-qualified list of solvent,
  formally registered companies with a track record, ranked by money won, filterable by industry (ISIC), region and
  size, and joined to the company registry (legal name, verified website in Brazil).
- **Monitoring new awards**: schedule the Actor daily or weekly with `only_new_since: "7 days"` and get only the new
  contracts for your keywords, buyers or competitors (`supplier_tax_ids`).
- **Market sizing**: every run reports how many rows match per country (`OUTPUT.matching_by_country`), even if you
  pull a 10-row sample.

### Two modes

**`contracts`** (default): one row per awarded contract.

| Field group | Fields |
|---|---|
| Ids | `country`, `contract_id`, `process_id`, `contract_reference`, `url` (official page of the contract or process) |
| Buyer | `buyer_tax_id` (CNPJ / NIT), `buyer_name`, `buyer_unit_name` (BR), `buyer_level` (federal/state/municipal; CO national/territorial), `buyer_branch`, `buyer_sector` (CO), `buyer_region_name`, `buyer_region_code` (ISO 3166-2), `buyer_city`, `buyer_city_code` (BR IBGE) |
| Supplier | `supplier_tax_id`, `supplier_tax_id_type` (CNPJ / NIT), `supplier_name`, `supplier_name_masked`, `supplier_is_pyme` (CO SME flag), `supplier_is_consortium` (CO unión temporal / consorcio) |
| What | `contract_type`, `procurement_method` (CO), `category_system` + `category_code` + `category_label_en` (CO: UNSPSC 8-digit code, English segment label; BR: PNCP process category PNCP-01..11: purchases, ICT, works, services, engineering, health, ...), `description` (Portuguese / Spanish, as published) |
| Money | `value_local`, `value_initial_local` (BR), `currency` (BRL / COP), `value_usd`, `fx_month`, `fx_local_per_usd`, `value_outlier` |
| Dates | `signed_date`, `start_date`, `end_date`, `published_date`, `updated_at`, `status` (CO, in English) |
| Provenance | `data_as_of`, `source`, `source_license` |

**`suppliers`**: one row per supplier tax ID.

| Field group | Fields |
|---|---|
| Totals | `contracts_count`, `contracts_last_12m`, `total_value_local`, `total_value_usd`, `value_usd_last_12m`, `max_contract_value_usd`, `first_award_date`, `last_award_date`, `distinct_buyers` |
| Top | `top_buyer_tax_id`, `top_buyer_name` (by value), `top_buyer_region_name`, `top_category_code` / `top_category_label_en` (by count) |
| Flags | `is_pyme` (CO, latest contract), `is_consortium` (CO) |
| Registry join | `in_company_registry`, `registry_match` (`exact`; BR also `cnpj_root_head_office` when the contract was signed by a branch), `registry_legal_name`, `registry_trade_name`, `registry_is_active`, `registry_sector`, `registry_isic_section` / `registry_isic_division` (+ English label), `registry_activity_label_en`, `registry_size_class`, `registry_region_name`, `registry_region_iso`, `registry_city`, `registry_website` (BR: HTTP-verified) |
| Region | `region_name` + `region_basis` (`registry` = the company's registered address; `top_buyer` = region of its main buyer when the company is not in the registry) |

Registry match: Brazil **98.86%** of suppliers (99.74% of the value) are active companies in the Receita Federal CNPJ registry, 41,823 with an HTTP-verified website; Colombia **59.68%** (53.23% of the value) are in the RUES registry (the rest are mostly consortia / uniones temporales, which get their own NIT, public hospitals and other non-registered entities).

### Input examples

New software contracts in both countries (the prefilled example):

```json
{"countries": ["CO", "BR"], "keywords": ["software"], "only_new_since": "60 days", "max_results": 10}
```

Weekly monitor of IT contracts above US$50k from Colombian national entities' categories 43 / 81:

```json
{"countries": ["CO"], "category_prefixes": ["43", "8111"], "min_value_usd": 50000, "only_new_since": "7 days"}
```

Everything one company won (Brazil CNPJ or Colombia NIT, punctuation and check digit optional):

```json
{"supplier_tax_ids": ["33.000.167/0001-01", "860.002.964-4"], "max_results": 1000}
```

Software companies that won public contracts in the last year, largest first:

```json
{"mode": "suppliers", "isic_divisions": ["62"], "last_award_after": "12 months", "only_in_registry": true}
```

Relative dates (`"7 days"`, `"2 weeks"`, `"3 months"`) work in every date field. `sort_by`: contracts
`published_desc` (default), `signed_desc`, `value_desc`; suppliers `total_value_desc` (default), `last_award_desc`,
`contracts_desc`, `value_last_12m_desc`.

### How the data is built

- **Brazil**: PNCP public API `/api/consulta/v1/contratos`, by publication date. Only suppliers with `tipoPessoa = PJ`
  are ever stored; then sole traders / MEI (legal nature 213-5) and natural-person natures are removed using the
  Receita Federal CNPJ open data, and EIRELI / one-person law firms are masked. Contracts are de-duplicated by PNCP
  control number (latest rectification wins).
- **Colombia**: SECOP II "Contratos Electrónicos" (datos.gov.co `jbjy-vk9h`), only suppliers identified by a NIT in the
  legal-entity range; natural persons (cédula, or a personal NIT) are never downloaded or stored; legal-representative,
  bank-account and officer columns are never requested. Sole-owner company names are masked as in our registry.
- **USD**: `value_usd = value_local / fx_local_per_usd`, the **monthly average** official rate of the signing month
  (BRL: Banco Central PTAX; COP: TRM, Superintendencia Financiera). A single contract above **US$1 billion** is treated
  as a source data-entry error: `value_local` keeps the published figure, `value_usd` is empty and `value_outlier` is
  true (Colombia: 17 such rows, e.g. a hospital service registered at US$117 trillion).
- Free text (`description`) is published as-is, except that Brazilian CPF and Colombian cédula numbers are replaced by
  `[id removed]`.

### Attribution and licences

- **Colombia**: *SECOP II - Contratos Electrónicos*, Agencia Nacional de Contratación Pública - **Colombia Compra
  Eficiente**, published on datos.gov.co under **CC BY-SA 4.0**. Rows were filtered and transformed by LatSouth
  (English schema, company suppliers only, USD values). If you redistribute Colombian rows, keep the attribution and
  the same licence.
- **Brazil**: **Fonte: PNCP** - Portal Nacional de Contratações Públicas (pncp.gov.br). Contracts are public acts under
  Lei 14.133/2021 and the Access to Information Law (Lei 12.527/2011).
- Company registry fields: Receita Federal CNPJ open data (Brazil); Confecámaras RUES + Supersociedades, CC BY-SA 4.0
  (Colombia). Every row carries `source` and `source_license`; `OUTPUT.attribution` repeats the credits.

### Pricing and limits

Pay per event: **US$0.005 per row** (`record`). The run stops at `max_results` (default 1,000 via API) or at your
spending limit, whichever comes first, and says so in `OUTPUT.stopped_by_budget`. No platform-usage surcharge for the
query itself beyond Apify's standard compute.

### More from LatSouth

- [LATAM Company Finder](https://apify.com/latsouth/latam-company-finder): 19.7M companies, 7 countries, ISIC.
- [Brazil Company Finder](https://apify.com/latsouth/brazil-company-finder) · [Mexico Company Finder](https://apify.com/latsouth/mexico-company-finder)
- Full datasets, custom TAM lists and refresh subscriptions: [latsouth.com](https://latsouth.com) ·
  [products](https://latsouth.com/products/) · [methodology](https://latsouth.com/methodology/) ·
  [compliance](https://latsouth.com/compliance/)

# Actor input Schema

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

`contracts` returns awarded public contracts. `suppliers` returns one row per supplier company with contract count, total value, top buyer, top category and its industry/size from our company registry.

## `countries` (type: `array`):

Leave empty for both. Selecting one country makes runs faster.

## `keywords` (type: `array`):

Contracts mode. Case- and accent-insensitive substrings searched in the contract object/description (Portuguese or Spanish), any of them matches: software, licencia, ambulancia, merenda escolar, obra, consultoria.

## `category_prefixes` (type: `array`):

Colombia: UNSPSC code prefixes (43 = IT and telecom, 4323 = software, 81 = engineering and IT services, 72 = construction, 85 = health services). Brazil: PNCP process categories PNCP-01 .. PNCP-11 (PNCP-02 purchases, PNCP-03 ICT, PNCP-06 outsourced labour, PNCP-07 works, PNCP-08 services, PNCP-09 engineering services, PNCP-10 health services). In suppliers mode it matches the supplier's top category.

## `buyer_keywords` (type: `array`):

Contracts mode. Substrings of the buying entity or unit name, any matches: ministerio, alcaldia de medellin, prefeitura de sao paulo, hospital, universidade.

## `buyer_tax_ids` (type: `array`):

Contracts mode. Buyer NIT (Colombia, without check digit) or CNPJ (Brazil, 14 characters; punctuation is ignored).

## `supplier_tax_ids` (type: `array`):

Supplier NIT (Colombia; with or without the check digit) or CNPJ (Brazil). Use it to pull every contract a company won, or its supplier profile.

## `min_value_usd` (type: `integer`):

Contracts mode. On value_usd = local value converted at the fixed monthly average FX of the signing month (BRL: BCB PTAX; COP: TRM).

## `max_value_usd` (type: `integer`):

Contracts mode. On value_usd.

## `signed_after` (type: `string`):

Contracts mode. YYYY-MM-DD or a relative window such as '30 days'.

## `signed_before` (type: `string`):

Contracts mode. YYYY-MM-DD or a relative window.

## `only_new_since` (type: `string`):

Contracts mode. Keep contracts published on or after this date (Brazil: PNCP publication date; Colombia: signing date, which is when SECOP II publishes it). Schedule the Actor daily or weekly with '7 days' to get only new awards.

## `buyer_regions` (type: `array`):

Contracts mode. Buyer state / department name (accents optional) or ISO 3166-2 code: Sao Paulo, BR-SP, Antioquia, CO-ANT, Bogota, CO-DC.

## `isic_sections` (type: `array`):

Suppliers mode. ISIC Rev.4 section of the supplier in our company registry (Brazil: Receita Federal CNPJ; Colombia: RUES). Combined with divisions using OR. Suppliers not found in the registry have no ISIC and are left out by this filter.

## `isic_divisions` (type: `array`):

Suppliers mode. ISIC Rev.4 division of the supplier in our company registry, e.g. 62 = software and IT services, 71 = engineering, 86 = health.

## `min_total_value_usd` (type: `integer`):

Suppliers mode. Sum of value_usd over all the supplier's contracts in the dataset.

## `last_award_after` (type: `string`):

Suppliers mode. Keep suppliers whose most recent contract was signed on or after this date (YYYY-MM-DD or '12 months').

## `regions` (type: `array`):

Suppliers mode. State / department of the supplier's registered address in our registry (Sao Paulo, BR-SP, Antioquia, CO-ANT); for suppliers not in the registry, the region of their top buyer (see region_basis).

## `only_in_registry` (type: `boolean`):

Suppliers mode. Keep suppliers matched to the Receita Federal CNPJ (Brazil, active companies) or RUES (Colombia) registry, so industry, size and address are filled.

## `exclude_public_sector` (type: `boolean`):

Suppliers mode. Leave out state-owned companies and public bodies acting as suppliers (per our registry).

## `only_pyme` (type: `boolean`):

Keep suppliers SECOP II flags as Pyme (small or medium enterprise). Colombia only; Brazilian rows are dropped when this is on.

## `sort_by` (type: `string`):

A sort of the other mode falls back to the mode's default (contracts: newest published; suppliers: largest total).

## `max_results` (type: `integer`):

You pay per row returned (US$0.005 each: 1,000 rows = US$5). The run also stops at your spending limit. Default 1,000 when called via API without this field.

## Actor input object example

```json
{
  "mode": "contracts",
  "countries": [
    "CO",
    "BR"
  ],
  "keywords": [
    "software"
  ],
  "only_new_since": "60 days",
  "only_in_registry": false,
  "exclude_public_sector": true,
  "only_pyme": false,
  "sort_by": "published_desc",
  "max_results": 10
}
```

# Actor output Schema

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

Matching contracts or suppliers, one item per row. Download as JSON, CSV, Excel or XML via the dataset API.

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

Mode, matching counts per country, rows pushed, data_as_of per country, applied filters, attribution and whether the run stopped at the buyer's budget cap.

# 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 = {
    "mode": "contracts",
    "countries": [
        "CO",
        "BR"
    ],
    "keywords": [
        "software"
    ],
    "only_new_since": "60 days",
    "max_results": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("latsouth/latam-gov-contracts").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 = {
    "mode": "contracts",
    "countries": [
        "CO",
        "BR",
    ],
    "keywords": ["software"],
    "only_new_since": "60 days",
    "max_results": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("latsouth/latam-gov-contracts").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 '{
  "mode": "contracts",
  "countries": [
    "CO",
    "BR"
  ],
  "keywords": [
    "software"
  ],
  "only_new_since": "60 days",
  "max_results": 10
}' |
apify call latsouth/latam-gov-contracts --silent --output-dataset

```

## MCP server setup

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

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/qwoo97zQe5YI0EZQT/builds/esL6FTbhHydgwix91/openapi.json
