# Apartments.com.gh Scraper - Ghana Property Listings (`recordsdata/apartments-gh-scraper`) Actor

Scrape apartments.com.gh, Ghana's property portal: rent, sale, short let, land and commercial listings with price in USD or cedis, rooms, address, photos and agencies. Filter by city, area, price and keyword. No login, no proxy.

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

## Pricing

from $18.00 / 1,000 property listing (search card)s

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)

## 🏠 Apartments.com.gh Scraper: Ghana Property Listings for Rent, Sale & Short Let

> **Apartments.com.gh Scraper exports Ghana property listings from apartments.com.gh as structured data: rent, sale, short let, land and commercial ads with price in USD or Ghana cedis, bedrooms, bathrooms, address, neighborhood, photos and the agency behind each ad, plus the site's agent directory. Filter by city, area, price and keyword, or paste site URLs. Export CSV, Excel, JSON.**

The Apartments.com.gh Scraper turns the public search of this Ghana property portal into a dataset you can sort, filter and join. On 2026-10-11 the site held 1,045 live listings, 912 of them in Accra, 693 for rent or short let and 352 for sale. Choose a category and city, add filters, and get one clean row per listing.

### 🎯 What does the Apartments.com.gh scraper do?

- Scrapes **Ghana properties for rent, for sale and short lets**: price, currency, price period, bedrooms, bathrooms, floor area, furnishing, property type and amenities.
- Searches **by category and city**: residential rent, residential sale, short lets, rooms, commercial rent and sale, land, new build and off-plan, tenanted investments, in Accra, Tema, Kumasi, Takoradi, Cape Coast or Aburi.
- Narrows by **neighborhood** (64 areas of the site's own list, for example East Legon, Cantonments, Airport Residential Area, Adenta, Osu, Tema East), **price range**, **currency**, **minimum bedrooms**, **keyword** and **listings with photos only**.
- Opens **every listing page on request** for the full description, the typed address, the property sub-type and the amenity list.
- Lists the **real estate agencies** of the site's Agent Finder with logo, address, website, verified badge, live listing count and rating.
- Has an **only-new mode** for scheduled runs, so a daily run returns just the ads it has not delivered before.

### 📊 Ghana real estate data: which fields do you get?

Every row is one record, and `recordType` tells which kind: `listing` or `agency`. Fields the seller leaves out are missing from the row.

| Field | Type | Example |
|---|---|---|
| `recordType` | string | `listing` or `agency` |
| `listingId` | string | `3381` |
| `url` | string | `https://apartments.com.gh/real-estate/...` |
| `title` | string | `Executive Fully Furnished 3-Bedroom Serviced Apartment in Adenta` |
| `operation` | string | `rent`, `sale` or `short-let` |
| `category`, `propertyType`, `propertySubtype` | string | `Residential for Rent`, `apartment`, `detached house` |
| `price` | number | `1200` |
| `currency` | string | `USD` or `GHS` |
| `pricePeriod`, `priceText` | string | `month`, `$1,200.00 per Month` |
| `address`, `neighborhood`, `city`, `region` | string | `Adenta`, `Accra`, `Greater Accra Region` |
| `bedrooms`, `bathrooms`, `areaBuilt` | number | `3`, `2`, `720` |
| `areaText`, `furnished`, `description` | string | `720 sq m`, `furnished` |
| `amenities` | array | list of amenity names (full page mode) |
| `imageUrl`, `images`, `imageCount` | string, array, number | `7` photos |
| `publishedAt` | string (ISO date) | `2026-10-06` |
| `isPrivateSeller` | boolean | `false` |
| `agencyId`, `agencyName`, `agencyUrl`, `agencyLogoUrl` | string | `Myem Properties Brokerage` |
| `agencyType`, `agencyLocation`, `agencyAddress`, `agencyWebsite` | string | agency rows only |
| `isVerified`, `activeListings`, `rating`, `reviewCount` | boolean, number | `true`, `31`, `5`, `2` |
| `sourceSite`, `country`, `scrapedAt` | string | `apartments.com.gh`, `GH`, ISO timestamp |

Fill rates on the 1,045 listings of 2026-10-11: title, URL, category and date 100 percent, description 98, price and currency 94, city 94, photos 96, address 87, bathrooms 84, bedrooms 81, floor area 18, furnished flag 32. The site has no GPS coordinates and no phone numbers, so the Actor returns neither.

### 🧾 Ghana property listing example: what does a real result look like?

A search row from a cloud run on 2026-10-11 (Residential for Rent, Accra, newest first):

```json
{
  "imageUrl": "https://apartments.com.gh/oc-content/uploads/33/11197.png",
  "recordType": "listing",
  "listingId": "3381",
  "url": "https://apartments.com.gh/real-estate/residential-for-rent/executive-fully-furnished-3-bedroom-serviced-apartment-in-adenta_3381",
  "sourceSite": "apartments.com.gh",
  "country": "GH",
  "operation": "rent",
  "category": "Residential for Rent",
  "propertyType": "apartment",
  "title": "Executive Fully Furnished 3-Bedroom Serviced Apartment in Adenta",
  "description": "Experience comfort, convenience and contemporary living in this executive fully furnished 3-bedroom",
  "price": 1200,
  "currency": "USD",
  "pricePeriod": "month",
  "priceText": "$1,200.00 per Month",
  "address": "Adenta Ritz Road, Adenta, Adenta Municipal, Accra, Ghana",
  "neighborhood": "Adenta",
  "city": "Accra",
  "region": "Greater Accra Region",
  "furnished": "furnished",
  "images": ["https://apartments.com.gh/oc-content/uploads/33/11197.png", "..."],
  "imageCount": 7,
  "publishedAt": "2026-10-06",
  "isPrivateSeller": false,
  "agencyName": "Myem Properties Brokerage",
  "scrapedAt": "2026-10-11T12:13:39.617Z"
}
```

An agency row from the Agent Finder:

```json
{
  "recordType": "agency",
  "url": "https://apartments.com.gh/user/profile/Westfields_Real_Estate",
  "agencyId": "Westfields_Real_Estate",
  "agencyName": "Westfields Real estate",
  "agencyType": "Agent",
  "agencyLocation": "Accra",
  "agencyAddress": "3rd Floor, Grand Oyeeman Building - South Liberaion link, Airport City - Accra, Airport City",
  "agencyWebsite": "http://www.westfieldsrealestate.com",
  "isVerified": true,
  "activeListings": 31,
  "rating": 5,
  "reviewCount": 2
}
```

### ⚙️ Input: which settings can I use?

| Input | Type | Example |
|---|---|---|
| `mode` | string | `listings` or `agencies` |
| `category` | string | `44` (residential for rent), `43` (sale), `any` |
| `city` | string | `accra`, `tema`, `kumasi` |
| `area` | string | `East Legon` |
| `keyword` | string | `swimming pool` |
| `priceMin`, `priceMax` | integer | `500`, `2500` |
| `currency` | string | `USD`, `GHS`, `any` |
| `minBedrooms` | integer | `2` |
| `photosOnly` | boolean | `true` |
| `sortBy` | string | `newest`, `oldest`, `price-low`, `price-high` |
| `startUrls` | array | listing URLs, IDs such as `3412`, search or agent pages |
| `includeDetails` | boolean | `true` for full listing pages |
| `includeIndividuals` | boolean | `false` |
| `onlyNew`, `stateKey`, `resetSeen` | boolean, string, boolean | monitor mode settings |
| `maxItems` | integer | `50` |

Example input:

```json
{
  "mode": "listings",
  "category": "44",
  "city": "accra",
  "area": "East Legon",
  "priceMax": 2500,
  "currency": "USD",
  "sortBy": "newest",
  "includeDetails": false,
  "maxItems": 50
}
```

### 🚀 How to scrape Apartments.com.gh in 4 steps

1. Create a free account at [console.apify.com](https://console.apify.com) and open this Actor.
2. Pick **What to collect** (property listings or real estate agencies), then a **Category**, a **City** and, if you want, an **Area**, a price range or a keyword.
3. Set **Max Items** and press Start. A 3-result run finishes in about 4 seconds.
4. Download the dataset as CSV, Excel, JSON or XML, or read it through the Apify API.

To read exact pages, paste listing URLs, numeric listing IDs, search pages or agent profile pages into **Start URLs or listing IDs**. A pasted search keeps all its site filters. Turn on **Open every listing page** to add the full description, the typed address, the property sub-type and the amenities.

### 📈 Apartments.com.gh scraper vs alternatives

No Apify Actor targets apartments.com.gh, so this compares the closest Ghana option (meQasa Scraper by sian.agency, another portal) and manual browsing. Read on 2026-10-11.

| | This Actor | meQasa Scraper | By hand |
|---|---|---|---|
| Site covered | apartments.com.gh | meqasa.com only | apartments.com.gh |
| Price per 1,000 listings | $18.00, $36.00 with full page | $1.32 to $6.00 by plan tier | Free, your time |
| Agency directory | Yes | Not listed | One profile at a time |
| Only-new monitor mode | Yes | Not listed | No |

The two Actors cover different portals, so most teams run both, not one or the other. meQasa's page lists lower per-listing prices at every tier, and it returns fields we do not, such as negotiability and a USD equivalent. At $18.00 per 1,000 we cost more than meQasa at every tier. We offer the only Apify route into apartments.com.gh, with an agency directory, full listing pages and monitoring. Neither Actor returns phone numbers or GPS.

### 💵 How much does it cost? Worked examples

Pay per event, no start fee: $0.018 per listing row, $0.036 per row with the full listing page, $0.027 per agency row. Prices read from the live Store listing on 2026-10-11. That is $18.00 per 1,000 search rows, $36.00 per 1,000 full pages and $27.00 per 1,000 agencies.

| Job | Rows | Cost |
|---|---|---|
| 100 Accra rentals, search data | 100 | $1.80 |
| Same 100 with full listing pages | 100 | $3.60 |
| Whole site, 1,045 listings | 1,045 | $18.81 |
| The 20-agent directory | 20 | $0.54 |

A daily only-new monitor is charged only for new ads.

### 💼 Apartments.com.gh scraper use cases

- **Investors and developers**: compare asking prices of apartments, houses and land by city and neighborhood, in dollars and cedis, and follow new build and off-plan stock.
- **Agents and brokers**: watch new rentals and sales in East Legon, Cantonments or Tema with the only-new mode and send them to a CRM.
- **Lead generation**: list the verified agencies of the Agent Finder with website, address and live listing count.

### 🔌 Apartments.com.gh 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~apartments-gh-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"category":"44","city":"accra","area":"East Legon","priceMax":2500,"currency":"USD","maxItems":50}'
```

Connect it to Make, Zapier, n8n, Google Sheets or Slack.

#### MCP: use it from Claude, Cursor or any AI agent

Add the Apify MCP server with this Actor: `https://mcp.apify.com?tools=RecordsData/apartments-gh-scraper`. The agent sees one tool, `RecordsData/apartments-gh-scraper`, described as: "Scrape apartments.com.gh Ghana property listings (rent, sale, short let, land) and agencies, with price, currency, rooms, address, photos and agency."

Example agent prompt: "Find furnished rentals in East Legon under 2,500 USD a month, newest first, 30 results, and list price, bedrooms and agency." The agent calls the tool with `{"category":"44","city":"accra","area":"East Legon","priceMax":2500,"currency":"USD","sortBy":"newest","maxItems":30}`.

### ⚖️ Is it legal to scrape Apartments.com.gh?

The Actor reads the public pages that apartments.com.gh serves to every visitor, without logging in, at two requests at a time with short pauses. Listing data is public advertising information. The site masks phone numbers and e-mail addresses, so none are returned, and any phone number or e-mail typed into an ad text is removed. Names and profile pages of individual sellers are left out by default: only sellers whose name reads as a business are named, unless you switch on **Include individual agents**. The terms of use of apartments.com.gh restrict automated collection, so check them and your data protection rules before commercial use.

### FAQ: Apartments.com.gh scraper questions and answers

**How do I scrape Apartments.com.gh listings?**
Open the Actor, leave What to collect on Property listings, choose a category and city, set Max Items and press Start. Each ad becomes one dataset row with price, currency, rooms, address, photos and the agency, ready for CSV, Excel or JSON export. Add an area, price range or keyword to narrow the search, or paste listing URLs to read exact pages.

**Does the Apartments.com.gh scraper need a proxy or an account on the site?**
No. It needs no login, no API key, no browser and no proxy. The site answers plain requests, and the Actor paces them at two at a time with retries when the server is slow. You only need an Apify account to start a run, and the free plan is enough for a first test.

**How many properties are listed on Apartments.com.gh?**
On 2026-10-11 the site listed 1,045 properties: 395 residential rentals, 259 short lets, 241 residential sales, 55 new build and off-plan, 44 land ads, 29 rooms, 17 commercial and 5 tenanted investments. 912 were in Accra. The number moves daily, so rerun the Actor for a current count.

**Can I get every listing of the site in one run?**
Yes. The site shows 20 ads per page and the Actor follows all 53 pages of the full list, so Max Items of 1,045 or more returns the whole site. No listing is returned twice. A full run takes several minutes.

**Which currency are the prices in?**
In the currency the seller chose: 678 of the 1,045 ads are priced in US dollars and 306 in Ghana cedis, and 61 have no price ("Check with seller" or "Price on Request"). `currency` holds the ISO code. The site price filter compares raw numbers and ignores the currency, so set Currency next to a price range to keep one currency.

**How do I search rentals in East Legon or Cantonments?**
Type the neighborhood into Area, for example `East Legon`, `Cantonments`, `Airport Residential Area`, `Adenta`, `Osu` or `Tema East`. The Actor knows 64 areas of the site's own list and returns one free error row with examples if the name is unknown.

**What is the difference between a search row and a full listing page row?**
A search row carries a 100 character description. With Open every listing page on, the Actor opens each ad and adds the full description, the typed address, the property sub-type and the amenity list. It makes one extra request per listing, so it is slower.

**Does it give phone numbers or names of agents?**
No phone numbers or e-mails: the site hides them and the Actor removes any typed into the text. Agency names are returned when the seller is a business, and the Agent Finder mode returns business profiles with address, website and rating. Individual sellers stay anonymous unless you switch on Include individual agents.

**Why are bedrooms or area empty on some rows?**
Sellers fill them in: bedrooms are present on 81 percent of ads and floor area on 18 percent, and the number is shown as typed. Short lets leave bedrooms blank more often, and the title often says the room count. Land sizes are free text such as "70 by 100" and go to `areaText`.

**How do I get only the new listings every day?**
Turn on Only new results (monitor mode), give the monitor a label and schedule the Actor. It remembers the ids it delivered for the same search in a store of your own account and returns only new ones, and only new rows are charged.

**Does it return GPS coordinates?**
No. The site publishes the address as text and a map search by that text, but no latitude or longitude. Use `address`, `neighborhood` and `city` to geocode with any mapping service you already use, in bulk if needed.

**Which export formats are available?**
CSV, Excel, JSON, XML, HTML table and RSS from the Apify dataset page or the API, plus delivery to Google Sheets, Slack or a webhook. The same data is also available through the API and the Apify client libraries for Python and JavaScript.

**How much does the Apartments.com.gh scraper cost?**
It is pay per event with no start fee: $18.00 per 1,000 search rows, $36.00 per 1,000 rows with the full listing page and $27.00 per 1,000 agency rows on the Free plan. A run of 100 Accra rentals costs $1.80. Only-new monitor runs charge only new ads.

**How many results do free users get?**
Free Apify accounts get a preview of up to 10 results per run. Paid accounts can set Max Items up to 1,000,000, far above the 1,045 listings on the site, so one run can cover everything, with every field and agency included.

**What happens if the site changes or is down?**
When a run gets no data because the site fails or its layout changed, the Actor ends with a clear failure message and charges nothing. Write to contact.punkrecordsdata@gmail.com and we fix it, usually with a new build of the Actor.

### 🔎 Want more real estate and market data?

Browse the complete [RecordsData collection](https://apify.com/RecordsData) for more scrapers.

### 💬 Support

Last updated: 2026-10-11.

Questions, a missing field or a feature request: **contact.punkrecordsdata@gmail.com**

> **⚠️ Disclaimer:** independent tool, not affiliated with apartments.com.gh. It collects only publicly available data.

# Actor input Schema

## `mode` (type: `string`):

Listings returns one row per property. Agencies returns one row per real estate business from the site's Agent Finder directory (the directory lists 20 agents; individual agents are skipped unless you turn on Include individual agents).

## `category` (type: `string`):

Site category. Short lets are priced per day, rentals per month. Land and parking spots follow the same rules as the site.

## `city` (type: `string`):

City filter. Accra holds about 90 percent of the listings.

## `area` (type: `string`):

Neighborhood from the site's own list, for example "East Legon", "Cantonments", "Airport Residential Area", "Adenta", "Osu" or "Tema East". An unknown name returns one free error row. Leave empty for the whole city.

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

Words searched in the title and description, for example "swimming pool" or "furnished studio". Leave empty for no keyword.

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

Lowest price. The site compares the raw number and ignores the currency, so 1000 matches both $1,000 and 1,000 cedis. Combine with Currency to keep one currency. 0 or empty means no minimum.

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

Highest price, compared as a raw number like the minimum. 0 or empty means no maximum.

## `currency` (type: `string`):

Keep only listings priced in one currency (US dollars or Ghana cedis). Listings without a price are dropped when you pick one.

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

Keep only listings with at least this many bedrooms. Listings that do not state their bedrooms (studios, land) are dropped when you set a value. 0 or empty means no limit.

## `photosOnly` (type: `boolean`):

Skip listings that have no photo.

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

Order of the results. The price sorts compare the raw number and ignore the currency, and put listings without a price first when sorting from low to high.

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

One entry per line: a listing page, a numeric listing ID such as 3412, a search or category page of apartments.com.gh (with its filters), or an agent profile page (/user/profile/...). Listing pages and IDs return the full listing page.

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

Search results carry a 100 character description. Turn this on to open each listing page for the full description, the typed address, amenities and the property sub-type. Slower: one extra request per listing.

## `includeIndividuals` (type: `boolean`):

By default the output names only sellers whose name reads as a business, and individuals stay anonymous (isPrivateSeller is true). Turn on to also return the names and profile pages of individual sellers and agents. Phone numbers and e-mail addresses are never returned: the site masks them.

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

Skip listings delivered by an earlier run of the same search and charge only for new ones. The list of seen listings is kept in a named store of your account.

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

Optional label to keep separate monitors for the same filters, for example "accra-rentals-weekly".

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

Forget what earlier runs delivered for this search before starting.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "mode": "listings",
  "category": "any",
  "city": "any",
  "area": "",
  "keyword": "",
  "priceMin": 0,
  "priceMax": 0,
  "currency": "any",
  "minBedrooms": 0,
  "photosOnly": false,
  "sortBy": "newest",
  "startUrls": [],
  "includeDetails": false,
  "includeIndividuals": false,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false,
  "maxItems": 10
}
```

# Actor output Schema

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

Key fields per record: listings and agencies

## `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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/apartments-gh-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/apartments-gh-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 '{
  "maxItems": 10
}' |
apify call recordsdata/apartments-gh-scraper --silent --output-dataset

```

## MCP server setup

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