# Ikman.lk Scraper: Sri Lanka Houses, Land, Apartments & Rentals (`recordsdata/ikman-lk-scraper`) Actor

Scrape ikman.lk property ads in Sri Lanka: houses, apartments, land, commercial property and rentals with LKR price, district, town, bedrooms, area in square meters, photos, dates and agencies. Splits searches past the 10,000 ad cap. No login. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/recordsdata/ikman-lk-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $22.00 / 1,000 property ads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## 🏠 Ikman.lk Scraper: Sri Lanka Houses, Land, Apartments & Rentals

> **Ikman.lk Scraper exports the real estate ads of ikman.lk, Sri Lanka's largest classifieds portal, as structured data: houses, apartments, land, commercial property and rooms for sale or rent, with price in LKR, district and town, coordinates, bedrooms, bathrooms, area in square meters, all photos, posting and expiry dates, and the business that posts the ad. It also reads the agency pages. Export CSV, Excel, JSON or XML. No login, no API key, no proxy needed.**

The Ikman.lk Scraper turns the property section of ikman.lk into a dataset you can filter, sort and join. On 2026-10-29 the live site listed 67,379 property ads in 10 categories, from 31,577 plots of land for sale to 194 plots of land for rent. The site lets a visitor page through only the first 10,000 ads of a search; the Actor splits a big search by district, town and price range so you can still collect all of it.

### 🎯 What does the ikman.lk scraper do?

- Scrapes **ikman.lk property ads** in all 10 categories: land, houses, apartments and commercial property for sale, and the rental categories, rooms and holiday homes.
- Returns the **price in LKR** as a number, the price text as the ad shows it, the price unit (`total`, `perch` or `month`), whether the price is negotiable, and **`pricePerM2`** computed for you.
- Gives the **district, town, address text and latitude and longitude** of every ad (coordinates need Fetch full ad details). The coordinates are the centre of the town, and `coordinatesPrecision` says so.
- Returns **bedrooms, bathrooms, built area and land area in square meters**, furnishing and condition when the ad states them.
- Returns **all photos at 1200 px, the full description in the language the seller wrote, posting date, expiry date and views** when Fetch full ad details is on (the default).
- Tells private sellers from agencies and returns the **agency name, link, logo, membership level, verification and authorized dealer badges**. Private sellers are flagged and never named.
- Filters by **category, district, town, price range, bedrooms, bathrooms and seller type**, or starts from URLs and ad ids you paste.
- Reads **agency pages**: tagline, address, opening hours, member since, membership expiry, main category, number of ads and views.
- Has an **only-new mode** for scheduled runs.

### 📊 Ikman.lk property data: which fields do you get?

Every row is one record with `recordType` set to `listing` or `agency`. A listing row carries about 44 of the 61 columns, depending on what the ad states.

| Field | Columns |
|---|---|
| Identity | `recordType`, `listingId`, `url`, `title`, `sourceSite`, `scrapedAt` |
| Classification | `operation`, `propertyType`, `propertySubtype`, `category`, `condition` |
| Price | `price`, `currency`, `priceUnit`, `priceText`, `priceNegotiable`, `pricePerM2` |
| Location | `address`, `city`, `district`, `region`, `country`, `latitude`, `longitude`, `coordinatesPrecision` |
| Property | `bedrooms`, `bathrooms`, `areaBuilt`, `areaLand`, `areaBuiltText`, `areaLandText`, `furnished`, `buildingName`, `amenities` |
| Seller | `isPrivateSeller`, `agencyId`, `agencyName`, `agencyUrl`, `agencyLogoUrl`, `membershipLevel`, `isVerified`, `isAuthorizedDealer` |
| Business contact (optional) | `agencyPhone`, `agencyEmail` |
| Ad status | `isPromoted`, `isUrgent`, `publishedAt`, `updatedAt`, `expiresAt`, `views` |
| Agency profile | `tagline`, `openingHours`, `memberSince`, `membershipExpiresAt`, `mainCategory`, `listingCount` |
| Media and text | `imageUrl`, `images`, `imageCount`, `description`, `raw` |

Worth knowing: `price` is a plain number in LKR, and land is usually priced per perch (25.2929 square meters), so `priceUnit` is `perch` and `pricePerM2` converts it. `areaBuilt` and `areaLand` are always in square meters, with the original text in `areaBuiltText` and `areaLandText`. The coordinates are the town centre (`coordinatesPrecision` is `town-centroid`). `publishedAt` and `expiresAt` need Fetch full ad details. A missing value means the ad does not state it.

