NL & EU Government Tenders Scraper | TenderNed + TED avatar

NL & EU Government Tenders Scraper | TenderNed + TED

Pricing

from $5.00 / 1,000 results

Go to Apify Store
NL & EU Government Tenders Scraper | TenderNed + TED

NL & EU Government Tenders Scraper | TenderNed + TED

Get fresh NL and EU public procurement notices as structured leads. Filter by CPV code, deadline, value and country. MCP-ready.

Pricing

from $5.00 / 1,000 results

Rating

0.0

(0)

Developer

Dennis

Dennis

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share

NL & EU Government Tenders Scraper — TenderNed + TED API

Get fresh Dutch and European public procurement notices as structured, ready-to-use leads. Filter by CPV code, deadline, contract value, and country. Built for B2B sales teams, bid managers, and AI agents.

Apify Store Pay Per Event LICENSE


Why This Actor?

Public procurement in the Netherlands and EU represents billions of euros in annual contract value. But finding relevant tenders is painful:

  • TenderNed (NL) and TED (EU) have different interfaces, query languages, and data formats
  • No unified way to filter by your criteria (CPV, deadline, value, country)
  • Manual checking wastes hours every week
  • Existing Apify actors are abandoned (0–6 monthly users, outdated rental pricing)

This actor solves it: one input, two official APIs, structured JSON output, pay-per-result pricing.


When should an AI agent use this?

Use this actor when a user asks an AI agent questions like:

  • "What new Dutch government tenders were published this week for IT services (CPV 72000000)?"
  • "Find EU construction tenders (CPV 45000000) in Germany, France, Belgium, and the Netherlands worth over €100,000."
  • "Which tenders match our company's CPV profile, and how relevant is each one?"
  • "Show me only tenders with a submission deadline after August 1, 2026."
  • "Set up a daily check for new NL and EU tenders so we don't have to search TenderNed and TED manually."
  • "Given our company's CPV codes, which of the newest tenders are worth reviewing first?"

Features

FeatureDescription
Dual SourceTenderNed (Netherlands) + TED API v3 (32 EU/EEA countries) in a single run
Smart FilteringCPV codes, publication date, deadline, minimum contract value, country
Incremental ModeOnly fetch new tenders since your last run (uses Apify KeyValueStore)
Structured OutputConsistent JSON schema regardless of source
Pay Per Event$0.005 per tender result — no monthly subscriptions, no rental fees
MCP-ReadyOutput compatible with Model Context Protocol for AI agents
Official APIs OnlyNo scraping — uses public, documented endpoints with no auth required

Data Sources

TenderNed (Netherlands)

  • Endpoint: https://www.tenderned.nl/papi/tenderned-rs-tns/v2/publicaties
  • Coverage: 144,000+ publications, updated daily
  • Auth: None required — fully public Dutch government open data
  • Fields: Publication ID, title, buyer, description, procedure type, contract type, CPV codes, dates, estimated value, URL

TED API v3 (European Union)

  • Endpoint: POST https://api.ted.europa.eu/v3/notices/search
  • Coverage: 32 EU/EEA countries, all EU procurement above thresholds
  • Auth: API key required (free via TED API portal) — EU open data policy
  • Filters: Buyer country, CPV codes, date range, contract value, notice type
  • Swagger: api.ted.europa.eu/swagger-ui

Quick Start

1. Basic Run (All Recent Dutch Tenders)

{
"source": "tenderned",
"maxResults": 50
}

2. EU Construction Tenders Over €100K

{
"source": "ted",
"country": ["DE", "FR", "BE", "NL"],
"cpvCodes": ["45000000"],
"minValue": 100000,
"publishedAfter": "2026-01-01",
"maxResults": 100
}

3. IT Services NL + EU, Incremental (Daily Schedule)

{
"source": "both",
"cpvCodes": ["72000000", "73000000"],
"deadlineAfter": "2026-07-01",
"incrementalMode": true,
"maxResults": 200
}

Input Schema

