# EU Tender Bid/No-Bid Analyzer (`highbrow_qualification_z7w/eu-tender-bid-analyzer`) Actor

Analyze EU tender PDFs against your company profile. Get an evidence-backed BID, REVIEW, or NO\_BID recommendation, fit score, mandatory requirements, risks, deadlines, missing capabilities, clarification questions, and a compliance matrix. Supports URL, text, and Base64 PDF input.

- **URL**: https://apify.com/highbrow\_qualification\_z7w/eu-tender-bid-analyzer.md
- **Developed by:** [Roman Bublyk](https://apify.com/highbrow_qualification_z7w) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $150.00 / 1,000 ai tender 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

## EU Tender Bid/No-Bid Analyzer

Analyze an EU tender document against a company profile and receive a structured, evidence-backed **BID**, **REVIEW**, or **NO\_BID** recommendation.

The Actor extracts text from a supplied PDF or accepts document text directly. In AI analysis mode, it identifies mandatory requirements, eligibility criteria, deadlines, risks, missing capabilities, required documents, clarification questions, and supporting evidence from the tender.

### What this Actor does

- Accepts a tender as a direct HTTPS PDF URL, Base64-encoded PDF, or extracted text.
- Compares tender requirements with facts supplied in a company profile.
- Returns a fit score and confidence level.
- Produces a requirement-by-requirement compliance matrix.
- Distinguishes confirmed non-compliance from missing evidence.
- Detects expired submission deadlines and returns `NO_BID` deterministically.
- Supports English and German analysis output.
- Provides an extraction-only mode that does not call an AI model.

### Processing modes

#### `analyze`

Extracts the document and performs the full AI-assisted Bid/No-Bid analysis. A `companyProfile` containing at least `name` and one entry in `capabilities` is required.

#### `extract`

Extracts document text and metadata without calling an AI model. A company profile is not required.

### Input

Provide exactly one document source:

- `documentUrl` — direct public HTTPS URL to a PDF;
- `documentText` — text already extracted by the caller;
- `documentBase64` — Base64-encoded PDF; `fileName` is required with this option.

You must set `authorizedToProcess` to `true` and confirm that you have the necessary rights to submit and process the document.

#### Minimal AI analysis example

```json
{
  "mode": "analyze",
  "documentUrl": "https://example.eu/public-tender.pdf",
  "fileName": "public-tender.pdf",
  "companyProfile": {
    "name": "Example Company GmbH",
    "capabilities": [
      "Cloud software development",
      "Java and Spring Boot",
      "Technical project delivery"
    ],
    "countries": ["Germany", "Austria"],
    "languages": ["English C1", "German C1"],
    "yearsInBusiness": 10,
    "availableProjectTeamSize": 12,
    "confirmedLimitations": [
      "The company does not hold ISO 27001 certification."
    ]
  },
  "outputLanguage": "en",
  "includeComplianceMatrix": true,
  "authorizedToProcess": true
}
```

#### Extraction-only example

```json
{
  "mode": "extract",
  "documentUrl": "https://example.eu/public-tender.pdf",
  "fileName": "public-tender.pdf",
  "authorizedToProcess": true
}
```

### Company profile guidance

Use confirmed facts only. Missing profile information is treated as `UNKNOWN`, not automatically as a failed requirement.

Useful fields include:

- legal establishment and countries of operation;
- capabilities and industries;
- certifications and supported languages;
- years in business and relevant experience;
- available team size and annual revenue;
- reference projects with dates, scope, value, and outcomes;
- `confirmedLimitations` for gaps that are known to be true.

The quality of the recommendation depends on the quality and completeness of the supplied company profile.

### Output

AI analysis mode returns one structured dataset item containing:

- `decision`: `BID`, `REVIEW`, or `NO_BID`;
- `fitScore` and `confidence`;
- opportunity and document metadata;
- mandatory requirements and eligibility criteria;
- required documents and confirmed missing capabilities;
- risks, deadlines, and clarification questions;
- compliance matrix and traceable source references;
- model and token-usage metadata.

Extraction mode returns the extracted text and document metadata.

Results are available in the run's default dataset and through the Apify API.

### API

Start the Actor synchronously and receive dataset items:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/USERNAME~eu-tender-bid-analyzer/run-sync-get-dataset-items?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d @input.json
```

Replace `USERNAME` and `APIFY_TOKEN` with your Apify username and API token. For asynchronous processing, use the standard Apify Actor run endpoint and retrieve the default dataset after the run finishes.

### Limits

- PDF size: up to 20 MB;
- page count: up to 150 pages;
- supplied text: up to 500,000 characters;
- text sent for AI analysis: up to 300,000 characters;
- direct URLs must use HTTPS and resolve to a public network address;
- redirects and downloads are bounded for security and reliability.

Image-only scanned PDFs are not OCR-processed in the current version. They may produce little or no extractable text.

### Privacy and security

- Runs and stored results follow the privacy settings of the user's Apify account.
- The Actor runs with limited platform permissions.
- URL validation blocks private, loopback, link-local, and reserved network destinations.
- Submitted content is processed only to produce the requested run result.
- Do not submit confidential, personal, copyrighted, or restricted documents unless you are authorized to process them.

### Important limitations

This Actor provides AI-assisted decision support, not legal, procurement, or financial advice. AI output can be incomplete or inaccurate. Verify every material finding, deadline, eligibility condition, and cited requirement against the original procurement documents before deciding whether to bid.

# Actor input Schema

## `mode` (type: `string`):

Extract returns document text and metadata without AI. Analyze performs a Bid/No-Bid assessment using AI.

## `documentUrl` (type: `string`):

Direct HTTPS URL to an authorized PDF. Do not provide this together with document text or Base64.

## `documentText` (type: `string`):

Tender text already extracted by the caller. Do not provide this together with a URL or Base64.

## `documentBase64` (type: `string`):

Base64-encoded PDF for small documents only.

## `fileName` (type: `string`):

Optional display name for text input; required for Base64 input.

## `companyProfile` (type: `object`):

Facts used to compare the company with tender requirements. Required in Analyze mode only.

## `outputLanguage` (type: `string`):

Language used for the analysis.

## `includeComplianceMatrix` (type: `boolean`):

Include a requirement-by-requirement comparison in Analyze mode.

## `authorizedToProcess` (type: `boolean`):

Required. You confirm that you have the necessary rights to submit and analyze the document.

## Actor input object example

```json
{
  "mode": "analyze",
  "outputLanguage": "en",
  "includeComplianceMatrix": true,
  "authorizedToProcess": false
}
```

# Actor output Schema

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

Structured extraction or Bid/No-Bid analysis result.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("highbrow_qualification_z7w/eu-tender-bid-analyzer").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("highbrow_qualification_z7w/eu-tender-bid-analyzer").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 '{}' |
apify call highbrow_qualification_z7w/eu-tender-bid-analyzer --silent --output-dataset

```

## MCP server setup

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

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/24CaeXzYLXgXfAWnC/builds/usTYXZAv8w1RYpKsK/openapi.json
