# EU Tenders Scraper (`rigelbytes/eu-tenders-scraper`) Actor

Scrape EU public procurement notices from TED (Tenders Electronic Daily) with advanced search filters, multi-language support, and optional full notice detail extraction. Ideal for monitoring, Slack/Discord notifiers, and procurement intelligence integrations.

- **URL**: https://apify.com/rigelbytes/eu-tenders-scraper.md
- **Developed by:** [Rigel Bytes](https://apify.com/rigelbytes) (community)
- **Categories:** Integrations, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 tender scrapeds

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

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## EU Tenders Scraper

Monitor, analyze, and export **EU public procurement notices** from TED (Tenders Electronic Daily) with advanced search filters, multi-language support, and optional full-notice detail extraction — for just **$1** per 1,000 notices.

---

### What can EU Tenders Scraper do for you?

- 🔍 **Search across 700K+ active notices** — Full-text search, CPV codes, buyer country, procedure type, publication dates, and more
- 🌐 **24 EU languages supported** — Render labels and notice details in your preferred language
- 📄 **Extract full tender details** — Enable `fetchDetails` to get buyer contacts, procedure info, document links, lot structures, and award results
- 📊 **Expert-level query building** — Use raw TED expert syntax for precise, complex searches beyond the structured filters
- 📥 **Export structured data** — Output as JSON, CSV, or Excel via Apify dataset; integrate via API or webhooks
- 🔗 **Fetch specific notices** — Search by publication numbers, TED URLs, or OJ S numbers

### What data can you extract?

| Field | Description |
|-------|-------------|
| 📄 `publicationNumber` | Unique TED notice identifier |
| 📝 `title` | Notice title |
| 🏷️ `noticeType` | Notice type (e.g. Contract award, Prior information) |
| 🏢 `buyerName` | Buying organisation |
| 🌍 `buyerCountry` | Country of the buyer |
| 📍 `placeOfPerformance` | NUTS-coded performance location(s) |
| 📅 `publicationDate` | Date of publication |
| ⏰ `deadlineReceiptRequest` | Tender submission deadline |
| 💰 `mainClassification` | CPV classification code and label |
| 🧩 `procedureType` | Procedure type (Open, Restricted, etc.) |
| 📋 `contractNature` | Supplies, services, or works |
| 🔗 `detailUrl` | Full notice link on TED |
| 📄 `pdfUrl` | PDF download link |
| 👤 `contacts` | Buyer contact emails and phones (when `fetchDetails` enabled) |
| 📁 `documentLinks` | Multi-language PDF, HTML, and XML downloads |
| 🏗️ `sections` | Full notice structure with buyer, procedure, lot, and results data |
| 📊 `summaryText` | Concise human-readable notice summary |

### Why use this scraper?

- **Market intelligence** — Track which EU countries and sectors issue tenders matching your business
- **Competitive monitoring** — Watch specific buyers, CPV codes, or procedure types to stay ahead
- **Procurement automation** — Feed tender data into Slack/Discord notifiers, CRM, or analytics pipelines
- **Research & reporting** — Build datasets on EU spending patterns, contract values, and award trends

### Pricing

- **$1/1,000 notices** — Pay only for what you scrape
- **Volume discounts** — Bronze ($0.90/1,000), Silver ($0.80/1,000), Gold ($0.70/1,000) available on Apify paid plans
- No hidden fees or limits on usage

---

### How to use EU Tenders Scraper

1. **Create a free Apify account** at [apify.com](https://apify.com)
2. **Open the EU Tenders Scraper** from [Rigel Bytes](https://apify.com/rigelbytes/eu-tenders-scraper)
3. **Configure your search** — Set filters like buyer country, CPV codes, publication dates, or full-text search
4. **Start the run** — Click "Start" and the scraper will fetch matching notices from TED
5. **Download your data** — Export as JSON, CSV, Excel, or XML from the Apify dataset
6. **Automate** — Schedule recurring runs or trigger via API for continuous monitoring

### Input

Configure the scraper with any combination of these filters:

#### Search & Text Filters
- **fullTextSearch** (string, optional) — Free-text search across TED notices (maps to FT expert field)
- **expertQuery** (string, optional) — Raw TED expert search query, overrides structured filters
- **buyerName** (string, optional) — Partial match on buyer organisation name

#### Structured Filters (Arrays)
- **businessOpportunity** (string[], optional) — Filter by opportunity type: `competition`, `result`, `planning`, `veat`, `dir-awa-pre`, `pmc`, `corr`
- **cpvCodes** (string[], optional) — CPV codes, e.g. `72000000` for IT services
- **contractNature** (string[], optional) — `supplies`, `services`, `works`
- **placeOfPerformance** (string[], optional) — NUTS or country codes, e.g. `DEU`, `PL911`
- **placeOfProcedure** (string[], optional) — NUTS codes for procedure location (BT-727)
- **procedureType** (string[], optional) — `open`, `restricted`, `neg-wo-call`
- **buyerCountry** (string[], optional) — ISO 3166-1 alpha-3 buyer country codes
- **legalBasis** (string[], optional) — Legal basis codes, e.g. `32014L0024`
- **funding** (string[], optional) — Funding programme codes, e.g. `external-aid-program`
- **noticeTypes** (string[], optional) — Direct notice-type codes (overrides `businessOpportunity`)
- **publicationNumbers** (string[], optional) — Specific notice numbers, e.g. `871151-2025`
- **searchUrls** (string[], optional) — TED notice detail or search result URLs

#### Date & Publication Filters
- **publicationYear** (string, optional) — Filter by year, e.g. `2025`
- **publicationDateFrom** / **publicationDateTo** (string, optional) — Date range in YYYY-MM-DD format
- **ojsNumber** (string, optional) — Official Journal supplement number

#### Configuration
- **language** (string, optional, default `EN`) — 24 EU languages available for labels and detail rendering
- **scope** (string, optional, default `ALL`) — `ALL`, `ACTIVE`, or `LATEST`
- **onlyLatestVersions** (boolean, optional, default `false`) — Return only latest version of each notice
- **sortBy** (string, optional, default `publication-number`) — `publication-number`, `publication-date`, or `deadline-receipt-request`
- **sortOrder** (string, optional, default `DESC`) — `DESC` or `ASC`
- **fetchDetails** (boolean, optional, default `false`) — Fetch full notice details including contacts, lots, and sections
- **maxItems** (integer, optional, default `50`) — Max notices to scrape (0 = unlimited)
- **pageSize** (integer, optional, default `50`) — Results per search API page (max 100)
- **proxyConfiguration** (object, optional) — Proxy settings (default: Apify residential proxies)

#### 📝 Copy for Use:

```json
{
  "businessOpportunity": ["competition"],
  "buyerCountry": ["POL"],
  "publicationYear": "2025",
  "cpvCodes": ["72000000"],
  "language": "EN",
  "fetchDetails": true,
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

![EU Tenders Scraper Output](https://github.com/faizanalii/apify-images/blob/main/EU%20Tenders%20Scraper.gif?raw=true)

### Why Choose This Scraper?

- **Affordable**: Pay only $1 per 1,000 notices scraped, with volume discounts available.
- **Comprehensive**: 20+ search filters, 24 languages, full notice detail extraction, and structured data output.
- **Easy to Use**: Configure with simple JSON input or the Apify Console form — no TED API expertise required.
- **Reliable**: Built with proper error handling, retry strategies, and residential proxy support for consistent results.

### Recommended Proxy Providers

- ## **Shifter**

  - Reliable residential proxies all over the world.
  - Cheap rates
  - [Order Shifter Now](https://shifter.io/r/YoBB/order)
  - Get 10% Off any product, use coupan `rigelbytes-YoBB`.

- ## **OxyLabs**

  - **100M+ Proxies**
  - Fastest proxies in the market
  - Real profile, human-like Residential IPs
  - Quality assurance framework for most reliable IPs
  - [Get Proxies](https://oxylabs.go2cloud.org/aff_c?offer_id=7\&aff_id=1366\&url_id=7)

- ## **DataImpulse**

  - Covers **200+ Counties**
  - Reliable Residential Proxies for just $1/GB
  - [Get Residential Proxies](https://dataimpulse.com/?aff=89421)

### [![Learn More About Proxies](https://img.shields.io/badge/Learn_More-About_Proxies-blue?style=for-the-badge)](#understanding-proxies)

### 🙌 Why Buy Through Our Affiliate Link?

- Exclusive Deals: Some providers may offer special discounts or bonuses when you use our link.
- Support Our Work: Each purchase helps us maintain and improve the tools and services we provide.
- No Extra Cost: You pay the same price, but part of it goes to supporting our efforts.

#### Running via Apify Console

You can run this actor from the Apify Console by providing the necessary input parameters.

#### Running via API

You can trigger this actor using the Apify API, passing the required input in the request body.

### API Examples

Trigger a scrape via Apify API:

#### Python

```shell
from apify_client import ApifyClient

client = ApifyClient("YOUR-API-TOKEN")

run_input = {
    "businessOpportunity": ["competition"],
    "buyerCountry": ["POL"],
    "publicationYear": "2025",
    "language": "EN",
    "fetchDetails": False,
    "maxItems": 10,
}

run = client.actor("rigelbytes/eu-tenders-scraper").call(run_input=run_input)
dataset_items = client.dataset(run["defaultDatasetId"]).list_items().items
print(dataset_items)
```

#### JavaScript

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

const client = new ApifyClient({ token: 'YOUR-API-TOKEN' });

const runInput = {
    businessOpportunity: ["competition"],
    buyerCountry: ["POL"],
    publicationYear: "2025",
    language: "EN",
    fetchDetails: false,
    maxItems: 10,
};

const run = await client.actor("rigelbytes/eu-tenders-scraper").call(runInput);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### cURL

```shell
curl -X POST "https://api.apify.com/v2/acts/rigelbytes~eu-tenders-scraper/runs?token=YOUR-API-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "businessOpportunity": ["competition"],
    "buyerCountry": ["POL"],
    "publicationYear": "2025",
    "language": "EN",
    "fetchDetails": false,
    "maxItems": 10
  }'
```

### 🚀 Other Tools by Rigel Bytes

Explore **105** more scraping tools by Rigel Bytes, organized by use case:

#### 📱 Social Media

Scrape Instagram, TikTok, LinkedIn, and more for content research and marketing intelligence.

- **[Export Instagram Reels](https://apify.com/rigelbytes/export-instagram-reels)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Facebook Ads Scraper](https://apify.com/rigelbytes/facebook-ads-scraper)** — Extract posts, profiles, and engagement data from Facebook for content research, influencer tracking, and marketing analytics.
- **[Instagram Analytics Tool](https://apify.com/rigelbytes/instagram-analytics-tool)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Comment Scraper](https://apify.com/rigelbytes/instagram-comment-scraper)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Creator Stats](https://apify.com/rigelbytes/instagram-creator-stats)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Engagement Tool](https://apify.com/rigelbytes/instagram-engagement-tool)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Post Scraper](https://apify.com/rigelbytes/instagram-post-scraper)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[instagram-posts](https://apify.com/rigelbytes/instagram-posts)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Profile Scraper](https://apify.com/rigelbytes/instagram-profile-scraper)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Instagram Reel Scraper](https://apify.com/rigelbytes/instagram-reel-scraper)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[linkedin-company-details](https://apify.com/rigelbytes/linkedin-company-details)** — Extract posts, profiles, and engagement data from LinkedIn for content research, influencer tracking, and marketing analytics.
- **[Linkedin Company Scraper](https://apify.com/rigelbytes/linkedin-company-scraper)** — Extract posts, profiles, and engagement data from LinkedIn for content research, influencer tracking, and marketing analytics.
- **[LinkedIn Job Scraper](https://apify.com/rigelbytes/linkedin-job-scraper)** — Extract posts, profiles, and engagement data from LinkedIn for content research, influencer tracking, and marketing analytics.
- **[LinkedIn Profile Scraper](https://apify.com/rigelbytes/linkedin-profile-scraper)** — Extract posts, profiles, and engagement data from LinkedIn for content research, influencer tracking, and marketing analytics.
- **[Scrape Instagram Creators](https://apify.com/rigelbytes/scrape-instagram-creators)** — Extract posts, profiles, and engagement data from Instagram for content research, influencer tracking, and marketing analytics.
- **[Tiktok Comment Scraper](https://apify.com/rigelbytes/tiktok-comment-scraper)** — Extract posts, profiles, and engagement data from TikTok for content research, influencer tracking, and marketing analytics.
- **[Tiktok Creator Stats](https://apify.com/rigelbytes/tiktok-creator-stats)** — Extract posts, profiles, and engagement data from TikTok for content research, influencer tracking, and marketing analytics.
- **[Tiktok Engagement Rate](https://apify.com/rigelbytes/tiktok-engagement-rate)** — Extract posts, profiles, and engagement data from TikTok for content research, influencer tracking, and marketing analytics.
- **[TikTok Profile Scraper](https://apify.com/rigelbytes/tiktok-profile-scraper)** — Extract posts, profiles, and engagement data from TikTok for content research, influencer tracking, and marketing analytics.
- **[YouTube Comment Scraper](https://apify.com/rigelbytes/youtube-comment-scraper)** — Extract posts, profiles, and engagement data from YouTube for content research, influencer tracking, and marketing analytics.

#### 🏠 Real Estate

Extract property listings, prices, and agent data from top real estate platforms.

- **[Aengevelt Scraper — German Real Estate Property Listings](https://apify.com/rigelbytes/aengevelt-scraper)** — Extract property listings from Aengevelt Immobilien. Get pricing, location, contact data, and images from Germany's...
- **[Airbnb Address Finder](https://apify.com/rigelbytes/airbnb-address-finder)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Availability Calendar](https://apify.com/rigelbytes/airbnb-availability-calendar)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Detailed Scraper - Search & Listing Details](https://apify.com/rigelbytes/airbnb-detailed-scraper)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Images Downloader](https://apify.com/rigelbytes/airbnb-images-downloader)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Listing](https://apify.com/rigelbytes/airbnb-listing)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Listing Urls](https://apify.com/rigelbytes/airbnb-listing-urls)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Property Details](https://apify.com/rigelbytes/airbnb-property-details)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Reviews](https://apify.com/rigelbytes/airbnb-reviews)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Airbnb Scraper - Search & Listing Details](https://apify.com/rigelbytes/airbnb-scraper)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Aqar.fm Scraper — النسخة العربية](https://apify.com/rigelbytes/aqar-fm-scraper)** — Scrapes Saudi real estate listings from aqar.fm via Next.js RSC search API. Supports Arabic search paths, start...
- **[Bayut Scraper](https://apify.com/rigelbytes/bayut-scraper)** — Scrape property listings and market data from Bayut for market research, price monitoring, and investment analysis.
- **[BNP Paribas Real Estate Scraper](https://apify.com/rigelbytes/bnppre-scraper)** — Scrape commercial property listings from BNP Paribas Real Estate (bnppre.de) — offices, retail, industrial, and...
- **[Boligsiden.dk Scraper](https://apify.com/rigelbytes/boligsiden-dk-scraper)** — Scrape Danish real estate listings from Boligsiden.dk — for sale, sold, and rental properties with pricing, details,...
- **[CBRE Scraper — Extract German Commercial Property Listings](https://apify.com/rigelbytes/cbre-scraper)** — Scrape commercial real estate letting listings from CBRE Germany (cbre.de). Office & industrial property data for...
- **[Colliers Scraper — German Commercial Property Listings](https://apify.com/rigelbytes/colliers-scraper)** — Extract commercial property listings from Colliers.de — offices, industrial, retail & logistics with pricing, map...
- **[Daft.ie Property Scraper](https://apify.com/rigelbytes/daft-ie-scraper)** — Scrapes property listings from Daft.ie including residential, rental, commercial, and new homes across Ireland.
- **[DAHLER Real Estate Scraper — German Property Listings API](https://apify.com/rigelbytes/dahler-scraper)** — Extract buy and rent property listings from DAHLER Immobilien across Germany, Austria, and Spain. Get prices,...
- **[dubai-listing-scraper](https://apify.com/rigelbytes/dubai-listing-scraper)** — Extract unlimited property listings from Bayut.com — the UAE's largest real estate platform. Get detailed property...
- **[Export Airbnb Calendar](https://apify.com/rigelbytes/export-airbnb-calendar)** — Scrape property listings and market data from Airbnb for market research, price monitoring, and investment analysis.
- **[Funda Netherlands Real Estate Scraper](https://apify.com/rigelbytes/funda-nl-scraper)** — Scrape property listings from Funda.nl — the largest real estate platform in the Netherlands. Supports buy and rent,...
- **[Furnished Finder Fast](https://apify.com/rigelbytes/furnished-finder-fast)** — Scrape property listings and market data from Furnished Finder for market research, price monitoring, and investment analysis.
- **[Extract Furnished Finder Hosts](https://apify.com/rigelbytes/furnished-finder-hosts)** — Scrape property listings and market data from Furnished Finder for market research, price monitoring, and investment analysis.
- **[FurnishedFinder](https://apify.com/rigelbytes/furnishedfinder)** — Scrape property listings and market data from Furnished Finder for market research, price monitoring, and investment analysis.
- **[GrandCityProperty Scraper — Extract German Rental Listings](https://apify.com/rigelbytes/grandcityproperty)** — Extract rental property listings from GrandCityProperty.de — prices, floor plans, energy data, and contact details....
- **[Grossmann Berger Scraper — German Real Estate Listings](https://apify.com/rigelbytes/grossmann-berger-scraper)** — Extract property listings, prices, agent contacts, and images from grossmann-berger.de. From $2/1,000 listings....
- **[Hemnet.se Scraper - Swedish Real Estate Listings](https://apify.com/rigelbytes/hemnet-se-scraper)** — Scrape property listings from Hemnet.se including for-sale, upcoming, and sold homes. Search by URL or location...
- **[Immobiliare Italy Real Estate Scraper](https://apify.com/rigelbytes/immobiliare-it-scraper)** — Scrape property listings and market data from real estate portals for market research, price monitoring, and investment analysis.
- **[Immobilienscout24](https://apify.com/rigelbytes/immobilienscout24)** — Scrape property listings and market data from real estate portals for market research, price monitoring, and investment analysis.
- **[Immobilienscout24-scraper](https://apify.com/rigelbytes/immobilienscout24-scraper)** — Scrape property listings and market data from real estate portals for market research, price monitoring, and investment analysis.
- **[Immoweb Scraper - Belgium Property Listings](https://apify.com/rigelbytes/immoweb-scraper)** — Scrapes property listings from Immoweb.be. Supports search result extraction with optional property detail enrichment.
- **[Immowelt Property Scraper](https://apify.com/rigelbytes/immowelt-property-scraper)** — The Immowelt Scraper helps you extract unlimited real estate listings from Immowelt with complete details including...
- **[Immowelt Scraper](https://apify.com/rigelbytes/immowelt-scraper)** — The Immowelt Scraper helps you extract unlimited real estate listings from Immowelt with complete details including...
- **[JLL Property Scraper — Extract Commercial  Investment Listings](https://apify.com/rigelbytes/jll-scraper)** — Scrape commercial and investment property data from JLL Germany (gewerbeimmobilien.jll.de and invest.jll.com)....
- **[Land.com Agents Scraper](https://apify.com/rigelbytes/landdotcom-agents)** — Scrape property listings and market data from Land.com for market research, price monitoring, and investment analysis.
- **[Land.com Scraper](https://apify.com/rigelbytes/landdotcom-scraper)** — Scrape property listings and market data from Land.com for market research, price monitoring, and investment analysis.
- **[Outdoorsy Scraper](https://apify.com/rigelbytes/outdoorsy-scraper)** — Scrape property listings and market data from Outdoorsy for market research, price monitoring, and investment analysis.
- **[PropertyFinder Eygpt](https://apify.com/rigelbytes/propertyfinder-eygpt)** — Scrape property listings and market data from Property Finder for market research, price monitoring, and investment analysis.
- **[Propertyfinder Scraper](https://apify.com/rigelbytes/propertyfinder-scraper)** — Scrape property listings and market data from Property Finder for market research, price monitoring, and investment analysis.
- **[Realtor.com Agent Scraper](https://apify.com/rigelbytes/realtor-agent-scraper)** — Scrape real estate agents from Realtor.com by city or ZIP code. Optionally fetch full agent profiles and reviews via...
- **[Realtor.com Scraper](https://apify.com/rigelbytes/realtor-scraper)** — Scrape Realtor.com property listings with full search filters via GraphQL. Supports price, beds/baths, property...
- **[Redfin Scraper](https://apify.com/rigelbytes/redfin-scraper)** — Scrape property listings and market data from Redfin for market research, price monitoring, and investment analysis.
- **[RE/MAX Germany Scraper](https://apify.com/rigelbytes/remax-scraper)** — Scrapes residential and commercial real estate listings from remax.de by German Bundesland. Extracts prices, areas,...
- **[Rent.com Scraper](https://apify.com/rigelbytes/rent-com-scraper)** — Scrape rental listings from rent.com — search by location query or URL. Extracts property details, photos, floor...
- **[Rightmove Scraper](https://apify.com/rigelbytes/rightmove-scraper)** — Scrape property listings and market data from Rightmove for market research, price monitoring, and investment analysis.
- **[RVshare Scraper](https://apify.com/rigelbytes/rvshare-scraper)** — Scrape property listings and market data from RVshare for market research, price monitoring, and investment analysis.
- **[Savills Property Scraper — Extract Listings by Location](https://apify.com/rigelbytes/savills-scraper)** — Scrape residential and commercial property listings from Savills by city. Get prices, addresses, sizes, bedrooms,...
- **[Unlimited Redfin Scraper](https://apify.com/rigelbytes/unlimited-redfin-scraper)** — Scrape property listings and market data from Redfin for market research, price monitoring, and investment analysis.
- **[Wüstenrot Immobilien Scraper — German Property Listings API](https://apify.com/rigelbytes/wuestenrot-immobilien)** — Scrape property listings and market data from real estate portals for market research, price monitoring, and investment analysis.
- **[Zillow Detail Scraper](https://apify.com/rigelbytes/zillow-detail-scraper)** — Scrape property listings and market data from Zillow for market research, price monitoring, and investment analysis.
- **[Zillow Scraper](https://apify.com/rigelbytes/zillow-scraper)** — Scrape property listings and market data from Zillow for market research, price monitoring, and investment analysis.
- **[Zoopla Scraper](https://apify.com/rigelbytes/zoopla-scraper)** — Scrape property listings and market data from Zoopla for market research, price monitoring, and investment analysis.

#### ✈️ Travel & Hospitality

Monitor rentals, bookings, and travel listings at scale.

- **[Autotrader Scraper](https://apify.com/rigelbytes/autotrader-scraper)** — Scrapes car listings from Autotrader.com with advanced search filters, pagination, and detailed vehicle data.
- **[CarMax Scraper](https://apify.com/rigelbytes/carmax-scraper)** — Scrapes used car listings from CarMax.com with search URL, zip code filtering, and pagination support.
- **[Cars.com Scraper](https://apify.com/rigelbytes/cars-scraper)** — Scrapes car listings from Cars.com using their GraphQL API. Extracts detailed vehicle data including price, specs,...
- **[Cars & Bids Scraper](https://apify.com/rigelbytes/carsandbids-scraper)** — Scrape live, upcoming, and past car auctions from Cars & Bids. Extract vehicle details, bids, photos, comments, and...
- **[Ticketmaster Scraper](https://apify.com/rigelbytes/ticketmaster-scraper)** — Collect rental and travel listings from Ticketmaster for pricing intelligence and availability tracking.

#### 🛒 E-commerce

Scrape products, prices, and marketplace data for competitive research.

- **[Amazon Product Scraper](https://apify.com/rigelbytes/amazon-product-scraper)** — Scrape products, prices, and seller data from Amazon for competitor monitoring, pricing, and product research.
- **[Amazon Search Scraper](https://apify.com/rigelbytes/amazon-scraper)** — Scrape products, prices, and seller data from Amazon for competitor monitoring, pricing, and product research.
- **[AutoScout24 Scraper](https://apify.com/rigelbytes/autoscout24-scraper)** — Scrape car listings from AutoScout24 with full filter support. Extract makes, models, prices, mileage, seller info,...
- **[Daraz](https://apify.com/rigelbytes/daraz)** — Scrape products, prices, and seller data from Daraz for competitor monitoring, pricing, and product research.
- **[Etsy Scraper](https://apify.com/rigelbytes/etsy-scraper)** — Scrape products, prices, and seller data from Etsy for competitor monitoring, pricing, and product research.
- **[Homedepot Scraper](https://apify.com/rigelbytes/homedepot-scraper)** — HomeDepot Products Scraper lets you extract product data from homedepot.com using a collection URL and delivery ZIP....
- **[Kleinanzeigen Scraper](https://apify.com/rigelbytes/kleinanzeigen-scraper)** — Scrape listings from kleinanzeigen.de — search results and detail pages for any category (electronics, vehicles,...
- **[Otodom Scraper - Polish Real Estate Listings](https://apify.com/rigelbytes/otodom-scraper)** — Scrapes property listings from Otodom.pl, Poland's leading real estate marketplace. Supports filters for transaction...

#### 💼 Jobs & Recruitment

Collect job listings and company hiring data for market analysis.

- **[Upwork Jobs Scraper](https://apify.com/rigelbytes/upwork-jobs-scraper)** — Scrapes Upwork freelance job listings by keyword with full search filters (sort, experience, job type, budget,...
- **[ZipRecruiter Job Scraper](https://apify.com/rigelbytes/ziprecruiter-scraper)** — Scrape job listings from ZipRecruiter with search queries, locations, and radius filters. Extracts title, company,...

#### 📩 Lead Generation

Find business contacts, leads, and company data for sales and outreach.

- **[Company Service Finder](https://apify.com/rigelbytes/company-service-finder)** — The Company Service Finder uses AI to extract and analyze company services from Google Search & Maps. Get detailed...
- **[Doctify Scraper](https://apify.com/rigelbytes/doctify-scraper)** — Doctify Scraper lets you extract doctor and practice data from doctify.com using a search results URL. Collect...
- **[Doctolib Scraper](https://apify.com/rigelbytes/doctolib-scraper)** — Scrape doctor profiles, availability, and practice details from Doctolib.de — Germany's largest medical appointment...
- **[FindLaw Law Firm Scraper - Attorney & Law Firm Data Extraction](https://apify.com/rigelbytes/findlaw-scraper)** — Scrape law firm profiles from FindLaw.com. Extract detailed attorney and firm information including contact details,...
- **[Google Maps Scraper](https://apify.com/rigelbytes/google-maps-scraper)** — Find business leads and contact details from Google Maps for outbound sales, prospecting, and CRM enrichment.
- **[Website Services Finder](https://apify.com/rigelbytes/website-services-finder)** — Automatically extract and analyze company services from any business website using advanced AI. Choose from 5 AI...
- **[Zillow Agents](https://apify.com/rigelbytes/zillow-agents)** — Find business leads and contact details from Zillow for outbound sales, prospecting, and CRM enrichment.
- **[Zillow Agents Phone](https://apify.com/rigelbytes/zillow-agents-phone)** — Find business leads and contact details from Zillow for outbound sales, prospecting, and CRM enrichment.
- **[Zillow Agents Vault](https://apify.com/rigelbytes/zillow-agents-vault)** — Find business leads and contact details from Zillow for outbound sales, prospecting, and CRM enrichment.

#### ⭐ Reviews & Ratings

Monitor reviews and reputation data across review platforms.

- **[Airbnb Listing Reviews](https://apify.com/rigelbytes/airbnb-listing-reviews)** — Collect reviews and ratings from Airbnb for reputation monitoring and customer insights.
- **[BBB Scraper](https://apify.com/rigelbytes/bbb-scraper)** — Collect reviews and ratings from BBB for reputation monitoring and customer insights.
- **[Costco Product Scraper](https://apify.com/rigelbytes/costco-scraper)** — Scrapes product data from Costco.com including prices, descriptions, ratings, and availability. Supports search...
- **[HRS Hotel Reviews Scraper](https://apify.com/rigelbytes/hrs-hotel-reviews-scraper)** — Extract hotel details, room offers, and guest reviews from HRS hotel URLs.
- **[HRS Hotel Scraper](https://apify.com/rigelbytes/hrs-scraper)** — Scrapes hotel listings, prices, ratings, and amenities from HRS (hrs.com) by location and travel dates.
- **[Rottentomatoes Reviews Scraper](https://apify.com/rigelbytes/rottentomatoes-reviews-scraper)** — Collect reviews and ratings from Rotten Tomatoes for reputation monitoring and customer insights.
- **[Trustpilot Reviews Scraper](https://apify.com/rigelbytes/trustpilot-reviews)** — Collect reviews and ratings from Trustpilot for reputation monitoring and customer insights.

#### 🍔 Food & Delivery

Extract restaurant, grocery, and delivery platform data.

- **[Instacart Scraper](https://apify.com/rigelbytes/instacart-scraper)** — Scrape menus, stores, and delivery data from Instacart for data-driven research and automation.
- **[Publix Scraper](https://apify.com/rigelbytes/publix-scraper)** — Scrape menus, stores, and delivery data from Publix for data-driven research and automation.

#### 🛠️ Developer Tools

General-purpose scraping and automation tools.

- **[Web Crawler](https://apify.com/rigelbytes/webcrawler)** — This web crawler is designed to provide users with complete flexibility by allowing them to use their \*\*own...

### Understanding Proxies:

When scraping data or browsing anonymously, proxies are essential. They act as intermediaries, masking your original IP address and allowing you to send requests from another location.

#### Why Use Proxies?

- Avoid IP Blocks: By routing requests through proxies, you prevent the target website from recognizing your IP as a scraper or spammer.
- Access Geo-restricted Content: Proxies let you access content or websites restricted by location.
- Enhance Anonymity: Hide your actual IP, ensuring privacy while scraping or browsing.

#### Types of Proxies

1. Residential Proxies
   - Real IP addresses provided by ISPs to home users.
   - They mimic regular users, making them harder to detect.
   - Best for: Long-term, undetectable scraping, and avoiding blocks.
2. Data Center Proxies
   - IP addresses from servers in data centers.
   - Faster and cheaper than residential proxies but easier to detect and block.
   - Best for: High-speed scraping, but with a higher risk of detection.
3. Mobile Proxies
   - IPs provided by mobile carriers (3G/4G/5G networks).
   - Very difficult to detect, as they appear as regular mobile users.
   - Best for: Mobile-related scraping or avoiding sophisticated blocks.

#### Rotating Proxies vs. Straight Proxies

- Rotating Proxies: Every request you send goes through a different proxy, making it harder for websites to detect patterns.
- Straight Proxies: All requests are sent through the same proxy, making it easier to track your IP.

### About Rigel Bytes

Rigel Bytes specializes in web scraping, automation, and data analytics. We help businesses extract and leverage valuable data for informed decision-making.

### Contact Us

Ready to unlock the power of data? Reach out to us at (contact@rigelbytes.com) or [book an appointment](https://cal.com/faizanali/appointments) with us to learn more about how we can help you achieve your data goals.

### Detailed Data

```json
[
  {
    "publicationNumber": "871151-2025",
    "title": "France – Agency fuel cards – Fourniture de cartes carburant et de carburant en vrac pour le SDIS de la Vendée",
    "noticeType": {
      "code": "can-standard",
      "label": "Contract or concession award notice – standard regime"
    },
    "procedureType": {
      "code": "open",
      "label": "Open"
    },
    "contractNature": [{ "code": "supplies", "label": "Supplies" }],
    "buyerName": "SDIS 85",
    "buyerCountry": [{ "code": "FRA", "label": "France" }],
    "placeOfPerformance": [{ "code": "FRG05", "label": "Vendée" }],
    "publicationDate": "2025-12-31+01:00",
    "deadlineReceiptRequest": "",
    "detailUrl": "https://ted.europa.eu/en/notice/-/detail/871151-2025",
    "pdfUrl": "https://ted.europa.eu/en/notice/871151-2025/pdf",
    "mainClassification": [{ "code": "30163100", "label": "Agency fuel cards" }],
    "buyerProfileUrls": ["https://sdis85.e-marchespublics.com"],
    "contacts": {
      "emails": ["sajcp@sdis-vendee.fr"]
    },
    "notificationSummary": "TED Notice 871151-2025\nFrance – Agency fuel cards …",
    "searchQuery": "publication-number=871151-2025 SORT BY publication-number DESC"
  }
]
```

# Actor input Schema

## `fullTextSearch` (type: `string`):

Free-text search across TED notices (maps to FT expert field). Example: construction software

## `businessOpportunity` (type: `array`):

Filter by business opportunity type. Common values: competition, result, planning, veat, dir-awa-pre, pmc, corr

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

Common Procurement Vocabulary codes, e.g. 72000000 for IT services

## `contractNature` (type: `array`):

Contract nature codes: supplies, services, works

## `placeOfPerformance` (type: `array`):

NUTS or country codes where work is performed, e.g. DEU, POL, PL911

## `placeOfProcedure` (type: `array`):

NUTS or country codes for place of procedure (BT-727 field)

## `procedureType` (type: `array`):

Procedure type codes, e.g. open, restricted, neg-wo-call

## `buyerCountry` (type: `array`):

ISO 3166-1 alpha-3 buyer country codes, e.g. DEU, FRA, POL

## `buyerName` (type: `string`):

Partial match on buyer organisation name

## `publicationYear` (type: `string`):

Filter by publication year, e.g. 2025

## `publicationDateFrom` (type: `string`):

Start of publication date range (YYYY-MM-DD)

## `publicationDateTo` (type: `string`):

End of publication date range (YYYY-MM-DD)

## `legalBasis` (type: `array`):

Legal basis codes, e.g. 32014L0024

## `funding` (type: `array`):

Funding programme codes, e.g. external-aid-program

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

Direct notice-type codes (advanced). Overrides businessOpportunity when both are set.

## `ojsNumber` (type: `string`):

Official Journal supplement number

## `publicationNumbers` (type: `array`):

Fetch specific notices by publication number, e.g. 871151-2025

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

TED notice detail or search result URLs. Publication numbers and search params are extracted automatically.

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

Raw TED expert search query (overrides structured filters). Example: (buyer-country IN (DEU)) AND (FT ~ (software)) SORT BY publication-number DESC

## `language` (type: `string`):

Language for labels and detail view rendering

## `scope` (type: `string`):

TED search scope

## `onlyLatestVersions` (type: `boolean`):

Return only the latest version of each notice

## `sortBy` (type: `string`):

Sort column for search results

## `sortOrder` (type: `string`):

Sort direction

## `fetchDetails` (type: `boolean`):

When enabled, fetches the full notice detail page including buyer contacts, procedure info, document links, and section text. Disabled by default for faster overview-only runs.

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

Maximum number of notices to scrape (0 = unlimited)

## `pageSize` (type: `integer`):

Number of results per search API page (max 100)

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

Proxy settings for anti-bot protection

## Actor input object example

```json
{
  "businessOpportunity": [
    "competition"
  ],
  "language": "EN",
  "scope": "ALL",
  "onlyLatestVersions": false,
  "sortBy": "publication-number",
  "sortOrder": "DESC",
  "fetchDetails": false,
  "maxItems": 50,
  "pageSize": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `runStats` (type: `string`):

No description

## `input` (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 = {
    "businessOpportunity": [
        "competition"
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rigelbytes/eu-tenders-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 = {
    "businessOpportunity": ["competition"],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rigelbytes/eu-tenders-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "businessOpportunity": [
    "competition"
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rigelbytes/eu-tenders-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rigelbytes/eu-tenders-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU Tenders Scraper",
        "description": "Scrape EU public procurement notices from TED (Tenders Electronic Daily) with advanced search filters, multi-language support, and optional full notice detail extraction. Ideal for monitoring, Slack/Discord notifiers, and procurement intelligence integrations.",
        "version": "1.0",
        "x-build-id": "Pr4OYxsT8GmzPLEOh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/rigelbytes~eu-tenders-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-rigelbytes-eu-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/rigelbytes~eu-tenders-scraper/runs": {
            "post": {
                "operationId": "runs-sync-rigelbytes-eu-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/rigelbytes~eu-tenders-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-rigelbytes-eu-tenders-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "fullTextSearch": {
                        "title": "Full text search",
                        "type": "string",
                        "description": "Free-text search across TED notices (maps to FT expert field). Example: construction software"
                    },
                    "businessOpportunity": {
                        "title": "Business opportunity",
                        "type": "array",
                        "description": "Filter by business opportunity type. Common values: competition, result, planning, veat, dir-awa-pre, pmc, corr",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cpvCodes": {
                        "title": "CPV codes",
                        "type": "array",
                        "description": "Common Procurement Vocabulary codes, e.g. 72000000 for IT services",
                        "items": {
                            "type": "string"
                        }
                    },
                    "contractNature": {
                        "title": "Nature of contract",
                        "type": "array",
                        "description": "Contract nature codes: supplies, services, works",
                        "items": {
                            "type": "string"
                        }
                    },
                    "placeOfPerformance": {
                        "title": "Place of performance",
                        "type": "array",
                        "description": "NUTS or country codes where work is performed, e.g. DEU, POL, PL911",
                        "items": {
                            "type": "string"
                        }
                    },
                    "placeOfProcedure": {
                        "title": "Place of procedure",
                        "type": "array",
                        "description": "NUTS or country codes for place of procedure (BT-727 field)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "procedureType": {
                        "title": "Procedure type",
                        "type": "array",
                        "description": "Procedure type codes, e.g. open, restricted, neg-wo-call",
                        "items": {
                            "type": "string"
                        }
                    },
                    "buyerCountry": {
                        "title": "Country of buyer",
                        "type": "array",
                        "description": "ISO 3166-1 alpha-3 buyer country codes, e.g. DEU, FRA, POL",
                        "items": {
                            "type": "string"
                        }
                    },
                    "buyerName": {
                        "title": "Buyer name",
                        "type": "string",
                        "description": "Partial match on buyer organisation name"
                    },
                    "publicationYear": {
                        "title": "Publication year",
                        "pattern": "^\\d{4}$",
                        "type": "string",
                        "description": "Filter by publication year, e.g. 2025"
                    },
                    "publicationDateFrom": {
                        "title": "Publication date from",
                        "type": "string",
                        "description": "Start of publication date range (YYYY-MM-DD)"
                    },
                    "publicationDateTo": {
                        "title": "Publication date to",
                        "type": "string",
                        "description": "End of publication date range (YYYY-MM-DD)"
                    },
                    "legalBasis": {
                        "title": "Legal basis",
                        "type": "array",
                        "description": "Legal basis codes, e.g. 32014L0024",
                        "items": {
                            "type": "string"
                        }
                    },
                    "funding": {
                        "title": "Funding",
                        "type": "array",
                        "description": "Funding programme codes, e.g. external-aid-program",
                        "items": {
                            "type": "string"
                        }
                    },
                    "noticeTypes": {
                        "title": "Notice types",
                        "type": "array",
                        "description": "Direct notice-type codes (advanced). Overrides businessOpportunity when both are set.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ojsNumber": {
                        "title": "OJ S number",
                        "type": "string",
                        "description": "Official Journal supplement number"
                    },
                    "publicationNumbers": {
                        "title": "Publication numbers",
                        "type": "array",
                        "description": "Fetch specific notices by publication number, e.g. 871151-2025",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchUrls": {
                        "title": "TED URLs",
                        "type": "array",
                        "description": "TED notice detail or search result URLs. Publication numbers and search params are extracted automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "expertQuery": {
                        "title": "Expert query",
                        "type": "string",
                        "description": "Raw TED expert search query (overrides structured filters). Example: (buyer-country IN (DEU)) AND (FT ~ (software)) SORT BY publication-number DESC"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "EN",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "PL",
                            "NL",
                            "CS",
                            "DA",
                            "EL",
                            "ET",
                            "FI",
                            "GA",
                            "HR",
                            "HU",
                            "LT",
                            "LV",
                            "MT",
                            "PT",
                            "RO",
                            "SK",
                            "SL",
                            "SV",
                            "BG"
                        ],
                        "type": "string",
                        "description": "Language for labels and detail view rendering",
                        "default": "EN"
                    },
                    "scope": {
                        "title": "Search scope",
                        "enum": [
                            "ALL",
                            "ACTIVE",
                            "LATEST"
                        ],
                        "type": "string",
                        "description": "TED search scope",
                        "default": "ALL"
                    },
                    "onlyLatestVersions": {
                        "title": "Only latest versions",
                        "type": "boolean",
                        "description": "Return only the latest version of each notice",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "publication-number",
                            "publication-date",
                            "deadline-receipt-request"
                        ],
                        "type": "string",
                        "description": "Sort column for search results",
                        "default": "publication-number"
                    },
                    "sortOrder": {
                        "title": "Sort order",
                        "enum": [
                            "DESC",
                            "ASC"
                        ],
                        "type": "string",
                        "description": "Sort direction",
                        "default": "DESC"
                    },
                    "fetchDetails": {
                        "title": "Fetch full details",
                        "type": "boolean",
                        "description": "When enabled, fetches the full notice detail page including buyer contacts, procedure info, document links, and section text. Disabled by default for faster overview-only runs.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of notices to scrape (0 = unlimited)",
                        "default": 50
                    },
                    "pageSize": {
                        "title": "Page size",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Number of results per search API page (max 100)",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for anti-bot protection",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
