# Colombia SECOP II Energy & Fuel Radar (`steppedatatools/colombia-energy-procurement-radar`) Actor

Track Colombia SECOP II fuel & energy tenders and contracts nearing expiry. Find buyers, values, deadlines, source links and NEW/UPDATED signals. Monitorea licitaciones de energía y combustibles y futuras relicitaciones.

- **URL**: https://apify.com/steppedatatools/colombia-energy-procurement-radar.md
- **Developed by:** [Oralzhan Kaliyev](https://apify.com/steppedatatools) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.10 / actor start

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Colombia SECOP II Energy & Fuel Radar

Encuentra oportunidades de contratación pública de energía y combustibles en Colombia y detecta contratos próximos a vencer antes de que aparezca la siguiente licitación.

**Colombia SECOP II Energy & Fuel Radar** monitorea datos oficiales de SECOP II y entrega dos tipos de señales:

- `LIVE_TENDER` — procesos de contratación actualmente abiertos para presentar ofertas.
- `EARLY_EXPIRY_SIGNAL` — contratos activos próximos a vencer, útiles para anticipar posibles nuevas licitaciones o recontrataciones.

**Precio: $0.10 por ejecución.**\
No se cobra por número de resultados.

When no relevant procurement record is new or updated, the Actor returns one `RUN_STATUS` record confirming that SECOP II was checked successfully. This is a monitoring status, not a synthetic procurement opportunity.

### Why use this Radar?

Instead of only searching for tenders that are already published, the Radar answers two different commercial questions:

1. **What can I bid for now?** — `LIVE_TENDER`
2. **What opportunity may appear next?** — `EARLY_EXPIRY_SIGNAL`

This helps suppliers monitor current opportunities while also preparing earlier for potential re-tenders.

### Data sources

Official Colombia open-data datasets on `datos.gov.co` / SECOP II:

- `p6dx-8zbt` — LIVE procurement processes.
- `jbjy-vk9h` — contracts used for EARLY expiry signals.

### Energy scope

The Radar focuses on energy and fuels:

- `V1.1510%` — fuels and related products.
- `V1.1511%` — gaseous fuels and related products.
- `V1.831016%` — oil and gas utilities.
- `V1.831018%` — electric utilities.
- `V1.831019%` — energy conservation.

Water and sewer utilities (`V1.831015%`) are excluded.

### Change detection

The Actor keeps persistent state and emits procurement records only when they are `NEW` or `UPDATED`.

Unchanged opportunities are suppressed to reduce duplicate output.

State is committed only after Dataset output succeeds. This provides at-least-once delivery semantics: a failed Dataset write will not silently mark a procurement signal as already delivered.

If nothing changed, the Actor writes one:

`RUN_STATUS = SUCCESS_NO_CHANGES`

This confirms that the monitoring check completed successfully.

### Input

- `fetchLive` — enable `LIVE_TENDER` monitoring.
- `fetchEarly` — enable `EARLY_EXPIRY_SIGNAL` monitoring.
- `windowMinDays` — minimum number of days to contract end for EARLY signals.
- `windowMaxDays` — maximum number of days to contract end for EARLY signals.

The default input monitors both streams and uses a **30–90 day** EARLY monitoring window.

### Important output fields

- `recordType` — `PROCUREMENT_SIGNAL` or `RUN_STATUS`.
- `signalType` — `LIVE_TENDER`, `EARLY_EXPIRY_SIGNAL`, or `RUN_STATUS`.
- `changeType` — `NEW`, `UPDATED`, or `UNCHANGED` for status records.
- `buyerName` / `buyerId` — contracting entity.
- `category` — SECOP source classification code.
- `value` — source-reported procurement or contract value in COP when available.
- `valueStatus` — `AVAILABLE`, `ZERO_OR_NOT_DISCLOSED`, or `MISSING`.
- `deadline` / `daysToDeadline` — timing for LIVE opportunities.
- `contractEnd` / `daysToEnd` — timing for EARLY signals.
- `nextAction` — recommended monitoring action.
- `sourceUrl` — direct SECOP source link.
- `retrievedAt` — time when the source was checked.

### Typical use cases

- Fuel and lubricant suppliers
- Electricity and energy service providers
- Oil and gas suppliers
- Public procurement monitoring teams
- Tender intelligence and business development teams
- Companies preparing for upcoming re-tenders
- Sales teams tracking Colombian public-sector buyers

### Pricing

**$0.10 per Actor run.**

Platform usage is included in the Actor price.

The number of Dataset records does not increase the event price. A successful run costs the same whether it finds multiple new signals or only returns a `RUN_STATUS` confirming that no opportunities changed.

### Limitations

- The Radar currently operates at process level and does not synthesize artificial lots.
- A source-reported value of `0` is preserved as `value: 0` and labeled `valueStatus: ZERO_OR_NOT_DISCLOSED`. Verify the SECOP source before treating it as a true zero-value procurement.
- Some contract records do not expose a reliable source update timestamp, so `sourceUpdatedAt` may be `null`.
- Coverage reflects SECOP II open data and should not be interpreted as complete coverage of every Colombian energy-sector procurement process, including procurement conducted through separate corporate portals.
- Source availability, schema changes, or rate limits on `datos.gov.co` can affect individual runs.

### Source and transparency

The Radar uses official Colombian public procurement/open-data sources and retains source identifiers and SECOP links whenever available so users can verify opportunities against the original record.

***

**Colombia SECOP II Energy & Fuel Radar** is designed for procurement intelligence: detect what is open now and what may be worth monitoring before the next tender is published.

# Actor input Schema

## `fetchLive` (type: `boolean`):

Incluye procesos SECOP II actualmente abiertos para presentar ofertas. / Includes SECOP II procurement processes currently open for bids.

## `fetchEarly` (type: `boolean`):

Incluye contratos activos próximos a finalizar para anticipar posibles nuevas licitaciones o recontrataciones. / Includes active contracts nearing expiry for early re-tender monitoring.

## `windowMinDays` (type: `integer`):

Límite inferior de la ventana EARLY. Valor recomendado: 30 días. / Lower limit of the EARLY monitoring window. Recommended: 30 days.

## `windowMaxDays` (type: `integer`):

Límite superior de la ventana EARLY. Debe ser mayor que el mínimo. Valor recomendado: 90 días. / Upper limit of the EARLY monitoring window. Must be greater than the minimum. Recommended: 90 days.

## Actor input object example

```json
{
  "fetchLive": true,
  "fetchEarly": true,
  "windowMinDays": 30,
  "windowMaxDays": 90
}
```

# Actor output Schema

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

Default Dataset with LIVE\_TENDER, EARLY\_EXPIRY\_SIGNAL, or RUN\_STATUS records.

# 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 = {
    "fetchLive": true,
    "fetchEarly": true,
    "windowMinDays": 30,
    "windowMaxDays": 90
};

// Run the Actor and wait for it to finish
const run = await client.actor("steppedatatools/colombia-energy-procurement-radar").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 = {
    "fetchLive": True,
    "fetchEarly": True,
    "windowMinDays": 30,
    "windowMaxDays": 90,
}

# Run the Actor and wait for it to finish
run = client.actor("steppedatatools/colombia-energy-procurement-radar").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 '{
  "fetchLive": true,
  "fetchEarly": true,
  "windowMinDays": 30,
  "windowMaxDays": 90
}' |
apify call steppedatatools/colombia-energy-procurement-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,steppedatatools/colombia-energy-procurement-radar"
        }
    }
}

```

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/79b3ifETiKlvs4snc/builds/ZOsdpNo7SW21Sj7UX/openapi.json
