Colombia SECOP II Public Contracts Scraper avatar

Colombia SECOP II Public Contracts Scraper

Pricing

Pay per event

Go to Apify Store
Colombia SECOP II Public Contracts Scraper

Colombia SECOP II Public Contracts Scraper

Search and export official Colombian SECOP II contracts by buyer, supplier, location, status, category, value, and dates.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Search and export official Colombian SECOP II electronic contracts as structured data.

Filter awarded contracts by public buyer, supplier, geography, status, UNSPSC category, procurement method, value, signature date, and end date. Each result combines normalized fields for analysis with the original official source record.

What does this Actor do?

The Actor queries Colombia's official open-data copy of SECOP II - Contratos Electrónicos.

It returns contract and award intelligence rather than only tender notices:

  • contracting entity and NIT;
  • awarded supplier and document;
  • contract and purchase-process identifiers;
  • contract status and procurement method;
  • UNSPSC category;
  • process description and contract object;
  • contract, invoiced, paid, and pending values;
  • signature and scheduled end dates;
  • public SECOP process URL;
  • the complete official source record.

Results are ordered by newest signature date first.

Who is it for?

B2G sales teams

Find public buyers that spend in your category, identify incumbent suppliers, and prioritize agencies with upcoming contract end dates.

Colombian suppliers

Monitor awards to competitors, build account lists, and find renewal windows without manually searching contract pages.

Procurement intelligence teams

Export repeatable buyer, supplier, category, and value slices into a warehouse or dashboard.

Journalists and analysts

Build transparent public-spending datasets from the official source with stable contract identifiers and source links.

Compliance teams

Review contract status, suppliers, payment values, and underlying official fields for risk-screening workflows.

Why use this Actor?

  • Official source: reads the Colombian government's public Socrata dataset.
  • No login required: the default workflow needs no SECOP account or API token.
  • Contract-focused output: buyer, awarded supplier, value, payment, and timing fields are normalized.
  • Composable filters: combine geography, entity, supplier, status, category, method, value, and dates.
  • Low compute: direct API requests run with 256 MB memory and no browser.
  • Source transparency: every available record keeps its official source fields and SECOP link.
  • Automation-ready: schedule runs, call through the API, or connect datasets to downstream tools.

What data can you extract?

FieldMeaning
contractIdStable SECOP contract identifier
contractReferenceBuyer-facing contract reference
purchaseProcessIdSECOP purchase-process identifier
contractStatusCurrent status reported by SECOP
entityNameContracting public entity
entityNitContracting entity tax identifier
departmentColombian department
cityEntity city or municipality
sectorGovernment sector
categoryCodeMain UNSPSC category code
processDescriptionProcurement-process description
contractObjectContract purpose/object
contractTypeSECOP contract type
procurementMethodProcurement method
supplierNameAwarded supplier
supplierDocumentTypeSupplier document type
supplierDocumentSupplier document or tax identifier
contractValueCopContract value in COP
invoicedValueCopInvoiced value in COP
paidValueCopPaid value in COP
pendingPaymentValueCopValue pending payment in COP
signatureDateContract signature date
endDateScheduled contract end date
durationHuman-readable duration
sourceUrlPublic SECOP process page
sourceDatasetOfficial dataset name
scrapedAtCollection timestamp
sourceRecordComplete original API object

Source values may be null when the public entity did not provide them.

How to get started

  1. Open the Actor input page.
  2. Add one or more filters, or leave them blank for the newest contracts.
  3. Set maxItems to the maximum records you need.
  4. Click Start.
  5. Review the Contracts dataset view.
  6. Export JSON, CSV, Excel, XML, or RSS from the dataset.
  7. Save the task or schedule it for recurring monitoring.

A useful first run is:

{
"department": "Antioquia",
"signedFrom": "2026-01-01",
"maxItems": 100
}

Input parameters

