# Tender Bid Qualifier: AI Bid/No-Bid Analysis for EU Tenders (`chief_kite/tender-bid-qualifier`) Actor

Scores EU public tenders from TED against your company profile. Extracts mandatory requirements, eligibility risks, award criteria and deadlines, and returns a BID / CONSIDER / SKIP verdict with reasons.

- **URL**: https://apify.com/chief_kite/tender-bid-qualifier.md
- **Developed by:** [John Smith](https://apify.com/chief_kite) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 quick analyses

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

## Tender Bid Qualifier: AI Bid/No-Bid Analysis for EU Tenders

Stop reading tender notices just to find out you can't bid. Describe your company once, and this Actor reads official EU tender notices from TED (Tenders Electronic Daily) in any EU language, checks them against your profile, and returns a clear **BID / CONSIDER / SKIP** verdict with reasons, mandatory requirements, knockout issues and deadlines.

### What it does

1. Finds open tenders on TED using your CPV codes, buyer countries and publication window, or takes a list of tender IDs from any TED scraper. Only competition notices are included: award notices and other notices you can no longer bid on are excluded.
2. Skips tenders that close too soon, **before analysis and at no charge**.
3. If more tenders match than `maxTenders`, analyzes the **most relevant** ones first: tenders whose **main** CPV code matches one you searched (including sub-codes of a searched division, e.g. 72212000 under 72000000), then those with the **most days left**. Choosing is free: up to 500 matches are checked, and the run's status message and `SUMMARY` say how many matched and how many were analyzed, e.g. "84 tenders matched; analyzed the 10 most relevant (main CPV match first, then most days left). Increase 'Maximum tenders' to analyze more." Tenders passed in `tenderIds` are analyzed as given.
4. Reads each notice and extracts what matters: what is being bought, estimated value, lots, mandatory requirements, award criteria and submission language.
5. Scores the fit against your company profile (0-100) and gives a verdict with the reasons behind it.

### Who it's for

- **SMEs without a bid team** that want only the tenders worth their time.
- **Bid consultants** screening tenders for several clients (one run per client profile).
- **Developers** adding an AI qualification layer to procurement tools, CRMs or alert pipelines.

### Input

| Field | Description |
|---|---|
| `companyProfile` | Your services, size, turnover, certifications, past contract values, countries and bid languages, plus your 3-5 most relevant references (client type, year, value, scope). Required. |
| `cpvCodes` | CPV codes to search, e.g. `72000000` for IT services. Default `72000000`; an empty list searches all codes. |
| `countries` | Buyer countries as ISO alpha-3 codes, e.g. `DEU`, `AUT`, `NLD`. Default `DEU`, `AUT`; an empty list searches all countries. |
| `publishedWithinDays` | Only tenders published in the last N days (default 7). |
| `minDaysToDeadline` | Skip tenders closing sooner than this, free of charge (default 14). |
| `maxTenders` | Maximum tenders analyzed in this run (default 10). |
| `analysisDepth` | `quick` for low-cost screening, `full` for a deeper read of shortlisted tenders. |
| `tenderIds` | Optional TED publication numbers, e.g. `505064-2026`. Overrides search filters. |
| `expertQuery` | Optional full TED Expert Search query. |

### Output

One dataset item per analyzed tender. Example (shortened):

```json
{
  "verdict": "BID",
  "fit_score": 78,
  "close_call": false,
  "title": "Development and maintenance of a citizen services portal",
  "buyer": "Stadt Musterstadt",
  "countries": ["DEU"],
  "deadline": "2026-11-20",
  "deadline_type": "tender",
  "days_left": 41,
  "estimated_value": "EUR 420,000 excl. VAT, 3 years",
  "reasons_text": "Core scope (portal development and maintenance) matches your main service\nContract value is within your past contract range\nISO 27001 requirement is met",
  "knockouts_text": "",
  "review_flags_text": "1 mandatory requirement(s) unverified: confirm before committing",
  "requirements_text": "met: ISO 27001 certification\nmet: Minimum annual turnover EUR 1M\nunverified: Three comparable references in the last 3 years",
  "verdict_reasons": [
    "Core scope (portal development and maintenance) matches your main service",
    "Contract value is within your past contract range",
    "ISO 27001 requirement is met"
  ],
  "knockout_issues": [],
  "mandatory_requirements": [
    {"requirement": "ISO 27001 certification", "category": "certification", "profile_status": "met"},
    {"requirement": "Minimum annual turnover EUR 1M", "category": "financial", "profile_status": "met"},
    {"requirement": "Three comparable references in the last 3 years", "category": "experience", "profile_status": "unverified"}
  ],
  "award_criteria": ["Price 40%", "Quality of technical concept 60%"],
  "submission_language": "German",
  "score_breakdown": {"service_match": 34, "capacity_fit": 17, "eligibility": 16, "practicality": 11},
  "confidence": "high",
  "needs_human_review": false,
  "review_flags": ["1 mandatory requirement(s) unverified: confirm before committing"],
  "notice_url": "https://ted.europa.eu/en/notice/-/detail/505064-2026"
}
```

The `*_text` fields hold the same content as the arrays, one line per entry, so they read well in a spreadsheet. The arrays stay in every item for API users.

Two dataset views are included: **Bid/No-Bid overview** (verdict, score, close call, tender, buyer, deadline, days left, value, reasons, things to check, notice link) and **Requirements & risks**.

Each run also saves a readable **HTML report** (key-value store record `REPORT`, linked on the run's Output tab): BID and CONSIDER tenders first, sorted by score, with summary, reasons, things to check and the notice link; SKIPs are collapsed at the end.

**Tip: export the overview to Excel.** In the run's Storage tab, choose Export, select the **Bid/No-Bid overview** view, then **Excel (XLSX)**. XLSX keeps German and other accented characters (ä, ö, ü, ß, –) intact in every Excel version and locale. Use CSV for Google Sheets or other tools; if Excel shows characters like "fÃ¼r" in a CSV, import it via Data → From Text/CSV with encoding UTF-8, or use XLSX instead. Via the API: `https://api.apify.com/v2/datasets/<datasetId>/items?view=overview&format=xlsx`. Without the view you get every field, including nested arrays.

### Pricing

Pay per event. You only pay for tenders that were successfully analyzed:

| Event | Price |
|---|---|
| Quick analysis (per tender) | $0.10 |
| Full analysis (per tender) | $1.00 |

*Apify also charges a fixed start fee of $0.00005 per run, regardless of results.*

**Example:** screening 50 tenders with `quick` and re-checking 3 close calls with `full` costs 50 × $0.10 + 3 × $1.00 = **$8.00**.

**Never charged:** tenders skipped by your deadline filter (`minDaysToDeadline`), notices that are no longer open for bids (such as award notices), older versions of corrected notices, and any analysis that fails. Set a maximum cost per run in Apify and the Actor stops analyzing when it is reached.

**Tip:** screen broadly with `quick`, then re-run your shortlist and every `close_call` tender with `full` using `tenderIds`. A close call is a score near the BID (70) or CONSIDER (45) line, where the verdict could go either way: within 6 points for `quick`, within 4 for `full`.

### Integrations

- **Scheduled alerts:** schedule the Actor daily and send BID verdicts to Slack or email with an Apify integration.
- **n8n / Make:** trigger runs and route results into your CRM or bid pipeline.
- **AI assistants:** use it through the Apify MCP server.
- **Other TED scrapers:** pass their publication numbers into `tenderIds` to add AI qualification on top.

### Limitations (please read)

- The analysis is based on the **official TED notice**. Full tender documents (technical specifications, contract drafts) are usually hosted on the buyer's own platform and are not read. Items that would only be in those documents are listed under `missing_information`.
- AI analysis can miss or misread details. **Always verify mandatory requirements and deadlines in the source notice before deciding to bid.** Items flagged `needs_human_review` deserve a closer look.
- In restricted and negotiated procedures the notice often has no tender deadline yet, only a deadline for requests to participate. In that case `deadline` is that participation deadline and `deadline_type` is `request_to_participate`; the tender deadline comes later in the procedure.
- `countries` lists every buyer country on the notice. Joint procurements can include buyers outside the countries you searched for.
- Notices without any deadline in the TED data (for example qualification systems) are not filtered by `minDaysToDeadline` and are analyzed.
- Verdicts are only as good as your company profile. Vague profiles produce vague verdicts. Tenders often require comparable references: if your profile lists none, those requirements stay `unverified` and verdicts are more cautious.

### FAQ

**Is this legal?** Yes. It uses TED's official, public Search API and collects no personal data. TED data is published by the Publications Office of the European Union. This Actor is not affiliated with or endorsed by the EU.

**Which languages are supported?** Notices in all EU languages are analyzed; output is in English.

**Which tenders are covered?** Tenders published on TED, which by law includes public contracts above EU thresholds. Smaller national tenders below the thresholds may not appear on TED.

# Actor input Schema

## `companyProfile` (type: `string`):

Describe your company in plain language: services you deliver, team size, annual turnover, certifications (e.g. ISO 27001), typical and largest past contract values, countries you can work in, and languages you can bid in. Also list your 3-5 most relevant references (client type, year, contract value, scope): tenders often require comparable references, and verdicts are much sharper with them. The more specific, the better the verdicts.

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

Common Procurement Vocabulary codes to search, e.g. 72000000 (IT services). Default: 72000000. An empty list searches all CPV codes. Ignored if Tender IDs or an expert query are given.

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

ISO 3166-1 alpha-3 country codes of the buying authority, e.g. DEU, AUT, NLD. Default: DEU, AUT. An empty list searches all countries.

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

Only tenders published in the last N days.

## `minDaysToDeadline` (type: `integer`):

Tenders closing sooner than this are skipped before analysis, at no charge.

## `maxTenders` (type: `integer`):

Upper limit of tenders analyzed (and charged) in this run.

## `analysisDepth` (type: `string`):

Quick: fast, low-cost screening. Full: deeper reading of requirements and criteria, recommended for shortlisted tenders.

## `tenderIds` (type: `array`):

Analyze specific TED notices by publication number, e.g. 505064-2026. Works with output from any TED scraper. Overrides the search filters above. Notices no longer open for bids (e.g. award notices) are skipped at no charge.

## `expertQuery` (type: `string`):

A full TED Expert Search query. Overrides CPV codes, countries and publication window. Build and test it at ted.europa.eu/en/expert-search. Only competition notices (still open for bids) are returned.

## Actor input object example

```json
{
  "companyProfile": "Mid-size IT services company based in Germany, 140 employees (110 developers, consultants and operations staff). Annual turnover: 2023 EUR 14.2M, 2024 EUR 15.8M, 2025 EUR 17.1M.\n\nWhat we do:\n- Custom software development: web applications, portals and specialist business applications (Java, .NET, TypeScript, Python).\n- Maintenance, support and further development of existing applications, including taking over systems built by other vendors.\n- Application operation and cloud hosting (Azure, AWS and a German data centre partner), 24/7 monitoring and 2nd/3rd-level application support.\n- IT consulting: requirements analysis, architecture, IT strategy, project management and agile coaching.\n- Business intelligence and data platforms: data warehouses, ETL and dashboards (Power BI, Microsoft Fabric, Azure Data Factory).\n\nCertifications: ISO 9001, ISO 27001 (incl. BSI IT-Grundschutz experience), Microsoft Solutions Partner. Professional liability insurance EUR 5M per claim.\nPublic sector: 35 public contracts in the last 5 years, typical value EUR 200k to 3M, largest EUR 6.5M over 4 years. We can staff up to 25 people on one contract. Regions: Germany and Austria. Bid languages: German and English.\n\nReferences (last 3 years):\n1. Federal agency (Germany), 2023-2026, EUR 3.2M: development and operation of a case-management web application, incl. hosting.\n2. State ministry (Germany), 2024-2025, EUR 850k: data warehouse and Power BI reporting for a statewide programme.\n3. Statutory health insurer (Germany), since 2022, EUR 2.1M: maintenance and further development of member portals.\n4. City administration (Austria), 2023-2024, EUR 480k: citizen services portal with accessibility (WCAG 2.1 AA).\n5. Public utility (Germany), since 2024, EUR 1.4M: cloud migration and operation of business applications on Azure.\n\nWe do NOT: supply hardware; resell software licences as a standalone service; staff leasing or pure body leasing; SAP implementation; telecommunications or network infrastructure; construction.",
  "cpvCodes": [
    "72000000"
  ],
  "countries": [
    "DEU",
    "AUT"
  ],
  "publishedWithinDays": 7,
  "minDaysToDeadline": 14,
  "maxTenders": 10,
  "analysisDepth": "quick"
}
```

# Actor output Schema

## `report` (type: `string`):

Readable report of this run: BID and CONSIDER first, SKIPs collapsed.

## `overview` (type: `string`):

One row per analyzed tender, with flat text columns for spreadsheets.

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

Full analysis per tender, including the original arrays for API users.

# 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 = {
    "companyProfile": `Mid-size IT services company based in Germany, 140 employees (110 developers, consultants and operations staff). Annual turnover: 2023 EUR 14.2M, 2024 EUR 15.8M, 2025 EUR 17.1M.

What we do:
- Custom software development: web applications, portals and specialist business applications (Java, .NET, TypeScript, Python).
- Maintenance, support and further development of existing applications, including taking over systems built by other vendors.
- Application operation and cloud hosting (Azure, AWS and a German data centre partner), 24/7 monitoring and 2nd/3rd-level application support.
- IT consulting: requirements analysis, architecture, IT strategy, project management and agile coaching.
- Business intelligence and data platforms: data warehouses, ETL and dashboards (Power BI, Microsoft Fabric, Azure Data Factory).

Certifications: ISO 9001, ISO 27001 (incl. BSI IT-Grundschutz experience), Microsoft Solutions Partner. Professional liability insurance EUR 5M per claim.
Public sector: 35 public contracts in the last 5 years, typical value EUR 200k to 3M, largest EUR 6.5M over 4 years. We can staff up to 25 people on one contract. Regions: Germany and Austria. Bid languages: German and English.

References (last 3 years):
1. Federal agency (Germany), 2023-2026, EUR 3.2M: development and operation of a case-management web application, incl. hosting.
2. State ministry (Germany), 2024-2025, EUR 850k: data warehouse and Power BI reporting for a statewide programme.
3. Statutory health insurer (Germany), since 2022, EUR 2.1M: maintenance and further development of member portals.
4. City administration (Austria), 2023-2024, EUR 480k: citizen services portal with accessibility (WCAG 2.1 AA).
5. Public utility (Germany), since 2024, EUR 1.4M: cloud migration and operation of business applications on Azure.

We do NOT: supply hardware; resell software licences as a standalone service; staff leasing or pure body leasing; SAP implementation; telecommunications or network infrastructure; construction.`,
    "cpvCodes": [
        "72000000"
    ],
    "countries": [
        "DEU",
        "AUT"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chief_kite/tender-bid-qualifier").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 = {
    "companyProfile": """Mid-size IT services company based in Germany, 140 employees (110 developers, consultants and operations staff). Annual turnover: 2023 EUR 14.2M, 2024 EUR 15.8M, 2025 EUR 17.1M.

What we do:
- Custom software development: web applications, portals and specialist business applications (Java, .NET, TypeScript, Python).
- Maintenance, support and further development of existing applications, including taking over systems built by other vendors.
- Application operation and cloud hosting (Azure, AWS and a German data centre partner), 24/7 monitoring and 2nd/3rd-level application support.
- IT consulting: requirements analysis, architecture, IT strategy, project management and agile coaching.
- Business intelligence and data platforms: data warehouses, ETL and dashboards (Power BI, Microsoft Fabric, Azure Data Factory).

Certifications: ISO 9001, ISO 27001 (incl. BSI IT-Grundschutz experience), Microsoft Solutions Partner. Professional liability insurance EUR 5M per claim.
Public sector: 35 public contracts in the last 5 years, typical value EUR 200k to 3M, largest EUR 6.5M over 4 years. We can staff up to 25 people on one contract. Regions: Germany and Austria. Bid languages: German and English.

References (last 3 years):
1. Federal agency (Germany), 2023-2026, EUR 3.2M: development and operation of a case-management web application, incl. hosting.
2. State ministry (Germany), 2024-2025, EUR 850k: data warehouse and Power BI reporting for a statewide programme.
3. Statutory health insurer (Germany), since 2022, EUR 2.1M: maintenance and further development of member portals.
4. City administration (Austria), 2023-2024, EUR 480k: citizen services portal with accessibility (WCAG 2.1 AA).
5. Public utility (Germany), since 2024, EUR 1.4M: cloud migration and operation of business applications on Azure.

We do NOT: supply hardware; resell software licences as a standalone service; staff leasing or pure body leasing; SAP implementation; telecommunications or network infrastructure; construction.""",
    "cpvCodes": ["72000000"],
    "countries": [
        "DEU",
        "AUT",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("chief_kite/tender-bid-qualifier").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 '{
  "companyProfile": "Mid-size IT services company based in Germany, 140 employees (110 developers, consultants and operations staff). Annual turnover: 2023 EUR 14.2M, 2024 EUR 15.8M, 2025 EUR 17.1M.\\n\\nWhat we do:\\n- Custom software development: web applications, portals and specialist business applications (Java, .NET, TypeScript, Python).\\n- Maintenance, support and further development of existing applications, including taking over systems built by other vendors.\\n- Application operation and cloud hosting (Azure, AWS and a German data centre partner), 24/7 monitoring and 2nd/3rd-level application support.\\n- IT consulting: requirements analysis, architecture, IT strategy, project management and agile coaching.\\n- Business intelligence and data platforms: data warehouses, ETL and dashboards (Power BI, Microsoft Fabric, Azure Data Factory).\\n\\nCertifications: ISO 9001, ISO 27001 (incl. BSI IT-Grundschutz experience), Microsoft Solutions Partner. Professional liability insurance EUR 5M per claim.\\nPublic sector: 35 public contracts in the last 5 years, typical value EUR 200k to 3M, largest EUR 6.5M over 4 years. We can staff up to 25 people on one contract. Regions: Germany and Austria. Bid languages: German and English.\\n\\nReferences (last 3 years):\\n1. Federal agency (Germany), 2023-2026, EUR 3.2M: development and operation of a case-management web application, incl. hosting.\\n2. State ministry (Germany), 2024-2025, EUR 850k: data warehouse and Power BI reporting for a statewide programme.\\n3. Statutory health insurer (Germany), since 2022, EUR 2.1M: maintenance and further development of member portals.\\n4. City administration (Austria), 2023-2024, EUR 480k: citizen services portal with accessibility (WCAG 2.1 AA).\\n5. Public utility (Germany), since 2024, EUR 1.4M: cloud migration and operation of business applications on Azure.\\n\\nWe do NOT: supply hardware; resell software licences as a standalone service; staff leasing or pure body leasing; SAP implementation; telecommunications or network infrastructure; construction.",
  "cpvCodes": [
    "72000000"
  ],
  "countries": [
    "DEU",
    "AUT"
  ]
}' |
apify call chief_kite/tender-bid-qualifier --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,chief_kite/tender-bid-qualifier"
        }
    }
}
```

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/Y2Q4ipHs92icdLrER/builds/3A4l7xzpYYulcCip9/openapi.json
