# eTenders Ireland Scraper — Public Procurement Tenders (`studio-amba/etenders-ie-scraper`) Actor

Search and extract Irish public procurement tenders from eTenders.gov.ie, Ireland's official government tender portal. Filter by keyword, status, contract type, or date range. Returns tender details, buyer info, deadlines, and CPV codes. No API key, no cookies, no login required.

- **URL**: https://apify.com/studio-amba/etenders-ie-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Irish Public Procurement Scraper — eTenders.gov.ie

Search and extract Irish public procurement tenders from eTenders.gov.ie, the official national tender portal operated by the Office of Government Procurement (OGP). Filter by keyword, status, contract type, procedure, CPC category, or date range. Returns tender title, contracting authority, deadline, estimated value, CPV codes, NUTS region, and full notice details. No API key, no cookies, no login required.

### How to scrape eTenders Ireland data

This actor reads tender data straight from eTenders.gov.ie's own search and notice pages — the same pages a human user browses. All Irish public bodies are required to publish procurement notices above the relevant threshold on eTenders, making it the single most complete source for Irish government contract opportunities, from local county councils to national agencies and the HSE.

Enter your search keywords, pick optional filters, and run. The actor fetches the search results list, then opens each tender's full notice page to pull CPV classification codes, NUTS region, contract directive, and precise deadline data that isn't shown in the list view.

#### Who benefits from this data?

- **Government contractors** — Monitor new procurement opportunities daily across Irish county councils, government departments, the HSE, and state agencies. Never miss a relevant tender in your industry.
- **Market researchers** — Analyze Irish public spending patterns, procurement volumes, and contract award trends across sectors and regions.
- **B2B sales teams** — Identify which Irish public bodies are buying what you sell. Build targeted prospect lists across the Irish public procurement market.
- **Consultancies and advisory firms** — Track procurement activity by CPC category, region, or buyer to advise clients on Irish market entry and bidding strategy.
- **Compliance and legal teams** — Monitor competitor contract awards and verify procurement procedural compliance.
- **EU/EEA market intelligence** — Larger Irish tenders above EU thresholds are cross-published on TED (Tenders Electronic Daily); this actor captures the TED link alongside the native eTenders record.

#### Search by keyword

Enter any keyword to find relevant tenders. The search matches against the tender title. Examples: "IT services", "construction", "consultancy", "software", "cleaning", "medical equipment".

#### Filter by status

- **Tender Submission** — open for bids right now
- **Under Evaluation** — bids received, being assessed
- **Awaiting Tender Opening** — submission closed, opening pending
- **Awarded** — contract has been awarded (competitor intelligence)
- **Established**, **Archived**, **Cancelled**, **Terminated** — historical states

#### Filter by contract type and procedure

- **Contract type**: Services, Works, Works Related Services, or Supplies
- **Procedure**: Open, Restricted, Competitive Dialogue, Dynamic Purchasing System (DPS), and other EU procurement procedure types

#### Filter by CPC category

CPC (Central Product Classification) categories group tenders by what's being procured. Common categories: `7` (Computer and related services), `1` (Maintenance and repair services), `11` (Management consulting), `12` (Architectural and engineering services).

#### Filter by date

Use `publishedAfter`/`publishedBefore` to monitor new publications, and `submissionAfter`/`submissionBefore` to filter by bid deadline window.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | String | `IT services` | Keyword matched against the tender title |
| `tenderStatus` | Enum | `all` | Filter by workspace status (see above) |
| `contractType` | Enum | `all` | `all`, `services`, `works`, `worksRelatedServices`, `supplies` |
| `procedure` | Enum | `all` | Procurement procedure type (Open, Restricted, DPS, etc.) |
| `cpcCategory` | String | — | CPC category ID (e.g. `7` for IT services) |
| `publishedAfter` / `publishedBefore` | String | — | Publication date range, YYYY-MM-DD |
| `submissionAfter` / `submissionBefore` | String | — | Bid deadline date range, YYYY-MM-DD |
| `estimatedValueMin` / `estimatedValueMax` | Integer | — | Estimated contract value range, EUR |
| `maxResults` | Integer | `50` | Maximum number of tenders to return (1–5,000) |
| `proxyConfiguration` | Object | Apify proxy | Apify proxy settings |

### What data does this scraper extract?

| Field | Type | Description |
|-------|------|--------------|
| `itemTitle` | String | Tender title |
| `referenceNumber` | String | eTenders resource ID |
| `organization` | String | Contracting authority / buyer name |
| `status` | String | Tender Submission, Awarded, Under Evaluation, etc. |
| `publicationDate` | String | Date the notice was published |
| `deadline` | String | Bid submission deadline |
| `estimatedValue` | String | Estimated contract value |
| `currency` | String | Always `EUR` |
| `category` | String | Procurement type (Services, Works, Supplies) |
| `cpvCodes` | Array | CPV classification codes with descriptions |
| `region` | String | NUTS region code(s) |
| `itemDescription` | String | Full tender description |
| `contactInfo` | Object | Contact name/phone (when published on the notice) |
| `url` | String | Direct link to the tender on eTenders.gov.ie |
| `scrapedAt` | String | ISO timestamp of when the data was scraped |
| `procedure` | String | Procurement procedure (Open, Restricted, DPS, etc.) |
| `procurementType` | String | Services / Works / Supplies |
| `directive` | String | EU procurement directive reference (e.g. `2014/24/EU`) |
| `tedUrl` | String | Link to the matching notice on TED, when cross-published |
| `awardDate` | String | Date the contract was awarded, when applicable |

### Example output

