# EU & UK Public Procurement Contract Award Signal Scraper (`aperture/eu-uk-procurement-award-signal-scraper`) Actor

Extract B2B public procurement contract award signals across the UK, France, Germany, Netherlands, Belgium & Austria (Find a Tender, Contracts Finder, BOAMP, EU TED). Includes Delta Mode deduplication, corporate domain/email enrichment, and strict named-contact PPE billing.

- **URL**: https://apify.com/aperture/eu-uk-procurement-award-signal-scraper.md
- **Developed by:** [Aperture](https://apify.com/aperture) (community)
- **Categories:** Lead generation, Jobs, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 contract award buying signal scraped (basic mode + free role email fallback)s

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

<p align="center">
  <a href="https://apify.com/aperture/eu-uk-procurement-award-signal-scraper">
    <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/eu-uk-procurement.png" width="64" height="64" alt="EU & UK Public Procurement Contract Award Signal Scraper" />
  </a>
</p>

## EU & UK Public Procurement Contract Award Signal Scraper (No Cookies)

Extract verified, high-intent **B2B public sector contract award buying signals** across the United Kingdom, France, Germany, the Netherlands, Belgium, and Austria ([`aperture/eu-uk-procurement-award-signal-scraper`](https://apify.com/aperture/eu-uk-procurement-award-signal-scraper)) with zero cookies, zero browser overhead, and an industry-first **Strict Named-Contact Pay-Per-Event Guarantee**.

Built by **[Aperture — Data Aggregation Solutions](https://apify.com/aperture)** for outbound sales agencies, enterprise RevOps teams, government contractor intelligence pipelines, Clay / HeyReach / n8n workflows, and AI SDR agents (Apify MCP Server & Skyfire).

***

### Why GTM & RevOps Teams Switch to Aperture

| Feature / Capability | Standard Procurement Scrapers | Aperture EU & UK Procurement Award Signal Scraper |
| :--- | :--- | :--- |
| **Pricing Fairness** | Charges full enriched rates for generic `info@` addresses, buyer emails, or unverified mailboxes. | **Strict Named-Contact PPE Guarantee**: `$0.008` is billed strictly when a verified named individual contact (`firstname.lastname@`, `email_verification_status: "ok"`) is delivered. Generic corporate role inboxes (`info@`, `contact@`, `tenders@`, `sales@`, `planning@`) are included **100% free** as `"role_fallback"` at the basic `$0.002` rate. |
| **Scheduled Monitoring** | Re-scrapes, re-emits, and re-bills identical contract awards every week, flooding CRMs with duplicate leads. | **Cross-Run Delta Mode (`onlyNewSignals: true`)**: Persists seen notice URLs and supplier award keys in the named `buying-signal-dedup-store` Key-Value Store. Skips previously emitted contract awards **before** enrichment or `Actor.charge()` fires — duplicate awards cost **`$0.00`**. |
| **Multi-Jurisdiction Open Data APIs** | Brittle HTML web scrapers that break on UI changes, CAPTCHAs, or Cloudflare bot blocks. | **3 Official Open-Data APIs**: Ingests structured JSON/OCDS feeds directly from **UK Find a Tender & Contracts Finder OCDS**, **France BOAMP v2.1 Open Data API**, and **EU TED Search API v3** across 6 countries (`UK`, `FR`, `DE`, `NL`, `BE`, `AT`) with zero cookies, zero proxies required, and sub-30-second execution. |
| **Filter Precision & Budget Controls** | Inflexible keyword search only; cannot filter by contract award size or publication recency. | **`minContractValue` + `postedWithinDays` (`1 \| 3 \| 7 \| 14 \| 30 \| 365`) + `searchUrls` + `countries`**: Filter public contract awards by minimum value threshold (EUR / GBP), publication age, target jurisdiction, or direct open-data API queries. Contracts below `minContractValue` are skipped at **`$0.00`**. |
| **Zero-Cost Bonus Metadata** | Emits only the public notice headline and raw tender portal URL. | **`salary_band` (Award Value), `contact_phone`, and `contract_type: "Public Tender Award"`**: Formats monetary contract award values (e.g. `"£5,242,203 GBP"` / `"€382,000 EUR"`), extracts direct contractor phone numbers, and normalizes tender types at **`$0.00` extra compute cost**. |
| **Winning Contractor Entity Resolution** | Emits useless government portal URLs (`contractsfinder.service.gov.uk`, `ted.europa.eu`) or contracting authority buyer emails. | **4-Tier Winning Supplier Domain Waterfall + Statutory European Legal Disclosure Crawler**: Resolves the authentic corporate root domain of the winning supplier, crawls statutory `/impressum`, `/mentions-legales`, `/kontakt`, and `/contact` pages, and decodes obfuscated emails with DNS/DoH MX fingerprinting. |

***

### 5-Actor Global B2B Buying-Signal Suite (`aperture`) (MCP-Ready)

> **Strict Named-Contact Enriched Guarantee:** Across the entire Aperture suite, the enriched PPE tier ($0.008 / $0.009) is billed **strictly when a verified named individual contact** (`firstname.lastname@`, `email_verification_status: "ok"`) is extracted. Generic or departmental role inboxes (`info@`, `hello@`, `contact@`, `tenders@`, `sales@`, `planning@`, `jobs@`, `karriere@`) are **never discarded** — they remain populated in `contact_email` for free with `email_verification_status: "role_fallback"` and automatically downgrade billing to the basic tier ($0.002 / $0.003).

Combine our regional zero-cookie signal scrapers with our zero-proxy ICP scoring engine to run a unified **8-country** multi-market outbound pipeline across **3 buying-signal dimensions (`jobs`, `funding`, `contract_award` -> `multi_signal`)** in **Europe (`DE`, `AT`, `BE`, `NL`, `FR`, `UK`)** and **APAC (`AU`, `NZ`)**:

| Actor | Markets (`geo`) | Signal Types | Primary Sources | PPE Pricing (Basic / Enriched) |
| :--- | :---: | :--- | :--- | :--- |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/stepstone-dach.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/stepstone-dach-buying-signal-scraper`](https://apify.com/aperture/stepstone-dach-buying-signal-scraper)** | `DE`, `AT`, `BE`, `NL` | `jobs` | Stepstone Germany, Austria, Belgium & the Netherlands + statutory `/impressum` & `/over-ons` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/seek-anz.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/seek-anz-buying-signal-scraper`](https://apify.com/aperture/seek-anz-buying-signal-scraper)** | `AU`, `NZ` | `jobs` | Seek Australia & New Zealand JSON/GraphQL + ANZ corporate `/contact` & `/privacy` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/france-signals.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/france-buying-signal-scraper`](https://apify.com/aperture/france-buying-signal-scraper)** | `FR` | `jobs`, `funding` | France Travail B2B Hiring + Maddyness Startup Funding Rounds + `/mentions-legales` emails | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/eu-uk-procurement.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/eu-uk-procurement-award-signal-scraper`](https://apify.com/aperture/eu-uk-procurement-award-signal-scraper)** *(This Actor)* | `UK`, `FR`, `DE`, `NL`, `BE`, `AT` | `contract_award` | UK Contracts Finder & Find a Tender OCDS + France BOAMP Open Data v2.1 + EU TED Search v3 | $2.00 / $8.00 per 1k |
| <img src="https://api.apify.com/v2/key-value-stores/j5l13XT1d0O0NQmTI/records/b2b-icp-aggregator.png" width="22" height="22" style="vertical-align: middle; margin-right: 4px;" /> **[`aperture/b2b-buying-signal-icp-aggregator`](https://apify.com/aperture/b2b-buying-signal-icp-aggregator)** | `DE`, `AT`, `BE`, `NL`, `FR`, `UK`, `AU`, `NZ` | `jobs`, `funding`, `contract_award`, `multi_signal` | Zero-proxy cross-dataset deduplicator, multi-signal ICP scorer (`0–100`), 28-tool tech-stack extractor, and cold outreach hook engine | $3.00 / $9.00 per 1k |

***

### What does EU & UK Public Procurement Contract Award Signal Scraper do?

**EU & UK Public Procurement Contract Award Signal Scraper** is a high-speed, **No Cookies / Zero Browser Overhead** intent scraper that extracts real-time public sector contract award notices across Europe and the UK:

- **United Kingdom (`UK`)**: [Find a Tender Service (`find-tender.service.gov.uk`)](https://www.find-tender.service.gov.uk) and [Contracts Finder (`contractsfinder.service.gov.uk`)](https://www.contractsfinder.service.gov.uk) via the official Open Contracting Data Standard (OCDS) API.
- **France (`FR`)**: [Bulletin Officiel des Annonces des Marchés Publics (`boamp.fr`)](https://www.boamp.fr) via the official BOAMP Open Data v2.1 API.
- **European Union (`DE`, `NL`, `BE`, `AT`, `FR`)**: [Tenders Electronic Daily (`ted.europa.eu`)](https://ted.europa.eu) via the official EU TED Search API v3.

When a B2B supplier wins a major public contract, substantial budget allocation, vendor onboarding, and implementation expansion occur immediately. Winning suppliers urgently need subcontractors, software tooling, cloud infrastructure, staffing, and compliance consulting to fulfill their contractual obligations. This Actor transforms raw public tender notices into high-conviction, CRM-ready buying signals.

#### Key Architectural Advantages

- **Official Open-Data API Feeds**: Directly queries governmental REST APIs (UK OCDS, France BOAMP v2.1, EU TED v3) without fragile HTML DOM scraping, session cookies, or bot protection blockers.
- **Pure HTTP/2 CheerioCrawler Architecture**: Runs in ultra-lightweight **256 MB – 1,024 MB** containers (`512 MB` default) with sub-30-second execution times.
- **4-Tier Winning Supplier Domain Waterfall**: Resolves authentic contractor root domains (`domain`) from notice award bodies, company registration numbers, statutory disclosures, and clean corporate matching—stripping tender portal URLs (`service.gov.uk`, `ted.europa.eu`, `boamp.fr`).
- **European Statutory Disclosure Crawler (`§ 5 DDG`, `LCEN Art. 6-III`, UK Companies Act)**: In `enriched_with_email` mode, crawls corporate `/impressum`, `/mentions-legales`, `/contact`, and `/team` pages to identify named decision-makers and telephone numbers.
- **Pre-Charge Minimum Value & Blacklist Filtering**: Skip sub-scale awards below `minContractValue` and exclude competitor domains via `blacklistDomains` prior to PPE billing—filtered awards cost **`$0.00`**.
- **Enterprise MX Fingerprinting + BYOK Verifier Hook**: Fingerprints mail servers (`Google Workspace`, `Microsoft 365`, `Proofpoint`, `Mimecast`) and supports Bring-Your-Own-Key verification via **MillionVerifier**, **ZeroBounce**, or **Reacher**.

***

### Data Extracted (Dataset Schema)

Every emitted item adheres to the portfolio-wide 22-field `BuyingSignalRecord` specification:

| Field Name | Type | Description | Example |
| :--- | :--- | :--- | :--- |
| `detected_at` | `string` | ISO 8601 UTC timestamp when the award signal was extracted. | `"2026-11-01T02:00:00Z"` |
| `company` | `string` | Normalized legal name of the winning supplier / contractor. | `"Kainos Software Ltd"` |
| `domain` | `string` | Verified corporate root domain of the winning supplier. | `"kainos.com"` |
| `role_title` | `string` | Normalized tender winner headline / contract title. | `"Public Tender Winner: Cloud Migration & Modernisation"` |
| `seniority_band` | `string` | Normalized decision-maker seniority band (`"director"`, `"cxo"`, `"manager"`). | `"director"` |
| `location` | `string` | Delivery city, region, or public authority headquarters. | `"London"` |
| `geo` | `string` | ISO country code: `UK`, `FR`, `DE`, `NL`, `BE`, or `AT`. | `"UK"` |
| `posted_date` | `string` | ISO 8601 publication timestamp of the contract award notice. | `"2026-10-31T12:34:39Z"` |
| `signal_type` | `string` | Canonical signal type (`"contract_award"`). | `"contract_award"` |
| `signal_detail` | `string` | Ready-to-use CRM summary with contract title, buyer, and value. | `"Contract Award: Cloud Migration — Awarded by Ministry of Justice [£5,242,203 GBP]"` |
| `signal_source_actor`| `string` | Source Actor identifier (`"eu-uk-procurement-award-signal-scraper"`). | `"eu-uk-procurement-award-signal-scraper"` |
| `signal_date` | `string` | ISO publication date (`YYYY-MM-DD`). | `"2026-10-31"` |
| `evidence_url` | `string` | Canonical live URL to the official government contract award notice. | `"https://www.contractsfinder.service.gov.uk/Notice/..."` |
| `contact_email` | `string` | Verified named contact email or free corporate role fallback. | `"brendan.mooney@kainos.com"` |
| `contact_phone` | `string` | Direct corporate or notice contact phone number. | `"+44 28 9057 1100"` |
| `salary_band` | `string` | Formatted public contract award value and currency. | `"£5,242,203 GBP"` |
| `contract_type` | `string` | Standardized contract notice classification. | `"Public Tender Award"` |
| `email_verification_status` | `string` | Deliverability status: `ok` (verified named contact), `role_fallback` (free role inbox), `mx_only`, `invalid`, `unverified`, or `not_requested`. | `"ok"` |
| `mx_provider` | `string` | Fingerprinted mail infrastructure provider. | `"Microsoft 365"` |
| `ppe_event_charged` | `string` | Pay-Per-Event tier billed (`job-signal-scraped`, `buying-signal-enriched`, or `none`). | `"buying-signal-enriched"` |
| `notes` | `string` | Enrichment provenance, buyer authority name, and notice ID. | `"source=UK_CF; buyer=Ministry of Justice; mx=Microsoft 365"` |
| `error` | `string \| null` | Error description if extraction failed, or `null`. | `null` |

***

### Pay-Per-Event (PPE) Pricing & Strict Named-Contact Guarantee

No monthly subscriptions or platform lock-in. Pay only for successful, non-duplicate contract award signals extracted:

| Scraper Mode (`scraperMode`) | PPE Event Name | Price | What Is Included | Strict Named-Contact Billing Guarantee |
| :--- | :--- | :--- | :--- | :--- |
| **`basic`** | `job-signal-scraped` | **$2.00 / 1,000 awards** ($0.002 / item) | Normalized contract award signals (`company`, 4-tier `domain`, `role_title`, `location`, `geo`, `signal_date`, `evidence_url`, `contact_phone`, `salary_band`, `contract_type: "Public Tender Award"`, buyer details in `signal_detail`) + pre-charge `blacklistDomains`, `minContractValue` filtering, and Delta Mode deduplication. | Billed for standard contract awards **and** `enriched_with_email` runs where only a generic role inbox (`role_fallback`, provided free in `contact_email`) or no deliverable email was found. |
| **`enriched_with_email`** | `buying-signal-enriched` | **$8.00 / 1,000 verified contacts** ($0.008 / item) | Everything in Basic **plus** Impressum / Mentions Légales / Contact page crawling, named individual prioritization, DoH/DNS MX fingerprinting, and SMTP/BYOK email verification. | **You ONLY pay $0.008 when a verified NAMED individual contact (`firstname.lastname@`, `email_verification_status === "ok"`) is delivered!** Generic role inboxes (`info@`, `contact@`, `tenders@`, `sales@`, `planning@`) are kept in `contact_email` as `role_fallback` and **automatically downgraded to basic pricing ($0.002)**. |

#### Free-Tier Run Limits & Budget Protection

- **Strict Budget Guard (`ACTOR_MAX_TOTAL_CHARGE_USD`)**: The Actor monitors Apify's `ChargeResult` in real time and cleanly halts crawling the moment your maximum spend limit is reached—zero unbilled overruns.
- **25-Item Free-Tier Cap**: Accounts on Apify's Free Tier can test both `basic` and `enriched_with_email` modes up to **25 items per run**. Upgrade to any paid Apify plan for high-volume jobs (up to 5,000 records per run) and automated schedules.

***

### Copy-Paste Recipes & Integration Workflows

#### 1. Weekly Monday Delta Procurement Award Monitor (`onlyNewSignals: true` + `minContractValue: 100000`)

Set up a recurring Apify Task scheduled every **Monday at 06:30 UTC** (Cron: `30 6 * * 1`). This pulls high-value contracts awarded across the UK, France, and Germany over the past 7 days and skips previously seen notices at **`$0.00`**:

```json
{
  "countries": ["UK", "FR", "DE"],
  "keywords": ["Cloud", "Cybersecurity", "Software", "AI", "Digital"],
  "minContractValue": 100000,
  "postedWithinDays": 7,
  "onlyNewSignals": true,
  "monitorScopeName": "weekly-eu-uk-procurement-awards",
  "scraperMode": "enriched_with_email",
  "blacklistDomains": ["existing-partner.co.uk", "competitor.de"],
  "maxItems": 100
}
```

#### 2. UK & EU Cloud & Infrastructure Tender Winner Enrichment

Extract winning suppliers awarded government IT, cloud hosting, and infrastructure tenders in the UK, Germany, and the Netherlands with corporate domains, contact emails, and direct phone numbers:

```json
{
  "countries": ["UK", "DE", "NL"],
  "keywords": ["Infrastructure", "Data Centre", "Migration", "DevOps"],
  "minContractValue": 250000,
  "postedWithinDays": 14,
  "scraperMode": "enriched_with_email",
  "maxItems": 50
}
```

#### 3. 5-Actor Multi-Signal Fan-In with `b2b-buying-signal-icp-aggregator` for 100/100 ICP Scoring

Pipe this Actor's output dataset ID alongside Stepstone DACH, Seek ANZ, and France Buying Signals into **[`aperture/b2b-buying-signal-icp-aggregator`](https://apify.com/aperture/b2b-buying-signal-icp-aggregator)**. When a company wins a public contract **and** is actively hiring commercial or technical roles, the aggregator automatically awards a **`100/100` ICP score** and generates a bespoke outreach hook:

```json
{
  "datasetIds": [
    "procurement_awards_dataset_id",
    "stepstone_dach_dataset_id",
    "france_signals_dataset_id"
  ],
  "icpConfig": {
    "allowedGeos": ["UK", "FR", "DE", "NL", "BE", "AT", "AU", "NZ"],
    "allowedSignalTypes": ["contract_award", "jobs", "funding", "multi_signal"],
    "minIcpScore": 60,
    "maxSignalAgeDays": 30
  },
  "maxItems": 250
}
```

**Aggregator Outreach Hook Generated:**

> *"Congratulations to Kainos Software Ltd on the recent public contract award for Cloud Migration & Modernisation \[£5,242,203 GBP]! Noticing this momentum while actively scaling team capacity in London (stack: AWS, Kubernetes, Terraform), are you evaluating technology solutions to support delivery?"*

#### 4. Claude Desktop, Cursor & Antigravity MCP Server Configuration

Connect [`@apify/actors-mcp-server`](https://www.npmjs.com/package/@apify/actors-mcp-server) to **Claude Desktop** (`claude_desktop_config.json`) or **Cursor / Google Antigravity** (`.cursor/mcp.json` or `.agents/mcp_config.json`) to discover public contract award signals on demand:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": [
        "-y",
        "@apify/actors-mcp-server",
        "--actors",
        "aperture/eu-uk-procurement-award-signal-scraper,aperture/b2b-buying-signal-icp-aggregator"
      ],
      "env": {
        "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

***

### Input Configuration

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `countries` | `array` | `["UK", "FR", "DE"]` | Target procurement jurisdictions: `["UK", "FR", "DE", "NL", "BE", "AT"]`. |
| `keywords` | `array` | `[]` | Contract scope or technology filter keywords (e.g., `["Cloud", "Cyber", "Consulting"]`). |
| `searchUrls` | `array` | `[]` | Optional direct UK OCDS, France BOAMP, or EU TED search API URLs. |
| `postedWithinDays` | `integer` | `30` | Filter contract award notices published within the last N days (`1`–`365`). |
| `minContractValue` | `integer` | `0` | Minimum contract award value threshold in EUR/GBP. Notices below this are skipped at `$0.00`. |
| `onlyNewSignals` | `boolean` | `false` | **Cross-Run Delta Mode**: Skips previously emitted contract awards stored in `buying-signal-dedup-store` at `$0.00` cost. |
| `monitorScopeName` | `string` | `"buying-signal-dedup-store"` | Named Apify Key-Value Store used to persist seen keys across scheduled runs. |
| `scraperMode` | `string` | `"basic"` | `"basic"` ($2.00 / 1k) or `"enriched_with_email"` ($8.00 / 1k verified named contact). |
| `blacklistDomains` | `array` | `[]` | Supplier root domains or company names excluded before PPE billing fires (`$0.00` spend). |
| `customEmailVerifierApiKey` | `string` | `""` | BYOK verification token: MillionVerifier (`mv:<KEY>`), ZeroBounce (`zb:<KEY>`), or Reacher (`reacher:<URL>\|<SECRET>`). |
| `maxItems` | `integer` | `10` | Maximum contract award signals to emit per run (`1`–`5000`; capped at `25` on Free-Tier). |
| `proxyConfiguration` | `object` | `{"useApifyProxy": false}` | Optional Crawlee proxy options for corporate website crawls during enriched runs. |

***

### Sample Output

```json
[
  {
    "detected_at": "2026-11-01T02:00:00Z",
    "company": "Kainos Software Ltd",
    "domain": "kainos.com",
    "role_title": "Public Tender Winner: Cloud Modernisation & Digital Services",
    "seniority_band": "director",
    "location": "London",
    "geo": "UK",
    "posted_date": "2026-10-31T12:34:39Z",
    "signal_type": "contract_award",
    "signal_detail": "Contract Award: Cloud Modernisation & Digital Services — Awarded by Ministry of Justice [£5,242,203 GBP]",
    "signal_source_actor": "eu-uk-procurement-award-signal-scraper",
    "signal_date": "2026-10-31",
    "evidence_url": "https://www.contractsfinder.service.gov.uk/Notice/240e3451-d90e-4f1a-88bc-316d48ffbce4",
    "contact_email": "brendan.mooney@kainos.com",
    "contact_phone": "+44 28 9057 1100",
    "salary_band": "£5,242,203 GBP",
    "contract_type": "Public Tender Award",
    "email_verification_status": "ok",
    "mx_provider": "Microsoft 365",
    "ppe_event_charged": "buying-signal-enriched",
    "notes": "source=UK_CF; buyer=Ministry of Justice; verify=smtp_250_ok; mx=Microsoft 365",
    "error": null
  },
  {
    "detected_at": "2026-11-01T02:01:15Z",
    "company": "Sopra Steria SAS",
    "domain": "soprasteria.com",
    "role_title": "Public Tender Winner: Prestations d'Assistance à Maîtrise d'Ouvrage",
    "seniority_band": "director",
    "location": "Paris",
    "geo": "FR",
    "posted_date": "2026-10-30T16:00:00Z",
    "signal_type": "contract_award",
    "signal_detail": "Contract Award: Prestations d'Assistance à Maîtrise d'Ouvrage — Awarded by Ministère des Armées [€1,450,000 EUR]",
    "signal_source_actor": "eu-uk-procurement-award-signal-scraper",
    "signal_date": "2026-10-30",
    "evidence_url": "https://www.boamp.fr/pages/avis/?q=idweb:26-124500",
    "contact_email": "contact@soprasteria.com",
    "contact_phone": "+33 1 40 67 29 29",
    "salary_band": "€1,450,000 EUR",
    "contract_type": "Public Tender Award",
    "email_verification_status": "role_fallback",
    "mx_provider": "Microsoft 365",
    "ppe_event_charged": "job-signal-scraped",
    "notes": "source=BOAMP; buyer=Ministère des Armées; verify=mx_fingerprinted_mentions_legales; mx=Microsoft 365",
    "error": null
  }
]
```

***

### FAQ & Legal / Compliance Disclosures

#### Why did an item with a valid `contact_email` charge `job-signal-scraped` ($0.002) instead of `buying-signal-enriched` ($0.008)?

Our **Strict Named-Contact Enriched Guarantee** protects your budget. We only bill the $0.008 enriched tier when we uncover a **verified named individual decision-maker** (`firstname.lastname@`, `f.lastname@`). When a company only publishes a departmental role inbox (`info@`, `contact@`, `tenders@`, `sales@`, `planning@`), we never discard that data—we include it in `contact_email` as a **free bonus** (`email_verification_status: "role_fallback"`) and bill it at the basic $0.002 rate.

#### Does this Actor require logins, cookies, or browser automation?

No. All contract award discovery runs against official governmental open-data APIs (UK Find a Tender & Contracts Finder OCDS, France BOAMP Open Data v2.1, EU TED Search v3). All requests are stateless, unauthenticated HTTP/2 API calls that execute in seconds with zero browser overhead and zero CAPTCHAs.

#### Legal, Open Contracting & GDPR Compliance

This Actor extracts publicly disclosed public procurement contract award notices published pursuant to statutory open-contracting transparency laws (UK Public Contracts Regulations 2015, French Code de la Commande Publique, and EU Public Procurement Directive 2014/24/EU). Commercial entities bidding for and winning public contracts are public record. When processing contact details under GDPR / UK GDPR, ensure you establish legitimate interest for B2B commercial communications.

***

Published and supported by **[Aperture — Data Aggregation Solutions](https://apify.com/aperture)**. For custom enterprise feeds, feedback, or dedicated proxy pools, open an issue in the Apify Console.

# Actor input Schema

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

Select one or more ISO target jurisdictions: UK (Find a Tender & Contracts Finder OCDS), FR (BOAMP Open Data v2.1), DE/NL/BE/AT (EU TED Search v3).

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

Optional B2B sector or technology keywords to filter awarded contracts (e.g., \['Software', 'Cloud', 'Cyber', 'Consulting']). Leave empty to stream the latest high-value contract awards across all selected countries.

## `searchUrls` (type: `array`):

Optional direct UK Find a Tender / Contracts Finder OCDS or France BOAMP API URLs to scrape directly.

## `postedWithinDays` (type: `integer`):

Filter contract award notices published within the last N days (e.g., 1, 3, 7, 14, or 30 days).

## `minContractValue` (type: `integer`):

Optional minimum contract award value threshold (in local notice currency EUR or GBP). Notices with disclosed values below this threshold are skipped at $0.

## `onlyNewSignals` (type: `boolean`):

When enabled, persists seen contract award URLs and supplier-award composite keys in a named Apify Key-Value Store (monitorScopeName) and skips previously emitted awards at $0 before enrichment or charging.

## `monitorScopeName` (type: `string`):

Named Apify Key-Value Store used to persist seen signal keys across scheduled runs when onlyNewSignals is enabled.

## `scraperMode` (type: `string`):

Choose 'basic' ($0.002/signal — resolves corporate root domain + contract award metadata) or 'enriched_with_email' ($0.008 strictly when a verified named contact email is discovered; generic role emails like info@/contact@/tenders@ are included for free as 'role_fallback' and billed at $0.002).

## `blacklistDomains` (type: `array`):

Company root domains or supplier names to skip at $0 before enrichment and PPE charging.

## `customEmailVerifierApiKey` (type: `string`):

Optional MillionVerifier / ZeroBounce compatible API key for real-time SMTP mailbox verification during enriched_with_email runs.

## `maxItems` (type: `integer`):

Maximum number of contract award buying signals to emit. Free-tier Apify runs are capped at 25 items per run.

## `proxyConfiguration` (type: `object`):

UK OCDS, France BOAMP, and EU TED open-data APIs operate with zero proxy overhead by default. Optional proxy settings are used only when crawling rate-limited corporate websites during enriched_with_email mode.

## Actor input object example

```json
{
  "countries": [
    "UK",
    "FR",
    "DE"
  ],
  "keywords": [],
  "searchUrls": [],
  "postedWithinDays": 30,
  "minContractValue": 0,
  "onlyNewSignals": false,
  "monitorScopeName": "buying-signal-dedup-store",
  "scraperMode": "basic",
  "blacklistDomains": [],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing normalized UK OCDS, France BOAMP, and EU TED contract award buying signals with resolved supplier domains and optional verified emails.

## `state` (type: `string`):

Key-value store record persisting crawl progress and graceful shutdown checkpoints.

# 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 = {
    "countries": [
        "UK",
        "FR",
        "DE"
    ],
    "postedWithinDays": 30,
    "monitorScopeName": "buying-signal-dedup-store",
    "scraperMode": "basic",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("aperture/eu-uk-procurement-award-signal-scraper").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 = {
    "countries": [
        "UK",
        "FR",
        "DE",
    ],
    "postedWithinDays": 30,
    "monitorScopeName": "buying-signal-dedup-store",
    "scraperMode": "basic",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("aperture/eu-uk-procurement-award-signal-scraper").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 '{
  "countries": [
    "UK",
    "FR",
    "DE"
  ],
  "postedWithinDays": 30,
  "monitorScopeName": "buying-signal-dedup-store",
  "scraperMode": "basic",
  "maxItems": 10
}' |
apify call aperture/eu-uk-procurement-award-signal-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aperture/eu-uk-procurement-award-signal-scraper"
        }
    }
}
```

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/BWvLdexjiPu5IgJtR/builds/SatfGwR3g6ukzf20x/openapi.json