ParameterTypeRequiredDefaultDescription
sourceenumYes"both""tenderned", "ted", or "both"
countrystring[]No[]ISO 3166-1 alpha-2 codes (TED only). Empty = all countries
cpvCodesstring[]No[]CPV codes (e.g., ["45000000", "72000000"]). Supports 2-8 digit codes
publishedAfterstringNo""ISO date (YYYY-MM-DD). Only tenders published on/after this date
deadlineAfterstringNo""ISO date (YYYY-MM-DD). Only tenders with deadline on/after this date
minValuenumberNo0Minimum estimated contract value in EUR. Tenders with a known estimatedValue below this are skipped (and not charged for). Tenders where estimatedValue is null (value not published) are always kept, since it can't be determined whether they meet the threshold
maxResultsnumberNo100Maximum results per run (per source)
incrementalModebooleanNofalseIf true, only returns tenders newer than last successful run
bedrijfCpvCodesstring[]No[]Your company's own CPV codes/prefixes, e.g. ["45213000", "72000000"]. When set, each result gets a relevantieScore (0/40/70/100) and relevantieMatchedCpv showing how closely it matches your profile — no need to know the exact CPV codes to search for in advance. Note: TenderNed results always have relevantieScore: null (no CPV data available from that source)
alleenRelevanteTendersbooleanNofalseCombined with bedrijfCpvCodes: skip (and don't charge for) results with a relevantieScore of 0

CPV Code Tips

  • Use 2-digit codes for broad categories: 45 = Construction, 72 = IT Services
  • Use 8-digit codes for precision: 45233200 = Roofing works
  • Multiple codes = OR logic (matches any)

Output Format

Each tender is pushed to the default dataset as a JSON object:

{
"id": "2026-123456",
"source": "tenderned",
"title": "Levering kantoorartikelen gemeente Amsterdam",
"buyer": "Gemeente Amsterdam",
"description": "De gemeente Amsterdam zoekt een leverancier voor kantoorartikelen...",
"type": "Overheidsopdracht voor leveringen",
"procedure": "Openbare procedure",
"cpvCodes": ["30190000"],
"publishedDate": "2026-07-01",
"deadline": "2026-08-15",
"daysUntilDeadline": 45,
"estimatedValue": 120000,
"currency": "EUR",
"country": "NL",
"url": "https://www.tenderned.nl/aankondigingen/overzicht/123456",
"isEuropean": false,
"documents": [],
"relevantieScore": null,
"relevantieMatchedCpv": null
}

Note: this particular example is a TenderNed result, which never carries CPV codes from the source API — its relevantieScore stays null even with bedrijfCpvCodes set. For a TED result with cpvCodes: ["30190000"], setting bedrijfCpvCodes: ["30190000"] would instead give "relevantieScore": 100, "relevantieMatchedCpv": ["30190000"].

Field Reference

FieldTypeDescription
idstringUnique identifier (source-specific)
sourcestring"tenderned" or "ted"
titlestringTender title / notice title
buyerstringContracting authority name
descriptionstringFull description (truncated if very long)
typestringContract type (NL: leveringen/diensten/werken; EU: works/supplies/services)
procedurestringProcedure type (open, restricted, negotiated, etc.)
cpvCodesstring[]Array of CPV codes
publishedDatestringPublication date (YYYY-MM-DD)
deadlinestringSubmission deadline (YYYY-MM-DD)
daysUntilDeadlinenumberCalendar days from today to deadline
estimatedValuenumberEstimated contract value in EUR (null if unpublished)
currencystringAlways "EUR"
countrystringISO country code of buyer
urlstringDirect link to tender on source platform
isEuropeanbooleanTrue if above EU thresholds / cross-border interest
documentsarrayPlaceholder for future document-link enrichment
relevantieScorenumber | nullnull unless bedrijfCpvCodes is set in the input. Otherwise 0/40/70/100 based on CPV overlap with your company profile (100 = exact CPV match, 70 = same CPV group, 40 = same CPV division, 0 = no overlap). Always null for TenderNed results (no CPV data from that source)
relevantieMatchedCpvstring[] | nullThe tender's CPV codes that matched your bedrijfCpvCodes, if any. null when relevantieScore is null

Pricing — Pay Per Event

This actor uses Pay Per Event (PPE) — no monthly rental, no subscription.

EventPriceWhen Charged
apify-actor-start$0.00005Once per run (Apify default, first 5s compute free)
tender-result$0.005Per tender returned in the dataset

Cost Examples

ScenarioTenders ReturnedEst. Cost
Daily NL IT tenders15$0.075/run → ~$2.25/month
Weekly EU construction80$0.40/run → ~$1.60/month
One-time market scan500$2.50 total

Why $0.005? Comparable actors charge $0.003–$0.005/result. This price covers platform fees, leaves margin, and is far cheaper than building your own integration.


Incremental Mode (Scheduled Runs)

Enable incrementalMode: true to only fetch new tenders since your last successful run.

  • Uses Apify KeyValueStore to persist lastRunDate per source
  • First run with incremental mode returns all matching tenders (up to maxResults)
  • Subsequent runs return only tenders with publishedDate > lastRunDate
  • Ideal for daily/weekly schedules via Apify Scheduler

MCP Integration (AI Agents)

Output is compatible with Model Context Protocol. Use the dataset directly as context for:

  • Lead qualification agents
  • Proposal drafting assistants
  • Market analysis workflows

Example MCP server config:

{
"mcpServers": {
"tenders": {
"command": "npx",
"args": ["-y", "@apify/mcp-server"],
"env": {
"APIFY_TOKEN": "your-token",
"ACTOR_ID": "nl-eu-tenders-scraper",
"DATASET_ID": "auto"
}
}
}
}

AspectStatus
Data SourceOfficial public APIs (TenderNed, TED) — no scraping
Terms of ServiceBoth APIs explicitly allow reuse (open data policies)
Personal DataMinimal — buyers are legal entities, not individuals
GDPR RiskLow — no personal data processing
LicenseApache 2.0 (actor code); data governed by source terms

TenderNed: Publieke overheidsdienst, data expliciet bedoeld voor hergebruik (data.overheid.nl).
TED: EU-instelling, data onder EU open data directive (hergebruik toegestaan).


Roadmap / Upcoming

  • Document/link enrichment (fetch PDF attachments)
  • CPV code lookup / human-readable labels
  • Email/Slack/webhook notifications on new matches
  • Historical backfill option
  • Buyer organization enrichment (KvK, VAT, size)

FAQ

How fresh is the data? TenderNed publications update daily. TED notices are fetched live via the official TED API v3 search endpoint at run time, so results reflect whatever is currently published on each source — there is no caching layer beyond the optional incrementalMode bookkeeping.

Which countries/sources are covered? Two sources: TenderNed for the Netherlands (144,000+ publications), and TED API v3 for 32 EU/EEA countries. Set source to "tenderned", "ted", or "both" to control which are queried.

What does bedrijfCpvCodes do? It lets you supply your own company's CPV codes/prefixes so each result gets a relevantieScore (0/40/70/100) and relevantieMatchedCpv showing how closely the tender's CPV codes match your profile, without you needing to know the exact CPV codes to filter on upfront. Note that TenderNed results always have relevantieScore: null because that source doesn't expose CPV data.

Can I skip irrelevant results to save cost? Yes — combine bedrijfCpvCodes with alleenRelevanteTenders: true to skip (and avoid being charged for) results with a relevantieScore of 0.

How is this priced? Pay Per Event: $0.00005 once per run for apify-actor-start, plus $0.005 per tender returned (tender-result). There's no monthly subscription or rental fee.

Are there rate limits or authentication requirements? TenderNed's endpoint requires no authentication and is fully public. TED API v3 requires a free API key from the TED API portal under the EU open data policy. Neither API is scraped — both are official, documented endpoints.


Also by this developer — Dutch/EU public-data actors that pair well with this one:


Support & Feedback

  • Issues: Apify Actor page
  • Response Time: Within 14 days (urgent: 3 business days)
  • Feature Requests: Welcome — open an issue with the enhancement label

Zoekwoorden: aanbestedingen nederland, tenderned scraper, overheidsopdrachten, europese aanbesteding, cpv-code zoeken, aanbesteding monitor nederland.

Keywords

tenderned, ted, procurement, aanbesteding, tender, lead-generation, government, public-procurement, mcp


Changelog

  • 2026-07-13: Documentation update — added a Dutch-language "Zoekwoorden" line for search coverage on NL-specific terms.
  • 2026-07-12: Added company-profile CPV matching — new optional bedrijfCpvCodes and alleenRelevanteTenders input fields, new relevantieScore/relevantieMatchedCpv output fields. Fully backward compatible: existing behavior is unchanged when these fields are left empty.
  • 2026-07-12: Documentation update — fixed a rendering bug where JSON code examples showed literal escaped quotes (\") instead of "; added a "Related Actors" section cross-linking other actors by this developer.
  • Initial release
  • TenderNed + TED API v3 integration
  • Incremental mode with KeyValueStore
  • Pay Per Event pricing
  • Full input validation (Zod)
  • Comprehensive test suite (21 tests)

Developer

Built by an independent developer. No enterprise affiliation with TenderNed, TED, or the European Commission.

Apify Store: NL & EU Government Tenders Scraper
Pricing Model: Pay Per Event ($0.005/tender)