# Jiji Listing Scraper (`parsebird/jiji-listing-scraper`) Actor

Scrape Jiji listings from Nigeria, Kenya, Ghana, Tanzania and Uganda: title, price, region, attributes, images, views, favorites and seller profile. Search any category. Export JSON, CSV, Excel or use the API.

- **URL**: https://apify.com/parsebird/jiji-listing-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

### Jiji Listing Scraper

**Jiji Listing Scraper** extracts listings from [Jiji](https://jiji.ng), the online classifieds marketplace, in Nigeria, Kenya, Ghana, Tanzania and Uganda. Get titles, prices, regions, attributes and photos, and optionally views, favorites, posting dates and seller profiles. No Jiji account or API key needed.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search Jiji cars, phones, property, jobs and any other category across 5 countries, filter by keyword, region and price range, and get up to 28 fields per listing, including demand signals and seller profiles.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/jiji-listing-scraper. Scrapes listings from Jiji marketplaces in Nigeria, Kenya, Ghana, Tanzania and Uganda without login. Call via ApifyClient: client.actor("parsebird/jiji-listing-scraper").call(run_input={"country": "ng", "categorySlug": "cars", "searchQuery": "toyota camry", "regionSlug": "lagos", "priceMax": 20000000, "maxItems": 200, "scrapeItemDetails": true}). Inputs (all optional): country ("ng" default | "ke" | "gh" | "tz" | "ug"), categorySlug (string, slug from a Jiji URL such as "cars" or "computers-and-laptops", or a full Jiji category URL; empty = all categories), searchQuery (string), regionSlug (string, such as "lagos" or "abuja"), priceMin and priceMax (integers, local currency), maxItems (integer, min 1, default 50), scrapeItemDetails (boolean, default false). Output: one dataset row per listing with id, guid, title, description, price (null when Jiji shows a range or text), priceText, pricePeriod, region, regionParent, regionSlug, regionText, category, categorySlug, categoryId, attributes (object), image, images, imagesCount, sellerId, isVerifiedSeller, url, country. With scrapeItemDetails also viewsCount, favoritesCount, dateCreated, dateModerated, phone (only when Jiji includes it) and seller (id, guid, name, url, advertsCount, feedbackCount, memberSince, lastSeen, isPremium, labels, responseTime). Pricing: pay per listing saved, higher rate with item details, plus a small start fee per run. Full API spec: https://apify.com/parsebird/jiji-listing-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is Jiji Listing Scraper?

**Jiji Listing Scraper** turns [Jiji](https://jiji.ng) search results into a dataset. Jiji is a classifieds marketplace where people and dealers sell cars, phones, laptops, property and more, with separate sites for [Nigeria](https://jiji.ng), [Kenya](https://jiji.co.ke), [Ghana](https://jiji.com.gh), [Tanzania](https://jiji.co.tz) and [Uganda](https://jiji.ug).

To try it, click **Start** with the prefilled input. It saves 50 car listings from Jiji Nigeria in seconds. Download the results as **JSON, CSV or Excel**, or read them with the [Apify API](https://docs.apify.com/api/v2). It works as a **Jiji API alternative** when you need listing data in a spreadsheet or a pipeline.

### What can Jiji Listing Scraper do?

- 🌍 **Scrape 5 Jiji marketplaces**: Nigeria, Kenya, Ghana, Tanzania and Uganda.
- 🗂️ **Browse any category** by its slug, such as `cars` or `mobile-phones`, or paste a full Jiji category URL and keep its filters.
- 🔎 **Search by keyword** across all of Jiji, or inside one category.
- 📍 **Filter by region and price**, using Jiji's own region slugs and the local currency.
- 📈 **Add item details** to get the full description, all attributes and photos, views, favorites, posting dates and the seller profile.

Because it runs on Apify, you also get:

- [Scheduling](https://docs.apify.com/platform/schedules) to track prices and new listings daily or weekly
- [API access](https://docs.apify.com/api/v2) with [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) clients
- [Integrations](https://docs.apify.com/platform/integrations) with Make, Zapier, Google Sheets, Slack and webhooks
- Export to JSON, CSV, Excel, XML and HTML

### What data can you extract from Jiji?

| Field | Description |
|-------|-------------|
| `id`, `guid` | Jiji's numeric and text listing IDs |
| `title`, `description` | Listing title and text. Without item details, the description is Jiji's short preview |
| `price`, `priceText` | Price as a number and as Jiji shows it, such as `KSh 3,800,000`. `price` is `null` when Jiji shows a range, as on many job ads |
| `pricePeriod` | Rental or salary period, such as `per annum` |
| `region`, `regionParent`, `regionSlug`, `regionText` | Where the listing is |
| `category`, `categorySlug`, `categoryId` | Jiji category |
| `attributes` | Category-specific details, such as Make, Model, Mileage, Bedrooms or Internal Storage |
| `image`, `images`, `imagesCount` | Main photo, photo URLs, and how many photos the listing has |
| `sellerId`, `isVerifiedSeller` | Seller ID, and whether the seller has Jiji's Verified ID label |
| `url`, `country` | Listing link and marketplace code |
| `viewsCount`, `favoritesCount` | Demand signals (item details only) |
| `dateCreated`, `dateModerated` | When the ad was posted and approved (item details only) |
| `seller` | Name, shop link, ad count, feedback count, time on Jiji, last seen, premium status, labels and typical response time (item details only) |
| `phone` | Seller phone number, only when Jiji includes it (item details only) |

Without item details, results include the first few photos at thumbnail size. With item details, `images` has every photo in full size.

### How to scrape Jiji step by step

1. Open [Jiji Listing Scraper](https://apify.com/parsebird/jiji-listing-scraper) and click **Try for free** to open it in Apify Console.
2. Pick a **Country**.
3. Enter a **Category** slug, a **Search query**, or both. Find the category slug in the Jiji URL: in `jiji.ng/mobile-phones` it is `mobile-phones`.
4. Optionally add a **Region** and a price range.
5. Set **Max items**, and turn on **Scrape full item details** if you need views, favorites and seller profiles.
6. Click **Start**, then download the results as JSON, CSV or Excel from the **Output** tab.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `country` | string | No | `ng` | `ng` Nigeria, `ke` Kenya, `gh` Ghana, `tz` Tanzania, `ug` Uganda |
| `categorySlug` | string | No | — | Category slug from a Jiji URL, or a full Jiji category URL. A URL sets the country and keeps its region and filters. Empty means all categories |
| `searchQuery` | string | No | — | Keywords, such as `macbook pro`. Combine with a category to search inside it |
| `regionSlug` | string | No | — | Region slug from a Jiji URL, such as `lagos`, `abuja` or `ikeja` |
| `priceMin` | integer | No | — | Lowest price, in local currency |
| `priceMax` | integer | No | — | Highest price, in local currency |
| `maxItems` | integer | No | `50` | Most listings to save |
| `scrapeItemDetails` | boolean | No | `false` | Add full details and the seller profile to every listing |

Example input:

```json
{
    "country": "ng",
    "categorySlug": "cars",
    "searchQuery": "toyota camry",
    "regionSlug": "lagos",
    "priceMax": 20000000,
    "maxItems": 200,
    "scrapeItemDetails": true
}
```

### Output example

A Jiji Kenya car listing with **Scrape full item details** on (photo list trimmed):

```json
{
    "id": 24254978,
    "guid": "pCYltZABEzPGCKbHoNuW2Ne5",
    "title": "Honda CR-V Hybrid 2020 Pearl",
    "description": "2019 honda crv-hybrid,2000cc,113000km,automatic,leather interior,sunroof,powered tailgate.\narriving port of mombasa on 15th december",
    "price": 3800000,
    "priceText": "KSh 3,800,000",
    "pricePeriod": null,
    "region": "Ridgeways",
    "regionParent": "Nairobi",
    "regionSlug": "ridgeways",
    "regionText": "Nairobi, Ridgeways",
    "category": "Cars",
    "categorySlug": "cars",
    "categoryId": 29,
    "attributes": {
        "Condition": "Foreign Used",
        "Second Condition": ["No faults"],
        "Make": "Honda",
        "Model": "CR-V Hybrid",
        "Year of Manufacture": 2020,
        "Color": "Pearl",
        "Interior Color": "Brown",
        "Transmission": "Automatic",
        "Mileage": "113000 km",
        "Key Features": ["Xenon Lights", "Reverse Camera", "Leather Seats", "Cruise Control", "Alloy Wheels", "Sunroof"],
        "Registered Car": "No"
    },
    "image": "https://pictures-kenya.jijistatic.com/88900853_ODAwLTYwMC1mMjk2MmEwNzQ4.jpg",
    "images": [
        "https://pictures-kenya.jijistatic.com/88900853_ODAwLTYwMC1mMjk2MmEwNzQ4.jpg",
        "https://pictures-kenya.jijistatic.com/88900854_ODAwLTYwMC01YThjYWJkMmQ2.jpg"
    ],
    "imagesCount": 9,
    "sellerId": 1663540,
    "isVerifiedSeller": true,
    "url": "https://jiji.co.ke/ridgeways/cars/honda-cr-v-hybrid-2020-pearl-pCYltZABEzPGCKbHoNuW2Ne5.html",
    "country": "ke",
    "viewsCount": 212,
    "favoritesCount": 2,
    "dateCreated": "Thu, 22 Oct 2026 03:52:49 GMT",
    "dateModerated": "Thu, 22 Oct 2026 04:15:10 GMT",
    "phone": null,
    "seller": {
        "id": 1663540,
        "guid": "v8ZQmznqSFiSOHK98igAE0WO",
        "name": "Road iron motors",
        "url": "https://jiji.co.ke/sellerpage-v8ZQmznqSFiSOHK98igAE0WO",
        "advertsCount": 10,
        "feedbackCount": 14,
        "memberSince": "7 y 4 m",
        "lastSeen": "4 hours ago",
        "isPremium": true,
        "labels": ["5+ years on Jiji", "Verified ID"],
        "responseTime": "Replies within an hour"
    }
}
```

With item details off, a row has the fields up to `country`. `viewsCount`, `favoritesCount`, `dateCreated`, `dateModerated`, `phone` and `seller` come only with item details on. You can download the dataset in JSON, CSV, Excel, XML or HTML.

### How to use the Jiji API in Python and JavaScript

Use the [Apify API clients](https://docs.apify.com/api/client/python) to run the scraper from your own code. Get your API token in [Apify Console](https://console.apify.com/settings/integrations).

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("parsebird/jiji-listing-scraper").call(run_input={
    "country": "ke",
    "categorySlug": "cars",
    "regionSlug": "nairobi",
    "priceMax": 2000000,
    "maxItems": 100,
})

for listing in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(listing["title"], listing["priceText"], listing["regionText"], listing["url"])
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('parsebird/jiji-listing-scraper').call({
    country: 'ng',
    searchQuery: 'macbook pro',
    maxItems: 50,
    scrapeItemDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((listing) => console.log(listing.title, listing.priceText, listing.viewsCount, listing.seller?.name));
```

### Use cases

- **Track car prices** in Nigeria, Kenya, Ghana, Tanzania or Uganda by make, model and region.
- **Research the property market** with rents, sale prices, sizes and bedrooms by neighborhood.
- **Monitor competitors** by scheduling runs on a category and comparing prices and new stock.
- **Measure demand** using views and favorites on listings like yours.
- **Find dealers and shops** by ad count, verification, time on Jiji and response time.

### How does Jiji Listing Scraper work?

1. It turns your country, category, keyword, region and price range into the same search Jiji's own site runs.
2. It reads the results page by page, newest first, until it reaches **Max items** or the end of the results.
3. With item details on, it opens each listing and adds the full record and seller profile.
4. It saves each listing once, even when Jiji shows a promoted ad on several pages.
5. If a listing can't be opened, for example because it was just removed, the scraper keeps the result-card data and charges the lower listing price for that row.

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

Jiji Listing Scraper uses pay-per-event pricing. Compute and proxy costs are included in the event price.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| `listing-scraped`, per 1,000 | **$1.99** | **$1.79** | **$1.59** | **$1.39** |
| `detail-scraped`, per 1,000 | **$4.99** | **$4.49** | **$3.99** | **$3.49** |
| `apify-actor-start`, per run | $0.005 | $0.005 | $0.005 | $0.005 |

Each saved listing is one event: `listing-scraped` with item details off, or `detail-scraped` with item details on, which replaces the listing charge. On the Free tier, the prefilled run of 50 listings costs about $0.10, and 1,000 listings with full details cost about $4.99. Searches that match nothing only cost the start event.

To cap your spending, set a maximum cost per run in the run options. The run stops at that limit and keeps the listings it saved.

### Is it legal to scrape Jiji?

Jiji Listing Scraper only collects data that Jiji shows publicly, without logging in. Web scraping of public data is generally legal, but what you may do with the data depends on your purpose and your country. You can read more in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

Seller names and phone numbers can be personal data, protected by laws such as Nigeria's Data Protection Act, Kenya's Data Protection Act and the GDPR. Only collect them if you have a legitimate reason, don't use them for unsolicited marketing, and check Jiji's terms. Ask a lawyer if you are unsure. This section is not legal advice.

### Other scrapers you may like

- [Facebook Marketplace Scraper](https://apify.com/parsebird/facebook-marketplace-scraper): local listings from Facebook Marketplace
- [Craigslist Scraper](https://apify.com/parsebird/craigslist-scraper): classified ads from Craigslist
- [Kijiji.ca Scraper](https://apify.com/parsebird/kijiji-scraper): classifieds across Canada
- [Marktplaats Scraper](https://apify.com/parsebird/marktplaats-scraper): classifieds from the Netherlands
- [Daraz.pk Ecommerce Scraper](https://apify.com/parsebird/daraz-pk-ecommerce-scraper): products from Daraz Pakistan
- [AutoTrader.co.uk Scraper](https://apify.com/parsebird/autotrader-scraper): car listings from the UK

### FAQ

**Which Jiji countries are supported?**
Nigeria (jiji.ng), Kenya (jiji.co.ke), Ghana (jiji.com.gh), Tanzania (jiji.co.tz) and Uganda (jiji.ug).

**Where do I find a category or region slug?**
Open the category on Jiji and look at the URL. In `jiji.ng/lagos/cars`, the region slug is `lagos` and the category slug is `cars`. You can also paste the whole URL into **Category**. Broad regions like `lagos` include their neighborhoods, like `ikeja`.

**Why is `phone` often empty?**
Jiji includes the seller's number only in some responses, and the same listing can return it one time and not the next. In our November 2026 tests, one Kenya run returned a number on all 30 rows and one Nigeria run on none of 200. The scraper saves the number when Jiji sends it and doesn't retry to get it, so don't count on `phone` being filled.

**How many listings can I get from one search?**
Jiji serves up to 1,000 result pages of 20 listings for a search, so 20,000 listings at most. The scraper reads newest first. If a category has more, split it by region or price range and run each part. For example, Nigeria's `cars` category had about 92,000 listings in November 2026.

**Why is `price` empty on some listings?**
Some ads don't have one fixed price. Job ads often show a range, such as `₦ 80,000 - 100,000`. `priceText` always has what Jiji displays.

**Why did my run fail with "doesn't recognize this category or region"?**
Jiji didn't accept the slug. Copy it from a Jiji URL on the country you selected, because categories and regions differ between countries.

**Can I schedule recurring runs?**
Yes. Use [Apify schedules](https://docs.apify.com/platform/schedules) to run daily, weekly or at any interval.

**Can I use it with the API, Make or Zapier?**
Yes. Use the [API tab](https://apify.com/parsebird/jiji-listing-scraper/api) for the endpoint and code, or connect it through [Apify integrations](https://docs.apify.com/platform/integrations).

**Something doesn't work. What should I do?**
Open an issue in the [Issues tab](https://apify.com/parsebird/jiji-listing-scraper/issues) with your input and run link, and we'll look into it.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/jiji-listing-scraper/changelog.md

# Actor input Schema

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

Pick the Jiji marketplace to scrape.

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

Enter the category slug from a Jiji URL, such as <code>cars</code>, <code>mobile-phones</code> or <code>computers-and-laptops</code>. You can also paste a full category URL, which sets the country and keeps its filters. Leave empty to search all categories.

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

Enter keywords, such as <code>macbook pro</code>. Combine with a category to search inside it.

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

Enter the region slug as it appears in Jiji URLs, such as <code>lagos</code>, <code>abuja</code> or <code>ikeja</code>. Leave empty for the whole country.

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

Keep listings at or above this price, in the local currency.

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

Keep listings at or below this price, in the local currency.

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

Set the maximum number of listings to save.

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

Add the full description, all attributes and images, views, favorites, dates, seller phone when available, and seller profile to every listing. Each listing is then charged at the item detail price instead of the listing price.

## Actor input object example

```json
{
  "country": "ng",
  "categorySlug": "cars",
  "maxItems": 50,
  "scrapeItemDetails": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "country": "ng",
    "categorySlug": "cars",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/jiji-listing-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 = {
    "country": "ng",
    "categorySlug": "cars",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/jiji-listing-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 '{
  "country": "ng",
  "categorySlug": "cars",
  "maxItems": 50
}' |
apify call parsebird/jiji-listing-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/jiji-listing-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/4e6YXm6X3QiEOMlco/builds/lNp9D7xGCo1fmhQIK/openapi.json
