Latinfo

atinfo

Tax registry & procurement API for Latin America. One request, one response, no infrastructure.

npm install -g latinfo
latinfo search "banco de credito"
latinfo licitaciones "construccion hospital" --category works

What you get

Start in 30 seconds

# Install
npm install -g latinfo

# Login with GitHub
latinfo login

# Query
latinfo ruc 20100047218
latinfo dni 12345678
latinfo search "gloria"

# Government procurement (licitaciones)
latinfo licitaciones "servicio alimentacion"
latinfo licitaciones --category works --min-amount 1000000

# Or use the API directly
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://api.latinfo.dev/pe/ruc/20100047218

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.latinfo.dev/pe/licitaciones?q=construccion&category=works"

API endpoints

Base URL: https://api.latinfo.dev

EndpointDescription
GET /pe/ruc/:rucLookup by RUC (11 digits)
GET /pe/dni/:dniLookup by DNI (8 digits, converts to RUC automatically)
GET /pe/search?q=...Search by company name
GET /pe/licitaciones?q=...&category=...&min_amount=...&max_amount=...&buyer=...&method=...&status=...&limit=...Search government procurement
GET /pe/licitaciones/infoProcurement data stats

Licitaciones response (OCDS 1.1)

Returns full OCDS 1.1 compiledRelease records. Key fields:

FieldDescriptionExample
ocidOpen Contracting IDocds-dgv273-seacev3-2026-273-3
urlLink to official OECE portalcontratacionesabiertas.oece.gob.pe/proceso/...
buyer.nameBuyer organizationMUNICIPALIDAD DISTRITAL DE MORO
tender.titleShort titleCP-ABR-1-2026-MDM/CS-1
tender.descriptionFull descriptionSUPERVISION DE OBRA: CONSTRUCCION DE...
tender.value.amountAmount in PEN64815.55
tender.mainProcurementCategorygoods, services, worksservices
tender.procurementMethodDetailsProcurement methodConcurso Público Abreviado
tender.datePublishedPublication date2026-03-10T23:26:00-05:00
tender.items[].statusDetailsStatusCONVOCADO
tender.documents[]Attached files (bases, etc.)
awards[]Award decisions, suppliers
contracts[]Contract details

Response fields

FieldDescriptionExample
rucRUC number (11 digits)20100047218
razon_socialBusiness nameBANCO DE CREDITO DEL PERU
estadoTax statusACTIVO
condicionConditionHABIDO
ubigeoLocation code150114
tipo_viaStreet typeJR.
nombre_viaStreet nameCENTENARIO
numeroStreet number156

SDK

// npm install latinfo
import { Latinfo } from 'latinfo';
const client = new Latinfo('YOUR_API_KEY');

// SUNAT
const bcp = await client.pe.ruc('20100047218');
const results = await client.pe.search('banco de credito');

// Licitaciones
const obras = await client.pe.licitaciones({
  q: 'construccion', category: 'works', limit: 10
});

What you don't have to do

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.

How it works

Records are compiled into a binary index served from Cloudflare's edge network (300+ locations). RUC lookups resolve to an exact byte offset — one range request, no database server, no cold start. Name searches use an inverted index with TF-IDF scoring and phrase proximity detection.

No database process running. No connection pool. No replicas. Static files on a CDN that behave like a search engine. 1 request or 100,000 concurrent — same speed, zero ops.

Pricing

PlanRequests/monthPrice
Free100,000/day$0
Pro10,000,000/month$1/month

Countries

LIVE Peru (SUNAT) — RUC, DNI, company name search. 18M+ records, updated daily.

LIVE Peru (OECE/SEACE) — Government procurement search. Updated daily. Source: contratacionesabiertas.oece.gob.pe

Brazil, Mexico, Colombia, Argentina, and Chile in development.

Start with the API. Own it later if you need to.

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.