# Jobberman Scraper (`solidcode/jobberman-scraper`) Actor

\[💰 $0.9 / 1K] Scrape job listings from Jobberman, Nigeria's largest job board. Get title, company, location, work type, job function, experience level, salary & posted date. Filter by keyword, location, function & more, with optional full descriptions.

- **URL**: https://apify.com/solidcode/jobberman-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 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 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

## Jobberman Scraper

Pull job listings from Jobberman — Nigeria's largest job board — at scale, with title, company, location, work type, job function, experience level, salary, posted date, and the full job description on every posting. Search by keyword, stack the site's own multi-select filters, or paste ready-made search URLs. Built for recruiters, talent sourcers, and labor-market researchers who need structured Nigerian and West-African hiring data without copy-pasting listings one page at a time.

### Why This Scraper?

- **The full Jobberman filter set, mirrored 1:1** — 26 job functions, 11 location regions, 6 experience levels, and 4 work types, all multi-select, exactly matching the site's own search sidebar.
- **Multi-select fan-out that merges cleanly** — pick five job functions across three cities and the actor runs every combination for you, then removes duplicate postings by job ID so no listing appears twice.
- **Full job descriptions on demand** — flip `includeDetails` on to pull each posting's complete description as both formatted HTML and clean plain text, straight from the job page.
- **Structured salary in Naira** — the `salaryText` field captures the listed NGN range (e.g. "NGN 150,000 - 250,000 / Month") whenever an employer publishes it, with the pay period attached.
- **Both human and machine-readable dates** — every enriched posting carries `datePosted` plus an ISO-8601 `datePostedISO` and a `validThrough` expiry date, ready to sort, diff, or drop into a database.
- **Employer name, industry, and role category, separated** — `company`, `industry` (e.g. "Banking"), and `jobFunction` (e.g. "Software & Data") arrive as distinct fields, not mashed into one string.
- **Stable numeric job IDs** — every row carries Jobberman's own `jobId`, so you can dedupe across runs and track a posting from first appearance to expiry.
- **Paste-a-URL power mode** — hand the actor any jobberman.com search URL you built in the browser and it replays that exact filtered search, pagination and all.
- **Overshoot-not-trim result cap** — `maxResults` stops requesting new pages once your target is met but keeps the full final page, so you never lose the last few jobs to an off-by-one cut.

### Use Cases

**Recruitment & Talent Sourcing**
- Build fresh candidate-facing job feeds for a Nigerian staffing desk
- Track newly posted roles in Lagos, Abuja, and Port Harcourt every morning
- Assemble a shortlist of open Software & Data or Sales roles across the country
- Feed live openings into an applicant-tracking or job-distribution tool

**Labor-Market Research**
- Measure hiring volume by job function, region, and experience level over time
- Track which roles employers post most often across Nigeria's largest market
- Study the split between Full Time, Contract, Part Time, and graduate roles
- Build a longitudinal dataset of West-African white-collar demand

**Competitive Hiring Intelligence**
- Monitor which companies are hiring, for what, and at what pace
- Watch a competitor's open reqs by pulling their postings by employer name
- Spot expansion signals when a firm opens roles in a new region
- Benchmark job-description language and seniority requirements

**Salary Benchmarking**
- Collect published NGN salary ranges by role, seniority, and location
- Compare pay bands for the same job function across Lagos vs. the rest of Nigeria
- Track how often employers disclose salary in a given category
- Ground offer letters and pay reviews in current market data

**Job-Board Aggregation**
- Syndicate Jobberman listings into your own job-search product
- Keep an aggregator index current with scheduled incremental runs
- Enrich thin third-party feeds with full descriptions and structured fields
- Power a niche board focused on Nigerian or remote West-African roles

### Getting Started

#### Search by Keyword

The simplest run — one keyword, capped at 100 results:

