Skip to the content.

Colombia SECOP II Tenders Scraper (Licitaciones)

▶ Run it on Apify: no install, no login to any data source. Apify’s free plan includes monthly credit, enough for small runs.

Find open government tenders and public contract opportunities from SECOP II, the national public procurement system of Colombia (licitaciones y procesos de contratación pública), via the official open data portal datos.gov.co. Filter by keywords, classification codes and contract value, and get a clean feed with title, buyer, estimated value, deadline and a link to the official notice.

Who uses it

How to use it

  1. Enter keywords for what you sell (or leave empty to get everything).
  2. Optionally filter by classification codes, value and how many days back to look.
  3. Click Start, or schedule it daily with Only new tenders turned on.

Example input

{
    "keywords": [
        "servicios",
        "software",
        "consultoría"
    ],
    "publishedWithinDays": 7,
    "onlyOpen": true,
    "onlyNewTenders": false
}

Input fields

Field What it does Default
Keywords / Exclude keywords Words to find (or skip) in the title or description all tenders
Classification codes Code prefixes, e.g. 72 (IT services) or 45 (construction) any
Minimum value / Maximum value Estimated contract value range no limit
Published within (days) How far back to look 7
Only open tenders Skip notices whose deadline has passed on
Only new tenders Return only tenders not seen in earlier runs (daily alerts) off
Max tenders Stop after this many results, to control cost no limit

Output

{
    "source": "co-secop-ii",
    "noticeId": "CO1.REQ.10364818",
    "title": "Arrendamiento de software para el monitoreo de geolocalización al parque automotor de la Universidad del Tolima.",
    "description": "Arrendamiento de software para el monitoreo de geolocalización ...",
    "buyer": "UNIVERSIDAD DEL TOLIMA",
    "country": "CO",
    "region": "Tolima",
    "status": "Publicado / Presentación de oferta",
    "noticeType": "Otro",
    "procurementMethod": "Contratación régimen especial",
    "category": "Otro",
    "classificationCodes": [
        "81112500"
    ],
    "valueAmount": 17567970,
    "valueCurrency": "COP",
    "publishedAt": "2026-11-05T00:00:00.000Z",
    "deadline": null,
    "url": "https://community.secop.gov.co/Public/Tendering/OpportunityDetail/Index?noticeUID=CO1.NTC.10221531",
    "scrapedAt": "2026-11-07T20:58:46.244Z"
}
Field Description
valueAmount / valueCurrency Estimated contract value when the buyer publishes one (usually COP)
deadline Deadline for submitting bids, when the portal provides it
classificationCodes CPV codes (UK, EU) or UNSPSC/GSIN codes (Canada, Colombia)
url Link to the official notice, where you find documents and how to bid

A SUMMARY record in the run’s key-value store shows how many notices were read and saved per portal.

Pricing

$3.00 per 1,000 tenders saved, plus a tiny fee per run start. Filters run before saving, so you never pay for tenders you filtered out.

FAQ

Is it legal to use this data? Yes. The Actor reads data the governments publish as open data under Colombia’s open data portal terms, which allow reuse of published datasets. It does not export the names, emails or phone numbers of individual officials.

How fresh is the data? Each run reads the portals live, so you get notices as soon as they are published.

Why do some tenders have no value or deadline? Buyers do not always publish them; the fields are then null.

Limitations

Use it from your code, AI agents and automations

Python

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("richiedc95/colombia-secop-scraper").call(run_input={
    "keywords": [
        "servicios",
        "software",
        "consultoría"
    ],
    "publishedWithinDays": 7,
    "onlyNewTenders": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

JavaScript

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('richiedc95/colombia-secop-scraper').call({
    "keywords": [
        "servicios",
        "software",
        "consultoría"
    ],
    "publishedWithinDays": 7,
    "onlyNewTenders": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Get a fresh feed automatically (bid alerts, dashboards, CRM)

  1. Click Save as a new task with your input (turn on the monitoring option if the Actor has one, so each run returns only new tenders).
  2. Add a schedule to the task (hourly, daily or weekly) under Schedules.
  3. Read the latest results from one stable URL, in the format your tool expects:
https://api.apify.com/v2/actor-tasks/<TASK_ID>/runs/last/dataset/items?token=<YOUR_APIFY_TOKEN>&status=SUCCEEDED&format=csv

Use format=json, csv, xlsx, xml or rss. Spreadsheets, CRMs and RSS readers can import that URL directly.

Run it

Public Tender and RFP Data APIs: UK, EU TED, Canada, Colombia · All data APIs