# meQasa Scraper - Ghana Real Estate Listings & Prices (`sian.agency/meqasa-property-scraper`) Actor

Ghanaian property adverts from meQasa: asking price in cedis with the portal's dollar equivalent, bedrooms, bathrooms, floor area, locality, photo count, listing age and the advertiser behind each advert. Search 113 named localities or all of Ghana, or open single adverts for the full seller text, t

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

## Pricing

from $1.32 / 1,000 property 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/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

## meQasa Scraper — Ghana Property Listings, Prices & Agents 🚀

[![Store-SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store-AngoCasa Scraper](https://img.shields.io/badge/Store-AngoCasa%20Scraper-1AE392)](https://apify.com/sian.agency/angocasa-property-scraper?fpr=sian) [![Store-Property24 Scraper](https://img.shields.io/badge/Store-Property24%20Scraper-1AE392)](https://apify.com/sian.agency/property24-property-scraper?fpr=sian) [![Store-Mubawab Scraper](https://img.shields.io/badge/Store-Mubawab%20Scraper-1AE392)](https://apify.com/sian.agency/mubawab-property-scraper?fpr=sian)

#### 🎉 Every live advert on Ghana's biggest property portal — about 32,300 of them — as typed rows

##### Built for analysts, agencies and investors who need Accra prices in a spreadsheet, not in thirty browser tabs

### 🔎 What is the meQasa Ghana Property Scraper — and when should you use it?

The **meQasa Ghana Property Scraper** turns public meQasa property adverts from anywhere in Ghana 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:** Ghanaian sale and rental adverts as rows: asking price or rent in cedis, bedrooms, bathrooms, garages, floor area in square metres, locality, property type, photo count, listing age and the advertiser behind each advert with their meQasa profile. Rows carry whether the portal promoted the advert and whether the advertiser is verified, so an export splits sponsored stock from organic after the fact. Open specific adverts and each row additionally carries the seller's full description, the amenity list, every photo at full size, the reference number, whether the price is negotiable, the portal's own dollar figure and the first-listed and updated dates.

**Use something else when:** the property is not in Ghana. Use [AngoCasa Scraper](https://apify.com/sian.agency/angocasa-property-scraper?fpr=sian) for Angola, with the same sale-and-rent row shape plus the advertiser's phone and WhatsApp number. Use [Property24 Scraper](https://apify.com/sian.agency/property24-property-scraper?fpr=sian) for South Africa, Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya from one actor. Use [Mubawab Scraper](https://apify.com/sian.agency/mubawab-property-scraper?fpr=sian) for North Africa — Morocco, Algeria and Tunisia, sale and rent in one dataset. This actor covers the property adverts meQasa publishes on its main portal: houses, apartments, townhouses, studio apartments, offices, shops, retail units, commercial space, warehouses, guest houses, beach houses, hotels and land, each for sale or for rent. It reads what the portal serves to a visitor. Advertiser phone numbers sit behind a click-to-reveal form that this actor does not submit, the portal's new-build development pages are a separate surface, and Ghana has no public sold-price register, so transaction history is not available from meQasa or anywhere else.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/meqasa-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 property listings and asking prices from meQasa using the Apify Actor `sian.agency/meqasa-property-scraper`.

Use it when I need: Ghanaian sale and rental adverts as rows: asking price or rent in cedis, bedrooms, bathrooms, garages, floor area in square metres, locality, property type, photo count, listing age and the advertiser behind each advert with their meQasa profile. Rows carry whether the portal promoted the advert and whether the advertiser is verified, so an export splits sponsored stock from organic after the fact. Open specific adverts and each row additionally carries the seller's full description, the amenity list, every photo at full size, the reference number, whether the price is negotiable, the portal's own dollar figure and the first-listed and updated dates.

Don't use it when: the property is not in Ghana — use angocasa-property-scraper or property24-property-scraper or mubawab-property-scraper instead.

How to call it: leave `operation` on `search` and set `dealType` to `sale` or `rent`. Pick a place with `location` — an empty value reads all of Ghana, and the picker lists the 113 localities that actually return adverts, from `Accra` and `Tema` down to `East Legon Hills` and `Community 25`. `propertyType` picks one of fourteen types; note that `all` means everything EXCEPT land, which is the portal's own behaviour, so run `Land` as its own pass. Narrow with `bedrooms` (an exact count), `minBathrooms` (a minimum), `priceMin`/`priceMax` in cedis, `areaMin`/`areaMax` in square metres, or `keyword` against the advert text. On a rent search, `rentPeriod` picks long lets, short lets, weekly or daily, and `furnishedOnly` keeps only furnished stock. `ownerDirectOnly` keeps only adverts the owner placed rather than an agency — a short, high-signal list. Anything a filter excludes is never saved and never billed. To open adverts you already have, set `operation` to `detail` and pass `propertyUrls`.

Start with this input:
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "House",
  "location": "East Legon",
  "bedrooms": "3",
  "maxItems": 100
}

Ask me which localities to cover, whether they want adverts for sale or to rent, and whether the full seller text, the amenity list and every photo are worth the extra per-advert charge of the detail operation, then run the Actor and summarise the results as a table.
```

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

- *Pull every apartment for rent in Cantonments, Labone and Osu and tell me the median monthly rent in each.*
- *Find land plots for sale in Amasaman and Kasoa under GHS 300,000 and rank them by price per square metre.*
- *Which advertisers have the most live adverts in East Legon Hills, and what is their average asking price?*

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

### 📋 Overview

**Ghana's property market finally has a data feed.** meQasa is the country's leading dedicated property portal, and this Actor reads all of it — adverts for sale and for rent, from Accra's prime neighbourhoods to Kumasi, Takoradi and Ho.

**Why people use it:**

- ✅ **Complete national coverage**: about 32,300 live adverts — 9,857 non-land properties for sale, 10,477 land plots and 11,967 rentals
- ⚡ **16 adverts per request**: a whole locality is seconds, a national sweep is an overnight job
- 🎯 **Filters that actually filter**: every value in the form was tested against an unfiltered count, so nothing here quietly returns everything
- 💰 **Pay per advert, never for errors**: $0.0015 a row, and a search that matches nothing costs you nothing
- 💎 **43 typed fields**: numeric prices and areas, arrays for amenities and photos, ISO dates — load it straight into a table
- ✨ **113 named localities**: Accra, East Legon, Cantonments, Spintex, Tema, Kumasi, Takoradi and 106 more, each verified to return adverts

### ✨ Features

- 🔍 **Two operations in one Actor**: search the grid, or open specific adverts in full
- 📍 **A place list you can trust**: the portal accepts 412 names; 159 of them return nothing. Only the live ones are offered
- 🏠 **Fourteen property types**: houses, apartments, townhouses, studios, offices, shops, retail, commercial space, warehouses, guest houses, beach houses, hotels and land
- 🎚️ **Real narrowing**: bedrooms, minimum bathrooms, price window, floor-area window, keyword, rent period, furnished, owner-direct
- 💵 **Prices in cedis, with the portal's dollar figure**: `price` is always GHS; detail rows add `priceUsd`
- 📸 **Photos and amenities**: every image at full size, plus the amenity checklist the grid hides
- 📆 **Listing dates**: first listed and last updated, so you can measure time on market
- 👤 **The advertiser on every row**: name, profile address, ID, and on detail rows whether they list as an owner, an agent or a developer
- 🧾 **Promoted adverts labelled**: page one injects boosted listings; the ones that contradict your filter are dropped, the rest carry `isPromoted`
- 📄 **HTML run report**: a readable summary with your rows, your charges and a copy-paste retry input

### 🎬 Quick Start

Pick an operation, pick a place, press Start. The search operation needs nothing else — its defaults return houses and apartments for sale across the whole country. Results land in your dataset as JSON, CSV or Excel.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~meqasa-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","dealType":"sale","location":"East Legon","maxItems":100}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose what to do

Leave **What to do** on Property Search to walk the result grid, or switch it to Property Detail to open advert addresses you already have.

#### Step 2: Choose where and what

Pick a deal type, a property type and a place. Add a price window, a bedroom count or a keyword if you want a narrower slice.

#### Step 3: Run it

Set **Maximum adverts** and press Start. Rows appear in the dataset as they arrive, and the run report opens in the key-value store when it finishes.

**That's it! In under a minute, you'll have:**

- A typed table of live adverts with prices, sizes and localities
- The advertiser behind every one of them
- A JSON, CSV or Excel export ready for your model

### 📥 Input Configuration

| Field | Type | Required | Description |
|---|---|---|---|
| `operation` | string | No | `search` or `detail`. Defaults to `search` |
| `dealType` | string | No | `sale` or `rent`. Defaults to `sale` |
| `propertyType` | string | No | `all` or one of the fourteen types. `all` excludes land |
| `location` | string | No | Empty for all of Ghana, or one of 113 named localities |
| `keyword` | string | No | Free text matched against the advert description |
| `bedrooms` | string | No | An exact bedroom count, 1 to 10 |
| `minBathrooms` | string | No | A minimum bathroom count, 1 to 6 |
| `priceMin` / `priceMax` | integer | No | Asking price window in Ghana cedis. 0 means no limit |
| `areaMin` / `areaMax` | integer | No | Floor-area window in m². 0 means no limit |
| `rentPeriod` | string | No | Rent searches only: long let, short let, weekly or daily |
| `furnishedOnly` | boolean | No | Rent searches only |
| `ownerDirectOnly` | boolean | No | Only adverts placed by the owner rather than an agency |
| `maxItems` | integer | No | Stop after this many adverts. Defaults to 100 |
| `propertyUrl` | string | No | Property Detail only: one advert address |
| `propertyUrls` | array | No | Property Detail only: a list of advert addresses |

**Example:**

```json
{
  "operation": "search",
  "dealType": "rent",
  "propertyType": "Apartment",
  "location": "Cantonments",
  "bedrooms": "2",
  "furnishedOnly": true,
  "maxItems": 200
}
```

**Opening specific adverts:**

```json
{
  "operation": "detail",
  "propertyUrls": [
    "https://meqasa.com/house-for-sale-at-Tse-Addo-463121",
    "https://meqasa.com/warehouse-for-sale-at-Tema-473197"
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset with **43 fields**. The most useful ones:

| Field | Type | Description |
|---|---|---|
| `listingId` | string | The advert's reference number on meQasa |
| `propertyUrl` | string | The advert's own page |
| `propertyTitle` | string | The advert headline |
| `dealType` | string | `sale` or `rent` |
| `propertyType` | string | house, apartment, land, warehouse and so on |
| `price` | number | Asking price or rent, in Ghana cedis |
| `priceUsd` | number | The portal's own dollar figure (detail rows) |
| `rentPeriod` | string | month, week or day, on rent adverts |
| `bedrooms` / `bathrooms` / `garages` | integer | Room counts |
| `areaSqm` | number | Floor area in square metres |
| `pricePerSqm` | number | Computed on detail rows that publish an area |
| `locality` | string | The named place the advert sits in |
| `amenities` | array | The amenity checklist (detail rows) |
| `photoUrls` | array | Every photo at full size (detail rows) |
| `firstListedDate` / `updatedDate` | string | ISO dates (detail rows) |
| `advertiserName` / `advertiserId` / `advertiserUrl` | string | Who is selling it |
| `isPromoted` | boolean | Whether the portal boosted this advert |

**Example (a search row):**

```json
{
  "listingId": "120440",
  "propertyUrl": "https://meqasa.com/house-for-sale-at-East-Legon-120440",
  "propertyTitle": "4 bedroom furnished house for sale in East Legon",
  "dealType": "sale",
  "propertyType": "house",
  "locality": "East Legon",
  "price": 4548624,
  "priceCurrency": "GHS",
  "priceText": "GH₵4,548,624",
  "bedrooms": 4,
  "bathrooms": 4,
  "photoCount": 12,
  "listedAge": "Today",
  "isPromoted": false,
  "isVerified": true,
  "advertiserName": "Exotiq Properties Team",
  "advertiserId": "1804284251",
  "searchedLocation": "East Legon",
  "resultPage": 1,
  "status": "success"
}
```

### 💼 Use Cases & Examples

#### 1. Price a neighbourhood before you buy

**Analysts and buyers who need asking prices per square metre, not a feeling.**

**Input:** Deal type For sale, property type Houses, one locality at a time.
**Output:** Every live advert with price, bedrooms and floor area.
**Use:** Median price and median price per m² for East Legon against Airport Residential and Cantonments, in one afternoon.

#### 2. Build an agency book

**Agencies and proptech teams mapping who actually transacts where.**

**Input:** A locality sweep with a high `maxItems`.
**Output:** Every row carries the advertiser's name, ID and profile address.
**Use:** Group by advertiser to see stock counts, average asking price and which parts of Accra each firm really works.

#### 3. Track time on market

**Investors looking for liquidity signals in a market with no sold-price register.**

**Input:** A scheduled search, then the detail operation on the interesting IDs.
**Output:** `listedAge` and `isBumped` on search rows; `firstListedDate` and `updatedDate` on detail rows.
**Use:** Diff advert IDs between runs to separate genuinely new stock from a re-listing.

#### 4. Follow the land market

**Developers and land buyers watching the expansion fronts around Accra.**

**Input:** Property type Land, deal type For sale, all of Ghana or one locality.
**Output:** 10,477 plots with price and area.
**Use:** A per-square-metre land series for Amasaman, Kasoa, Oyibi, Pokuase and Prampram.

#### 5. Serve diaspora buyers

**Agents and portals selling Ghanaian property to buyers in the US, UK and Canada.**

**Input:** Deal type For sale, property types Houses and Apartments, prime localities.
**Output:** Cedi prices with the portal's own dollar equivalent on detail rows.
**Use:** A price sheet a buyer abroad can read without a currency conversion step. Search demand for "houses for sale in ghana" is over twice as large in the US as it is in Ghana.

#### 6. Find owner-direct sellers

**Buyers and small investors who would rather not go through an agency.**

**Input:** Owner-direct only switched on.
**Output:** A short list — 58 nationally on the sale side.
**Use:** Approach sellers directly, refreshed weekly on a schedule.

#### 7. Feed a portal or CRM

**Product teams building a Ghanaian listings product.**

**Input:** A nightly national run with a high `maxItems`.
**Output:** Typed rows, arrays for amenities and photos, ISO dates.
**Use:** Load straight into a listings table. A full national refresh is roughly 2,000 requests.

### 🔗 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/meqasa-property-scraper').call({
  operation: 'search',
  dealType: 'rent',
  propertyType: 'Apartment',
  location: 'Cantonments',
  maxItems: 200,
});

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/meqasa-property-scraper').call(
    run_input={
        'operation': 'search',
        'dealType': 'sale',
        'propertyType': 'Land',
        'location': 'Kasoa',
        'maxItems': 500,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item)
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~meqasa-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"detail","propertyUrls":["https://meqasa.com/house-for-sale-at-Tse-Addo-463121"]}'
```

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

1. **Trigger**: Schedule or webhook
2. **HTTP Request**: Call actor API
3. **Process**: Handle JSON results
4. **Action**: Save, notify, or transform

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 adverts** per run — every field, same quality
- No credit card required
- Enough to check a locality before you commit

#### PAID Tier (Production Ready)

- **Unlimited** adverts per run
- Pay per advert returned: a search that matches nothing, a promoted advert that did not match your filter, a repeat you already have and an address we could not read all cost nothing

💰 **$0.0015 per advert** on the search operation, $0.0045 to open one in full. A full sweep of every house for sale in Ghana is about $12.

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

### ❓ Frequently Asked Questions

**Q: How many adverts are there in total?**
A: About 32,300 live on 13 September 2026 — 9,857 non-land properties for sale, 10,477 land plots for sale and 11,967 for rent. Roughly two in three are in Greater Accra.

**Q: Are prices in cedis or dollars?**
A: meQasa quotes everything in Ghana cedis, so `price` and the price filters are always GHS. Detail rows also carry `priceUsd`, the dollar figure the portal itself publishes for that advert.

**Q: Why is there no region filter when the site has one?**
A: Because the site's region control does nothing — every Ghanaian region, and a nonsense value, return the same unfiltered national count. Offering it here would sell a filter that quietly returns everything, so places are chosen by locality instead.

**Q: Why does All types miss the land plots?**
A: That is the portal's own behaviour. Its Any type selection returns 9,857 sale adverts while Land alone returns 10,477, so land sits beside Any rather than inside it. Run Land as its own pass.

**Q: Do I get phone numbers?**
A: No. meQasa puts advertiser phone numbers behind a click-to-reveal form and this Actor does not submit it. You get the advertiser's name, ID and profile address.

**Q: Will a sweep return exactly the count the portal reports?**
A: Close, but treat the count as the target. The portal reshuffles its result order between requests, so one pass over a large selection lands within a few per cent — measured at 94.7% on a 666-advert selection and 100% on a 54-advert one. Rows are de-duplicated by advert ID, so a repeat is never charged twice.

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

**Q: How long does a run take?**
A: About a second per request, and each request returns 16 adverts. A thousand adverts is roughly a minute.

### 🐛 Troubleshooting

**A search returns no adverts**

- Widen the place, or switch to All of Ghana
- Clear the keyword — a word the adverts do not use returns nothing
- Remember that land is its own property type, not part of All types

**Fewer rows than the portal's own count**

- Raise `maxItems`; it is a ceiling, not a target
- On the FREE tier a run stops at 25 rows
- Run the same search twice: the portal's order shifts, and a second pass recovers most of the small gap

**A detail address comes back as an error row**

- Sold, rented and withdrawn adverts answer with the portal's not-found page. Search the same locality and type for what is live now
- A reference number on its own cannot be opened — paste the full address from your browser

**Rent period or the furnished switch seems to do nothing**

- Both apply to rent searches only and are ignored on a sale search

### ⚖️ 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/).

meQasa is a trademark of its owner. This Actor is not affiliated with, endorsed by, or sponsored by meQasa.

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- 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/meqasa-property-scraper/changelog.md

# Actor input Schema

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

Property Search walks the portal's result grid and returns 16 adverts per request, each already carrying price, size, locality and the advertiser. Property Detail takes advert addresses you already have and opens each one for the seller's full text, the amenity list, every photo, the dollar equivalent and the listing dates. One operation per run.

## `dealType` (type: `string`):

Sale adverts carry an asking price, rent adverts a rent with its period, and every row is labelled either way. These are the only two the portal's search accepts — any other value makes it answer with an error rather than a result set, so no third option is offered. Nationally there are about 20,300 sale adverts and 12,000 rent adverts.

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

Houses and apartments are the deep sections: 8,193 houses and 1,041 apartments for sale, 4,704 houses and 5,869 apartments for rent. Land is the single largest sale section at 10,477 plots. Note that All types means everything EXCEPT land — that is the portal's own behaviour, not a choice made here, so run Land as its own pass if you want plots. The long tail — hotels, beach houses, guest houses — holds a few dozen adverts each nationally, so pair those with All of Ghana rather than one…

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

All of Ghana, or one named locality. This list is the portal's own place index with every value checked against the live site: of the 412 names its search box will accept, 253 return adverts and 159 return nothing at all. The 113 offered here are the ones carrying ten adverts or more, which is 98.7% of everything the portal attributes to a place. Searching a broad name includes the smaller places inside it — Accra returns East Legon, Osu and Cantonments stock as well.

## `keyword` (type: `string`):

Optional free text matched against the advert description — 'pool' narrows the national sale set from 9,857 to 2,642, 'gated' to 2,019. Leave it empty for everything. A word the adverts do not use returns nothing rather than being ignored, so a zero-row run here means the word is genuinely absent, not that the filter was dropped.

## `bedrooms` (type: `string`):

An EXACT bedroom count, not a minimum — 3 returns 2,491 national sale adverts and 4 returns 4,270, and the two sets do not overlap. Land, offices and warehouses mostly carry no bedroom count at all, so pair this with a residential property type.

## `minBathrooms` (type: `string`):

Unlike bedrooms, this one is a minimum: 1+ returns 9,838 national sale adverts, 3+ returns 9,004 and 5+ returns 5,250. That asymmetry is the portal's, not this actor's.

## `priceMin` (type: `integer`):

Asking price floor in Ghana cedis. Every advert on meQasa is quoted in cedis, including the ones the seller priced in dollars, so this window is always in GHS. For rent adverts it filters the rent, at whatever period the advert uses. Leave both price fields at 0 for no price filter.

## `priceMax` (type: `integer`):

Asking price ceiling in Ghana cedis. 0 means no ceiling. As a sense of scale, 2,482 of the 9,857 national sale adverts sit between GHS 500,000 and GHS 2,000,000, and 7,406 are above GHS 2,000,000.

## `areaMin` (type: `integer`):

Floor area floor in square metres. Sending an area window at all excludes the handful of adverts that publish no area, so it narrows slightly even at its widest. 0 in both area fields means no area filter.

## `areaMax` (type: `integer`):

Floor area ceiling in square metres. 0 means no ceiling. Nationally 7,180 sale adverts are under 100 m², 3,875 between 100 and 500 m², and 1,336 above 500 m².

## `rentPeriod` (type: `string`):

Rent adverts only; ignored on a sale search. Of the 11,958 national rent adverts, 11,318 are long lets, 3,772 short lets, 289 daily and 58 weekly — the categories overlap because an advert can be offered on more than one term.

## `furnishedOnly` (type: `boolean`):

Rent adverts only. 4,356 of the 11,958 national rent adverts are marked furnished. The portal has no matching 'unfurnished only' switch, so leaving this off returns both.

## `ownerDirectOnly` (type: `boolean`):

Only adverts the portal marks as for-sale-by-owner rather than listed through an agency. This is a small, high-signal slice: 58 of the 9,857 national sale adverts. Turn it on when you want sellers you can approach directly, and expect tens of rows, not thousands.

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

Stop after this many adverts. The run also stops on its own when the selection runs out, so this is a ceiling rather than a target. Each request returns 16 adverts, so 100 is about seven requests. Set it high for a full sweep — the biggest single selection on the portal is about 10,500 adverts.

## `propertyUrl` (type: `string`):

Property Detail only. The full address of one meQasa advert, as it appears in the browser. The bare reference number is not enough on its own — the address carries the property type and locality the portal needs to find the page.

## `propertyUrls` (type: `array`):

Property Detail only. A list of meQasa advert addresses to open in one run. Each one is charged as a single detail row, and an advert that has been sold, rented or withdrawn comes back as an error row that is never charged.

## Actor input object example

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "all",
  "location": "",
  "keyword": "",
  "bedrooms": "",
  "minBathrooms": "",
  "priceMin": 0,
  "priceMax": 0,
  "areaMin": 0,
  "areaMax": 0,
  "rentPeriod": "",
  "furnishedOnly": false,
  "ownerDirectOnly": false,
  "maxItems": 100,
  "propertyUrl": "https://meqasa.com/house-for-sale-at-Tse-Addo-463121",
  "propertyUrls": []
}
```

# Actor output Schema

## `meqasaAdverts` (type: `string`):

Every advert 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",
    "dealType": "sale",
    "propertyType": "all",
    "location": "",
    "keyword": "",
    "bedrooms": "",
    "minBathrooms": "",
    "priceMin": 0,
    "priceMax": 0,
    "areaMin": 0,
    "areaMax": 0,
    "rentPeriod": "",
    "furnishedOnly": false,
    "ownerDirectOnly": false,
    "maxItems": 100,
    "propertyUrl": "https://meqasa.com/house-for-sale-at-Tse-Addo-463121",
    "propertyUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/meqasa-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",
    "dealType": "sale",
    "propertyType": "all",
    "location": "",
    "keyword": "",
    "bedrooms": "",
    "minBathrooms": "",
    "priceMin": 0,
    "priceMax": 0,
    "areaMin": 0,
    "areaMax": 0,
    "rentPeriod": "",
    "furnishedOnly": False,
    "ownerDirectOnly": False,
    "maxItems": 100,
    "propertyUrl": "https://meqasa.com/house-for-sale-at-Tse-Addo-463121",
    "propertyUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/meqasa-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",
  "dealType": "sale",
  "propertyType": "all",
  "location": "",
  "keyword": "",
  "bedrooms": "",
  "minBathrooms": "",
  "priceMin": 0,
  "priceMax": 0,
  "areaMin": 0,
  "areaMax": 0,
  "rentPeriod": "",
  "furnishedOnly": false,
  "ownerDirectOnly": false,
  "maxItems": 100,
  "propertyUrl": "https://meqasa.com/house-for-sale-at-Tse-Addo-463121",
  "propertyUrls": []
}' |
apify call sian.agency/meqasa-property-scraper --silent --output-dataset

```

## MCP server setup

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