InputTypeDescription
querystringFull-text keywords for descriptions and contract objects
entitystringPartial buyer/entity name
entityNitstringExact buyer NIT
supplierstringPartial awarded-supplier name
supplierDocumentstringExact supplier document
departmentstringDepartment, such as Antioquia
citystringCity or municipality
statusstringPartial contract status
categoryCodestringExact main UNSPSC code
procurementMethodstringPartial procurement-method name
minContractValuenumberMinimum contract value in COP
maxContractValuenumberMaximum contract value in COP
signedFromdateEarliest signature date, inclusive
signedTodateLatest signature date, inclusive
endingFromdateEarliest end date, inclusive
endingTodateLatest end date, inclusive
maxItemsintegerMaximum records, from 1 to 50,000
appTokenstringOptional datos.gov.co Socrata app token

Dates use YYYY-MM-DD.

Text filters are case-insensitive. Exact identifier filters avoid accidental partial matches.

Useful input recipes

Find contracts awarded to a supplier

{
"supplier": "Microsoft",
"signedFrom": "2025-01-01",
"maxItems": 500
}

Find high-value contracts ending soon

{
"minContractValue": 100000000,
"endingFrom": "2026-09-01",
"endingTo": "2026-12-31",
"maxItems": 1000
}

Build a category dataset

{
"categoryCode": "80111600",
"department": "Bogotá D.C.",
"maxItems": 2000
}

Output example

A current result has this shape:

{
"contractId": "CO1.PCCNTR.8266601",
"contractReference": "368-2025",
"purchaseProcessId": "CO1.BDOS.8409837",
"contractStatus": "Modificado",
"entityName": "EMPRESA DE VIVIENDA DE ANTIOQUIA-VIVA",
"entityNit": "811032187",
"department": "Antioquia",
"city": "Medellín",
"categoryCode": "V1.72111000",
"supplierName": "IDOM CONSULTING, ENGINEERING, ARCHITECTURE S.A.U., Sucursal Colombia.",
"contractValueCop": 12207395392,
"signatureDate": "2026-07-24T00:00:00.000",
"endDate": "2026-12-31T00:00:00.000",
"sourceUrl": "https://community.secop.gov.co/Public/Tendering/OpportunityDetail/Index?noticeUID=CO1.NTC.8434013",
"sourceDataset": "SECOP II - Contratos Electrónicos",
"scrapedAt": "2026-07-27T03:30:00.000Z",
"sourceRecord": {
"id_contrato": "CO1.PCCNTR.8266601",
"estado_contrato": "En ejecución"
}
}

The shortened sourceRecord above is illustrative. Dataset items preserve every field returned by the official API.

How much does it cost to export Colombia SECOP II contracts?

The Actor charges a $0.005 run-start fee plus $0.000041071 per saved contract on the FREE tier, with lower per-record prices on higher Apify tiers:

Saved contractsFREE-tier event cost, including start
100$0.0091
1,000$0.0461
10,000$0.4157

Apify platform usage may also apply according to your account plan. Empty results and rejected or duplicate records are not charged as contract events; the one-time start event still applies.

Scheduling and monitoring workflows

Create a saved task for each market slice you monitor:

  1. one task per department or buyer portfolio;
  2. one task per supplier or competitor name;
  3. one task for contracts ending in the next quarter;
  4. one task per important UNSPSC category.

Run tasks weekly or monthly. Use a webhook to notify your pipeline when the run succeeds, then deduplicate on contractId in your destination.

Because SECOP records can be updated after first publication, retain the latest row per contractId when building historical snapshots.

Export and integrations

The default dataset works with:

  • JSON and CSV downloads;
  • Google Sheets and Microsoft Excel;
  • Make and Zapier;
  • webhooks;
  • Python, JavaScript, and REST clients;
  • BigQuery, Snowflake, PostgreSQL, or another warehouse;
  • BI tools such as Power BI and Tableau.

Use contractId as the preferred stable key. Use sourceUrl when an analyst needs to inspect the public process page.

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~colombia-secop-ii-public-contracts-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"department": "Antioquia",
"signedFrom": "2026-01-01",
"maxItems": 100
}'

