# MyJobMag Scraper (`nocodeninja_ng/myjobmag-scraper`) Actor

Scrapes job listings and detail vacancy data from regional MyJobMag websites.

- **URL**: https://apify.com/nocodeninja\_ng/myjobmag-scraper.md
- **Developed by:** [NoCodeNinja](https://apify.com/nocodeninja_ng) (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 $1.00 / 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.

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

## MyJobMag Scraper 🚀

**MyJobMag Scraper** is a high-performance Apify Actor designed to crawl regional MyJobMag job boards and extract comprehensive job listings and detailed vacancy information.

By leveraging `curl_cffi` with Chrome impersonation, the scraper easily navigates anti-bot protections, while `BeautifulSoup` ensures fast and precise HTML parsing.

***

### 🌟 Features

- **Multi-Regional Support:** Seamlessly scrape across multiple country-specific MyJobMag domains.
- **Smart Search Routing:** Automatically switches between targeted search mode (when filters are provided) and latest listings mode.
- **Advanced Filtering:** Refine results using keywords, locations, job fields, and education levels.
- **Deep Data Extraction:** Pulls granular data, including company branding, employment types, salary ranges, and application links.
- **Granular Controls:** Optimize your budget and runtime by enforcing strict `maxPages` and `maxResults` limits.
- **Proxy Integration:** Fully compatible with Apify Proxy configurations to maintain high anonymity.

***

### 🌍 Supported Countries

The actor dynamically routes requests based on the selected country ISO code:

| Code | Region | Base URL |
| --- | --- | --- |
| **NG** | Nigeria | `[https://www.myjobmag.com](https://www.myjobmag.com)` |
| **GH** | Ghana | `[https://www.myjobmagghana.com](https://www.myjobmagghana.com)` |
| **KE** | Kenya | `[https://www.myjobmag.co.ke](https://www.myjobmag.co.ke)` |
| **ZA** | South Africa | `[https://www.myjobmag.co.za](https://www.myjobmag.co.za)` |
| **UK** | United Kingdom | `[https://www.myjobmag.co.uk](https://www.myjobmag.co.uk)` |

***

### 📥 Input Settings

The actor accepts a JSON object with the following configuration properties:

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `country` | `string` | **Yes** | `"NG"` | Supported values: `NG`, `GH`, `KE`, `ZA`, `UK`. |
| `keyword` | `string` | No | `""` | Search keyword for job titles or skills. |
| `location` | `string` | No | `""` | Geographic location filter (e.g., `"Lagos"`). |
| `field` | `string` | No | `""` | Job field or professional category. |
| `education` | `string` | No | `""` | Minimum education requirement filter. |
| `maxPages` | `integer` | **Yes** | `5` | Maximum number of listing pages to pagination through (Range: `1` - `100`). |
| `maxResults` | `integer` | No | `100` | Maximum number of dataset items to save before stopping early. |
| `proxyConfiguration` | `object` | No | `{"useApifyProxy": true}` | Apify proxy settings to manage IP rotation. |

***

### 📤 Output Structure

The scraper outputs structured data directly to your Apify Dataset. Below are the key fields extracted from each vacancy:

- **Job Meta:** `title`, `listingTitle`, `pageHeader`, `summary`
- **Company Details:** `companyName`, `brandLogo` (URL)
- **Job Requirements:** `employmentType`, `educationRequired`, `experienceRequired`
- **Location & Category:** `location`, `jobField`, `salaryRange`
- **Source & Application:** `sourceUrl`, `applicationMethod` (links or instructions), `vacancyIndex`
- **Context:** `country`

***

### 💡 How It Works & Developer Notes

> 📑 **Multi-Vacancy Pages:** Some job detail pages on MyJobMag bundle multiple job openings together. When this happens, the actor splits them into separate records and tracks them using the `vacancyIndex` field.

- **Execution Logic:** If any filter (`keyword`, `location`, `field`, or `education`) is provided, the scraper targets the MyJobMag search endpoint. If all are left blank, it defaults to capturing the fresher, latest job listings.
- **Early Exit:** The actor respects both page limits and results limits. Whichever threshold is hit first will safely terminate the run.
- **Fail-safes:** The `country` input is fully normalized. Passing an unsupported country code will safely fallback to `NG`.

***

### 🛠️ Example Input Configuration

```json
{
  "country": "NG",
  "keyword": "software engineer",
  "location": "Lagos",
  "field": "IT",
  "education": "Bachelor",
  "maxPages": 5,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}

```

# Actor input Schema

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

MyJobMag regional website to scrape.

## `keyword` (type: `string`):

Search keyword.

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

Location search filter.

## `field` (type: `string`):

Job field search filter.

## `education` (type: `string`):

Education search filter.

## `maxPages` (type: `integer`):

Maximum number of search result pages to scrape.

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

Maximum number of dataset items to save before stopping.

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

Proxy settings for the Actor.

## Actor input object example

```json
{
  "country": "NG",
  "keyword": "",
  "location": "",
  "field": "",
  "education": "",
  "maxPages": 5,
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Link to the default dataset items containing extracted vacancy records.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nocodeninja_ng/myjobmag-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("nocodeninja_ng/myjobmag-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 '{}' |
apify call nocodeninja_ng/myjobmag-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Gd3WgOPKv3HWnNGfX/builds/cTmPivYOa0hU3x1cu/openapi.json