```json
{
    "query": "developer",
    "maxResults": 100
}
````

#### Keyword + Location + Job Function

Narrow to specific regions and role categories. Selecting more than one value in a filter runs a separate search per value and merges the results:

```json
{
    "query": "accountant",
    "location": ["lagos", "abuja"],
    "jobFunction": ["accounting-auditing-finance"],
    "workType": ["full-time"],
    "maxResults": 300
}
```

#### Paste Your Own Search URLs

Already built a filtered search on jobberman.com? Paste the URLs and the actor replays them exactly:

```json
{
    "startUrls": [
        "https://www.jobberman.com/jobs/software-data/lagos",
        "https://www.jobberman.com/jobs/sales/abuja"
    ],
    "maxResults": 200
}
```

#### Full Enrichment Run

Pull complete descriptions, ISO dates, resolved company, industry, and structured salary for every matching job:

```json
{
    "query": "marketing manager",
    "location": ["lagos"],
    "experienceLevel": ["mid-level", "senior-level"],
    "sort": "featured",
    "includeDetails": true,
    "maxResults": 500
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | `"developer"` | Job title, role, or keyword to search for. Leave blank to collect all jobs matching the filters below. |
| `startUrls` | string\[] | `[]` | Advanced: paste jobberman.com search URLs built in the site's own search page. When provided, the keyword and filters are ignored for those URLs. |

#### Filters

Leave any filter empty to include everything. Selecting several values in one filter runs a search for each and merges the results.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `location` | string\[] | `[]` | Restrict to specific states or regions — 11 options including Lagos, Abuja, Port Harcourt & Rivers, Ibadan & Oyo, Remote, or All Nigeria. Empty covers the whole country. |
| `jobFunction` | string\[] | `[]` | Restrict to role categories — 26 options such as Software & Data, Sales, Marketing & Communications, Accounting Auditing & Finance, or Human Resources. |
| `workType` | string\[] | `[]` | Employment type: Full Time, Contract, Part Time, or Internship & Graduate. |
| `experienceLevel` | string\[] | `[]` | Seniority: No Experience, Internship & Graduate, Entry, Mid, Senior, or Executive level. |
| `sort` | select | `Latest` | Result order: Latest (newest first), Featured first, or Most popular. |

#### Output & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDetails` | boolean | `false` | Fetch each job's full description (HTML + plain text), exact posted date, resolved company, industry, and structured salary from its own page. Slower, since every job needs an extra page visit. |
| `maxResults` | integer | `100` | Hard cap on total jobs across all searches and URLs. Set to 0 for no cap. Stops requesting new pages once the cap is hit but keeps the full last page. |

### Output

Each job is one flat row. Here is a representative result with `includeDetails` enabled:

```json
{
    "jobId": "1054382",
    "title": "Senior Software Engineer",
    "company": "Andela",
    "location": "Lagos & Environs",
    "jobType": "Full Time",
    "jobFunction": "Software & Data",
    "industry": "ICT / Telecommunications",
    "experienceLevel": "5 years",
    "salaryText": "NGN 400,000 - 600,000 / Month",
    "datePosted": "2026-06-28",
    "datePostedISO": "2026-06-28T09:15:00+00:00",
    "validThrough": "2026-07-28",
    "descriptionText": "We are looking for a Senior Software Engineer to join our platform team. You will design and build scalable services...",
    "descriptionHtml": "<p>We are looking for a <strong>Senior Software Engineer</strong> to join our platform team...</p>",
    "url": "https://www.jobberman.com/listings/senior-software-engineer-1054382"
}
```

#### Core Fields

Present on every job, from the search results themselves — no `includeDetails` needed. Salary is the one sparse field here: it appears only when the employer publishes it.

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | Jobberman's stable numeric job identifier |
| `title` | string | Job position title |
| `company` | string | Hiring company name |
| `location` | string | State, region, or "Remote" |
| `jobType` | string | Employment type (Full Time, Contract, Part Time, Internship & Graduate) |
| `jobFunction` | string | Role category (e.g. Software & Data, Sales) |
| `salaryText` | string | Listed salary range in NGN, when the employer shows it |
| `url` | string | Direct link to the job posting |

#### Detail-Enriched Fields

These fields require `includeDetails: true` — each is read from the job's own page, so they are populated only on enrichment runs (a plain search run leaves them empty):

| Field | Type | Description |
|-------|------|-------------|
| `industry` | string | Employer's industry / sector (e.g. Banking, ICT) |
| `experienceLevel` | string | Required experience, as a friendly band (e.g. "5 years") |
| `datePosted` | string | Posted date (YYYY-MM-DD) |
| `datePostedISO` | string | Full ISO-8601 posted timestamp |
| `validThrough` | string | Date the posting expires (YYYY-MM-DD) |
| `descriptionText` | string | Full job description as clean plain text |
| `descriptionHtml` | string | Full job description as formatted HTML |

### Tips for Best Results

- **Start small to validate, then scale** — run with `maxResults` at 50–100 first to confirm the fields match your needs, then raise the cap for the full pull.
- **Leave details off for fast counts** — keep `includeDetails` off when you only need titles, companies, locations, and salaries; turn it on when you need full descriptions, industry, expiry dates, and structured salary.
- **Mind the multi-select fan-out** — every extra filter value multiplies the searches run (5 functions × 3 locations = 15 searches). It is thorough and de-duplicated, but budget your `maxResults` accordingly on wide combinations.
- **Replicate a browser search with `startUrls`** — apply filters visually on jobberman.com, copy the resulting URL, and paste it in; the actor reproduces that exact filtered search, pagination included.
- **Schedule with Latest sort for fresh jobs** — keep `sort` on Latest and run daily; new postings surface first, so a small `maxResults` reliably catches everything new.
- **Salary is published selectively** — many employers hide pay, so `salaryText` is populated on a minority of listings; there is no salary filter by design, since one would silently shrink your results.
- **Filter by experience to cut noise** — combine `experienceLevel` with a job function to target exactly the seniority you hire for, instead of wading through junior and executive roles together.

### Pricing

**From $0.90 per 1,000 results** — the most complete Jobberman dataset on the market, undercutting comparable actors. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.11 | $0.10 | $0.10 | $0.09 |
| 1,000 | $1.05 | $1.00 | $0.95 | $0.90 |
| 10,000 | $10.50 | $10.00 | $9.50 | $9.00 |
| 100,000 | $105.00 | $100.00 | $95.00 | $90.00 |

A "result" is any job row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, labor-market analysis, and job-board aggregation. You are responsible for complying with applicable laws and Jobberman's Terms of Service. Use collected data responsibly, respect candidate and employer privacy, and do not use it for spam, harassment, or any unlawful purpose.

# Actor input Schema

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

Job title, role, or keyword to search for (e.g. 'developer', 'accountant', 'sales manager'). Leave blank to collect all jobs matching the filters below.

## `location` (type: `array`):

Only include jobs in these states or regions. Leave empty to cover the whole country. Selecting more than one runs a separate search per location and combines the results. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.

## `jobFunction` (type: `array`):

Only include jobs in these role categories (e.g. Sales, Software & Data, Marketing). Leave empty to include all functions. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.

## `workType` (type: `array`):

Only include jobs with these employment types. Leave empty to include any. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.

## `experienceLevel` (type: `array`):

Only include jobs requiring these experience levels. Leave empty to include any. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.

## `sort` (type: `string`):

How to order results. 'Latest' (default) returns the newest postings first — best for scheduled runs that pick up new jobs.

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

Advanced: paste jobberman.com search URLs built in the site's own search page (e.g. https://www.jobberman.com/jobs/software-data/lagos). Use this when you've already applied filters in the site UI. When provided, the keyword and filters above are ignored for these URLs.

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

Off by default for fast results. Each job card already includes the title, company, location, work type, salary (when shown) and job function. Turn this on to also fetch the full job description (formatted HTML and plain text) plus the exact posted date, resolved company name and salary from each job's own page — this is slower, because every job needs an extra page visit, so expect longer runs on large searches.

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

Hard cap on the total number of jobs returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (the site holds roughly 4,000 active listings, and each result is billed at the per-result rate). The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots.

## Actor input object example

```json
{
  "query": "developer",
  "location": [],
  "jobFunction": [],
  "workType": [],
  "experienceLevel": [],
  "startUrls": [],
  "includeDetails": false,
  "maxResults": 100
}
```

# Actor output Schema

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

Table of jobs with the most useful fields — title, company, location, work type, salary, posted date, and link.

## `details` (type: `string`):

Full per-job rows with job function, experience level, salary, posted date, and (when enabled) the full 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": "developer",
    "location": [],
    "jobFunction": [],
    "workType": [],
    "experienceLevel": [],
    "sort": "",
    "startUrls": [],
    "includeDetails": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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": "developer",
    "location": [],
    "jobFunction": [],
    "workType": [],
    "experienceLevel": [],
    "sort": "",
    "startUrls": [],
    "includeDetails": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/jobberman-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 '{
  "query": "developer",
  "location": [],
  "jobFunction": [],
  "workType": [],
  "experienceLevel": [],
  "sort": "",
  "startUrls": [],
  "includeDetails": false,
  "maxResults": 100
}' |
apify call solidcode/jobberman-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Jobberman Scraper",
        "description": "[💰 $0.9 / 1K] Scrape job listings from Jobberman, Nigeria's largest job board. Get title, company, location, work type, job function, experience level, salary & posted date. Filter by keyword, location, function & more, with optional full descriptions.",
        "version": "1.0",
        "x-build-id": "wAjov674RVZYidXYJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~jobberman-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-jobberman-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/solidcode~jobberman-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-jobberman-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/solidcode~jobberman-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-jobberman-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": {
                    "query": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Job title, role, or keyword to search for (e.g. 'developer', 'accountant', 'sales manager'). Leave blank to collect all jobs matching the filters below."
                    },
                    "location": {
                        "title": "Location",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs in these states or regions. Leave empty to cover the whole country. Selecting more than one runs a separate search per location and combines the results. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "lagos",
                                "abuja",
                                "port-harcourt-rivers",
                                "ibadan-oyo",
                                "abeokuta-ogun",
                                "enugu",
                                "imo",
                                "maiduguri-borno",
                                "rest-nigeria",
                                "remote",
                                "nigeria"
                            ],
                            "enumTitles": [
                                "Lagos",
                                "Abuja",
                                "Port Harcourt & Rivers State",
                                "Ibadan & Oyo State",
                                "Abeokuta & Ogun State",
                                "Enugu",
                                "Imo",
                                "Maiduguri & Borno State",
                                "Rest of Nigeria",
                                "Remote (Work From Home)",
                                "All Nigeria"
                            ]
                        }
                    },
                    "jobFunction": {
                        "title": "Job Function",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs in these role categories (e.g. Sales, Software & Data, Marketing). Leave empty to include all functions. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "accounting-auditing-finance",
                                "admin-office",
                                "creative-design",
                                "building-architecture",
                                "consulting-strategy",
                                "customer-service-support",
                                "engineering-technology",
                                "farming-agriculture",
                                "food-services-catering",
                                "hospitality-leisure",
                                "software-data",
                                "legal-services",
                                "marketing-communications",
                                "medical-pharmaceutical",
                                "product-project-management",
                                "estate-agent-property-management",
                                "quality-control-assurance",
                                "human-resources",
                                "management-business-development",
                                "community-social-services",
                                "sales",
                                "supply-chain-procurement",
                                "research-teaching-training",
                                "trades-services",
                                "driver-transport-services",
                                "health-safety"
                            ],
                            "enumTitles": [
                                "Accounting, Auditing & Finance",
                                "Admin & Office",
                                "Creative & Design",
                                "Building & Architecture",
                                "Consulting & Strategy",
                                "Customer Service & Support",
                                "Engineering & Technology",
                                "Farming & Agriculture",
                                "Food Services & Catering",
                                "Hospitality & Leisure",
                                "Software & Data",
                                "Legal Services",
                                "Marketing & Communications",
                                "Medical & Pharmaceutical",
                                "Product & Project Management",
                                "Estate Agents & Property Management",
                                "Quality Control & Assurance",
                                "Human Resources",
                                "Management & Business Development",
                                "Community & Social Services",
                                "Sales",
                                "Supply Chain & Procurement",
                                "Research, Teaching & Training",
                                "Trades & Services",
                                "Driver & Transport Services",
                                "Health & Safety"
                            ]
                        }
                    },
                    "workType": {
                        "title": "Work Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs with these employment types. Leave empty to include any. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "full-time",
                                "contract",
                                "part-time",
                                "internship-graduate"
                            ],
                            "enumTitles": [
                                "Full Time",
                                "Contract",
                                "Part Time",
                                "Internship & Graduate"
                            ]
                        }
                    },
                    "experienceLevel": {
                        "title": "Experience Level",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs requiring these experience levels. Leave empty to include any. Choose from the dropdown — an unrecognized value is skipped and this filter is not applied.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "no-experience",
                                "graduate-trainee",
                                "entry-level",
                                "mid-level",
                                "senior-level",
                                "executive-level"
                            ],
                            "enumTitles": [
                                "No Experience",
                                "Internship & Graduate",
                                "Entry level",
                                "Mid level",
                                "Senior level",
                                "Executive level"
                            ]
                        }
                    },
                    "sort": {
                        "title": "Sort Order",
                        "enum": [
                            "",
                            "featured",
                            "popular"
                        ],
                        "type": "string",
                        "description": "How to order results. 'Latest' (default) returns the newest postings first — best for scheduled runs that pick up new jobs."
                    },
                    "startUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Advanced: paste jobberman.com search URLs built in the site's own search page (e.g. https://www.jobberman.com/jobs/software-data/lagos). Use this when you've already applied filters in the site UI. When provided, the keyword and filters above are ignored for these URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDetails": {
                        "title": "Fetch Full Job Details",
                        "type": "boolean",
                        "description": "Off by default for fast results. Each job card already includes the title, company, location, work type, salary (when shown) and job function. Turn this on to also fetch the full job description (formatted HTML and plain text) plus the exact posted date, resolved company name and salary from each job's own page — this is slower, because every job needs an extra page visit, so expect longer runs on large searches.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on the total number of jobs returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 for no cap (the site holds roughly 4,000 active listings, and each result is billed at the per-result rate). The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