### 🧾 Ikman.lk listing example: what does a real result look like?

A real listing row (cloud run, 2026-10-27, description and photo list shortened):

```json
{
  "recordType": "listing",
  "listingId": "6ad89f6ab947644182e7ac80",
  "url": "https://ikman.lk/en/ad/luna-tower-furnished-apartment-for-sale-a40996-for-sale-colombo",
  "title": "Luna Tower - Furnished Apartment for Sale A40996",
  "operation": "sale",
  "propertyType": "apartment",
  "category": "Apartments For Sale",
  "price": 135000000,
  "currency": "LKR",
  "priceUnit": "total",
  "priceNegotiable": true,
  "pricePerM2": 1438772.25,
  "address": "Union Place, Colombo 02",
  "city": "Colombo 2",
  "district": "Colombo",
  "latitude": 6.92172,
  "longitude": 79.8536,
  "coordinatesPrecision": "town-centroid",
  "bedrooms": 2,
  "bathrooms": 2,
  "areaBuilt": 93.83,
  "areaBuiltText": "1,010 sqft",
  "furnished": "furnished",
  "isPrivateSeller": false,
  "agencyName": "AKARA APARTMENTS",
  "membershipLevel": "premium",
  "isVerified": true,
  "isAuthorizedDealer": true,
  "imageCount": 9,
  "publishedAt": "2026-10-23T10:55:30.000Z",
  "expiresAt": "2026-12-20T11:18:03.000Z",
  "views": 127,
  "sourceSite": "ikman.lk",
  "scrapedAt": "2026-10-27T06:46:22.631Z"
}
```

Prices are plain numbers in rupees, coordinates are decimal degrees and text stays in the language the seller wrote it.

### 🚀 How to scrape ikman.lk in 4 steps

