Open Tender and RFP Finder
Pricing
from $2.55 / 1,000 notice rows
Open Tender and RFP Finder
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.
Pricing
from $2.55 / 1,000 notice rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 hours ago
Last modified
Categories
Share
Find open public tenders and RFPs (requests for proposal) that match your keywords, CPV codes, and countries. You get one row per notice with the buyer, the response deadline, the estimated value, the category codes, the buyer contact email, and a link to the notice. The notices come from four official public notice portals: UK Contracts Finder, UK Find a Tender, EU TED (Tenders Electronic Daily, the EU journal of public procurement), and CanadaBuys. Rows are flat, so they export to CSV or drop into a Clay table.
Features
- Four portals in one row layout. UK Contracts Finder and UK Find a Tender (UK central and local government, NHS, and other UK public bodies), EU TED (public bodies in the 27 EU countries plus Norway, Iceland, Switzerland, and other countries that post on TED), and CanadaBuys (Government of Canada).
- Keyword match with the evidence. Each row lists the keywords found in its title or description. EU TED matches keywords over the full notice text in every language, and those rows say
portal_full_text. - Filters that run before you pay. CPV code prefixes, buyer countries, a publication window, a minimum estimated value, exclude keywords, and open notices only. Filtered notices are never billed.
- Deadline first.
deadline_atin UTC anddays_to_deadlineon every row, so you can sort by what closes soonest. - Scheduling. Only new results skips notices an earlier run with the same state key returned, and skipped notices are free. Run it daily as an Apify schedule for a new bids feed.
- No API key. Every portal is an official open data API or file, read directly.
How it reads the portals
| Portal | Source | Licence |
|---|---|---|
| UK Contracts Finder | OCDS search API, tender stage, contractsfinder.service.gov.uk | Open Government Licence v3.0 |
| UK Find a Tender | OCDS release packages API, tender stage, find-tender.service.gov.uk | Open Government Licence v3.0 |
| EU TED | Search API v3, contract notices and calls for competition, api.ted.europa.eu | EU open data reuse policy |
| CanadaBuys | Open tender notices data file, canadabuys.canada.ca/opendata | Open Government Licence, Canada |
Requests go direct. A portal that refuses a request is retried once through the Apify proxy. The run summary (key-value store record RUN_SUMMARY) lists, per portal, notices read, notices matched, requests, and any error.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | array | Words or phrases to find in the title or description. Empty: every open notice in the window | |
exclude_keywords | array | Drop a notice that contains any of these | |
cpv_prefixes | array | Keep notices with a CPV code that starts with one of these, for example 72 or 48000000. CanadaBuys uses UNSPSC codes, so a CPV filter leaves it out | |
countries | array | Two letter buyer country codes, for example GB, DE, CA. A portal that covers none of them is skipped | |
portals | array | all four | uk_contracts_finder, uk_find_a_tender, eu_ted, canada_buys |
published_within_days | integer | 14 | Publication window, 1 to 90 days, today included |
only_open | boolean | true | Drop notices whose deadline has passed |
min_value | string | Drop notices valued below this number, in the notice currency. Notices with no value are kept | |
max_notices | integer | 100 | Notice rows per run, newest first, up to 5,000 |
only_new | boolean | false | Skip notices an earlier run with the same state_key returned |
state_key | string | Names the seen list; one key per schedule | |
max_charge_usd | string | Stop before a row would pass this amount |
Every field also accepts text, as Clay sends it: "true", "30", a comma separated list, or a JSON array.
Output
| Field | Example |
|---|---|
portal | uk_find_a_tender |
notice_id, notice_url | ocds-h6vhtk-078bf8, https://www.find-tender.service.gov.uk/Notice/099063-2026 |
title, description_excerpt | Slit-lamp Simulator and all associated parts and software |
buyer_name, buyer_country, buyer_region | NHS Education for Scotland, GB, UKM |
delivery_regions | ["UKM"] |
published_at, deadline_at, days_to_deadline | 2026-10-20, 2026-11-20T13:00:00.000Z, 30.2 |
estimated_value, currency | 250000, GBP |
category_codes, category_code_scheme, category_description | ["33100000"], CPV, Medical equipments |
contract_type, procedure, notice_type, notice_status | goods, Open procedure, tender, active |
sme_suitable | true (UK portals) |
buyer_contact_email | the address the notice publishes for questions and bids |
matched_keywords, match_source | ["software"], title_or_description |
is_new | true with Only new results on |
row_status, error_reason, billable_events_json | ok, null, {"notice-row":1} |
When nothing matches, the run returns one free row with row_type no_results and the reason, so a scheduled run always has a row.
Pricing
Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
Notice row (notice-row) | $0.003 | $0.00285 | $0.0027 | $0.00255 |
Actor start (apify-actor-start), once per run | $0.002 | $0.002 | $0.002 | $0.002 |
Free rows: the no results row and notices skipped by Only new results. A run of 100 notices costs about 0.30 USD on the free plan prices. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 500 notice rows); any paid Apify plan removes that cap.
Usage examples
Apify Console or API
{ "keywords": ["software", "cloud hosting", "data platform"], "countries": ["GB", "IE"], "published_within_days": 7 }
{ "keywords": [], "cpv_prefixes": ["72", "48"], "portals": ["eu_ted"], "countries": ["DE", "NL"], "min_value": "100000" }
{ "keywords": ["marketing", "communications"], "portals": ["canada_buys"], "max_notices": 200 }
Clay
Add an HTTP API or Apify column with your keywords, then filter rows on days_to_deadline and estimated_value. buyer_name and buyer_contact_email give you the buyer to research before you bid.
Daily new bids feed
Save the input as an Apify task with only_new true and a state_key, then schedule it daily. Each run returns only the notices published since the last one.
MCP
The MCP server @mambalabsdev/mcp-open-tender-rfp-finder exposes this actor as a tool for Claude and other MCP clients.
Error handling
| Situation | What you get |
|---|---|
| A portal is down or refuses every request | The other portals still return rows; the failed portal and its HTTP status are in RUN_SUMMARY.per_portal and, when nothing matched, in error_reason |
| Every portal fails | One free row with row_status blocked and each portal's reason |
| Nothing matches | One free row with row_status no_results |
| Only new results finds nothing new | One free row with row_status no_change |
| Max charge reached | The run stops before the next billable row and says why in the status message |
Limitations
- US federal opportunities (SAM.gov) are not covered in this version. The SAM.gov Opportunities API answered HTTP 404 to every test request on 2026-10-21 (public demo key, direct and through the Apify proxy), so it could not be verified.
- UK Contracts Finder returns at most 100 notices per request; the actor splits a full window into smaller windows and reads each.
- EU TED keyword matching is TED's own full text search over every language, so a row can match a keyword its English title does not contain (
match_sourceportal_full_text). - CanadaBuys publishes no estimated value, so
estimated_valueis empty andmin_valuekeeps every CanadaBuys row. Its closing times carry no time zone and are read as UTC. - Many notices publish no estimated value;
min_valuekeeps them. - Titles and descriptions are in the language the buyer wrote them. EU TED rows carry TED's English title.
- The buyer contact email is the address the notice publishes for bids. Use it for questions about that notice.
- Each portal's terms and licence govern reuse of its notices.
More from Mamba Labs
Built by Mamba Labs.