# Mourjan Scraper: MENA Classifieds Monitor (`getascraper/mourjan-scraper`) Actor

Collect public Mourjan property, car, job, and service listings with clean text, price, location, seller, image, and change records for research and recurring market checks.

- **URL**: https://apify.com/getascraper/mourjan-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.30 / 1,000 classified listings

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

## 🔎 Mourjan Scraper: MENA Classifieds Monitor

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td colspan="3" style="width:100%;padding:14px 18px;background:#ECFDF5;border:1px solid #99F6E4;border-top:3px solid #0F766E;border-radius:10px 10px 0 0">
<span style="font-size:16px;font-weight:700;color:#134E4A">Marketplace monitoring suite</span><br>
<span style="font-size:14px;color:#334155">Collect focused public marketplace signals with bounded runs and safer change tracking.</span>
</td>
</tr>
<tr style="width:100%">
<td style="width:33.333%;padding:11px 12px;background:#ECFDF5;border:1px solid #99F6E4;border-right:none;vertical-align:top;border-radius:0 0 0 10px">
<a href="https://apify.com/getascraper/mourjan-scraper" style="color:#0F766E;text-decoration:none;font-weight:700;font-size:13px">Mourjan classifieds</a><br>
<span style="color:#0F766E;font-size:11px;font-weight:700">➜ You are here</span>
</td>
<td style="width:33.333%;padding:11px 12px;background:#FFFFFF;border:1px solid #99F6E4;border-right:none;vertical-align:top">
<a href="https://apify.com/getascraper/lelong-my-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Lelong Malaysia</a><br>
<span style="color:#475569;font-size:11px">Product price and stock records</span>
</td>
<td style="width:33.333%;padding:11px 12px;background:#FFFFFF;border:1px solid #99F6E4;vertical-align:top;border-radius:0 0 10px 0">
<a href="https://apify.com/getascraper/opensooq-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">OpenSooq classifieds</a><br>
<span style="color:#475569;font-size:11px">Regional public listing research</span>
</td>
</tr>
</tbody>
</table>

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td style="width:100%;padding:24px 28px;background:#ECFDF5;border:1px solid #99F6E4;border-top:4px solid #0F766E;border-radius:12px">
<span style="font-size:23px;font-weight:800;line-height:1.3;color:#1C1917">Build a current MENA classifieds dataset without copying listings by hand.</span><br>
<span style="font-size:15px;line-height:1.6;color:#334155">Collect permitted public Mourjan property, car, job, and service listings with source IDs, clean ad text, price and location when shown, seller type, images, and scoped change records.</span>
</td>
</tr>
</tbody>
</table>

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #99F6E4;border-right:none;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🧾 Clean public ad text</span><br>
<span style="font-size:12px;color:#475569">Keep the visible listing content without image counters or other card-interface fragments.</span>
</td>
<td style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #99F6E4;border-right:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🏠 Four focused verticals</span><br>
<span style="font-size:12px;color:#475569">Use one common record for property, cars, jobs, and services, with typed vertical details.</span>
</td>
<td style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #99F6E4;border-right:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">📍 Price and location context</span><br>
<span style="font-size:12px;color:#475569">Retain source-derived currency, price, country, city, seller type, and images when the page provides them.</span>
</td>
<td style="width:25%;padding:14px 12px;background:#FFFFFF;border:1px solid #99F6E4;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🔄 Safer monitoring</span><br>
<span style="font-size:12px;color:#475569">Reuse one monitor key to emit new, updated, price, availability, and safe-removal events.</span>
</td>
</tr>
</tbody>
</table>

