# Jobberman Scraper — Nigeria Jobs, Salary & Employers (`logiover/jobberman-scraper`) Actor

Scrape vacancies from Jobberman, Nigeria's largest job board: title, hiring company, location, employment type, advertised salary with a sortable numeric floor, category and the ad link. Keyless, no login. JSON, CSV or Excel.

- **URL**: https://apify.com/logiover/jobberman-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Jobberman Scraper — Nigeria Jobs, Salary & Employers

Export vacancies from **Jobberman**, Nigeria's largest job board — company, location, employment type and advertised salary — to JSON, CSV or Excel. Keyless, no login.

### What does Jobberman Scraper do?

Jobberman (ROAM Africa) renders its listings server-side, so this Actor parses the result cards directly and walks the pagination. No API key, no account, no cookies.

Each card carries three chips in one row — location, employment type and salary — and **their order is not fixed**. Worse, the salary chip is frequently the word "Confidential" rather than a figure. Reading those chips by position is exactly how a scraper ends up with "Full Time" sitting in a salary column. This Actor classifies each chip by its content: a currency or "Confidential" means salary, a known contract word means employment type, and whatever remains is the location. The result is that all three columns hold the right kind of value on every row.

Salaries are kept twice: the original label (`NGN 70,000 - 150,000`) and a sortable numeric floor, with a separate boolean marking the ads that hide pay.

### Who is it for?

- **Recruitment agencies** mapping who is hiring across Lagos, Abuja and the states.
- **Salary researchers** building Nigerian pay benchmarks by role and sector.
- **B2B sales teams** using hiring activity as a growth signal.
- **Job boards and aggregators** that need a Nigerian feed.
- **Development and labour-market analysts** measuring formal-sector demand.

### Use cases

- Build a pay benchmark for accountants or drivers across Nigerian states.
- List every company hiring in a category this week, with ad links.
- Measure what share of ads disclose pay versus mark it confidential.
- Track which sectors are expanding, month over month.
- Feed a niche board with fresh Nigerian listings.

### Why use this Actor?

- **Keyless** — nothing to sign up for.
- **17 structured fields**, with salary, location and contract type never mixed.
- **Sortable salary** plus a `salaryConfidential` flag for hidden pay.
- **Category included**, so demand can be sliced by sector.
- **Featured and easy-apply flags** straight from the card.
- **Honest columns** — a chip becomes a salary only when it carries a currency or says "Confidential".

### What data can you extract?

| Field | Type | Description |
|---|---|---|
| `jobId` | string | Jobberman listing slug |
| `title` | string | Job title |
| `jobUrl` | string | Public ad page |
| `companyName` | string | Hiring company (or "Anonymous Employer") |
| `location` | string | City or state |
| `employmentType` | string | Full Time, Contract, Internship … |
| `salaryLabel` | string | Salary exactly as advertised |
| `salaryFrom` | number | Numeric floor for sorting |
| `salaryConfidential` | boolean | Pay withheld by the employer |
| `currency` | string | NGN when a figure is present |
| `category` | string | Jobberman job category |
| `postedLabel` | string | Posting recency as shown |
| `isFeatured` | boolean | Paid featured placement |
| `easyApply` | boolean | One-click apply available |
| `country` | string | Nigeria |
| `source` | string | Always `jobberman` |
| `scrapedAt` | string | Run timestamp (ISO 8601) |

#### Example output

```json
{
  "jobId": "restaurant-chefcook-j65znr",
  "title": "Restaurant Chef/Cook",
  "jobUrl": "https://www.jobberman.com/listings/restaurant-chefcook-j65znr",
  "companyName": "Kings and Queens Dine",
  "location": "Abuja",
  "employmentType": "Full Time",
  "salaryLabel": "NGN 70,000 - 150,000",
  "salaryFrom": 70000,
  "salaryConfidential": false,
  "currency": "NGN",
  "category": "Food Services & Catering",
  "easyApply": true,
  "country": "Nigeria",
  "source": "jobberman"
}
```

### How to use it

1. Enter a keyword, or leave it empty to walk the full listing.
2. Optionally filter by location.
3. Switch on **Only ads with a salary figure** when building a benchmark.
4. Set **Maximum results** and run, then export JSON, CSV or Excel.

### Input example

```json
{
  "query": "sales",
  "location": "Lagos",
  "withSalaryOnly": true,
  "maxResults": 1000
}
```

### Notes and limits

- Roughly **3 in 4** ads carry a salary figure; the rest say "Confidential". Those rows keep `salaryLabel` but leave `salaryFrom` as `null`, with `salaryConfidential` set to `true`.
- Some employers post anonymously; `companyName` then reads "Anonymous Employer" as shown on the site.
- Jobberman renders 16 cards per page; the Actor stops when a page returns fewer, meaning the listing is exhausted.
- This Actor exports listing cards, not full descriptions — that is what keeps bulk runs cheap. Open `jobUrl` for the full text.
- You are responsible for how you use employer data.

### FAQ

**Do I need a Jobberman account?**
No. Listings are public and this Actor needs nothing from you.

**Why do some rows have no salary number?**
Because the employer marked pay as confidential. `salaryConfidential` tells you which.

**Is the company always real?**
Some ads are posted anonymously, which the site labels "Anonymous Employer". The field reflects the ad honestly rather than guessing.

**Can I filter by state?**
Yes, use the location input, e.g. "Lagos" or "Abuja".

**How am I charged?**
Pay per result — you pay for the vacancies delivered.

# Actor input Schema

## `query` (type: `string`):

Free-text search across Jobberman, e.g. "accountant", "driver" or "sales". Leave empty to walk the full listing.

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

Optional location filter, e.g. "Lagos", "Abuja" or "Rivers".

## `withSalaryOnly` (type: `boolean`):

Many Nigerian ads publish "Confidential" instead of pay. Switch this on to keep only ads with a real figure.

## `maxResults` (type: `integer`):

Stop after this many ads. Jobberman renders 16 cards per page and the Actor walks pages until the target is met.

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

Jobberman serves plain HTML; the default datacenter proxy is enough.

## Actor input object example

```json
{
  "query": "accountant",
  "withSalaryOnly": false,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobId` (type: `string`):

No description

## `title` (type: `string`):

No description

## `jobUrl` (type: `string`):

No description

## `companyName` (type: `string`):

No description

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

No description

## `employmentType` (type: `string`):

No description

## `salaryLabel` (type: `string`):

No description

## `salaryFrom` (type: `string`):

No description

## `salaryConfidential` (type: `string`):

No description

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

No description

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

No description

## `postedLabel` (type: `string`):

No description

## `isFeatured` (type: `string`):

No description

## `easyApply` (type: `string`):

No description

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

No description

## `source` (type: `string`):

No description

## `scrapedAt` (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 = {
    "query": "accountant",
    "location": "",
    "withSalaryOnly": false,
    "maxResults": 500,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/jobberman-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 = {
    "query": "accountant",
    "location": "",
    "withSalaryOnly": False,
    "maxResults": 500,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/jobberman-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 '{
  "query": "accountant",
  "location": "",
  "withSalaryOnly": false,
  "maxResults": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/jobberman-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/jobberman-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/BNS8zSrRVHDpIbUZu/builds/eWgiXOmr0N5hfkWNe/openapi.json