1. Create a free account at [console.apify.com](https://console.apify.com) and open this Actor.
2. Pick the categories and the filters you need (district, town, price range, bedrooms, seller type). Leave them empty to get a mix of all 10 property categories across Sri Lanka.
3. Set **Max Items** and press Start. A 3-ad run with full details finishes in a few seconds.
4. Download the dataset as CSV, Excel, JSON or XML, or read it through the Apify API.

To read one ad, paste its ikman.lk URL in **Start URLs** or its 24-character id in **Ad ids or slugs**. To reuse a search built on ikman.lk, paste the list page URL, for example `ikman.lk/en/ads/colombo/houses-for-sale`. For agencies, choose Agencies in **Record types** or paste an agency page.

### ⚙️ Input: which settings does the Actor take?

| Field | Type | Default | Meaning |
|---|---|---|---|
| `startUrls` | array | empty | List page, ad or agency page URLs to read |
| `listingIds` | array | empty | Ad ids (24 characters) or slugs |
| `maxItems` | integer | none | Maximum rows, all record types together |
| `recordTypes` | array | `listings` | `listings`, `agencies` or both |
| `fetchDetails` | boolean | true | Open each ad page for description, photos, dates, coordinates and views |
| `categories` | array | all 10 | Land, houses, apartments, commercial property, rooms, holiday homes, rentals |
| `districts` / `towns` | array | empty | Place filters |
| `minPrice` / `maxPrice` | integer | none | Range in LKR |
| `bedrooms` / `minBathrooms` | array / integer | empty / none | Bedrooms from 1 to 10+, minimum bathrooms |
| `sellerType` | string | `any` | `any`, `agency` or `private` |
| `maxRunSeconds` | integer | 3600 | Longest run time |
| `onlyNew` / `stateKey` / `resetSeen` | boolean / string / boolean | false / empty / false | Monitor mode, its name, and a reset |
| `includeContactDetails` | boolean | false | Business phone and e-mail of agencies |

Input for 3 bedroom houses for sale in Colombo up to 60,000,000 LKR:

```json
{
  "categories": ["houses-for-sale"],
  "districts": ["colombo"],
  "bedrooms": ["3"],
  "maxPrice": 60000000,
  "fetchDetails": true,
  "maxItems": 100
}
```

### ⏱️ How fast is it, and does it need a proxy?

No proxy is needed. ikman.lk answers plain requests from the Apify cloud with no challenge and no login, and the Actor keeps a polite pace of four requests at a time. A 3-ad run with full details took about 6 seconds and used about 40 MB of memory.

A search stops at 10,000 ads (400 pages of 25), so a bigger search is split by district, town and price range. Paid featured ads from other places that the site mixes into a search are left out, so every row matches the place you asked for. If the site never answers and no row could be read, the run fails and nothing is charged.

### 📈 How does it compare with other ikman.lk scrapers? (read on 2026-11-03)

Three other Apify actors read ikman.lk. Their store pages were read for the figures below.

| | This Actor | Ikman.lk Classifieds Scraper (fmntec) | Ikman.lk Scraper (logiover) | Ikman.lk Property Scraper (sian.agency) |
|---|---|---|---|---|
| Output columns | 61 | 2 stated (title, link) | 18 | 49 |
| Rates | $0.022 per ad, $0.03331 per detail | $0.003 per result plus $0.01 start | $0.015 per result | From $0.00162 to $0.00648 per listing, plus detail and start events |
| Area in square meters, price per m2, town coordinates | Yes | Not stated | Not stated | Perches and square feet only, GPS |
| Agency pages | Yes | No | No | Shop name and e-mail on the ad |
| Private sellers | Flagged, never named or called | Not stated | Not stated | Name and phone returned |

All of these read the same site, so the difference is in coverage, fields and how personal data is treated. This Actor does not return the names or phone numbers of private sellers. Rates change, so check each page before you decide.

### 🏢 Ikman.lk agency record: which fields do you get?

With `agencies` in Record types, each agency page becomes one row with `recordType` set to `agency`.

| Field | Type | Example |
|---|---|---|
| `recordType` | string | `agency` |
| `agencyName` | string | `AKARA APARTMENTS` |
| `agencyUrl` | string | `https://ikman.lk/en/shops/akara-suites` |
| `membershipLevel` | string | `premium` |
| `isVerified` | boolean | `true` |
| `listingCount` | integer | `120` |
| `mainCategory` | string | `Apartments For Sale` |

### 💰 How much does the Ikman.lk Scraper cost?

Pay per result, no monthly fee. Rates are USD per event on the Free tier.

| Event | Charged for | Per result | Per 1,000 |
|---|---|---|---|
| Listing record | One ad read from the list pages | $0.022 | $22.00 |
| Listing detail record | One ad opened on its own page (`fetchDetails`, on by default) | $0.03331 | $33.31 |
| Agency record | One agency page | $0.03331 | $33.31 |

Worked examples: 1,000 ads with card fields only (`fetchDetails` off) cost $22.00. The same 1,000 ads with full details cost $22.00 + $33.31 = $55.31. 100 agency pages cost 100 x $0.03331 = $3.33. Error rows and ads skipped by monitor mode are not charged.

### 💼 Ikman.lk scraper use cases

- **Investors and land buyers**: compare `pricePerM2` across districts and towns.
- **Agents and brokers**: watch new ads in a district with the only-new mode and send them to a CRM.
- **Market researchers**: track asking prices, rents and ad counts per town with scheduled runs.

### 🔌 Ikman.lk scraper API, MCP and integrations

Run it from any language through the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/RecordsData~ikman-lk-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"categories":["houses-for-sale"],"districts":["colombo"],"bedrooms":["3"],"maxItems":100}'
```

From JavaScript:

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('RecordsData/ikman-lk-scraper').call({ categories: ['houses-for-sale'], districts: ['colombo'], maxItems: 20 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].title, items[0].price);
```

The Python client, Make, Zapier, n8n, Google Sheets, Slack and Apify schedules also work.

#### Use it from an AI agent (MCP)

Add the Actor to any MCP client (Claude, Cursor, VS Code) through the Apify MCP server: `https://mcp.apify.com?tools=RecordsData/ikman-lk-scraper`.

Example agent prompt: "Use the ikman scraper to list the 3 bedroom houses for sale in Gampaha under 40,000,000 LKR, return the 20 cheapest with town, price, area in square meters and the ad link, and tell me the average price per square meter."

### ⚖️ Is it legal to scrape ikman.lk? Limits and responsible use

The Actor reads the public pages that ikman.lk shows to every visitor, without logging in, at a slow and steady pace. It sends only the address forms that robots.txt of the site leaves open. Images come back as links to the site's own files, not copies. The names and phone numbers of private sellers are never returned, and phone numbers and e-mail addresses written inside descriptions are removed. The business phone and e-mail of an agency are returned only when you turn on **Include agency contact data**. Check the site terms before republishing commercially. This is not legal advice, and you remain responsible for how you use the data.

### Frequently Asked Questions

