# Open Tender and RFP Finder (`mambalabs/open-tender-rfp-finder`) Actor

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.

- **URL**: https://apify.com/mambalabs/open-tender-rfp-finder.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.55 / 1,000 notice rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Open Tender and RFP Finder

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_at` in UTC and `days_to_deadline` on 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

```json
{ "keywords": ["software", "cloud hosting", "data platform"], "countries": ["GB", "IE"], "published_within_days": 7 }
```

```json
{ "keywords": [], "cpv_prefixes": ["72", "48"], "portals": ["eu_ted"], "countries": ["DE", "NL"], "min_value": "100000" }
```

```json
{ "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_source` `portal_full_text`).
- CanadaBuys publishes no estimated value, so `estimated_value` is empty and `min_value` keeps every CanadaBuys row. Its closing times carry no time zone and are read as UTC.
- Many notices publish no estimated value; `min_value` keeps 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

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [B2B Reddit Conversation Monitor](https://apify.com/mambalabs/b2b-reddit-conversation-monitor?fpr=mamba) | `SoDryzzsjmY3SsiyG` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |

Built by [Mamba Labs](https://apify.com/mambalabs?fpr=mamba).

# Actor input Schema

## `keywords` (type: `array`):

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_keywords` (type: `array`):

Drop a notice whose title or description contains any of these, for example cleaning or catering.

## `cpv_prefixes` (type: `array`):

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.

## `countries` (type: `array`):

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.

## `portals` (type: `array`):

Which public notice portals to read. Empty: all four.

## `published_within_days` (type: `integer`):

Only notices published in the last this many days, today included.

## `only_open` (type: `boolean`):

Drop notices whose response deadline has passed. A notice with no published deadline is kept.

## `min_value` (type: `string`):

Drop notices with an estimated value below this number, in the notice's own currency. A notice that publishes no value is kept.

## `max_notices` (type: `integer`):

Notice rows per run, newest first. Each notice row is one notice-row charge.

## `only_new` (type: `boolean`):

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_key` (type: `string`):

Names the seen list for Only new results. Use one key per schedule. Empty: a key made from the input.

## `max_charge_usd` (type: `string`):

Stop before a row would push this run past this amount. Empty: no limit beyond the one you set in Apify.

## `source_tag` (type: `string`):

Internal attribution tag for published tasks. Leave empty.

## Actor input object example

```json
{
  "keywords": [
    "software"
  ],
  "published_within_days": 14,
  "only_open": true,
  "max_notices": 20,
  "only_new": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `run_summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "software"
    ],
    "max_notices": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/open-tender-rfp-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["software"],
    "max_notices": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/open-tender-rfp-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "software"
  ],
  "max_notices": 20
}' |
apify call mambalabs/open-tender-rfp-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/open-tender-rfp-finder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/kPTGz6t6TFoUUyfaO/builds/IHQDUD2XMshtI5VOb/openapi.json
