Business registry API for Latin America. Embed 27M+ company records from Peru and Colombia into your app. Lookup by tax ID, search by name, check sanctions and debtors — via API, CLI, or SDK. Free, open source.
npm install -g latinfo
latinfo pe sunat padron --search "banco de credito"
latinfo co rues registry --search "ecopetrol"
latinfo pe oece tenders "construccion hospital" --category works
Latinfo gives you instant access to public business registries across Latin America. Instead of scraping government websites, parsing messy CSVs, or running your own database, you query a single API that returns structured data in milliseconds.
Use cases: KYB/KYC verification, invoice validation, supplier due diligence, compliance screening (sanctions, fines, debtors), procurement monitoring, and any app that needs to look up a company by tax ID or name.
How to integrate: Use the API directly (curl), the CLI (latinfo), or the SDK (npm install latinfo). For mobile/embedded apps, the SDK ships a small index file that lets your app fetch only the exact bytes it needs from the CDN — no backend required, works on 3G.
# Install + login
npm install -g latinfo
latinfo login
# Peru
latinfo pe sunat padron 20100047218
latinfo pe sunat padron --search "banco de credito"
latinfo pe sunat padron --dni 09346247
latinfo pe oece tenders "servicio alimentacion" --category works
# Colombia
latinfo co rues registry 0860002964
latinfo co rues registry --search "ecopetrol"
# Or use the API directly
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.latinfo.dev/pe/sunat/padron/ruc/20100047218
Base URL: https://api.latinfo.dev
| Endpoint | Description |
|---|---|
| Peru — SUNAT | |
GET /pe/sunat/padron/ruc/:ruc | Lookup by RUC (11 digits) |
GET /pe/sunat/padron/dni/:dni | Lookup by DNI (8 digits) |
GET /pe/sunat/padron/search?q=... | Search by company name |
GET /pe/sunat/coactiva/ruc/:ruc | Tax enforcement debtors |
| Peru — OSCE | |
GET /pe/osce/sanctioned/ruc/:ruc | Sanctioned suppliers |
GET /pe/osce/fines/ruc/:ruc | Provider fines |
| Peru — Other | |
GET /pe/servir/sanctions/dni/:dni | Public sector sanctions |
GET /pe/redam/registry/dni/:dni | Food debt debtors |
GET /pe/oece/tenders?q=... | Government procurement (890K+ tenders) |
| Colombia — RUES | |
GET /co/rues/registry/nit/:nit | Business registry lookup |
GET /co/rues/registry/search?q=... | Search by company name |
All endpoints support search?q=... for name search. Lookup endpoints return 404 if not found, 400 for invalid format.
Returns full OCDS 1.1 compiledRelease records. Key fields:
| Field | Description | Example |
|---|---|---|
ocid | Open Contracting ID | ocds-dgv273-seacev3-2026-273-3 |
url | Link to official OECE portal | contratacionesabiertas.oece.gob.pe/proceso/... |
buyer.name | Buyer organization | MUNICIPALIDAD DISTRITAL DE MORO |
tender.title | Short title | CP-ABR-1-2026-MDM/CS-1 |
tender.description | Full description | SUPERVISION DE OBRA: CONSTRUCCION DE... |
tender.value.amount | Amount in PEN | 64815.55 |
tender.mainProcurementCategory | goods, services, works | services |
tender.procurementMethodDetails | Procurement method | Concurso Público Abreviado |
tender.datePublished | Publication date | 2026-03-10T23:26:00-05:00 |
tender.items[].statusDetails | Status | CONVOCADO |
tender.documents[] | Attached files (bases, etc.) | |
awards[] | Award decisions, suppliers | |
contracts[] | Contract details |
| Field | Description | Example |
|---|---|---|
ruc | RUC number (11 digits) | 20100047218 |
razon_social | Business name | BANCO DE CREDITO DEL PERU |
estado | Tax status | ACTIVO |
condicion | Condition | HABIDO |
ubigeo | Location code | 150114 |
tipo_via | Street type | JR. |
nombre_via | Street name | CENTENARIO |
numero | Street number | 156 |
// npm install latinfo
import { Latinfo } from 'latinfo';
const client = new Latinfo('YOUR_API_KEY');
// Peru
const bcp = await client.pe.ruc('20100047218');
const results = await client.pe.search('banco de credito');
// Colombia
const banco = await client.co.nit('0860002964');
const empresas = await client.co.search('ecopetrol');
// Licitaciones
const obras = await client.pe.licitaciones({
q: 'construccion', category: 'works', limit: 10
});
You don't download 364MB from SUNAT. You don't parse Latin1 with escaped pipe delimiters. You don't write a check digit algorithm (mod 11, weights [5,4,3,2,7,6,5,4,3,2], special cases for remainders 10 and 11). You don't build a search index that handles S.A.C. and E.I.R.L. — SQLite FTS5 splits E.I.R.L. into four single-letter tokens and discards them. You don't set up a daily import pipeline with change detection and atomic replacement. You don't manage servers.
We do all of that. Daily. For free.
There is no database. Records are compiled into binary files stored in Cloudflare R2 and served via Workers at 300+ edge locations worldwide.
Lookup (RUC/NIT/DNI): A prefix index maps every ID to an exact byte range in a binary shard. One R2 range request returns the record. O(log n) binary search on a 300 KB index — the rest of the data (1 GB+) is never loaded. Sub-100ms from anywhere.
Search: An inverted index maps every term to a posting list with inline fields (name + status per entry, 110 bytes each). Multi-token queries intersect posting lists, scored by TF-IDF with phrase proximity bonus. The index header (~20 MB) is cached in Worker memory; posting data is fetched via range requests on demand.
MPHF (client-side processing): A Minimal Perfect Hash Function file ships with the SDK (72 KB to 19 MB depending on the source). It maps every search term to its exact byte offset in the binary index — O(1), no scanning. The client knows exactly which bytes to request, fetches only those bytes from the CDN via a range request (kilobytes, not megabytes), and processes the result locally. No API server involved, no heavy response payloads. Works on 3G. Designed for mobile clients in LATAM where bandwidth is expensive and connectivity is unreliable.
Binary format: Each data source produces two files: a .bin (sorted records, variable-length fields) and an .idx (prefix index, fixed-size entries). SUNAT padron: 18M records across 28 shards, ~7 GB total. Index: 300 KB. The format is designed for R2 range requests — no full download needed.
Import pipeline: Government data is downloaded, parsed, deduplicated, sorted, encoded into binary format, and uploaded to R2. Automated daily via GitHub Actions on a self-hosted runner. Each import builds the binary files, search index, and MPHF in one pass.
Infrastructure cost: Cloudflare Workers free tier handles 3M requests/month. R2 storage: ~$0.015/GB/month. Total: under $1/month for the entire platform. No servers, no database, no ops.
Currently free for everyone. No limits, no credit card.
LIVE Peru (SUNAT) — RUC, DNI, company search. 18M+ records, updated daily.
LIVE Peru (OECE/SEACE) — Government procurement search. 890K+ tenders.
LIVE Peru (OSCE) — Sanctioned suppliers + fines.
LIVE Peru (SERVIR) — Public sector sanctions. 10K+ records.
LIVE Peru (REDAM) — Food debt debtors registry. 24K+ records.
LIVE Peru (SUNAT Coactiva) — Tax enforcement debtors.
LIVE Colombia (RUES) — NIT lookup, company search. 9M+ records.
Brazil, Mexico, Argentina, and Chile in development.
Use Latinfo to ship today. If you outgrow it or need full control, the data is public — you can always build your own solution. We're not locking you in. We're saving you time.