To wait for completion and return dataset items:

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~colombia-secop-ii-public-contracts-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"supplier":"Microsoft","maxItems":100}'

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor(
'automation-lab/colombia-secop-ii-public-contracts-scraper'
).call({
minContractValue: 100000000,
endingFrom: '2026-09-01',
endingTo: '2026-12-31',
maxItems: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor(
"automation-lab/colombia-secop-ii-public-contracts-scraper"
).call(run_input={
"query": "servicios de salud",
"signedFrom": "2026-01-01",
"maxItems": 500,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with Apify MCP

Add the Actor to Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/colombia-secop-ii-public-contracts-scraper"

Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this equivalent remote MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/colombia-secop-ii-public-contracts-scraper"
}
}
}

Example prompts:

  • “Export 200 SECOP II contracts signed in Antioquia since January 2026.”
  • “Find Colombian public contracts above COP 100 million ending next quarter.”
  • “Build a CSV of awards to this supplier and group them by buyer entity.”

Performance and limits

The Actor requests up to 1,000 records per upstream page and stops as soon as maxItems is reached.

Requests use deterministic ordering and deduplicate contract IDs within a run.

Transient network errors, HTTP 429 responses, and server errors receive bounded exponential retries.

The Actor does not enable a proxy or browser. Those would increase cost without unlocking a different official dataset.

The optional appToken belongs to the user and is sent only to datos.gov.co as X-App-Token.

The maximum input limit is 50,000 records per run. Split very broad historical exports into date windows if the official API times out.

Data freshness and limitations

  • Freshness follows the official SECOP II open-data dataset.
  • Public entities control the completeness and accuracy of source fields.
  • Some older or incomplete records omit supplier, payment, location, or date values.
  • The Actor covers electronic contract records in this official dataset; it does not claim to include every Colombian procurement system or every document attachment.
  • Full-text search behavior follows Socrata indexing.
  • Contract updates may change values or status after an earlier run.
  • A Socrata app token can improve rate limits but does not grant private data access.

Troubleshooting

My run returned no records

Remove filters one at a time. Check identifier spelling, use YYYY-MM-DD dates, and confirm that signedFrom is not later than signedTo.

The official API timed out

Use a narrower signature-date range, department, entity, or supplier filter. For frequent large exports, provide your own datos.gov.co Socrata app token.

I see null fields

Null means the field was absent or empty in the official record. Inspect sourceRecord and sourceUrl before making compliance or financial decisions.

Can I resume from an offset?

The public input intentionally exposes business filters rather than raw SoQL or offsets. Use date windows and stable contractId deduplication for repeat exports.

Does the Actor scrape PDF attachments?

No. It exports contract-level structured data and the public process URL. Attachment extraction is outside this Actor's scope.

Responsible use and legality

SECOP II contract data is public procurement information, but public availability does not remove every legal or ethical obligation.

Use the data for legitimate procurement, research, transparency, compliance, and business-intelligence purposes. Follow applicable Colombian law, datos.gov.co terms, Apify terms, and your organization's retention policies.

Supplier and representative identifiers may be personal data in some contexts. Minimize collection, secure exports, and avoid using records for harassment, discrimination, or unsupported allegations.

Always verify consequential decisions against the linked official record. This Actor is a data-access tool, not legal, procurement, sanctions, or financial advice.

These Actors cover different sources and should not be treated as substitutes for official Colombian SECOP II contract records.

FAQ

Is a SECOP account required?

No. The Actor uses the anonymous official open-data endpoint.

Is a Socrata app token required?

No. It is optional for users who need higher upstream request limits.

Are values converted to USD?

No. Monetary values remain in Colombian pesos so the output matches the official record.

Can I filter by buyer and supplier together?

Yes. All provided filters are combined, so the result must match both.

Can I monitor renewals?

Use endingFrom, endingTo, and optionally minContractValue. Schedule the task and deduplicate by contractId downstream.

Does an empty run cost contract events?

No. The Actor charges the contract event only for records saved to the default dataset.

Does the Actor publish or modify procurement data?

No. It only reads and normalizes the official public dataset.

What should I use as a database key?

Use contractId when present. Keep contractReference and purchaseProcessId for joining and analyst review.