Mourjan Scraper turns permitted public [Mourjan](https://www.mourjan.com/ae/en/) browse and listing pages into source-linked records for MENA classifieds research. Mourjan itself presents real estate, cars, jobs, and services as core marketplace categories, so the Actor keeps a common record while preserving vertical-specific details when the public page shows them.

### 🔎 What this Actor does

Use a canonical Mourjan browse URL or a direct public listing URL. The Actor checks the source policy before every request, rejects protected search, AJAX, and detail routes, and limits total output across all selected sources.

It extracts a stable source ID when available, the canonical public URL, clean visible ad text, and source-derived price, currency, location, seller type, and images where they exist. Missing values stay missing; the Actor never substitutes placeholders.

### 👥 Who is this for?

- **I am a property researcher** who needs current rental or sale listings with a price, city, source link, and listing context.
- **I am a recruiter or labor-market analyst** who needs public job listings, employer context, and observed changes in one repeatable shape.
- **I am a vehicle or services researcher** who wants to compare public offers without maintaining four category-specific collectors.
- **I am an automation builder** who needs trusted, source-linked rows for Google Sheets, Airtable, n8n, or a custom workflow.

### 🧭 How it works

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td style="width:33.333%;padding:16px 14px;background:#ECFDF5;border:1px solid #99F6E4;border-right:none;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;letter-spacing:1px;color:#0F766E">CHOOSE A PERMITTED SOURCE</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Start with a useful browse or listing page</span><br>
<span style="font-size:12px;color:#475569">Use a public HTTPS Mourjan category, browse, or canonical listing URL.</span>
</td>
<td style="width:33.333%;padding:16px 14px;background:#ECFDF5;border:1px solid #99F6E4;border-right:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;letter-spacing:1px;color:#0F766E">NARROW OBSERVED DATA</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Filter the records you need</span><br>
<span style="font-size:12px;color:#475569">Choose a vertical, location, keywords, and source-derived price or field filters.</span>
</td>
<td style="width:33.333%;padding:16px 14px;background:#ECFDF5;border:1px solid #99F6E4;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;letter-spacing:1px;color:#0F766E">EXPORT OR MONITOR</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Use the current records or later changes</span><br>
<span style="font-size:12px;color:#475569">Export a snapshot or reuse one stable monitor key for scoped updates.</span>
</td>
</tr>
</tbody>
</table>

```json
{
    "sourceMode": "browseUrls",
    "startUrls": [
        {
            "url": "https://www.mourjan.com/ae/apartments/rental/en/"
        }
    ],
    "vertical": "property",
    "maxItems": 50,
    "maxPagesPerSource": 3
}
```

### ⚙️ Input

| Field                                                                                                                                        | Type                            | When to use it         | What it controls                                                                                      |
| -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------- |
| <code>sourceMode</code>                                                                                                                      | enum                            | Every run              | Choose <code>browseUrls</code>, <code>keywordSearch</code>, or <code>listingUrls</code>.              |
| <code>startUrls</code>, <code>listingUrls</code>                                                                                             | array of URLs                   | Source selection       | Add one to twenty public browse/category URLs or direct public listing URLs. URL modes are exclusive. |
| <code>keywords</code>, <code>countries</code>, <code>cities</code>, <code>vertical</code>, <code>postedWithinDays</code>                     | array, enum, or integer         | Common filtering       | Keep observed records that match a public text, route, vertical, or date value.                       |
| <code>listingIntent</code>, <code>propertyType</code>, <code>minPrice</code>, <code>maxPrice</code>, <code>minBedrooms</code>                | enum, text, or number           | Property filtering     | Narrow property records using fields observed on the allowed source page.                             |
| <code>make</code>, <code>model</code>, <code>minYear</code>, <code>maxYear</code>, <code>maxMileageKm</code>                                 | text or number                  | Car filtering          | Narrow vehicle records only when their public fields are present.                                     |
| <code>jobTitle</code>, <code>employer</code>, <code>salaryMin</code>, <code>salaryMax</code>, <code>employmentType</code>                    | text or number                  | Job filtering          | Narrow job records only when their public fields are present.                                         |
| <code>serviceType</code>, <code>location</code>                                                                                              | text                            | Service filtering      | Narrow service records using source-derived service and location values.                              |
| <code>blockedResponsePolicy</code>                                                                                                           | enum                            | Source reliability     | Keep blocked or failed sources incomplete so they cannot create false removals.                       |
| <code>detailLevel</code>, <code>includeDescription</code>, <code>includeImages</code>, <code>includeContacts</code>                          | enum or boolean                 | Public field selection | Choose listing-card or permitted direct-listing fields. Contacts are off by default.                  |
| <code>maxItems</code>, <code>maxPagesPerSource</code>, <code>maxDetailPages</code>, <code>maxConcurrency</code>, <code>requestDelayMs</code> | integer                         | Every run              | Keep collection finite. <code>maxItems</code> caps the total across all sources.                      |
| <code>runMode</code>, <code>monitorKey</code>, <code>emitUnchanged</code>, <code>inactiveAfterDays</code>                                    | enum, text, boolean, or integer | Recurring checks       | Use <code>changes</code> with a stable monitor key. A monitor key is required in changes mode.        |

### 📦 Output

Each output row has a public identity and source link, then includes only fields shown by the allowed source page. The example below uses an observed public property card; source data can change between runs.

```json
{
    "sourceId": "30067508",
    "vertical": "property",
    "price": 29000,
    "currency": "AED",
    "country": "United Arab Emirates",
    "city": "Ajman",
    "seller": {
        "type": "by owner"
    },
    "verticalDetails": {
        "property": {
            "listingIntent": "rent",
            "propertyType": "Apartments",
            "bedrooms": 1
        }
    }
}
```

| Fields                                                                                                                                              | What they mean                                                                 |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| <code>sourceId</code>, <code>identityType</code>, <code>canonicalUrl</code>, <code>sourceUrl</code>                                                 | Public listing identity and the source page used to collect it.                |
| <code>title</code>, <code>description</code>, <code>category</code>, <code>vertical</code>                                                          | Clean observed ad text and its common vertical.                                |
| <code>country</code>, <code>city</code>, <code>district</code>, <code>price</code>, <code>currency</code>, <code>paymentTerms</code>                | Public location and price context when the source provides it.                 |
| <code>seller</code>, <code>images</code>, <code>publishedAt</code>                                                                                  | Optional public seller, image, and publication values. Contacts remain opt-in. |
| <code>verticalDetails.property</code>, <code>verticalDetails.vehicle</code>, <code>verticalDetails.job</code>, <code>verticalDetails.service</code> | Typed details for the matching public listing vertical.                        |
| <code>status</code>, <code>changeType</code>, <code>changes</code>, <code>observedAt</code>, <code>firstSeenAt</code>, <code>lastSeenAt</code>      | Current status and scoped monitoring history.                                  |

### 🗂️ Dataset views

The dataset intentionally keeps three focused views.

| View                                            | Use it for                                                           |
| ----------------------------------------------- | -------------------------------------------------------------------- |
| <code>overview</code> — Classified Listings     | A compact listing, vertical, price, city, status, and URL view.      |
| <code>verticalDetails</code> — Vertical Details | The source-derived property, vehicle, job, or service fields.        |
| <code>changes</code> — Monitoring Changes       | New, updated, price, availability, unknown, and safe-removal events. |

### 💰 Pricing

Pricing is pay per result. Empty runs cost nothing, and there are no subscriptions. Keep limits close to the public listings you actually need.

### ⭐ Did this save you a manual listing review?

<table width="100%" style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
<td style="width:100%;padding:20px;background:#ECFDF5;border:1px solid #99F6E4;border-left:5px solid #0F766E">
<span style="font-weight:800;color:#1C1917">A rating helps other MENA marketplace researchers find a focused public-listing monitor.</span><br>
<span style="color:#475569">Tell them whether price, location, vertical details, or scoped changes made your work easier.</span>
</td>
</tr>
<tr style="width:100%">
<td style="width:100%;padding:12px;background:#0F766E;text-align:center">
<a href="https://apify.com/getascraper/mourjan-scraper/reviews" style="color:#FFFFFF;text-decoration:none;font-weight:800">★ Rate this Actor on Apify</a>
</td>
</tr>
</tbody>
</table>

### 🧠 Tips and limitations

- Use only public HTTPS Mourjan browse, category, or canonical listing URLs. Search, AJAX, and detail routes are rejected before collection.
- A direct public listing URL can return its visible listing-page fields. The Actor does not turn a URL into a protected route.
- Price, city, seller type, images, and vertical details are source-dependent. Missing source values remain absent.
- Reuse the same monitor key only for the same scope. A failed source stays unknown and never becomes a false removal.
- This independent tool collects public information only. Use it in line with Mourjan's terms and applicable law.

### ❓ FAQ

#### Which Mourjan pages can I use?

Use a public HTTPS category, browse, or canonical listing URL on Mourjan. The Actor rejects <code>/search/</code>, <code>/ajax/</code>, and <code>/detail/</code> routes before requesting listings.

#### Does it return clean listing text?

Yes. It uses the public listing-content element when available, so image counters and seller-interface fragments do not become part of the title.

#### Are public phone numbers included automatically?

No. <code>includeContacts</code> is false by default. When explicitly enabled, the Actor can return only visibly public contact values present on an allowed page.

#### How do monitoring removals stay safe?

Run a snapshot first. Then choose <code>changes</code> and reuse the same monitor key and source scope. A failed or incomplete source becomes unknown and cannot create a removal.

### 🔗 Other actors

- [Lelong Malaysia Scraper](https://apify.com/getascraper/lelong-my-scraper) ↗ — Working product, price, stock, seller, shipping, and change records.
- [OpenSooq Scraper](https://apify.com/getascraper/opensooq-scraper) ↗ — Public regional classifieds.
- [Etagi Real Estate Scraper](https://apify.com/getascraper/etagi-property-scraper) ↗ — Public property listings and market research.
- [S1 Jobs Scraper](https://apify.com/getascraper/s1jobs-scraper) ↗ — Jobs, salaries, and employer records.

# Actor input Schema

## `sourceMode` (type: `string`):

Choose public browse URLs, keyword filtering, or known public listing URLs.

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

Provide one to 20 public Mourjan browse or category URLs for browse and keyword modes.

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

Provide one to 20 public Mourjan listing URLs when using Listing URLs mode.

## `keywords` (type: `array`):

Terms matched against the title and description of observed public listings.

## `vertical` (type: `string`):

Limit results to property, cars, jobs, services, or all supported verticals.

## `countries` (type: `array`):

Keep listings whose observed country matches one of these values.

## `cities` (type: `array`):

Keep listings whose observed city matches one of these values.

## `postedWithinDays` (type: `integer`):

Optionally keep listings with a source-published date inside this window.

## `listingIntent` (type: `string`):

Optionally keep property listings offered for sale or rent.

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

Optional property type text matched against observed listing details.

## `minPrice` (type: `number`):

Optional lower price limit in the source currency.

## `maxPrice` (type: `number`):

Optional upper price limit in the source currency.

## `minBedrooms` (type: `integer`):

Optional lower bedroom count for property listings.

## `make` (type: `string`):

Optional vehicle make matched against observed vehicle details.

## `model` (type: `string`):

Optional vehicle model matched against observed vehicle details.

## `minYear` (type: `integer`):

Optional lower vehicle model-year limit.

## `maxYear` (type: `integer`):

Optional upper vehicle model-year limit.

## `maxMileageKm` (type: `integer`):

Optional upper vehicle mileage limit.

## `jobTitle` (type: `string`):

Optional job title matched against observed job details.

## `employer` (type: `string`):

Optional employer matched against observed job details.

## `salaryMin` (type: `number`):

Optional lower salary limit for job listings.

## `salaryMax` (type: `number`):

Optional upper salary limit for job listings.

## `employmentType` (type: `string`):

Optional employment type matched against observed job details.

## `serviceType` (type: `string`):

Optional service type matched against observed service details.

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

Optional service location matched against observed service details.

## `blockedResponsePolicy` (type: `string`):

Blocked, unavailable, or disallowed sources remain incomplete and never create false removals.

## `detailLevel` (type: `string`):

Use listing-card fields or the extended public fields available on allowed pages.

## `includeDescription` (type: `boolean`):

Include publicly visible listing descriptions when available.

## `includeImages` (type: `boolean`):

Include publicly visible image URLs when available.

## `includeContacts` (type: `boolean`):

Include source-published phone, email, or website fields only when enabled.

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

Total listing cap across every source URL.

## `maxPagesPerSource` (type: `integer`):

Maximum public pages to inspect for each source URL.

## `maxDetailPages` (type: `integer`):

Bounded detail-page budget. Protected detail routes are not requested by the source policy.

## `runMode` (type: `string`):

Snapshot returns current listings. Changes returns new, changed, unknown, and safe removal events.

## `monitorKey` (type: `string`):

Stable name for a recurring Changes run. Required when Run Mode is Changes.

## `emitUnchanged` (type: `boolean`):

Include unchanged active listings in Changes mode.

## `inactiveAfterDays` (type: `integer`):

Days absent after complete coverage before an active listing can be marked removed.

## `maxConcurrency` (type: `integer`):

Bounded number of public HTTP sources processed at once.

## `requestDelayMs` (type: `integer`):

Delay between public page requests from a source.

## Actor input object example

```json
{
  "sourceMode": "browseUrls",
  "startUrls": [
    {
      "url": "https://www.mourjan.com/ae/apartments/rental/en/"
    }
  ],
  "listingUrls": [],
  "keywords": [],
  "vertical": "all",
  "countries": [],
  "cities": [],
  "propertyType": "",
  "make": "",
  "model": "",
  "jobTitle": "",
  "employer": "",
  "employmentType": "",
  "serviceType": "",
  "location": "",
  "blockedResponsePolicy": "failSource",
  "detailLevel": "listingOnly",
  "includeDescription": true,
  "includeImages": true,
  "includeContacts": false,
  "maxItems": 50,
  "maxPagesPerSource": 3,
  "maxDetailPages": 0,
  "runMode": "snapshot",
  "monitorKey": "",
  "emitUnchanged": false,
  "inactiveAfterDays": 14,
  "maxConcurrency": 2,
  "requestDelayMs": 500
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

## `monitorState` (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 = {
    "sourceMode": "browseUrls",
    "startUrls": [
        {
            "url": "https://www.mourjan.com/ae/apartments/rental/en/"
        }
    ],
    "listingUrls": [],
    "keywords": [],
    "vertical": "all",
    "countries": [],
    "cities": [],
    "propertyType": "",
    "make": "",
    "model": "",
    "jobTitle": "",
    "employer": "",
    "employmentType": "",
    "serviceType": "",
    "location": "",
    "blockedResponsePolicy": "failSource",
    "detailLevel": "listingOnly",
    "includeDescription": true,
    "includeImages": true,
    "includeContacts": false,
    "maxItems": 50,
    "maxPagesPerSource": 3,
    "maxDetailPages": 0,
    "runMode": "snapshot",
    "monitorKey": "",
    "emitUnchanged": false,
    "inactiveAfterDays": 14,
    "maxConcurrency": 2,
    "requestDelayMs": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/mourjan-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 = {
    "sourceMode": "browseUrls",
    "startUrls": [{ "url": "https://www.mourjan.com/ae/apartments/rental/en/" }],
    "listingUrls": [],
    "keywords": [],
    "vertical": "all",
    "countries": [],
    "cities": [],
    "propertyType": "",
    "make": "",
    "model": "",
    "jobTitle": "",
    "employer": "",
    "employmentType": "",
    "serviceType": "",
    "location": "",
    "blockedResponsePolicy": "failSource",
    "detailLevel": "listingOnly",
    "includeDescription": True,
    "includeImages": True,
    "includeContacts": False,
    "maxItems": 50,
    "maxPagesPerSource": 3,
    "maxDetailPages": 0,
    "runMode": "snapshot",
    "monitorKey": "",
    "emitUnchanged": False,
    "inactiveAfterDays": 14,
    "maxConcurrency": 2,
    "requestDelayMs": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/mourjan-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 '{
  "sourceMode": "browseUrls",
  "startUrls": [
    {
      "url": "https://www.mourjan.com/ae/apartments/rental/en/"
    }
  ],
  "listingUrls": [],
  "keywords": [],
  "vertical": "all",
  "countries": [],
  "cities": [],
  "propertyType": "",
  "make": "",
  "model": "",
  "jobTitle": "",
  "employer": "",
  "employmentType": "",
  "serviceType": "",
  "location": "",
  "blockedResponsePolicy": "failSource",
  "detailLevel": "listingOnly",
  "includeDescription": true,
  "includeImages": true,
  "includeContacts": false,
  "maxItems": 50,
  "maxPagesPerSource": 3,
  "maxDetailPages": 0,
  "runMode": "snapshot",
  "monitorKey": "",
  "emitUnchanged": false,
  "inactiveAfterDays": 14,
  "maxConcurrency": 2,
  "requestDelayMs": 500
}' |
apify call getascraper/mourjan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/mourjan-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/99SM7BaciDgGvEMiV/builds/eyTA4tVbkiPMAAF7v/openapi.json