```json
{
    "itemTitle": "CFT to establish a single supplier Framework Agreement for the Provision of a Masters in Software Design with Artificial Intelligence",
    "referenceNumber": "8920829",
    "organization": "Technology Ireland ICT Skillnet",
    "status": "Tender Submission",
    "publicationDate": "2026-08-25T17:25:00",
    "deadline": "2026-09-10T12:00:00",
    "estimatedValue": "250000",
    "currency": "EUR",
    "category": "Services",
    "cpvCodes": [
        { "code": "80000000", "description": "Education and training services" },
        { "code": "80300000", "description": "Higher education services" }
    ],
    "region": "IE",
    "itemDescription": "The Contracting Authority requires the services of a single service provider...",
    "contactInfo": {},
    "url": "https://www.etenders.gov.ie/epps/cft/prepareViewCfTWS.do?resourceId=8920829",
    "scrapedAt": "2026-08-31T09:15:05.956Z",
    "procedure": "Open",
    "procurementType": "Services",
    "directive": "2014/24/EU (Classic)",
    "tedUrl": "https://ted.europa.eu/udl?uri=TED:NOTICE:592241-2026:TEXT:EN:HTML",
    "awardDate": ""
}
```

### Tips for best results

- **Daily monitoring**: Run on a schedule to catch new tenders within hours of publication. Set `publishedAfter` to yesterday's date for fresh opportunities only.
- **CPC category targeting**: After an initial broad search, note the CPC categories most relevant to your business and use them to filter precisely.
- **Competitor intelligence**: Search for competitor names or specific service descriptions to track what contracts they are pursuing or winning.
- **Combine with TED**: For full EU procurement coverage, pair this actor with our TED actor. Larger Irish tenders above EU thresholds appear on both eTenders and TED — this actor captures the cross-link automatically.

### How much does it cost to run?

The eTenders data source is free and requires no login. Your only cost is Apify compute time and proxy usage. Each tender requires one extra request to the notice detail page for CPV codes, region, and full description, so run time scales roughly linearly with `maxResults`.

| Search size | Estimated time | Estimated cost |
|-------------|---------------|----------------|
| 20 tenders | ~1 minute | ~$0.02 (~$0.001 per result) |
| 100 tenders | ~4 minutes | ~$0.08 (~$0.001 per result) |
| 500 tenders | ~18 minutes | ~$0.30 (~$0.001 per result) |

Actual cost depends on Apify plan and proxy usage; a run's final usage cost only settles after the run reports SUCCEEDED — reading the dataset mid-run will undercount it.

### Use as an API

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/etenders-ie-scraper").call(run_input={
    "searchQuery": "construction",
    "tenderStatus": "tenderSubmission",
    "maxResults": 50,
})

for tender in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{tender['itemTitle']} | {tender['organization']} | Deadline: {tender['deadline']}")
```

### Limitations

- **Search matches title only**: the `searchQuery` field matches the tender title, not the full description — this avoids an AND-trap where combining title and description filters returns far fewer results than either alone.
- **Estimated value often absent**: like most EU procurement portals, not every notice discloses a contract value.
- **Contact info is sparse**: only some notices publish a named contact point.
- **Dynamic Purchasing System (DPS) notices**: these use a slightly different detail page layout on eTenders; the actor falls back to list-level data if a DPS notice's detail page can't be parsed.
- **10 results per search page**: pagination is handled automatically, but very large `maxResults` values mean more requests and longer run times.

### Other European procurement scrapers

Check the [Studio AMBA actor catalog](https://apify.com/studio-amba) for more European public procurement data, including DOFFIN (Norway), TenderNed (Netherlands), TED (EU-wide), and Belgian public procurement.

### Your feedback

Found a bug or want a feature? Open an issue on the [Issues tab](https://console.apify.com/actors/studio-amba~etenders-ie-scraper/issues).

# Actor input Schema

## `searchQuery` (type: `string`):

Search tenders by keyword, matched against the tender title only. Examples: 'IT services', 'construction', 'consultancy', 'software', 'cleaning'.

## `tenderStatus` (type: `string`):

Filter by workspace status. 'Tender Submission' = open for bids, 'Awarded' = contract awarded.

## `contractType` (type: `string`):

Filter by procurement type.

## `procedure` (type: `string`):

Filter by procurement procedure type.

## `cpcCategory` (type: `string`):

Filter by CPC (Central Product Classification) category ID. Examples: '7' (Computer and related services), '1' (Maintenance and repair services), '2' (Land transport services). Leave empty for all categories.

## `publishedAfter` (type: `string`):

Only tenders published on or after this date. Format: YYYY-MM-DD.

## `publishedBefore` (type: `string`):

Only tenders published on or before this date. Format: YYYY-MM-DD.

## `submissionAfter` (type: `string`):

Only tenders with a bid submission deadline on or after this date. Format: YYYY-MM-DD.

## `submissionBefore` (type: `string`):

Only tenders with a bid submission deadline on or before this date. Format: YYYY-MM-DD.

## `estimatedValueMin` (type: `integer`):

Only tenders with an estimated contract value at or above this amount, in EUR.

## `estimatedValueMax` (type: `integer`):

Only tenders with an estimated contract value at or below this amount, in EUR.

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

Maximum number of tenders to return. Each tender requires one extra request to fetch full details (CPV codes, region, description).

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

Apify proxy configuration.

## Actor input object example

```json
{
  "searchQuery": "IT services",
  "tenderStatus": "all",
  "contractType": "all",
  "procedure": "all",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "IT services",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/etenders-ie-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 = {
    "searchQuery": "IT services",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/etenders-ie-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 '{
  "searchQuery": "IT services",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/etenders-ie-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/etenders-ie-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/4UgZdfYNxvvhALAgO/builds/vK3dMVZNTQ0pKeQEd/openapi.json
