Brazil PNCP Procurement Notices Scraper
Pricing
Pay per event
Brazil PNCP Procurement Notices Scraper
Search Brazil's official PNCP procurement notices by date, modality, buyer, location, status, and keywords. Export deadlines, values, and source links.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Find public-sector sales opportunities across Brazil from the official Portal Nacional de Contratações Públicas (PNCP).
This Apify Actor searches structured procurement notices by date, modality, buyer, location, status, and keywords. It exports buyer details, proposal deadlines, estimated values, legal basis, and official source links to a clean dataset.
Use it for daily tender monitoring, supplier lead generation, bid pipeline enrichment, market research, or historical procurement exports—without maintaining your own PNCP API integration.
What does Brazil PNCP Procurement Notices Scraper do?
The Actor queries Brazil's official nationwide PNCP consultation API first. If that service is unavailable, it automatically switches to the official PNCP portal search index so temporary consultation-API failures do not stop otherwise valid searches.
It can:
- 🔎 Search notices by publication, proposal, or update date
- 🏛️ Select one or more PNCP procurement modalities
- 📍 Filter by state (UF) and municipality
- 🧾 Target an exact public organization CNPJ
- 💬 Match keywords in the object, details, process, buyer, and unit
- 🚦 Filter by source status text
- 💰 Export estimated and awarded values in BRL
- ⏰ Capture publication, proposal opening, and closing dates
- 🔗 Include official PNCP and source-system links
- ♻️ Deduplicate results by the PNCP control number
Why use this PNCP scraper?
PNCP contains procurement opportunities from organizations throughout Brazil, but repeated manual searches do not fit a sales or bidding workflow.
This Actor turns the public source into scheduled, integration-ready data.
- Save time: collect many notices in one run.
- Find relevant opportunities: combine location, modality, and keyword filters.
- Build alerts: run daily and send new deadlines to email, Slack, or a database.
- Keep provenance: every row includes its PNCP control ID and official portal URL.
- Scale safely: result and page limits control large or sparse searches.
Who is it for?
Brazilian suppliers
Monitor notices related to your products or services and prioritize upcoming deadlines.
Bid and tender consultancies
Build recurring client-specific searches by UF, municipality, CNPJ, status, or procurement topic.
Procurement software teams
Use normalized JSON as an input to opportunity feeds, qualification tools, and customer alerts.
Sales and business development teams
Treat public buyers and active purchases as account and intent signals for CRM enrichment.
Researchers and journalists
Export reproducible PNCP records for analysis of buyers, modalities, values, and regions.
Data you can extract
| Field group | Example fields |
|---|---|
| Identifiers | noticeId, purchaseNumber, processNumber |
| Opportunity | object, additionalInformation, status |
| Buyer | organizationCnpj, organizationName, unitName |
| Geography | state, stateName, municipality, ibgeCode |
| Procedure | modality, disputeMode, legalBasis, instrumentType |
| Dates | publicationDate, proposalOpenDate, proposalCloseDate, updatedAt |
| Values | estimatedValueBrl, awardedValueBrl |
| Provenance | sourcePublisher, sourceSystemUrl, pncpUrl, scrapedAt |
Optional fields are omitted when PNCP does not provide them, rather than emitted as misleading empty values.
How to scrape PNCP procurement notices
- Open the Actor in Apify Console.
- Choose a start and end date in
YYYY-MM-DDformat. - Select publication, proposal, or update date semantics.
- Optionally enter modality codes, keywords, UFs, municipality, buyer CNPJ, or status.
- Set the maximum number of notices.
- Click Start.
- Export the dataset as JSON, CSV, Excel, XML, or another supported format.
A narrow first run—one week, one modality, 20 results—is recommended while refining a workflow.
Input
{"startDate": "2026-07-01","endDate": "2026-07-07","dateType": "publication","modalityCodes": ["6"],"states": ["SP", "MG"],"keywords": "serviços médicos","maxItems": 100,"maxPagesPerModality": 100}
Input fields
| Field | Type | Description |
|---|---|---|
startDate | string | Inclusive first date, YYYY-MM-DD |
endDate | string | Inclusive last date, up to 365 days after the start |
dateType | string | publication, proposal, or update |
modalityCodes | string[] | PNCP modality codes "1"–"13"; omitted means all |
keywords | string | All words must appear in searchable notice text |
states | string[] | Optional two-letter UF codes |
municipality | string | Accent-insensitive partial municipality match |
organizationCnpj | string | Exact buyer CNPJ; punctuation is ignored |
status | string | Case- and accent-insensitive partial status match |
maxItems | integer | Maximum matching unique notices to save |
maxPagesPerModality | integer | Safety cap for sparse client-side filters |
PNCP modality codes
PNCP assigns numeric codes to procurement modalities.
Common searches include code 6 for Pregão - Eletrônico. The Actor accepts any valid PNCP code from 1 through 13.
Leave modalityCodes empty to search all modalities. For large periods, selecting only relevant modalities reduces requests and run time.
Source modality names are preserved in Portuguese in the output.
Date filtering modes
Choose the date field that matches your workflow:
- Publication: find notices published during the period.
- Proposal: find notices associated with proposal dates during the period.
- Update: monitor notices changed during the period.
For daily alerting, update can capture changed records while publication focuses on newly published opportunities.
Keyword matching
The keyword filter is applied locally to structured PNCP records.
Every entered word must appear somewhere across:
- procurement object
- additional information
- process number
- organization name
- organization unit
Matching ignores case and accents. For example, servicos medicos can match SERVIÇOS MÉDICOS.
Use fewer words when a query is too restrictive.
Output example
{"noticeId": "80881915000192-1-000044/2026","purchaseNumber": "PR35","processNumber": "PR35/2026","object": "CONTRATAÇÃO DE EMPRESA PARA ...","organizationCnpj": "80881915000192","organizationName": "MUNICIPIO DE LINDOESTE","unitName": "Prefeitura Municipal de Lindoeste","state": "PR","municipality": "Lindoeste","modalityCode": 6,"modality": "Pregão - Eletrônico","status": "Divulgada no PNCP","estimatedValueBrl": 300543,"proposalCloseDate": "2026-07-07T08:00:01","pncpUrl": "https://pncp.gov.br/app/editais/80881915000192/2026/44","scrapedAt": "2026-07-20T03:30:00.000Z"}
How much does it cost to scrape Brazil PNCP notices?
The Actor uses pay-per-event pricing:
- one small search start charge per run
- one procurement notice charge for each unique row saved
You never pay per page requested. Platform subscription tiers receive automatic volume discounts on per-notice pricing.
Before starting a large export, use maxItems to estimate the upper bound from the current pricing panel in Apify Console.
Scheduling daily PNCP monitoring
Apify schedules can run the Actor automatically.
A practical daily workflow is:
- Set
startDateandendDateto the monitoring day in a saved task. - Use
dateType: "update"orpublication. - Add business-specific keywords and regions.
- Schedule the task once per day.
- Connect a webhook or integration to process the resulting dataset.
For rolling dates, generate task input through the Apify API or an automation platform.
Integrations
Google Sheets
Use the Google Sheets integration to append qualified notices for a bidding team.
Slack or email alerts
Trigger an alert when a row meets value, region, or deadline rules.
CRM enrichment
Map organizationCnpj and organizationName to accounts, then add the procurement object as an intent signal.
Data warehouse
Export JSON or CSV to BigQuery, Snowflake, PostgreSQL, or object storage for longitudinal analysis.
Webhooks
Send a run-finished webhook to your application and retrieve dataset items through the API.
Use with the Apify API — JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/brazil-pncp-procurement-notices-scraper').call({startDate: '2026-07-01',endDate: '2026-07-07',modalityCodes: ['6'],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use with the Apify API — Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_APIFY_TOKEN')run = client.actor('automation-lab/brazil-pncp-procurement-notices-scraper').call(run_input={'startDate': '2026-07-01','endDate': '2026-07-07','states': ['SP'],'maxItems': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with the Apify API — cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~brazil-pncp-procurement-notices-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startDate":"2026-07-01","endDate":"2026-07-07","modalityCodes":["6"],"maxItems":50}'
Use PNCP data with MCP
Connect Apify's MCP server so an AI assistant can run the Actor and inspect datasets.
MCP endpoint:
https://mcp.apify.com/?tools=automation-lab/brazil-pncp-procurement-notices-scraper
Example prompts for Claude Code or another MCP client:
- “Find electronic auctions published in São Paulo this week involving laboratory equipment.”
- “Export 100 updated PNCP notices for this buyer CNPJ and summarize the deadlines.”
- “Compare estimated procurement value by municipality from this dataset.”
Claude Code setup
$claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/brazil-pncp-procurement-notices-scraper"
Claude Desktop and Cursor setup
Add this mcpServers JSON to Claude Desktop or Cursor, then provide your Apify token as required by the MCP server:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=automation-lab/brazil-pncp-procurement-notices-scraper"}}}
VS Code setup
Open the MCP configuration in VS Code, add the same HTTP endpoint, and enable the automation-lab/brazil-pncp-procurement-notices-scraper tool.
Tips for reliable searches
- Start with one modality and a short date period.
- Use two-letter uppercase UF codes such as
SP,RJ, orPR. - Remove keywords if a filtered search unexpectedly returns zero rows.
- Increase
maxPagesPerModalityfor a very selective buyer or keyword search. - Split date ranges longer than 365 days into multiple runs.
- Keep the PNCP control number as your downstream deduplication key.
Pagination and limits
The Actor requests up to 50 source notices per API page.
maxItems limits saved matches, not source records inspected. A narrow client-side keyword or CNPJ filter may require scanning many source records before finding matches.
maxPagesPerModality prevents an unexpectedly sparse search from running indefinitely. If the cap is reached, refine the date/modalities or intentionally increase it.
Error handling
Each official PNCP request has a 12-second timeout. If the consultation API returns an error, the Actor switches to the official portal search index. Search-index requests use up to eight bounded attempts with a short delay between attempts.
Invalid dates, reversed periods, overlong periods, and invalid modality codes fail closed with a clear error.
A consultation-API outage alone does not fail the run. The run fails only if the fallback search path also cannot complete, rather than reporting an apparently complete empty dataset.
A valid search that completes successfully but genuinely has no matching records succeeds with an empty dataset.
Data quality and provenance
PNCP is the source of truth for the returned fields.
The Actor preserves Portuguese names and descriptions instead of translating or inferring legal meaning. It normalizes only field names and matching behavior.
Values and dates may be absent when the publisher did not provide them. Always follow pncpUrl or sourceSystemUrl for the authoritative current notice.
Is it legal to scrape PNCP?
PNCP is an official public procurement portal, and the Actor uses its anonymous public consultation and portal search endpoints.
Users are responsible for complying with applicable laws, PNCP terms, data-protection rules, and their own use-case obligations.
Do not treat extracted data as legal advice or as a substitute for checking the current official notice before submitting a proposal.
FAQ
Does the Actor require a PNCP account or API key?
No. The supported consultation endpoints are public and anonymous.
Does it use a browser or proxy?
No. It uses official structured HTTPS endpoints—the consultation API and, when needed, the portal search index—which keeps runs lightweight.
Why did my keyword search return no notices?
All keyword terms must match. Try fewer words, a broader date range, more modalities, or a higher page cap.
Why are some value or deadline fields missing?
The source does not populate every optional field for every notice. Missing fields are omitted rather than fabricated.
Can I export historical data?
Yes. Run multiple periods of up to 365 days each and combine datasets using noticeId as the deduplication key.
Can I monitor one public buyer?
Yes. Set organizationCnpj to the exact buyer CNPJ; punctuation is optional.
Related scrapers
Explore other public-data and lead-generation Actors from automation-lab:
- SAM.gov Scraper for US federal opportunities, when available
- Company Information Scraper for business enrichment, when available
- Government Data Scrapers for additional official public sources
Choose this Actor when the required source is Brazil's official PNCP procurement portal.
Support
If a run behaves unexpectedly, include:
- the Apify run URL
- a redacted copy of the input
- the expected date, modality, and filters
- one example PNCP notice you expected to find
That context makes source changes and filter behavior easier to diagnose.