Licitaja APIlicitaja.com.br ↗
Search Brazilian government procurement bids (licitações) on licitaja.com.br. Returns agency, object, dates, estimated value, edital link, AI summary, and lots.
What is the Licitaja API?
The Licitaja API gives programmatic access to Brazilian government procurement bids (licitações) through a single search_licitacoes endpoint that returns up to 11 structured fields per bid, including estimated value, bid timeline, itemized lots, and a direct link to the edital. Pass a keyword to search across active tenders, and optionally narrow results by agency name using the orgao filter.
curl -X GET 'https://api.parse.bot/scraper/6d06345b-c232-433d-848a-03d52c539993/search_licitacoes?keyword=PEAD' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace licitaja-com-br-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Licitaja SDK – search Brazilian government procurement bids by keyword."""
from parse_apis.licitaja___brazilian_government_procurement_search_api import (
Licitaja,
Bid,
SearchFailed,
)
client = Licitaja()
# Search for PEAD (polyethylene) procurement bids, capped at 5 items.
for bid in client.bids.search(keyword="PEAD", limit=5):
print(bid.orgao, bid.localizacao, bid.total_lotes)
# Drill into the first result for a different keyword.
bid = client.bids.search(keyword="eletrofusao", limit=1).first()
if bid:
print(bid.numero_pregao, bid.objeto[:120])
for d in bid.datas:
print(d.date, d.label)
# Typed error handling around a search call.
try:
results = client.bids.search(keyword="construção", orgao="Sabesp", limit=3)
for r in results:
print(r.id, r.valor_estimado, r.status)
except SearchFailed as exc:
print(f"Search blocked: {exc}")
print("exercised: bids.search (3 calls with keyword, orgao filter, limit)")
Full-text search over Brazilian government procurement bids (licitações). Returns up to 5 results per search (site limitation). Each result includes agency, object description, dates, estimated value, edital link, AI summary, and itemized lots. The optional orgao filter applies client-side partial matching after results are retrieved from the site.
| Param | Type | Description |
|---|---|---|
| orgao | string | Filter results by agency name (case-insensitive partial match). Applied after search results are retrieved. |
| keywordrequired | string | Search keyword(s) for procurement bids. Can combine multiple terms. |
{
"type": "object",
"fields": {
"keyword": "string - search keyword used",
"results": "array of Bid objects with id, numero_pregao, orgao, objeto, localizacao, datas, valor_estimado, status, edital_link, resumo, lotes, total_lotes",
"orgao_filter": "string - agency filter applied (empty string if none)",
"total_results": "integer - number of results returned"
}
}About the Licitaja API
What the API Returns
The search_licitacoes endpoint accepts a required keyword string and an optional orgao filter for agency name (case-insensitive partial match). Each response includes the search keyword used, the agency filter applied, a total_results count, and an array of bid objects. Each bid carries fields for id, numero_pregao (bid reference number), orgao (agency), objeto (procurement object description), localizacao (location), datas (relevant dates including opening and closing timelines), valor_estimado (estimated contract value), status, edital_link (direct URL to the bid document), resumo (an AI-generated summary of the bid), and lotes (itemized lots within the procurement).
Filtering and Coverage
Because licitaja.com.br returns a maximum of 5 results per search query, the API reflects that site limitation — total_results will be at most 5 per call. The orgao parameter is applied as a post-retrieval filter on the returned set, so it narrows results from that batch rather than expanding them. Using specific, targeted keywords yields the most relevant results. The API covers Brazilian federal and municipal procurement notices indexed by licitaja.com.br.
Bid Document Access
The edital_link field in each result points directly to the official bid document for that procurement, allowing downstream systems to fetch or archive the edital without additional lookups. The resumo field provides an AI-generated plain-language summary of the bid object, which can speed up initial triage without reading the full edital. The lotes array breaks down individual line items or lots within the procurement for detailed analysis.
The Licitaja API is a managed, monitored endpoint for licitaja.com.br — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when licitaja.com.br changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official licitaja.com.br API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor new procurement opportunities matching a product or service category by polling with relevant keywords
- Filter tenders from a specific government agency using the
orgaoparameter to track a known buyer - Extract
valor_estimadoacross bids to benchmark contract sizes within a procurement category - Use
edital_linkto automatically download and archive official bid documents for compliance records - Feed
resumoAI summaries into a procurement digest newsletter to surface relevant opportunities quickly - Analyze
lotesitemization to identify bids that include specific goods or service line items - Build a bid alert system that surfaces
datasdeadlines for upcoming procurement closing dates
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does licitaja.com.br have an official developer API?+
What does the `orgao` filter actually do, and how does it interact with the keyword search?+
orgao filter is applied to the results already retrieved by the keyword search — it narrows that set by performing a case-insensitive partial match on the agency name field. It does not trigger a separate agency-scoped search, so it only filters within the up-to-5 bids returned for the given keyword. Using a very specific keyword alongside orgao will give the tightest targeted results.Why does the API return at most 5 results per search?+
total_results will never exceed 5 in a single call. To cover more bids, vary your keywords across multiple requests.Can I retrieve historical or archived bids, or paginate through all available licitações?+
Does the API return the full text of the edital document?+
edital_link field, which is a direct URL to the bid document, and the resumo AI-generated summary. Full document text parsing is not included. You can fork this API on Parse and revise it to add a document-fetching endpoint that retrieves and parses the edital content from the linked URL.