Open Tender and RFP Finder
Last updated October 21, 2026
Find open public tenders and RFPs by keyword, CPV code, and country. One row per notice with buyer, deadline, estimated value, codes, and link, from UK Contracts Finder, UK Find a Tender, EU TED, and CanadaBuys. No API key. Only new notices on a schedule. Clay ready.
Features
- Find open public tenders and RFPs by keyword, CPV code, and country.
- One row per notice with buyer, deadline, estimated value, codes, and link, from UK Contracts Finder, UK Find a Tender, EU TED, and CanadaBuys.
- No API key.
- Only new notices on a schedule.
- Clay ready.
- Pay per event: Notice row at $0.003.
Input
keywordsarrayoptionalKeywords. Words or phrases to find in the notice title or description, any case, one per line. A notice is returned when it matches any of them. EU TED matches them over the full notice text in every language. Empty: every open notice in the window. Up to 25.
exclude_keywordsarrayoptionalExclude keywords. Drop a notice whose title or description contains any of these, for example cleaning or catering.
cpv_prefixesarrayoptionalCPV codes. Keep only notices with a CPV code (the EU and UK procurement category code) that starts with one of these, for example 72 (IT services) or 48000000 (software packages). CanadaBuys publishes UNSPSC codes, not CPV, so a CPV filter leaves CanadaBuys out.
countriesarrayoptionalBuyer countries. Two letter country codes of the buying body, for example GB, DE, FR, CA. A portal that publishes none of these countries is not searched. Empty: every country.
portalsarrayoptionalPortals. Which public notice portals to read. Empty: all four.
published_within_daysintegeroptionalPublished within (days). Only notices published in the last this many days, today included.
only_openbooleanoptionalOnly open notices. Drop notices whose response deadline has passed. A notice with no published deadline is kept.
min_valuestringoptionalMinimum estimated value. Drop notices with an estimated value below this number, in the notice's own currency. A notice that publishes no value is kept.
max_noticesintegeroptionalMax notices. Notice rows per run, newest first. Each notice row is one notice-row charge.
only_newbooleanoptionalOnly new results. For scheduled runs. Skip notices an earlier run with the same state key already returned. Skipped notices are free. The seen list is kept in a key-value store in your account.
state_keystringoptionalState key. Names the seen list for Only new results. Use one key per schedule. Empty: a key made from the input.
max_charge_usdstringoptionalMax charge per run (USD). Stop before a row would push this run past this amount. Empty: no limit beyond the one you set in Apify.
Output schema
{
"row_type": "string",
"input_key": "string",
"portal": "string",
"notice_id": "string",
"notice_url": "string",
"title": "string",
"description_excerpt": "string",
"buyer_name": "string",
"buyer_country": "string",
"buyer_region": "string",
"delivery_regions": "array",
"published_at": "string",
"deadline_at": "string",
"days_to_deadline": "number",
"estimated_value": "integer",
"currency": "string",
"category_codes": "array",
"category_code_scheme": "string",
"category_description": "string",
"contract_type": "string",
"procedure": "string",
"notice_type": "string",
"notice_status": "string",
"sme_suitable": "boolean",
"buyer_contact_email": "string",
"matched_keywords": "array",
"match_source": "string",
"is_new": "null",
"portals_searched": "null",
"row_status": "string",
"error_reason": "null",
"billable_events_json": "string",
"checked_at": "string"
}Pricing
Pay-per-event billing on the Apify platform. You are charged only when the actor returns a result. No subscription, no seat license.
Free-tier Apify accounts include monthly free compute. Upgrade for higher concurrency and volume.