# Commercial.ie Property Scraper (`studio-amba/commercial-ie-scraper`) Actor

Scrape commercial property listings from Commercial.ie, Ireland's dedicated commercial portal: offices, retail units, industrial space, pubs and restaurants, development land and investment property. Prices with POA preserved, floor areas, BER, coordinates and agent contacts.

- **URL**: https://apify.com/studio-amba/commercial-ie-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Real estate
- **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/platform/actors/running/actors-in-store#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

## Commercial.ie Property Scraper

Extract commercial property listings from Commercial.ie, Ireland's dedicated commercial property portal. Covers offices, retail units, industrial and warehouse space, pubs and restaurants, development land and sites, and multi-unit investment property across all 26 counties.

### What does this actor do?

You give it an Irish county or a free-text location, pick sale, rent or both, and optionally narrow to a segment such as offices or development land. It returns structured JSON for every listing: address, price with POA preserved, floor area or site size with its unit, BER rating, coordinates, photos, the full listing description, and the marketing agent with phone number and PSRA licence number where published.

### Why use it?

- **Market research.** Track asking prices and rents for offices, retail and industrial space across Irish counties.
- **Land sourcing.** Development sites and zoned land are a core segment on Commercial.ie. Filter them directly and feed the results into your own pipeline.
- **Pub and hospitality deals.** Public houses, restaurants and lodging businesses are listed as their own property types, including turnkey going concerns.
- **Investment screening.** Multi-unit blocks and portfolios with full pricing context in one dataset.
- **Agent prospecting.** Every record includes the marketing agent, phone number and PSRA licence number where published.

Commercial property in Ireland is often priced on application. This actor never fakes a number: POA listings get a null `price` and `priceText` says "Price on Application". When a rent is quoted per month, per week or per annum, the quote period is captured in `priceUnit`.

### How to scrape Commercial.ie data

1. Set `searchQuery` to an Irish county, for example `Dublin`, `Cork` or `Galway`. County names use the site's own county filter. Anything else (a town, a street, a business park) runs as a full-text search. Leave it empty to scrape all of Ireland.
2. Pick `listingType`: `sale`, `rent`, or `all` for both.
3. Pick a `segment`, or keep `all`.
4. Set `maxResults` and run. Results land in the default dataset as JSON, downloadable as CSV, Excel or via the API.

The whole portal carries around 1,000 live listings, so a full nationwide scrape of every segment completes in about a dozen requests.