#### Does the ikman.lk scraper need a proxy or an ikman.lk account?

No. It uses plain HTTP requests to public pages, needs no login, no API key and no captcha solving. The Apify proxy field exists but is off by default. A 3-ad run with full details took about 6 seconds on 2026-10-29. You only need an Apify account, and the free plan can run the Actor with small limits.

#### How do I get more than 10,000 ads from one search?

Leave Max Items high and the Actor splits the search by itself: first by district, then by town, then by price range, so each part fits in the 10,000 ads the site allows per search. A run over the whole country is slow because it opens thousands of pages, so narrow it by category or district when you can.

#### Does it return the phone numbers of the sellers?

Not for private sellers. Their names and numbers are personal data and are never returned, and numbers written inside descriptions are removed from the text. For agencies, the business phone and e-mail come back only when you turn on Include agency contact data. Leave that option off if you do not need them.

#### How exact are the coordinates?

They are the centre of the town of the ad, not the building, because ikman.lk does not publish the exact pin. The field `coordinatesPrecision` is `town-centroid` on every row, so you can map ads by town but not by street. Coordinates need Fetch full ad details to be turned on.

#### How do I only get new ads on a schedule?

Turn on Only new rows (monitor mode) and give the search a name in Monitor name. The first run delivers the ads it finds and remembers their ids. The next runs deliver only ads that were not seen before and do not charge for the rest. Turn on Forget previously seen rows to start over.

#### Why are some columns empty in my export?

Either the ad does not state the value, or Fetch full ad details was off. The list pages carry the card fields only: price, place, bedrooms, bathrooms, seller and one photo. The description, all photos, posting and expiry dates, coordinates, views, furnishing and building details need the ad page. The Actor never pads a column with a guess.

#### What is the difference between a listing row and an agency row?

A listing row is one ad with price, place, size, photos and seller. An agency row is the business profile of an agency: tagline, address, opening hours, member since, membership expiry, main category and number of ads. Choose both in Record types to get them in the same dataset, told apart by `recordType`.

#### How much does a run cost?

The Actor is billed per result. An ad read from the list pages costs $0.022, so 1,000 ads cost $22.00. Opening each ad page adds $0.03331, so 1,000 ads with full details cost $55.31. An agency page costs $0.03331. Error rows and ads skipped by monitor mode are not charged.

### Support

Questions, a missing field or a feature request: contact.punkrecordsdata@gmail.com. Reviews on the Actor page help other people find it.

This Actor is an independent tool and is not affiliated with ikman.lk.

Last updated: 2026-11-03

# Actor input Schema

## `recordTypes` (type: `array`):

Listings = one row per property ad (house, apartment, land, commercial, room, holiday rental). Agencies = one row per agency met while reading. Every row counts toward the maximum; listings come first. Example: Listings.

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

Stops after this many rows. Free users are limited to 10 items per run (preview). Example: 50.

## `categories` (type: `array`):

Houses, apartments, land, commercial, rooms and holiday rentals, for sale or for rent. Each category is scanned in turn, so a small maximum still mixes categories. Untick to narrow down.

## `districts` (type: `array`):

Only ads in these districts. Example: Colombo. Empty means all Sri Lanka; a district with over 10,000 ads is split by town automatically.

## `towns` (type: `array`):

One per line. Example: Nugegoda, Negombo, Colombo 5 or the slug colombo-5. Capitals and accents do not matter.

## `minPrice` (type: `integer`):

Lowest price in Sri Lankan rupees, applied by the site to every category you search. For rentals it is the price per month (per night for holiday rentals), for land the price shown on the ad (often per perch). Leave empty or 0 for no minimum.

## `maxPrice` (type: `integer`):

Highest price in Sri Lankan rupees, applied by the site to every category you search (per month for rentals, per night for holiday rentals). Leave empty or 0 for no maximum.

## `bedrooms` (type: `array`):

Only ads with exactly this number of bedrooms (10+ means ten or more). Several values are searched in turn. It applies to houses, apartments, room and annex rentals and holiday rentals; land and commercial categories have no bedrooms and are not searched while this filter is set. Leave empty for any.

## `minBathrooms` (type: `integer`):

Only ads with at least this many bathrooms. The count comes from the list page, so ads that do not state their bathrooms are left out when this is set. Leave empty or 0 for any.

## `sellerType` (type: `string`):

Any: every ad. Agency: only ads posted by an agency (an ikman.lk shop). Private: only ads posted by a private seller. No private name, phone or e-mail is ever returned.

