# Public Tenders Monitor - EU TED, UK, Germany, France & Spain (`signalscope-data/public-tenders-monitor`) Actor

Public tenders & contract awards from EU TED, UK, Germany, France & Spain in one feed, plus a market report: top winners, single-bid rate, top buyers. New-only alerts. $5 / 1,000 notices.

- **URL**: https://apify.com/signalscope-data/public-tenders-monitor.md
- **Developed by:** [Bin](https://apify.com/signalscope-data) (community)
- **Categories:** Lead generation, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 tender notices

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Public Tenders Monitor - EU TED, UK, Germany, France & Spain

Search and monitor **public procurement tenders from five official portals in one normalized feed**: the EU's **TED (Tenders Electronic Daily)**, **UK Find a Tender** (every UK public notice since the Procurement Act 2023, above and below threshold) and **Germany's oeffentlichevergabe.de** (including national below-threshold tenders that never reach TED) and **France's BOAMP** (national and MAPA notices, the French contracts below EU thresholds) and **Spain's PLACSP** (Plataforma de Contratación del Sector Público: state, regional and local tenders and awards, including simplified-open contracts below EU thresholds). Filter by keyword, CPV code, country, value and date, keep only **smaller below-threshold contracts** that SMEs can win, and switch on **new-notices-only mode** to get a daily tender alert that never repeats a notice. Add a **procurement market report** to see who buys, who wins, how many bids contracts get and where competition is weak. No login, no API key.

### Why use it

- 🇩🇪 **German below-threshold tenders** (new) - most German public contracts are awarded under national rules (VOB/A, UVgO) and are **not published on TED**. The `germany` source reads Germany's official federal notice service, adds the submission deadline, buyer city, procurement-platform `documentsUrl` and a `belowEuThreshold` flag. With TED also selected, EU-level German notices come from TED only, so there are no duplicates.
- 🇫🇷 **French national tenders (BOAMP)** (new) - the `france` source reads the official BOAMP open data: national notices and **MAPA (procédure adaptée)** tenders under EUR 90k and up to the EU thresholds, which TED never shows. Rows add the buyer city, `departments` (e.g. `["75"]`), `contractTypes` (TRAVAUX / SERVICES / FOURNITURES), BOAMP subject descriptors, the buyer platform `documentsUrl`, the published value range (`valueRangeLow` / `valueRangeHigh`) and award winners. With TED also selected, French EU-directive notices come from TED only.
- 🇪🇸 **Spanish tenders and awards (PLACSP)** (new) - the `spain` source reads the platform's official open-data feed: open tenders, prior notices and awards from buyers that publish on PLACSP, including the many **simplified-open (abierto simplificado)** and other below-EU-threshold contracts that never reach TED. Rows add the `fileNumber` (expediente), `status` (open / under evaluation / awarded / signed), `contractType` (works / services / supplies), `region` + `nutsCode`, value incl. VAT, number of `lots`, `euFunded`, a tender-documents link, and for awards the winners, awarded value, number of bids and whether an SME won. With TED also selected, Spanish above-threshold notices come from TED only.
- 📊 **Procurement market report** (new) - `includeMarketReport: true` adds one `market-report` row that sums up every matched notice: **top winners** (by number of awards and by awarded value, with share of awards and distinct buyers), **competition level** (single-bid share, median and average bids per award, bid distribution), **SME win share**, **cross-border win share**, **award vs. estimate** (median %), top buyers, value ranges, median days to respond, tenders closing this week, top CPV divisions, procedure mix and plain-English **opportunity signals**. `marketReportOnly: true` analyses up to thousands of notices for the price of one report.
- 🧩 **Below-threshold (SME-sized) tenders** - `onlyBelowThreshold: true` returns only contracts under the procurement thresholds, from UK Find a Tender (Procurement Act notices flagged below threshold), Germany (national VOB/VgV/UVgO notices), France (BOAMP national + MAPA notices) and Spain (PLACSP notices not flagged over threshold). Every UK and German notice carries a `belowEuThreshold` flag.
- 🏆 **Contract awards with winners** (new) - award notices now include `winners` (company name + country), `awardValue`, `awardCurrency`, `bidsReceived` and `awardDate`, plus `winnerSizes` (SME / large) on TED. Use `winnerNames` to **track every contract your competitors win** across the EU and UK.
- 🌍 **One schema for EU, UK, Germany, France and Spain** - EU/EEA (TED, 30+ countries), the UK (Find a Tender), Germany, France and Spain come back with the same fields: `title`, `buyer`, `country`, `deadline`, `estimatedValue`, `currency`, `cpvCodes`, `url`... Ready for a spreadsheet, CRM or Slack alert without per-portal parsing.
- 🔔 **Monitoring built in** - `onlyNewNotices` remembers what you already received (per `stateKey`), so a scheduled run returns only fresh notices. You never pay twice for the same tender.
- 🎯 **Precise filters** - keywords (TED searches every EU language), CPV prefixes (`72` = IT services, `45` = construction...), buyer countries, min/max value, notice age, open tenders only.
- 🗂️ **Tenders, pipeline or awards** - open calls for competition (default), planning / prior-information notices, or contract award results.
- ⏰ **Deadline aware** - normalized ISO deadlines plus `daysUntilDeadline`; expired tenders are skipped by default.
- 🔓 **Official public APIs only** - TED Search API v3 and the UK government OCDS APIs. Reliable, no scraping of HTML, no CAPTCHA.

### Use cases

- **Bid / sales teams** - get every new IT, consulting, construction or healthcare tender in your markets each morning.
- **Lead generation** - find public buyers actively spending in your category, with budget and deadline.
- **Competitor tracking** - `winnerNames: ["Capgemini", "Sopra Steria"]` returns each contract they won: buyer, value, number of competing bids.
- **Market intelligence** - track who buys what, who wins and at what price; see how many bids a buyer usually receives.
- **Bid / no-bid and market entry** - one market report per CPV code and country tells you whether a segment is crowded (many bids, incumbents win) or open (single bids, fragmented winners, SMEs win).
- **Consultants & bid writers** - run one monitor per client with separate `stateKey`s.
- **AI agents & automations** - feed normalized notices to an LLM for bid/no-bid scoring, or push them to Slack, email, Sheets via Apify integrations.

### Input example

```json
{
  "keywords": ["software", "cloud"],
  "sources": ["ted", "find-a-tender"],
  "noticeTypes": ["tender"],
  "cpvCodes": ["72", "48"],
  "countries": ["DE", "FR", "IE"],
  "minValue": 100000,
  "publishedWithinDays": 7,
  "maxResults": 200,
  "onlyNewNotices": true,
  "stateKey": "it-tenders-daily"
}
```

| Field | Meaning |
|---|---|
| `sources` | `ted`, `find-a-tender` (default) `germany`, `france` and `spain` (opt-in); `contracts-finder` = legacy UK portal, see FAQ |
| `noticeTypes` | `tender` (open calls, default), `planning`, `award` |
| `keywords` | any word/phrase matches; TED searches all languages |
| `strictKeywordMatch` | TED: keep only notices with the keyword in title / CPV / summary (default `true`) |
| `cpvCodes` | CPV prefixes, e.g. `72`, `4822`, `45000000` |
| `countries` | TED buyer countries, ISO-2 or ISO-3 (`DE`, `FRA`) |
| `minValue` / `maxValue` | estimated value in the notice's currency (EUR / GBP) |
| `includeNoValue` | keep notices without a published value when a value filter is set |
| `excludeExpired` | skip tenders whose deadline has passed (default `true`) |
| `publishedWithinDays` | 1-90 (default 7) |
| `onlyBelowThreshold` | only notices below the procurement thresholds (UK Find a Tender, Germany, France, Spain; TED is skipped) |
| `winnerNames` | only awards won by companies whose name contains any of these words (adds `award` automatically) |
| `onlyNewNotices` + `stateKey` | monitor mode |

#### Germany example (Ausschreibungen incl. unterschwellige Vergaben)

```json
{
  "sources": ["ted", "germany"],
  "countries": ["DE"],
  "keywords": ["software", "IT-Dienstleistungen"],
  "publishedWithinDays": 3,
  "onlyNewNotices": true,
  "stateKey": "de-it-daily"
}
```

In a 5-day test window for "software" in Germany, TED returned 120 notices and the `germany` source added 23 national tenders that are not on TED.

#### France example (appels d'offres incl. MAPA)

```json
{
  "sources": ["ted", "france"],
  "countries": ["FR"],
  "keywords": ["logiciel"],
  "publishedWithinDays": 7
}
```

In a 7-day test for "logiciel", TED returned 53 French notices and the `france` source added 17 national / MAPA notices that are not on TED (e.g. a Microsoft 365 licensing contract with a EUR 200k estimated value).

**Tip:** schedule it daily with `onlyNewNotices: true` and `publishedWithinDays: 3` - each run delivers just the new tenders.

#### Spain example (licitaciones incl. procedimiento abierto simplificado)

```json
{
  "sources": ["ted", "spain"],
  "countries": ["ES"],
  "keywords": ["software"],
  "noticeTypes": ["tender", "award"],
  "publishedWithinDays": 7
}
```

In a 7-day cloud test for "software", TED returned 36 Spanish open tenders and the `spain` source added 21 more that are not on TED, e.g. a queue-management and appointment software for the Calp town hall (simplified open, EUR 6,116) or SAS licences for the Asturias health department (EUR 46,308).

Example Spanish award row (real, October 2026): road resurfacing for the Concello de Negreira (A Coruña), simplified open procedure, budget EUR 87,358, **3 bids**, won by an SME for EUR 83,864 - a contract TED never shows (`belowEuThreshold: true`).

**Speed:** the PLACSP feed is a change log of about 400 contract folders per page. A 3-day scan takes about 3 minutes, 7 days about 14 minutes (30 days ≈ 50 minutes, within the default 1-hour timeout); for daily alerts use `publishedWithinDays: 2` with `onlyNewNotices: true`. The platform refreshes the feed about once a day, so Spanish notices appear with up to a day of delay.

#### Competitor tracking example: contracts won by named companies

```json
{
  "sources": ["ted", "find-a-tender"],
  "noticeTypes": ["award"],
  "winnerNames": ["Capgemini", "Sopra Steria"],
  "publishedWithinDays": 30,
  "onlyNewNotices": true,
  "stateKey": "competitor-wins"
}
```

Award rows add these fields (real TED example):

```json
{
  "noticeType": "award",
  "buyer": "Landbruksdirektoratet",
  "title": "Consultant for managing strategy work in the Norwegian Agriculture Agency",
  "country": "NO",
  "winners": [{ "name": "Sopra Steria AS", "country": "NO" }],
  "winnerSizes": ["large"],
  "awardValue": 7800000,
  "awardCurrency": "NOK",
  "bidsReceived": 7,
  "awardDate": null,
  "url": "https://ted.europa.eu/en/notice/-/detail/681489-2026"
}
```

#### Market report example: who wins EU IT-services contracts?

```json
{
  "sources": ["ted"],
  "noticeTypes": ["tender", "award"],
  "cpvCodes": ["72"],
  "publishedWithinDays": 30,
  "maxResults": 800,
  "marketReportOnly": true
}
```

Real result (30 days to 2026-10-07, 982 TED notices, one row, shortened):

```json
{
  "recordType": "market-report",
  "noticesAnalyzed": 982,
  "byNoticeType": { "tender": 592, "award": 390 },
  "topCountries": [{ "country": "DE", "notices": 149, "share": 15.2 }, { "country": "PL", "notices": 128, "share": 13 }],
  "topCpvDivisions": [{ "division": "48", "name": "Software packages and information systems", "notices": 260, "share": 26.5 }],
  "tenders": { "count": 592, "currency": "EUR", "medianEstimatedValue": 795448, "estimatedValueP25": 333597, "estimatedValueP75": 2700000, "closingNext7Days": 58 },
  "awards": {
    "count": 390, "distinctWinners": 555, "top5WinnersShare": 2.2,
    "medianAwardValue": 375540, "medianBidsReceived": 2, "averageBidsReceived": 2.9, "singleBidShare": 40.7,
    "bidsDistribution": { "1": 133, "2-3": 116, "4-9": 68, "10+": 10 },
    "smeWinShare": 69.9, "crossBorderWinShare": 6.6,
    "topWinners": [{ "winner": "SVA System Vertrieb Alexander GmbH", "awards": 3, "distinctBuyers": 2, "buyerCountries": ["DE"] }],
    "topWinnersByValue": [{ "winner": "PROXIMUS", "awards": 2, "awardValue": 29085301, "currency": "EUR" }]
  },
  "topBuyers": [{ "buyer": "Bundesrepublik Deutschland ... Beschaffungsamt des BMI", "country": "DE", "notices": 13, "tenders": 7, "awards": 6 }],
  "opportunitySignals": [
    "58 open tenders close within 7 days.",
    "40.7% of awards with a bid count had only ONE bid - weak competition, an easier market to enter.",
    "The top 5 winners take only 2.2% of awards - a fragmented market with room for new suppliers.",
    "SMEs won 69.9% of awards with a known winner size."
  ]
}
```

The same report for UK, French and Spanish awards (3 days, 623 awards) showed 43% single-bid awards, a median award at 77% of the buyer's estimate and 52% of notices below the EU thresholds. The report is also saved as the `MARKET_REPORT` record in the key-value store.

### Output example

```json
{
  "source": "ted",
  "noticeId": "680245-2026",
  "title": "Ausschreibungsmodul für den deutschen Kapazitätsmarkt",
  "titleEnglish": "Germany – IT services: consulting, software development, Internet and support – Ausschreibungsmodul für den deutschen Kapazitätsmarkt",
  "buyer": "TenneT TSO GmbH",
  "country": "DE",
  "publishedAt": "2026-10-02T00:00:00.000Z",
  "deadline": "2026-10-30T22:59:00.000Z",
  "daysUntilDeadline": 27,
  "cpvCodes": ["72000000"],
  "estimatedValue": 999999,
  "currency": "EUR",
  "procedureType": "neg-w-call",
  "noticeType": "tender",
  "noticeSubtype": "cn-standard",
  "url": "https://ted.europa.eu/en/notice/-/detail/680245-2026",
  "description": "Projektanlass TenneT soll zusammen mit den anderen deutschen Übertragungsnetzbetreibern ...",
  "matchedKeywords": ["software"]
}
```

UK notices have the same shape (`source`: `find-a-tender`, `country`: `GB`, values in GBP, `procedureType` such as "Open procedure", plus `belowEuThreshold`). Each run also writes a `SUMMARY` record to the key-value store with per-source counts.

### FAQ

**Which countries are covered?** All EU/EEA countries via TED (above EU thresholds), the UK via Find a Tender (above and below threshold), Germany in full (above and below thresholds) via oeffentlichevergabe.de, France in full via BOAMP, and Spain via the PLACSP open-data feed (buyers that publish on PLACSP, which includes all central-government bodies and many regions and municipalities; some regions such as Catalonia, Madrid or the Basque Country also run their own platforms).

**Why do I need the Germany source if TED covers Germany?** TED only publishes contracts above the EU thresholds (about EUR 221k for services, EUR 5.5M for works). Most German municipal and state tenders are smaller and appear only on national portals. The `germany` source adds them.

**Why add the France source if TED covers France?** About 40% of what BOAMP publishes each week is national: notices between EUR 90k and the EU thresholds and MAPA notices under EUR 90k (around 800 open tenders a week). They are never sent to TED. Search them with French keywords ("logiciel", "nettoyage", "maintenance") or CPV codes. Not every MAPA notice has a CPV code, so a CPV-only filter can miss some of them; BOAMP's own subject tags are in `boampDescriptors`.

**Why add the Spain source if TED covers Spain?** In our 3-day test, PLACSP had about 3,000 updated contract folders; 700 were above-threshold notices that TED also has, the rest were national: simplified-open and other below-threshold tenders, contracts based on framework agreements and their awards. Spanish rows are in Spanish - use keywords like "software", "limpieza", "mantenimiento", "obras" or CPV codes.

**Do German notices have a value?** Only when the buyer publishes one (about 10-20% of notices). Deadlines are available for almost all open tenders.

**Are the notices in English?** Notices are in the original language. Search German notices with German keywords (e.g. "Reinigung", "Software", "Bauleistungen") for best results; CPV codes work in every language.

**Can I see who won a contract?** Yes. Select `award` in `noticeTypes`. TED award rows carry the winning companies (name, country, size), the awarded value, the number of bids received and the decision date. Spanish awards carry the winners, awarded value (excl. VAT), bids received, award date and an SME flag. UK and German awards carry the suppliers and awarded value published in the OCDS data. For TED, `winnerNames` is searched server-side, so even 90-day lookbacks are fast.

**How do I find smaller tenders my company can realistically win?** Set `onlyBelowThreshold: true` with `sources: ["find-a-tender", "germany"]`. In a 3-day test this returned 22 UK and 38 German below-threshold open tenders; add keywords or CPV codes to narrow it to your field.

**What happened to UK Contracts Finder?** Since the Procurement Act 2023 took effect (24 Feb 2025), new UK public notices of any value are published on Find a Tender, which this Actor covers. Contracts Finder's open-data feed currently returns no notices; if you still select `contracts-finder`, the Actor detects this in about a second, says so in the log and `SUMMARY`, and continues with your other sources.

**What is in the market report and how big is the sample?** One `market-report` row per run, built from every notice that matched your filters (up to `maxResults` per source). Values are summed in the most common currency of the sample (mixed EUR / GBP samples say how many values were in other currencies). Bid counts come from TED, Spain and UK OCDS data; winner size from TED and Spain. With `marketReportOnly: true` no notice rows are output or charged, so set `maxResults` to 1,000-2,000 for a solid sample. In `onlyNewNotices` mode the report describes only the new notices of that run.

**How do I compare two markets?** Run the Actor twice (e.g. CPV `72` in `DE` and in `FR`, or `cpvCodes: ["45"]` vs `["90"]`) with `marketReportOnly: true` and compare `singleBidShare`, `medianBidsReceived`, `top5WinnersShare` and `smeWinShare`.

**How do I get only new tenders every day?** Turn on `onlyNewNotices`, set a `stateKey`, and schedule the Actor. Already-delivered notices are skipped and not charged.

### Pricing

- **$5 per 1,000 notices** ($0.005 per notice) - you pay only for notices delivered to the dataset.
- In monitor mode, already-seen notices are free - they are filtered out before output.
- **$0.05 per market report** (one row per run, only when `includeMarketReport` or `marketReportOnly` is on). Report-only runs charge no notices.
- Set a maximum charge per run in Apify and the Actor stops cleanly when it is reached.

### Notes

- Data comes from official open-data APIs: TED (© European Union, reuse under the EU open data policy), UK Find a Tender (Open Government Licence v3.0), oeffentlichevergabe.de, BOAMP (DILA open data, Licence Ouverte) and PLACSP (Ministerio de Hacienda open data, reuse permitted with attribution). This Actor is not affiliated with the EU Publications Office or the UK Cabinet Office.
- Only organisation-level data (public buyers and winning companies) is returned - no contact persons, emails or addresses.
- Notices are listed in their original language; TED also provides `titleEnglish` (country – CPV category – title).
- Find a Tender rate-limits heavy use (about 30 requests per few minutes). A 7-day UK scan takes under a minute; 30 days take roughly 10-15 minutes because the Actor waits out the limit automatically. Daily monitors with `publishedWithinDays: 2-3` stay fast. Long runs stop cleanly before the run timeout (`stoppedEarly` in `SUMMARY`).

### More tools from the same developer

- [Company Jobs Scraper (ATS)](https://apify.com/signalscope-data/ats-jobs-scraper) - every open job from any company careers page: Workday, Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee.
- [Workday Jobs Scraper](https://apify.com/signalscope-data/workday-jobs-scraper) - job postings from any Workday career site.

# Actor input Schema

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

Return notices mentioning ANY of these words or phrases (case-insensitive). TED searches the full notice text in any language; UK sources match title and description. Leave empty for all notices.

## `strictKeywordMatch` (type: `boolean`):

TED full-text search also matches deep inside long notices and annexes. When on, a TED notice is kept only if a keyword appears in its title, CPV description or summary (any language). Turn off for maximum recall.

## `sources` (type: `array`):

Portals to search (array; several in one run, duplicates removed). 'ted' = EU TED, all EU/EEA above-threshold notices. 'find-a-tender' = every new UK notice. 'germany' = oeffentlichevergabe.de, incl. below-threshold. 'france' = BOAMP, incl. MAPA/below-threshold (use French keywords). 'spain' = PLACSP tenders and awards with winners (use Spanish keywords). National notices also on TED come from TED only. 'contracts-finder' = legacy UK feed, currently empty.

## `noticeTypes` (type: `array`):

Which stages to return: 'tender' = open calls for competition (default), 'planning' = prior information / pipeline notices, 'award' = contract award results. Award rows include winners (company name + country), awardValue, awardCurrency, bidsReceived and awardDate.

## `winnerNames` (type: `array`):

Return only contract awards won by companies whose name contains ANY of these words, e.g. "Accenture", "Capgemini", "Sopra Steria". Track which contracts your competitors (or prospects) win, with value, buyer and bids received. Automatically adds 'award' to the notice types; other stages have no winner.

## `onlyBelowThreshold` (type: `boolean`):

Return only notices below the public-procurement thresholds - the smaller contracts that SMEs can realistically win. Works with 'find-a-tender' (UK Procurement Act notices flagged below threshold) 'germany' (national VOB/VgV/UVgO notices) 'france' (BOAMP national and MAPA notices) and 'spain' (PLACSP notices not flagged over the EU threshold). TED is skipped because it only publishes above-threshold notices. Each notice has a 'belowEuThreshold' field either way.

## `cpvCodes` (type: `array`):

Common Procurement Vocabulary code prefixes, e.g. "72" (IT services), "48" (software packages), "45" (construction), "7222". A notice matches if any of its CPV codes starts with any prefix. Leave empty for all sectors.

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

Buyer countries for EU TED as ISO codes, 2 or 3 letters, e.g. "DE", "FRA", "IE". Leave empty for all countries. UK sources always return UK notices.

## `minValue` (type: `integer`):

Skip notices whose estimated value is below this amount (in the notice's own currency, usually EUR or GBP).

## `maxValue` (type: `integer`):

Skip notices whose estimated value is above this amount (in the notice's own currency).

## `includeNoValue` (type: `boolean`):

Many notices do not publish an estimated value. When a min/max value is set, keep (true) or drop (false) those notices.

## `excludeExpired` (type: `boolean`):

Drop tenders whose submission deadline is already in the past. Notices without a deadline are kept.

## `publishedWithinDays` (type: `integer`):

Only notices published in the last N days.

## `maxResults` (type: `integer`):

Maximum number of notices to output in total across all sources (newest first). Also the sample size per source for the market report.

## `includeMarketReport` (type: `boolean`):

Add one 'market-report' row that sums up all matched notices: top buyers, top winners and their share, single-bid rate and median bids per award (competition level), SME and cross-border win share, award vs. estimate, value ranges, days to respond, tenders closing this week, top CPV divisions and plain-English opportunity signals. Tip: select 'award' notice types to get winner and competition stats. Charged once per run.

## `marketReportOnly` (type: `boolean`):

Output only the market report row - notices are analysed but not output or charged, so you can raise 'Max results' (e.g. 2,000) for a bigger sample at the cost of one report. 'Only new notices' is ignored in this mode.

## `onlyNewNotices` (type: `boolean`):

Remember which notices were already returned and output only new ones. Ideal for scheduled daily tender alerts - you never pay twice for the same notice.

## `stateKey` (type: `string`):

Used with 'Only new notices'. Use a different name for each separate monitor/schedule.

## Actor input object example

```json
{
  "keywords": [
    "software",
    "cloud"
  ],
  "strictKeywordMatch": true,
  "sources": [
    "ted",
    "find-a-tender"
  ],
  "noticeTypes": [
    "tender"
  ],
  "onlyBelowThreshold": false,
  "includeNoValue": true,
  "excludeExpired": true,
  "publishedWithinDays": 7,
  "maxResults": 200,
  "includeMarketReport": false,
  "marketReportOnly": false,
  "onlyNewNotices": false,
  "stateKey": "default"
}
```

# Actor output Schema

## `results` (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",
        "cloud"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("signalscope-data/public-tenders-monitor").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",
        "cloud",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("signalscope-data/public-tenders-monitor").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",
    "cloud"
  ]
}' |
apify call signalscope-data/public-tenders-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalscope-data/public-tenders-monitor"
        }
    }
}
```

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/g9Yr4qMr4YKcYrX2d/builds/Nh2YAKF4LumXCi57t/openapi.json