### Input options

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQuery` | string | (empty) | Irish county or free text. Empty = all of Ireland. |
| `listingType` | string | `all` | `sale`, `rent` or `all`. |
| `segment` | string | `all` | `office`, `retail`, `industrial`, `development-land`, `hospitality`, `investment`, `other` or `all`. |
| `maxResults` | integer | `100` | Hard cap on returned listings (1 to 1,000). |
| `proxyConfiguration` | object | Residential, IE | Irish residential proxy recommended. |

The `industrial` segment bundles industrial units, warehouses and storage. The `hospitality` segment bundles public houses, restaurants and lodging. The `investment` segment bundles multi-unit blocks and portfolios.

#### Example: offices to rent in Dublin

```json
{
    "searchQuery": "Dublin",
    "listingType": "rent",
    "segment": "office",
    "maxResults": 100
}
```

#### Example: development land for sale in Galway

```json
{
    "searchQuery": "Galway",
    "listingType": "sale",
    "segment": "development-land",
    "maxResults": 100
}
```

#### Example: pubs and restaurants for sale nationwide

```json
{
    "listingType": "sale",
    "segment": "hospitality",
    "maxResults": 200
}
```

### Output fields

| Field | Type | Example |
|-------|------|---------|
| `title` | string | `"Lower Baggot Street, Dublin 2, D02 NX20"` |
| `url` | string | Commercial.ie listing URL |
| `listingType` | string or null | `"sale"`, `"rent"`, `"sale/rent"` |
| `segment` | string | `"office"`, `"retail"`, `"industrial"`, `"development-land"`, `"hospitality"`, `"investment"`, `"other"` |
| `propertyType` | string | `"Office"`, `"Retail"`, `"Development Site"`, `"Public House"` |
| `propertyStatus` | string or null | `"For Sale"`, `"To Let"` exactly as the site holds it |
| `propertyMarket` | string or null | `"Commercial Sales"`, `"Commercial Rental"`, `"Land Site Sales"` |
| `price` | number or null | `450000`, `1200` (null when price on application) |
| `priceText` | string or null | `"€450,000"`, `"€1,200 per month"`, `"Price on Application"` |
| `priceUnit` | string or null | `"per month"`, `"per annum"`, `"per week"` (null for plain sale prices; can be set on a POA rent when the site records the quote period) |
| `currency` | string | `"EUR"` (always, quoted alongside every price) |
| `surface` | number or null | `255`, `11.5` |
| `surfaceUnit` | string or null | `"m2"` for buildings, `"acres"` for land |
| `surfaceText` | string or null | `"255 sq.m. (2,745 sq.ft.)"`, `"11.5 acres"` |
| `address` | string | Address as listed |
| `county` | string or null | `"Dublin"`, `"Cork"` |
| `area` | string or null | Town or locality, e.g. `"Swords"` |
| `eircode` | string or null | `"D02 NX20"` |
| `latitude`, `longitude` | number or null | WGS84 coordinates |
| `berRating` | string or null | `"B3"`, `"Exempt"` |
| `description` | string or null | Full listing description as plain text |
| `livingType` | string or null | `"B&B"`, `"Hotel"` on hospitality listings |
| `imageUrl` | string or null | Primary photo |
| `imageUrls` | array | All photos |
| `agentName` | string or null | `"Aoibhe Timoney"` |
| `agencyPhone` | string or null | `"01 437 7105"` |
| `psraNumber` | string or null | PSRA licence number where published |
| `publishedDate` | string or null | ISO 8601 publish date |
| `source` | string | `"commercial.ie"` |
| `scrapedAt` | string | ISO 8601 scrape timestamp |

### Pricing and cost

You pay per result: one listing = one dataset item. There are no detail-page fetches, so a run of 100 results makes two or three requests and finishes in under a minute. A run's usage cost only settles after the run reports SUCCEEDED; a failed run does not charge for results, and a mid-run dataset read undercounts the final cost.

### Notes and limits

- POA is common in Irish commercial property. Roughly a fifth of listings carry no quoted price; those get a null `price` and "Price on Application" in `priceText`. A small number of listings carry a nominal placeholder such as €1, which the site displays literally and this actor preserves as-is.
- Building sizes are quoted in square metres, land in acres. Check `surfaceUnit` before comparing `surface` values.
- Sale versus rent is filtered by the actor after fetching, because the portal's API does not filter on it. The `maxResults` cap counts listings actually returned to you, not listings fetched.
- Results come newest-first, matching the site's own ordering.
- Commercial.ie is the dedicated commercial portal of the FindaHome group. For Irish commercial listings on Daft.ie, use the Daft.ie Commercial Property Scraper; the two share the same field names, so datasets combine cleanly.

### Legal

This actor scrapes publicly available listing data. You are responsible for how you use the data; respect Commercial.ie's terms of service and applicable law, including GDPR for any personal data such as agent contact details.

# Actor input Schema

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

Irish county (e.g. 'Dublin', 'Cork', 'Galway') or free text such as a town or street. County names use the site's own county filter; anything else runs as a full-text search. Leave empty to scrape all of Ireland.

## `listingType` (type: `string`):

For sale, to let, or both.

## `segment` (type: `string`):

Commercial segment. 'investment' covers multi-unit blocks and portfolios; 'hospitality' covers pubs, restaurants and lodging.

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

Hard cap on the number of listings returned (1 to 1,000 — the whole portal carries around 1,000 live listings). One result = one listing.

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

Irish residential proxies recommended for reliable cloud runs (the site sits behind Cloudflare). Runs are cheap either way — a full scrape of the portal is about a dozen requests.

## Actor input object example

```json
{
  "searchQuery": "Dublin",
  "listingType": "all",
  "segment": "all",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}
```

# 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": "Dublin",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/commercial-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": "Dublin",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/commercial-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": "Dublin",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IE"
  }
}' |
apify call studio-amba/commercial-ie-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/commercial-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/CZU7guPLJJWlJyiF2/builds/6Lm8V4VP58Ah8iUH0/openapi.json
