TenderNed Netherlands Tenders Scraper
Pricing
Pay per event
TenderNed Netherlands Tenders Scraper
Search and export normalized Dutch procurement notices, awards, buyers, procedures, descriptions, and optional CPV/NUTS details from official TenderNed data.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
14 days ago
Last modified
Categories
Share
Export structured Dutch public-procurement publications from the official, anonymous TenderNed data service.
The Actor searches tender notices, awards, market consultations, and other publication types, then writes one normalized record per publication to the default Apify dataset.
It uses direct HTTP requests to TenderNed's public JSON service. No browser, login, cookies, API key, or proxy is required.
What can TenderNed Netherlands Tenders Scraper do?
- Search TenderNed titles, descriptions, and contracting authorities.
- Filter by publication date, publication type, procedure, contract type, and national or European scope.
- Keep only a specific buyer or publication status.
- Start at a chosen source page and bound both scanned pages and saved records.
- Export complete descriptions, references, buyer names, procedure labels, sender links, and canonical TenderNed URLs.
- Optionally enrich every result with CPV and NUTS codes, legal framework, scope, reference number, and award status.
- Produce JSON, CSV, Excel, XML, RSS, or another dataset export supported by Apify.
Who is it for?
Dutch and EU suppliers can discover opportunities relevant to their products and services.
Bid consultants can build repeatable buyer and sector watchlists instead of checking TenderNed manually.
Sales-intelligence teams can enrich CRM pipelines with public procurement activity and award signals.
Procurement analysts can collect reproducible notice datasets for market, buyer, procedure, and category analysis.
Data teams can schedule daily runs and send new rows to webhooks, cloud storage, spreadsheets, or databases.
Why use this Actor?
TenderNed publishes useful structured records, but production workflows still need pagination, validation, normalized field names, bounded filtering, retries, and export integrations.
This Actor handles those operational steps while preserving stable source IDs and canonical URLs.
The default mode avoids detail requests because the listing already contains the core publication record. Enable detail enrichment only when CPV, NUTS, legal, or award fields are needed.
What TenderNed data is extracted?
| Field | Meaning |
|---|---|
publicationId | Stable TenderNed publication ID |
referenceId | TenderNed tender/reference ID |
referenceNumber | Buyer reference number when details are enabled |
publicationDate | Official publication date |
publicationType | Publication type code and Dutch label |
publicationCode | Specific notice-form code and label |
publicationStatus | Status code and label, such as published or withdrawn |
tenderTitle | Procurement title |
description | Normalized full description |
buyerName | Contracting authority |
procedure | Procedure code and label |
contractType | Supplies, services, or works code and label |
senderName, senderUrl | External sender details when provided |
isEuropean, isDigital | EU and digital-submission flags |
isEarlyTermination | Early-termination flag |
isEformsAmendment | eForms amendment flag |
legalFramework | Legal framework with detail enrichment |
procurementNature | Procurement nature with detail enrichment |
scope | National or European scope with detail enrichment |
isAwarded | Award flag with detail enrichment |
cpvCodes | CPV classifications with main-code marker |
nutsCodes | Geographic NUTS codes |
canonicalUrl | Public TenderNed publication URL |
scrapedAt | UTC extraction timestamp |
Fields available only through detail enrichment are null or empty arrays when includeDetails is disabled.
How to scrape TenderNed publications
- Open the Actor in Apify Console.
- Enter a text query, buyer, or one or more source codes.
- Add a publication date range for recurring monitoring.
- Choose a practical
maxItemsvalue. - Enable
includeDetailsonly if your workflow needs enrichment fields. - Click Start.
- Open the Dataset tab to inspect or export results.
A useful first run is:
{"query": "duurzaamheid","maxItems": 25}
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
query | string | — | Text required in title, description, or buyer |
buyer | string | — | Contracting-authority name fragment |
publicationTypes | string[] | all | TenderNed type codes such as AAO, AGO, MAC, or VBE |
publicationStatuses | string[] | all | Status codes kept after retrieval, such as PUB or INT |
dateFrom | string | — | Inclusive publication date, YYYY-MM-DD |
dateTo | string | — | Inclusive publication date, YYYY-MM-DD |
procedureCodes | string[] | all | Procedure codes such as OPE |
contractTypes | string[] | all | L supplies, D services, or W works |
scopeCodes | string[] | all | TenderNed national/EU scope codes, for example EU |
includeDetails | boolean | false | Fetch CPV/NUTS and other enrichment fields |
startPage | integer | 0 | Zero-based TenderNed page |
pageSize | integer | 50 | Source records requested per page, maximum 100 |
maxPages | integer | 20 | Safety limit for source pages scanned |
maxItems | integer | 100 | Maximum matching records saved |
publicationStatuses, buyer, and exact text matching are verified by the Actor after TenderNed returns candidate rows. Use maxPages to control scans for narrow client-side filters.
Output example
The following abbreviated record reflects the current output shape:
{"publicationId": "434758","referenceId": "603932","publicationDate": "2026-07-27","publicationType": {"code": "AGO","name": "Aankondiging gegunde opdracht"},"publicationStatus": {"code": "PUB","name": "Gepubliceerd"},"tenderTitle": "Projectmanager Smart Port Waalwijk","buyerName": "Gemeente Waalwijk","procedure": {"code": "OPE","name": "Openbaar"},"contractType": {"code": "W","name": "Werken"},"isEuropean": true,"isDigital": false,"canonicalUrl": "https://www.tenderned.nl/aankondigingen/overzicht/434758"}
The complete dataset row also contains the description, sender, publication code, flags, enrichment fields, and extraction timestamp.
How much does it cost to scrape TenderNed tenders?
The Actor uses pay-per-event pricing:
- $0.005 once per run.
- On the Free plan, $0.000041071 per saved publication.
- Higher Apify plans receive automatic volume-tier discounts, down to $0.00001 per publication on the Diamond tier.
Example Free-plan prices:
| Saved publications | Estimated Actor charge |
|---|---|
| 10 | $0.00541 |
| 100 | $0.00911 |
| 1,000 | $0.04607 |
Rejected, duplicate, malformed, or filtered-out source rows are not charged as items. Detail enrichment has no separate charge event; it is included in the saved-publication event.
Apify displays the applicable plan tier before a run. Storage or other platform charges may be governed by your Apify plan.
Monitoring and automation workflows
Daily opportunity watch
Set dateFrom to the latest date required by your process, filter publication types, and schedule the Actor daily. Use the stable publicationId to deduplicate downstream alerts.
Buyer activity feed
Set buyer to a contracting authority and deliver the dataset to a CRM or warehouse. Increase maxPages when collecting deep history.
Contract award intelligence
Use publicationTypes: ["AGO"], enable includeDetails, and retain CPV codes, award status, buyer, and reference fields for sales intelligence.
Sector dataset
Combine text, procedure, contract-type, and scope filters. Export the resulting dataset to CSV or query it through the Apify API.
JavaScript API example
Install the official client:
$npm install apify-client
Run the Actor and read its dataset:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/tenderned-netherlands-tenders-scraper').call({publicationTypes: ['AGO'],scopeCodes: ['EU'],includeDetails: true,maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
Install the client:
$pip install apify-client
Then run and retrieve results:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/tenderned-netherlands-tenders-scraper').call(run_input={'buyer': 'Gemeente Waalwijk','maxItems': 25,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item)
cURL API example
Start a synchronous run and receive dataset items:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~tenderned-netherlands-tenders-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"query":"duurzaamheid","maxItems":25}'
Keep APIFY_TOKEN in an environment variable rather than source code.
Use TenderNed data with Apify MCP
Claude Code setup
Add this Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/tenderned-netherlands-tenders-scraper"
Claude Desktop setup
Claude Desktop can use this JSON configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/tenderned-netherlands-tenders-scraper"}}}
Cursor and VS Code setup
In Cursor or VS Code, add the same mcpServers.apify.url value through the editor's MCP settings. No local command process is required because the transport is HTTP.
MCP example prompts
- “Find 25 TenderNed publications mentioning circular construction.”
- “Collect recent contract awards from Dutch municipalities and include CPV details.”
- “Export TenderNed notices from Gemeente Waalwijk for my supplier pipeline.”
Limits and reliability
TenderNed controls source availability, fields, code lists, and publication volume.
The Actor retries network timeouts, rate limits, and temporary server errors with bounded backoff. It does not blindly retry invalid requests or unexpected response formats.
Requests are sequential and conservative. The Actor stops at maxItems, maxPages, an empty page, or TenderNed's last page.
Some historical source descriptions contain replacement characters supplied by TenderNed. The Actor decodes HTML entities and normalizes whitespace but does not invent missing source characters.
No residential proxy or automatic browser fallback is enabled. This keeps cost and behavior predictable for the currently anonymous JSON service.
Responsible and legal use
TenderNed procurement publications are public government-procurement information. You remain responsible for your collection frequency, retention, redistribution, and downstream decisions.
Respect applicable law, TenderNed terms, intellectual-property rights, privacy obligations, and reasonable request rates.
Do not use public contact or buyer data for unlawful spam, harassment, discrimination, or automated decisions that require human review.
This Actor is an independent data tool and is not affiliated with or endorsed by TenderNed or the Dutch government.
FAQ
Why did my narrow buyer or status search return fewer items than maxItems?
The Actor first receives candidates from TenderNed and then verifies buyer, text, and status filters. Increase maxPages, broaden the filter, or remove a conflicting date/type constraint.
Why are enrichment fields null or empty?
Set includeDetails to true. Core list mode intentionally skips one extra request per publication.
Why did the run fail immediately?
Check that dates use YYYY-MM-DD, dateFrom is not later than dateTo, numeric limits are within the documented bounds, and arrays contain TenderNed codes.
Does the Actor need a Netherlands proxy?
No. Current official JSON records are available anonymously and directly. The Actor does not expose an unmeasured proxy fallback.
Can I resume at another result page?
Yes. Set zero-based startPage and keep the same filters and pageSize.
Related public-procurement Actors
- Singapore GeBIZ Tender Opportunities Scraper
- CanadaBuys Tender Opportunities Scraper
- UNGM Tender Notices Scraper
- AusTender Current Tender Opportunities Scraper
- Spain Public Tenders Scraper
Use these Actors when a supplier or analyst needs a multi-country procurement-monitoring portfolio rather than TenderNed alone.