## `startUrls` (type: `array`):

List pages (ikman.lk/en/ads/colombo/apartment-rentals), ad pages (ikman.lk/en/ad/...) or agency pages (ikman.lk/en/shops/...). A list page may carry a price range. Leave empty to use the search above.

## `listingIds` (type: `array`):

24-character ad ids, the slug at the end of an ad URL, or full ad URLs. Example: 6aa821002453220ec21ab592. Search filters are not applied to them.

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

Open every ad page for the full description, all photos, coordinates, amenities, condition, furnishing, building name, posted and expiry dates, views and seller badges. Billed as the listing-detail event on top of the listing. Turn off for a cheaper and faster list-only pass (price, place, bedrooms, bathrooms, area, seller name, one photo and the posted time).

## `includeContactDetails` (type: `boolean`):

Add the business contacts that agencies publish on their ikman.lk shop page: phone numbers and the shop e-mail, on listing rows posted by an agency and on agency rows. Without it those are removed, and phone numbers or e-mails written inside ad descriptions are removed too. Private sellers are never included, with or without this switch. Off by default.

## `maxRunSeconds` (type: `integer`):

Stop collecting after this many seconds and return what was gathered, so a very wide search never runs unbounded.

## `onlyNew` (type: `boolean`):

Only new rows: skip every ad or agency this same search already returned in an earlier run, so a scheduled run returns just the new ones and you are not charged for skipped rows. Max Items then means N new rows. Off by default.

## `stateKey` (type: `string`):

Name of this monitor. Leave empty to derive it from your filters. Use a name to run two monitors with the same filters.

## `resetSeen` (type: `boolean`):

Clear the saved list for this monitor before the run, so everything counts as new again.

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

Not needed: the actor reads ikman.lk directly at a polite pace (four requests at a time). If the site ever refuses the connection, the actor switches to the Apify datacenter proxy by itself. Switch the proxy on here to force it from the first request.

## Actor input object example

```json
{
  "recordTypes": [
    "listings"
  ],
  "maxItems": 10,
  "categories": [
    "land-for-sale",
    "houses-for-sale",
    "apartments-for-sale",
    "commercial-properties-for-sale",
    "house-rentals",
    "apartment-rentals",
    "commercial-property-rentals",
    "room-annex-rentals",
    "holiday-short-term-rental",
    "land-for-rent"
  ],
  "districts": [],
  "towns": [],
  "bedrooms": [],
  "sellerType": "any",
  "startUrls": [],
  "listingIds": [],
  "fetchDetails": true,
  "includeContactDetails": false,
  "maxRunSeconds": 3600,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "recordTypes": [
        "listings"
    ],
    "maxItems": 10,
    "categories": [
        "land-for-sale",
        "houses-for-sale",
        "apartments-for-sale",
        "commercial-properties-for-sale",
        "house-rentals",
        "apartment-rentals",
        "commercial-property-rentals",
        "room-annex-rentals",
        "holiday-short-term-rental",
        "land-for-rent"
    ],
    "districts": [],
    "towns": [],
    "bedrooms": [],
    "sellerType": "any",
    "startUrls": [],
    "listingIds": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/ikman-lk-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 = {
    "recordTypes": ["listings"],
    "maxItems": 10,
    "categories": [
        "land-for-sale",
        "houses-for-sale",
        "apartments-for-sale",
        "commercial-properties-for-sale",
        "house-rentals",
        "apartment-rentals",
        "commercial-property-rentals",
        "room-annex-rentals",
        "holiday-short-term-rental",
        "land-for-rent",
    ],
    "districts": [],
    "towns": [],
    "bedrooms": [],
    "sellerType": "any",
    "startUrls": [],
    "listingIds": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/ikman-lk-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 '{
  "recordTypes": [
    "listings"
  ],
  "maxItems": 10,
  "categories": [
    "land-for-sale",
    "houses-for-sale",
    "apartments-for-sale",
    "commercial-properties-for-sale",
    "house-rentals",
    "apartment-rentals",
    "commercial-property-rentals",
    "room-annex-rentals",
    "holiday-short-term-rental",
    "land-for-rent"
  ],
  "districts": [],
  "towns": [],
  "bedrooms": [],
  "sellerType": "any",
  "startUrls": [],
  "listingIds": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call recordsdata/ikman-lk-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/ikman-lk-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/WzlduUsLsC6RRz0kh/builds/iMo563sYbgpuL8lE8/openapi.json
