# Ejendomstorvet Scraper - Denmark Commercial Property (`sian.agency/ejendomstorvet-property-scraper`) Actor

Scrape Ejendomstorvet.dk: Danish offices, shops, warehouses, land and investment properties for rent or sale. Rent per m², price, yield, area, GPS.

- **URL**: https://apify.com/sian.agency/ejendomstorvet-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 listing searches

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ejendomstorvet Scraper: Danish Commercial Property Data 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Boligsiden Scraper](https://img.shields.io/badge/Store-Boligsiden%20Scraper-1AE392)](https://apify.com/sian.agency/boligsiden-property-scraper?fpr=sian) [![LoopNet Scraper](https://img.shields.io/badge/Store-LoopNet%20Scraper-D3242B)](https://apify.com/sian.agency/loopnet-property-scraper?fpr=sian) [![Hemnet Scraper](https://img.shields.io/badge/Store-Hemnet%20Scraper-1AE392)](https://apify.com/sian.agency/hemnet-property-scraper?fpr=sian)

#### 🎉 About 11,400 Danish commercial listings in all 11 regions: 7,000 premises for rent, 1,800 for sale and 2,500 investment properties

##### For brokers, investors, landlords, analysts and growing companies who want Ejendomstorvet's offices, shops and warehouses in a spreadsheet

### 🔎 What is the Ejendomstorvet Scraper — and when should you use it?

The **Ejendomstorvet Scraper** turns public Ejendomstorvet.dk listings of Danish offices, shops, warehouses, land and investment properties, into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Danish commercial premises for rent, commercial property for sale, investment properties and office hotels as rows. Every search row carries the yearly rent and rent per m² or the price and price per m², floor and plot area, yield for investments, operating costs, address, GPS, energy label, the listing broker's company and the main photo. Open each listing in full and you also get the broker's description, the photos, year built and facilities.

**Use something else when:** you want Danish homes rather than commercial property, or commercial property outside Denmark. Use [Boligsiden Scraper](https://apify.com/sian.agency/boligsiden-property-scraper?fpr=sian) for Danish homes for sale, sold prices and estate agents. Use [LoopNet Scraper](https://apify.com/sian.agency/loopnet-property-scraper?fpr=sian) for commercial real estate in the US, Canada, the UK, France, Spain and Australia. This actor reads live Ejendomstorvet listings only. It returns no broker phone numbers, e-mail addresses or contact names, has no size or rent filter on the site's side, and does not return closed deals.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/ejendomstorvet-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want commercial property for rent or sale in Denmark from Ejendomstorvet.dk using the Apify Actor `sian.agency/ejendomstorvet-property-scraper`.

Use it when I need: Danish commercial premises for rent, commercial property for sale, investment properties and office hotels as rows. Every search row carries the yearly rent and rent per m² or the price and price per m², floor and plot area, yield for investments, operating costs, address, GPS, energy label, the listing broker's company and the main photo. Open each listing in full and you also get the broker's description, the photos, year built and facilities.

Don't use it when: you want Danish homes rather than commercial property, or commercial property outside Denmark — use boligsiden-property-scraper or loopnet-property-scraper instead.

How to call it: set `listingType` to `leje` (for rent), `salg` (for sale), `investering` (investment) or `kontorhotel` (office hotel), `propertyType` to `kontor`, `detailhandel-butik`, `lager-produktion`, `hotel-restaurant`, `grunde`, `boligudlejning` or `andre-typer`, `region` to one of the 11 regions such as `byen-koebenhavn` or `oestjylland` (or `all`), and optionally `location` (a town, postcode or street, for example `Aarhus` or `2100`) and `sortBy` (`newest`, `areaLarge`, `yieldHigh` and more). `maxResults` sets how many listings come back. `includeDetails` opens each listing for the description, photos, year built and facilities, for an extra charge per listing. `searchUrls` takes Ejendomstorvet search pages as [{"url": ...}] objects. To expand listings you already have, set `operation` to `detail` and pass `listingUrls`.

Start with this input:
{
  "operation": "search",
  "listingType": "leje",
  "propertyType": "kontor",
  "region": "oestjylland",
  "location": "Aarhus",
  "maxResults": 50,
  "includeDetails": false
}

Ask me which region or town to cover, whether I want premises for rent, for sale, investment properties or office hotels, and which property type, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *List every office for rent in Aarhus with yearly rent per m² and floor area.*
- *Find investment properties for sale in Byen København sorted by highest yield.*
- *Export warehouses and production halls for rent in Sydjylland, largest first.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/ejendomstorvet-property-scraper.md](https://apify.com/sian.agency/ejendomstorvet-property-scraper.md).

***

### 📋 Overview

The **Ejendomstorvet Scraper** reads Ejendomstorvet.dk, the Danish marketplace where commercial brokers list offices, shops, warehouses, land and investment properties, and returns each listing as a clean row.

**What you get:**

- ✅ **Commercial stock only**: Ejendomstorvet is run by the Danish commercial brokers' association, and residential portals carry almost none of these listings
- 💰 **Rent and price as numbers**: yearly rent, rent per m², operating costs, price, price per m² and yield, ready to sort and chart
- 📍 **Mappable**: full address, postcode, municipality and GPS on every row
- 🏢 **Broker named**: the listing broker's company, its case number and a link to the listing on the broker's own site
- ⚡ **Fast**: 20 listings per page, so 1,000 listings take about two minutes
- 💎 **Pay per listing**: $1.50 per 1,000 listings. A search that finds nothing costs nothing
- ✨ **NEW**: open each listing in full for the broker's description, photos, year built and facilities

***

### ✨ Features

- 🏷️ **Four listing types**: premises for rent, property for sale, investment properties and office hotels
- 🏢 **Seven property types**: office, retail and shop, warehouse and production, hotel and restaurant, land, residential rental property and other types
- 🗺️ **All 11 regions**: from Byen København to Nordjylland and Bornholm, or the whole country in one run
- 📍 **Town, postcode or street**: narrow any search to Aarhus, 2100 or Vesterbrogade
- ↕️ **Ten sort orders**: newest, oldest, price, area, price per m² and yield, each either way
- 🔗 **Paste any search**: copy a search page from ejendomstorvet.dk and the actor runs exactly that search
- 📄 **Full listings on demand**: description, photos, year built and facilities, billed only when the page opens
- 🔒 **No personal contact data**: broker phone numbers, e-mail addresses and contact names are never collected

***

### 🎬 Quick Start

Pick a listing type, a property type and a region, then run. The actor pages through Ejendomstorvet's search and saves every listing once. Export the dataset as JSON, CSV or Excel.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~ejendomstorvet-property-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"listingType": "leje", "propertyType": "kontor", "region": "oestjylland", "location": "Aarhus", "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick what

Choose **For rent**, **For sale**, **Investment property** or **Office hotel**, then the property type.

#### Step 2: Pick where

Choose a region, and type a town, postcode or street if you want a smaller area.

#### Step 3: Run and export

Set how many listings you want and press Start. Download the dataset as CSV, Excel or JSON.

**That's it! In a few minutes you'll have:**

- Every matching listing with rent or price, area and address
- GPS for each one, ready for a map
- The listing broker's company and a link to the listing

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (Listing Search, default) or `detail` (Listing Detail) |
| `listingType` | string | No | `all`, `leje` (for rent), `salg` (for sale), `investering` (investment) or `kontorhotel` (office hotel) |
| `propertyType` | string | No | `all`, `kontor`, `detailhandel-butik`, `lager-produktion`, `hotel-restaurant`, `grunde`, `boligudlejning` or `andre-typer` |
| `region` | string | No | `all` or one of the 11 regions, for example `byen-koebenhavn`, `fyn`, `oestjylland` |
| `location` | string | No | Town, postcode or street to narrow the search, for example `Aarhus` or `2100` |
| `sortBy` | string | No | `newest`, `oldest`, `priceHigh`, `priceLow`, `areaLarge`, `areaSmall`, `sqmPriceHigh`, `sqmPriceLow`, `yieldHigh`, `yieldLow` |
| `maxResults` | integer | No | How many listings to return (1-12,000, default 50) |
| `includeDetails` | boolean | No | Open each listing for description, photos, year built and facilities |
| `searchUrls` | array | No | Ejendomstorvet search pages to run instead of the fields above |
| `listingUrls` | array | No | Listing addresses for Listing Detail |

**Example: offices for rent in Aarhus**

```json
{
  "listingType": "leje",
  "propertyType": "kontor",
  "region": "oestjylland",
  "location": "Aarhus",
  "maxResults": 100
}
```

**Example: investment properties in Copenhagen, highest yield first, with full listings**

```json
{
  "listingType": "investering",
  "propertyType": "all",
  "region": "byen-koebenhavn",
  "sortBy": "yieldHigh",
  "maxResults": 50,
  "includeDetails": true
}
```

**Example: a search copied from ejendomstorvet.dk**

```json
{
  "searchUrls": [{ "url": "https://www.ejendomstorvet.dk/leje/fyn/odense/kontor" }],
  "maxResults": 200
}
```

**Example: full records for listings you already have**

```json
{
  "operation": "detail",
  "listingUrls": [{ "url": "https://www.ejendomstorvet.dk/leje/oestjylland/horsens/lager-produktion/69486096-aae9-4f7a-afd7-cbc8715b8865" }]
}
```

***

### 📤 Output

Each listing is one row with **50+ fields**. Fields with no value on a listing are left out of that row.

| Field | Type | Description |
|-------|------|-------------|
| `thumbnail` | string | Main photo |
| `propertyTitle` | string | The broker's title for the listing |
| `listingType` | string | For rent, For sale, Investment property or Office hotel |
| `category` | string | Main property type, as Ejendomstorvet shows it (Danish) |
| `yearlyRentDkk` | number | Yearly rent in DKK |
| `yearlyRentPerSqmDkk` | number | Yearly rent per m² in DKK |
| `yearlyOperatingCostDkk` | number | Yearly operating costs in DKK |
| `salePriceDkk` | number | Price in DKK (for sale and investment) |
| `pricePerSqmDkk` | number | Price per m² in DKK |
| `yieldPercent` | number | Yield in % (investment properties) |
| `floorAreaSqm` / `plotAreaSqm` | number | Floor area and plot area in m² |
| `address`, `zipCode`, `city`, `municipality` | string | Where the property is |
| `latitude` / `longitude` | number | GPS |
| `brokerName` | string | The listing broker's company |
| `brokerCaseNumber` / `brokerListingUrl` | string | The broker's case number and the listing on the broker's site |
| `officePriceMinDkk` / `officePriceMaxDkk` / `officeSeatsMax` | number | Office hotels: monthly price range and seats |
| `descriptionText`, `photos`, `yearBuilt`, `facilities` | mixed | Added when the full listing is opened |
| `listingUrl` | string | The listing on Ejendomstorvet |

**Example (an office for rent, opened in full):**

```json
{
  "hasDetail": true,
  "thumbnail": "https://i.ejendomstorvet.dk/0c/57/0c5779c6b145582d0f42fa3ddbacb49d64321edb3574388d82121b9db27f99aa.jpg",
  "listingId": "32264254-d302-4461-bdb9-b19b69b18c26",
  "propertyTitle": "165 m² lyst og fleksibelt kontor- eller klinikmiljø i Risskov",
  "headline": "En attraktiv og central beliggenhed i Risskov",
  "listingUrl": "https://www.ejendomstorvet.dk/leje/oestjylland/aarhus/kontor/32264254-d302-4461-bdb9-b19b69b18c26",
  "listingType": "For rent",
  "category": "Kontor",
  "usageTypes": [
    "Kontor"
  ],
  "address": "Sindalsvej 30B, 1. TH., 8240 Risskov",
  "street": "Sindalsvej",
  "zipCode": "8240",
  "city": "Risskov",
  "municipality": "Aarhus",
  "municipalityCode": "0751",
  "latitude": 56.2101023882428,
  "longitude": 10.2124135267978,
  "floorAreaSqm": 165,
  "currency": "DKK",
  "yearlyRentDkk": 123750,
  "yearlyRentPerSqmDkk": 875,
  "yearlyOperatingCostDkk": 20625,
  "yearlyRentInclOperatingDkk": 144375,
  "energyLabel": "C",
  "isNew": true,
  "priceChanged": false,
  "isProject": false,
  "isTender": false,
  "brokerName": "EDC Erhverv Poul Erik Bech, Aarhus",
  "brokerLogo": "https://img.ejendomstorvet.dk/20/cb/20cbeace752c5386351804cdd0de13e0877629c898f15ec9a0bde3cf49b25e03.png",
  "brokerCaseNumber": "812003463",
  "brokerListingUrl": "https://edc.dk/erhverv/812003463",
  "searchUrl": "https://www.ejendomstorvet.dk/api/v2/listings/search?grouplistings=false&q=Aarhus&listingTypes=leje&usageProposals=kontor&provinces=oestjylland&sort=created_desc&page=1",
  "searchPage": 1,
  "yearBuilt": 1986,
  "descriptionText": "• Lyse og præsentable lokaler med flot lysindfald\n• Central beliggenhed i Risskov med kort afstand til Aarhus C\n• Fleksibelt erhvervslejemål – velegnet til kont…",
  "photos": [
    "https://i.ejendomstorvet.dk/0c/57/0c5779c6b145582d0f42fa3ddbacb49d64321edb3574388d82121b9db27f99aa.jpg?class=listingimagebannerlarge",
    "https://i.ejendomstorvet.dk/24/70/2470c9690b2570dbd42f1b7a45756dee5cbc061c0bfb229f7dff25c72f704569.jpg?class=listingimagebannerlarge"
  ],
  "_operation": "search",
  "_fetchedAt": "2026-10-08T07:07:52.927Z",
  "status": "success"
}
```

***

### 💼 Use Cases & Examples

#### 1. Office and retail rent benchmarks

**Valuers, landlords and analysts get a live rent level per m² for any town without buying a market report.**

**Input:** For rent, Office, region Østjylland, location Aarhus
**Output:** Every office to let with yearly rent, rent per m², operating costs and floor area
**Use:** Median rent per m² by postcode, refreshed every week

#### 2. Investment deal sourcing

**Investors and fund managers see new investment cases with price, yield and area the day they are listed.**

**Input:** Investment property, region Byen København, sorted by highest yield
**Output:** Price, yield, price per m², floor area and the listing broker
**Use:** A shortlist of cases above a target yield, straight into a deal sheet

#### 3. Leads for movers, fit-out firms and facility services

**Service companies see which premises are about to change hands and which broker handles each one.**

**Input:** For rent, all property types, one region, newest first
**Output:** Address, floor area, broker company and a link to each listing
**Use:** A weekly list of new premises to pitch fit-out, moving or cleaning to

#### 4. Vacancy and supply tracking

**Landlords and municipalities watch how much space is on the market and how long it stays there.**

**Input:** The same search on a daily or weekly schedule
**Output:** One dataset per run; compare listing IDs between runs
**Use:** Time-on-market and new-supply charts by region and property type

#### 5. Site search for growing companies

**Operations teams find warehouses, production halls or office hotels that fit their size and region.**

**Input:** Warehouse and production, Sydjylland, largest first
**Output:** Floor and plot area, rent or price, GPS
**Use:** A map of every candidate site, filtered in a spreadsheet

#### 6. Office hotel and coworking comparison

**Small teams compare desk and office prices across Copenhagen office hotels.**

**Input:** Office hotel, Byen København
**Output:** Monthly price range, number of seats and seating types
**Use:** A price table per neighbourhood before booking viewings

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/ejendomstorvet-property-scraper').call({
  listingType: 'leje',
  propertyType: 'kontor',
  region: 'oestjylland',
  location: 'Aarhus',
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/ejendomstorvet-property-scraper').call(
    run_input={
        'listingType': 'investering',
        'region': 'byen-koebenhavn',
        'sortBy': 'yieldHigh',
        'maxResults': 50,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['address'], item.get('salePriceDkk'), item.get('yieldPercent'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~ejendomstorvet-property-scraper/runs?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"listingType": "salg", "propertyType": "lager-produktion", "region": "sydjylland", "maxResults": 200}'
```

#### Automation Workflows (n8n / Zapier / Make)

1. **Trigger**: a schedule, for example every weekday at 07:00
2. **Run**: call this actor with your saved search
3. **Process**: keep only listing IDs you have not seen before
4. **Action**: add them to a Google Sheet, your CRM or a Slack channel

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run, with every field
- No credit card required
- Enough to see the fields on your own search before paying

#### PAID Tier (Production Ready)

- **Unlimited** listings per run, up to the whole site
- 20 listings per page, about two minutes per 1,000 listings
- Pay per listing returned: **$1.50 per 1,000 listings**, plus $3.00 per 1,000 for full listings when you switch them on
- Searches that match nothing and listing pages that do not open cost nothing

💰 Each listing is charged once per run, even when several of your searches return it.

🔗 [View current pricing](https://apify.com/sian.agency/ejendomstorvet-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Which listings are covered?**
A: Everything Ejendomstorvet shows in its search: premises for rent, properties for sale, investment properties and office hotels in all 11 Danish regions. That was about 11,400 listings on 8 October 2026, 7,000 of them for rent.

**Q: Do I get the broker's phone number or e-mail?**
A: No. The actor does not collect phone numbers, e-mail addresses or contact names. Each row names the listing broker's company, the broker's case number and a link to the listing, so you can make contact there.

**Q: Can I search one municipality or postcode?**
A: Yes. Type a town, postcode or street in **Town, postcode or street**, for example Aarhus or 2100. Or open a search on ejendomstorvet.dk, for example https://www.ejendomstorvet.dk/leje/fyn/odense/kontor , and paste it into **Search page URLs**.

**Q: Can I filter by size or rent?**
A: Not directly, because Ejendomstorvet's search has no size or rent filter. Sort by area or price and stop after the rows you need, or filter the dataset afterwards.

**Q: Why do some rows have a price and others a yearly rent?**
A: Rentals carry a yearly rent, usually with rent per m² and operating costs. Properties for sale and investment properties carry a price and price per m², and investments also carry the yield. Office hotels carry a monthly price range and seats.

**Q: Are the texts in Danish?**
A: Yes. Titles, descriptions, categories and facilities come exactly as the broker wrote them, which is Danish. Field names and the listing type are in English.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, straight from the Apify dataset.

**Q: How long does a run take?**
A: About two minutes per 1,000 listings (4,950 offices took 9 minutes in a test run). With full listings switched on, allow about one more second per listing.

***

### 🐛 Troubleshooting

**The run finished with 0 listings**

- Ejendomstorvet has nothing matching that combination right now. Widen the region, set the property type to all, or clear the town field.
- Check the spelling in **Town, postcode or street**. A postcode such as 8000 always works.

**A pasted search URL was skipped**

- Paste a search page, not a single listing, news article or broker page. Single listings go in **Listing URLs** with the mode set to Listing Detail.

**A full listing is missing its description**

- The broker may have just taken the listing down. The search row is kept and you are not charged for the full listing.

**I need more than 25 listings**

- Free plans stop at 25 listings per run. On a paid plan there is no cap.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Ejendomstorvet is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Ejendomstorvet or Foreningen Erhvervsmæglerbasen.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's Issues tab](https://apify.com/sian.agency/ejendomstorvet-property-scraper/issues)
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/ejendomstorvet-property-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Listing Search reads Ejendomstorvet search results. Listing Detail opens the listing addresses you paste in Listing URLs.

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

Which part of Ejendomstorvet to search. Investment properties are let buildings sold for their rental income; office hotels rent desks and small offices.

## `propertyType` (type: `string`):

The use the premises are offered for. A listing offered for several uses, such as office or clinic, matches each of them.

## `region` (type: `string`):

One of Ejendomstorvet's 11 Danish regions, or the whole country.

## `location` (type: `string`):

Narrows the search to listings whose address matches, for example Aarhus, 2100, Odense C or Vesterbrogade. Leave empty for the whole region.

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

The order Ejendomstorvet returns listings in. Sort by area to reach large or small premises first, or by yield for investment properties.

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

How many listings to return. One results page holds 20. Free accounts stop at 25.

## `includeDetails` (type: `boolean`):

Opens every listing for the full description, the photos, year built and facilities. Billed as one Listing Detail on top of the search row.

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

Paste Ejendomstorvet search pages instead of using the fields above, for example https://www.ejendomstorvet.dk/leje/fyn/odense/kontor . One URL per line.

## `listingUrls` (type: `array`):

For Listing Detail: Ejendomstorvet listing addresses, for example https://www.ejendomstorvet.dk/leje/oestjylland/horsens/lager-produktion/69486096-aae9-4f7a-afd7-cbc8715b8865 . One per line.

## Actor input object example

```json
{
  "operation": "search",
  "listingType": "leje",
  "propertyType": "kontor",
  "region": "byen-koebenhavn",
  "sortBy": "newest",
  "maxResults": 50,
  "includeDetails": false
}
```

# Actor output Schema

## `ejendomstorvetListings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "listingType": "leje",
    "propertyType": "kontor",
    "region": "byen-koebenhavn",
    "sortBy": "newest",
    "maxResults": 50,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/ejendomstorvet-property-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 = {
    "operation": "search",
    "listingType": "leje",
    "propertyType": "kontor",
    "region": "byen-koebenhavn",
    "sortBy": "newest",
    "maxResults": 50,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/ejendomstorvet-property-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 '{
  "operation": "search",
  "listingType": "leje",
  "propertyType": "kontor",
  "region": "byen-koebenhavn",
  "sortBy": "newest",
  "maxResults": 50,
  "includeDetails": false
}' |
apify call sian.agency/ejendomstorvet-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/ejendomstorvet-property-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/ZoQskAmLOFtBYCmu6/builds/AYRAnEhdnuyDyuP6l/openapi.json
