# PropertyPro Nigeria Scraper — No Login · $0.002/Listing (`gio21/propertypro-ng-scraper`) Actor

Scrape PropertyPro.ng listings for sale or rent in Nigeria: price (NGN), bedrooms, photos, description. No login required. $0.002 per listing, cheaper than other PropertyPro scrapers on the Store.

- **URL**: https://apify.com/gio21/propertypro-ng-scraper.md
- **Developed by:** [Gio](https://apify.com/gio21) (community)
- **Categories:** Real estate
- **Stats:** 5 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listing scrapeds

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

## PropertyPro Nigeria Scraper — No Login · $0.002/Listing

Structured data from **PropertyPro.ng**, Nigeria's largest property portal, for sale or rent listings in any state. No account, no browser automation on your side. Point it at any PropertyPro.ng listing-page URL and get back clean JSON with price, bedrooms, description and photo for every result.

### Why use this scraper

PropertyPro.ng has no public API and no bulk export, but it is the first stop for anyone buying, renting or researching real estate in Lagos, Abuja, Port Harcourt and every other Nigerian city the site covers. Doing price research on the Lagos rental market, building a lead list from new listings, or feeding a property aggregator today means either writing a custom HTML scraper (that breaks the moment PropertyPro changes its markup) or copying listings by hand.

This actor solves that with one input: any PropertyPro.ng listing-page URL, for sale or for rent, in any state or property type. It returns the asking price in naira, bedroom count, the full listing description and the primary photo for every result on the page, and paginates automatically up to the limit you set.

Nigeria's property market moves fast in the cities PropertyPro covers best (Lagos, Abuja, Port Harcourt), and listings get taken down once a unit sells or rents. A scraper that has to be rewritten every time the site's HTML changes, or that requires logging in with a real account, adds friction to what should be a simple "give me today's listings for this search" task. This actor keeps that friction out: no credentials, no cookies, just a URL.

### Overview

Input is one or more PropertyPro.ng listing-page URLs, for example a state and property-type page like `propertypro.ng/property-for-sale/house/in/lagos` or a rental equivalent. Output is one JSON record per listing: title, URL, price, currency, bedroom count, description and image. A run against a single category page with `maxItems: 30` finishes in well under a minute.

### Supported inputs

- **For-sale category URL** — e.g. `https://propertypro.ng/property-for-sale/house/in/lagos`, swept for every listing on the page.
- **For-rent category URL** — e.g. `https://propertypro.ng/property-for-rent/flats-apartments/in/lagos`, same output shape, rental pricing.
- **Multiple start URLs** — pass an array to combine states, property types or sale/rent in one run.
- **Item cap** — `maxItems` limits the total across all start URLs (default 30, max 200).

### Use cases

- **Nigerian property investors** — pull current asking prices by state and property type to spot under- or over-priced listings.
- **Diaspora buyers and renters** — monitor new listings in a specific Lagos or Abuja neighborhood without checking the site daily.
- **Real estate aggregators** — mirror PropertyPro categories into a broader Nigerian property search index.
- **Market researchers** — compare rental and sale prices across cities and property types from a single data pull.
- **Property management companies** — benchmark their own asking rents against what else is listed in the same neighborhood.
- **Developers and agents** — scan a category for sold or newly listed comparables before pricing a new unit.

### How it works

The actor reads PropertyPro's own listing data as rendered on the category or search page, the same data the site uses to populate its results grid, so price and bedroom count come back as clean numbers instead of needing regex cleanup on scraped text. It follows PropertyPro's own pagination until it reaches the configured `maxItems`, requesting one page at a time so a small `maxItems` value (sampling a category) finishes faster than a full sweep.

### Input configuration

**Sweep a for-sale category (Lagos houses):**

```json
{
  "startUrls": ["https://propertypro.ng/property-for-sale/house/in/lagos"],
  "maxItems": 50
}
```

**For-rent category (Lagos flats and apartments):**

```json
{
  "startUrls": ["https://propertypro.ng/property-for-rent/flats-apartments/in/lagos"],
  "maxItems": 30
}
```

**Combine sale and rent in one run:**

```json
{
  "startUrls": [
    "https://propertypro.ng/property-for-sale/house/in/lagos",
    "https://propertypro.ng/property-for-rent/flats-apartments/in/lagos"
  ],
  "maxItems": 100
}
```

### Output sample

Real output from a live run against `propertypro.ng/property-for-sale/house/in/lagos`:

```json
[
  {
    "title": "3 bedroom Terraced Duplex, House in Lekki Lagos | Terraced Duplex, House for sale in Lekki | Terraced Duplex, House in Lekki | 3 bedroom",
    "url": "https://propertypro.ng/property/3-bedroom-house-for-sale-ajah-lekki-lagos-6QHQX",
    "price": 130000000,
    "currency": "NGN",
    "bedrooms": 3,
    "description": "3 bedroom Terraced Duplex, House for sale in Lekki Lagos. Buy 3 bedroom Terraced Duplex, House for sale at ₦130,000,000. Spacious 3 bedroom terrace duplex in Lekki Lagos is a Terraced Duplex, House.",
    "image": "https://images.propertypro.ng/large/spacious-3-bedroom-terrace-duplex-f6WkrmsGV5j4K5O4zvS4.jpg"
  },
  {
    "title": "2 bedroom Flat Apartment in Lekki Phase 1 Lekki Lagos | Flat Apartment for rent in Lekki | Flat Apartment in Lekki | 2 bedroom",
    "url": "https://propertypro.ng/property/2-bedroom-flat-apartment-for-rent-lekki-phase-1-lekki-lagos-7QFFF",
    "price": 10000000,
    "currency": "NGN",
    "bedrooms": 2,
    "description": "2 bedroom Flat Apartment for rent in Lekki Phase 1 Lekki Lagos. Rent 2 bedroom Flat Apartment for rent at ₦10,000,000/year.",
    "image": "https://images.propertypro.ng/large/2bedroom-apartment-2VOrBC44Aj6wh2vSDGXP.jpeg"
  }
]
```

### Key output fields

| Field | Type | Description |
|---|---|---|
| `title` | string | Listing headline as published on PropertyPro |
| `url` | string | Canonical PropertyPro.ng URL for the listing |
| `price` | integer | Asking price (sale) or annual rent (rental listings) |
| `currency` | string | Always `NGN` |
| `bedrooms` | integer | Bedroom count |
| `description` | string | Full listing description text |
| `image` | string | URL of the listing's primary photo |

### Pricing

Pay-per-event, charged only for listings actually returned:

| Event | Price |
|---|---|
| Listing scraped | $0.002 per listing |

At $0.002/listing, 1,000 listings cost $2.00.

### What makes this richer than the competition

Two other PropertyPro.ng scrapers are live on the Apify Store. `kawsar/propertypro-property-extractor` charges $0.00699 per result at the Free tier, about 3.5x this actor's $0.002/listing for the same site. `igolaizola/propertypro-scraper` ("PropertyPro Scraper - Nigeria Real Estate Listings") covers the same site without a published price comparison point, but like this actor accepts both sale and rental categories. At $0.002/listing this actor is the cheapest PropertyPro.ng option currently published.

### Notes & limitations

- Only fields PropertyPro itself displays on the listing-page grid are returned; the actor does not open each listing's individual detail page, so agent phone numbers and exact street address are not included.
- `price` is the number as shown on the page: a sale asking price, or an annual rent figure for rental listings. The actor does not normalize rent to a monthly figure.
- Results reflect the live site at run time; PropertyPro listings are added and removed continuously, so two runs minutes apart can return a slightly different mix.
- `maxItems` caps the total across all `startUrls` combined, not per URL.
- Some listing titles on PropertyPro repeat the same information two or three times (a quirk of how the site generates its headline text); this actor passes the title through as published rather than rewriting it, so the output matches exactly what a buyer sees on the site.
- Land, commercial and shortlet categories use the same URL pattern as the residential sale and rent categories tested here, but field availability (bedrooms in particular) depends on what PropertyPro itself publishes for that property type.

### FAQ

**Does this need a PropertyPro account or login?**
No. All fields come from the public listing-page grid; no login or cookies are required.

**Can I scrape rental listings, not just sales?**
Yes. Point `startUrls` at any `property-for-rent` category page the same way you would a `property-for-sale` page.

**How do I target a specific state or city?**
Browse propertypro.ng for the state, city and property type you want, then copy that category or search-result URL into `startUrls`.

**Does it include the agent's phone number?**
No, only what PropertyPro shows on the listing grid itself (title, price, bedrooms, description, photo). Contact details require visiting the individual listing page on the site.

**Can I run this on a schedule to track new listings?**
Yes, scheduling the actor daily against the same category URL and diffing by listing `url` is a common way to spot new listings as they're published.

**Can I combine multiple states or cities in one run?**
Yes. Pass an array of category URLs in `startUrls`, one per state, city or property type you want to cover, and the `maxItems` cap applies to the combined total.

**Why does `price` look like an annual figure for some rental listings?**
PropertyPro itself lists most rentals by annual rent rather than monthly, which is standard practice in the Nigerian rental market. The actor returns the number exactly as PropertyPro shows it.

### For AI Agents & LLM Apps

This actor is available over the Apify MCP server (`mcp.apify.com`) for direct use from Claude, Cursor or any MCP-compatible agent, and over the plain REST API for scripted pipelines.

Synchronous call that returns dataset items directly, no polling required:

```bash
curl "https://api.apify.com/v2/acts/gio21~propertypro-ng-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"startUrls": ["https://propertypro.ng/property-for-sale/house/in/lagos"], "maxItems": 30}'
```

### Disclaimer

This actor is not affiliated with, endorsed by, or sponsored by PropertyPro.ng or its operator. "PropertyPro" is a trademark of its respective owner. The actor only collects data that is publicly visible on propertypro.ng listing pages at the time of the run.

### SEO Keywords

PropertyPro Nigeria scraper, PropertyPro.ng API, Nigeria real estate data, Lagos property listings scraper, Nigeria rental listings scraper.

# Actor input Schema

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

One or more propertypro.ng listing-page URLs, e.g. https://propertypro.ng/property-for-sale/house/in/lagos

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

Maximum number of listings to return in total across all start URLs.

## Actor input object example

```json
{
  "startUrls": [
    "https://propertypro.ng/property-for-sale/house/in/lagos"
  ],
  "maxItems": 30
}
```

# 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 = {
    "startUrls": [
        "https://propertypro.ng/property-for-sale/house/in/lagos"
    ],
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("gio21/propertypro-ng-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 = {
    "startUrls": ["https://propertypro.ng/property-for-sale/house/in/lagos"],
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("gio21/propertypro-ng-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 '{
  "startUrls": [
    "https://propertypro.ng/property-for-sale/house/in/lagos"
  ],
  "maxItems": 30
}' |
apify call gio21/propertypro-ng-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gio21/propertypro-ng-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/niiG5dMQK5tAVXF8Y/builds/DOFN5W6ekoZdf52Pd/openapi.json
