# Jiji Listings Scraper (`piotrv1001/jiji-listings-scraper`) Actor

The Jiji Listings Scraper extracts marketplace listings from Jiji across Nigeria, Kenya, Ghana, Tanzania, and Uganda, capturing titles, prices, attributes, images, locations, demand signals, seller profiles, and contact details — ideal for price tracking, market research, and lead generation.

- **URL**: https://apify.com/piotrv1001/jiji-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product listings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## 🌍 Jiji Listings Scraper

Easily extract listings from **Jiji**, Africa's biggest online marketplace. The **Jiji Listings Scraper** collects structured data about products, vehicles, property, electronics, and more from **5 countries** — Nigeria (jiji.ng), Kenya (jiji.co.ke), Ghana (jiji.com.gh), Tanzania (jiji.co.tz), and Uganda (jiji.ug) — so you can run price tracking, market analysis, and lead generation at scale.

Running on the [Apify platform](https://apify.com), you also get API access, scheduling, integrations (Google Sheets, webhooks, databases), and monitoring out of the box.

### ✨ Features

- 🌐 **5 African marketplaces in one scraper**: Nigeria, Kenya, Ghana, Tanzania, and Uganda — just pick a country.
- 🏷️ **Rich listing data**: title, price, location, category, attributes (make, model, condition, RAM, mileage…), images, and listing URL.
- 🔍 **Flexible targeting**: scrape by category, keyword search, region, and price range — or combine them.
- 📈 **Demand signals** (with item details enabled): view counts, favorites, and exact posting dates — perfect for market research.
- 👤 **Seller insights** (with item details enabled): seller name, shop URL, number of ads, feedback count, verification labels, response time — and the seller's **phone number** when available.
- 💸 **Pay only for what you scrape**: cheap shallow listings by default, full item details only when you turn them on.

### 🛠️ How It Works

1. **Pick a country** – Choose which Jiji marketplace to scrape (Nigeria by default).
2. **Choose what to scrape** – Enter a category (e.g. `cars`), a search query (e.g. `macbook pro`), or both. Optionally filter by region and price range.
3. **Set the limit** – Use **Max items** to control how many listings you get.
4. **Run the scraper** – Get structured JSON data in minutes. Download it as JSON, CSV, Excel, or HTML, or fetch it via API.

Want deeper data? Enable **Scrape full item details** to get complete descriptions, all attributes, demand signals, posting dates, and seller profiles.

### ⚙️ Input

| Field | Description | Default |
|---|---|---|
| Country | Marketplace to scrape: `ng`, `ke`, `gh`, `tz`, `ug` | `ng` (Nigeria) |
| Category | Category slug from the website URL, e.g. `cars` or `computers-and-laptops` (full URL also works) | `cars` |
| Search query | Keyword search, e.g. `macbook pro` | — |
| Region | Region slug, e.g. `lagos` | — |
| Min/Max price | Price range filter in local currency | — |
| Max items | Maximum number of listings to scrape | `50` |
| Scrape full item details | Fetch complete details, demand signals, and seller info for every listing | `false` |

### 📊 Sample Output Data

```json
{
    "id": 53248080,
    "title": "Jeep Wrangler Willys Sport 2021 Gray",
    "description": "Jeep Wrangler 2020 model is available for inspection just like brand new accident free just call...",
    "price": 66000000,
    "priceText": "₦ 66,000,000",
    "region": "Central Business District",
    "regionParent": "Abuja (FCT)",
    "category": "Cars",
    "attributes": {
        "Condition": "Foreign Used",
        "Transmission": "Automatic",
        "Mileage": "59000 km"
    },
    "image": "https://pictures-nigeria.jijistatic.net/198771226.webp",
    "imagesCount": 11,
    "isVerifiedSeller": true,
    "url": "https://jiji.ng/central-business-district/cars/jeep-wrangler-willys-sport-2021-gray.html",
    "country": "ng"
}
````

With **Scrape full item details** enabled, each item additionally includes:

```json
{
    "viewsCount": 514,
    "favoritesCount": 10,
    "dateCreated": "Thu, 28 May 2026 19:59:24 GMT",
    "phone": "2348086865618",
    "seller": {
        "name": "EU REALITY SOLUTIONS",
        "url": "https://jiji.ng/shop/eurealitysolutions",
        "advertsCount": 17,
        "feedbackCount": 1,
        "memberSince": "5 y 8 m",
        "lastSeen": "10 hours ago",
        "isPremium": true,
        "labels": ["1+ years on Jiji"],
        "responseTime": "Typically replies within minutes"
    }
}
```

### 📋 Data Fields

| Field | Description |
|---|---|
| `title`, `description` | Listing title and description text |
| `price`, `priceText` | Numeric price and formatted price in local currency |
| `region`, `regionParent`, `regionText` | Location of the listing |
| `category`, `categorySlug` | Category info |
| `attributes` | All listing attributes (condition, make, model, RAM, mileage, …) |
| `image`, `images`, `imagesCount` | Photos of the listed item |
| `url` | Direct link to the listing |
| `viewsCount`, `favoritesCount` | Demand signals (details mode) |
| `dateCreated`, `dateModerated` | Exact posting timestamps (details mode) |
| `phone` | Seller phone number when publicly available (details mode) |
| `seller` | Seller profile: name, shop URL, ads count, feedback, labels (details mode) |

### 💰 How much does it cost to scrape Jiji?

The Actor uses transparent **pay-per-result** pricing — you only pay for the data you actually get:

| Event | Price |
|---|---|
| Product listing | **$0.002** per listing |
| Item detail | **$0.005** per item |

Examples: 1,000 shallow listings cost **$2.00**; 1,000 listings with full details, demand signals, and seller info cost **$5.00**. Apify's free plan includes $5 of platform credit every month, which is enough to try the scraper out properly.

### 💡 Use Cases

- **Price intelligence** – Track vehicle, electronics, or property prices across African markets.
- **Market research** – Use view/favorite counts and posting dates to spot demand trends.
- **Lead generation** – Collect seller and dealer contact info in your niche.
- **Resale arbitrage** – Compare prices across Nigeria, Kenya, Ghana, Tanzania, and Uganda.
- **Data feeds** – Schedule recurring runs and pipe fresh listings into your own app or spreadsheet.

### 🎯 Tips for Best Results

- **Listing-only mode is ~2.5x cheaper** and already includes price, attributes, images, and location. Enable item details only when you need descriptions, demand signals, or seller contacts.
- A single category query can reach roughly **24,000 listings**; to scrape an entire large category, split your runs by region or price range.
- Combine the category and search query inputs to search within a category for the most precise results.
- Use the **Schedule** feature on Apify to monitor new listings daily or hourly.

### ❓ FAQ

**Is it legal to scrape Jiji?**
This scraper only collects publicly available data. However, you should ensure your use of the data complies with applicable laws and the website's terms of service. Personal data (such as seller phone numbers) may be subject to data-protection regulations — make sure you have a legitimate basis for processing it.

**Why don't I see results for Ethiopia (jiji.et)?**
Currently the scraper supports Nigeria, Kenya, Ghana, Tanzania, and Uganda.

**Something not working?**
Open an issue on the Actor's **Issues** tab and we'll look into it promptly. Need a custom solution or extra fields? Get in touch!

# Actor input Schema

## `country` (type: `string`):

Which Jiji marketplace to scrape.

## `categorySlug` (type: `string`):

Category slug from the website URL, e.g. <code>cars</code> for jiji.ng/cars or <code>computers-and-laptops</code>. You can also paste the full category URL. Leave empty to scrape across all categories.

## `searchQuery` (type: `string`):

Keyword search, e.g. <code>macbook pro</code>. Can be combined with a category to search within it.

## `regionSlug` (type: `string`):

Optional region slug to filter results, e.g. <code>lagos</code> or <code>abuja</code> (as it appears in website URLs).

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

Only include listings priced at or above this value (in local currency).

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

Only include listings priced at or below this value (in local currency).

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

Maximum number of listings to scrape.

## `scrapeItemDetails` (type: `boolean`):

Fetch the full detail of every listing - complete description, all attributes, view & favorite counts, exact posting dates, seller profile, and seller phone number when available. Slower and more expensive (one extra request per listing).

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

Residential proxies from the marketplace's own country are required to access the site. The proxy country is matched to your selected country automatically - you normally don't need to change this.

## Actor input object example

```json
{
  "country": "ng",
  "categorySlug": "cars",
  "maxItems": 50,
  "scrapeItemDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "categorySlug": "cars",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/jiji-listings-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 = {
    "categorySlug": "cars",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/jiji-listings-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categorySlug": "cars",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/jiji-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=piotrv1001/jiji-listings-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Jiji Listings Scraper",
        "description": "The Jiji Listings Scraper extracts marketplace listings from Jiji across Nigeria, Kenya, Ghana, Tanzania, and Uganda, capturing titles, prices, attributes, images, locations, demand signals, seller profiles, and contact details — ideal for price tracking, market research, and lead generation.",
        "version": "0.0",
        "x-build-id": "8LJtdtMNekTc1qwcx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~jiji-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-jiji-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/piotrv1001~jiji-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-jiji-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/piotrv1001~jiji-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-jiji-listings-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "country": {
                        "title": "Country",
                        "enum": [
                            "ng",
                            "ke",
                            "gh",
                            "tz",
                            "ug"
                        ],
                        "type": "string",
                        "description": "Which Jiji marketplace to scrape.",
                        "default": "ng"
                    },
                    "categorySlug": {
                        "title": "Category",
                        "type": "string",
                        "description": "Category slug from the website URL, e.g. <code>cars</code> for jiji.ng/cars or <code>computers-and-laptops</code>. You can also paste the full category URL. Leave empty to scrape across all categories."
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword search, e.g. <code>macbook pro</code>. Can be combined with a category to search within it."
                    },
                    "regionSlug": {
                        "title": "Region",
                        "type": "string",
                        "description": "Optional region slug to filter results, e.g. <code>lagos</code> or <code>abuja</code> (as it appears in website URLs)."
                    },
                    "priceMin": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or above this value (in local currency)."
                    },
                    "priceMax": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings priced at or below this value (in local currency)."
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape.",
                        "default": 50
                    },
                    "scrapeItemDetails": {
                        "title": "Scrape full item details",
                        "type": "boolean",
                        "description": "Fetch the full detail of every listing - complete description, all attributes, view & favorite counts, exact posting dates, seller profile, and seller phone number when available. Slower and more expensive (one extra request per listing).",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxies from the marketplace's own country are required to access the site. The proxy country is matched to your selected country automatically - you normally don't need to change this.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
