# MyJobMag Jobs Scraper (`parsebird/myjobmag-jobs-scraper`) Actor

Scrape job listings from MyJobMag in Nigeria, Ghana, Kenya, South Africa and the UK: titles, companies, locations, job fields, qualifications, experience, salaries, descriptions and how to apply.

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

## Pricing

from $0.79 / 1,000 jobs

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

### MyJobMag Jobs Scraper

**MyJobMag Jobs Scraper** extracts job listings from [MyJobMag](https://www.myjobmag.com/jobs) in Nigeria, Ghana, Kenya, South Africa, and the United Kingdom. You get the job title, company, location, job field, qualification, experience, salary, full description, and how to apply as clean JSON, CSV, or Excel.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search five MyJobMag country sites by keyword, location, job field, and education, and get 30 fields per job, including the full description, application email addresses and links, company details, and posting and closing dates.
</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/myjobmag-jobs-scraper. Scrapes job listings from MyJobMag job boards in Nigeria (myjobmag.com), Ghana (myjobmagghana.com), Kenya (myjobmag.co.ke), South Africa (myjobmag.co.za) and the UK (myjobmag.co.uk). Call via ApifyClient: client.actor("parsebird/myjobmag-jobs-scraper").call(run_input={"country": "NG", "keyword": "software engineer", "location": "Lagos", "field": "IT", "education": "Bachelor", "maxPages": 5, "maxResults": 100}). Inputs: country (string, NG | GH | KE | ZA | UK, default NG), keyword (string, job title, skill or company), location (string, a state, region or city MyJobMag lists for that country, e.g. Lagos, Accra, Nairobi, Gauteng, London), field (string, MyJobMag job field; short forms like IT, HR, engineering are matched), education (string, e.g. BA/BSc/HND, Bachelors, Masters, OND, PhD; common words are matched), maxPages (integer, result pages of about 18 jobs, default 5, 0 = no limit), maxResults (integer, default 100, 0 = no limit), proxyConfiguration (object, optional). Output fields per job: title, listingTitle, pageHeader, companyName, companyUrl, brandLogo, employmentType, educationRequired, experienceRequired, experienceMonths, location, city, jobField, industry, salaryRange, datePosted, deadline, validThrough, summary, description, companyDescription, applicationMethod, applicationLinks, applicationEmails, sourceUrl, vacancyIndex, vacancyCount, country, countryName, scrapedAt. Pricing: pay per job saved. Full API spec: https://apify.com/parsebird/myjobmag-jobs-scraper/api. Get your token: https://console.apify.com/settings/integrations.
```

### What is MyJobMag Jobs Scraper?

[MyJobMag](https://www.myjobmag.com) is a job board with separate sites for Nigeria, Ghana, Kenya, South Africa, and the United Kingdom. When we checked in October 2026, MyJobMag's search listed **34,390 jobs in Nigeria**, **33,492 in South Africa**, and **12,035 in Kenya**.

**MyJobMag Jobs Scraper** turns MyJobMag job listings into a dataset. Pick a country, add a keyword or filters, and run. It's a simple **MyJobMag API alternative**: you don't need an account, an API key, or any code.

- 🌍 **Five countries.** Nigeria, Ghana, Kenya, South Africa, and the UK, each on its own MyJobMag site.
- 🔎 **Search and filters.** Keyword, location, job field, and education, combined the same way as on MyJobMag.
- 🧠 **Smart filter matching.** Each country uses its own names for fields and qualifications. Type "IT" or "Bachelor" and the Actor picks the matching MyJobMag value, like "ICT / Computer" or "BA/BSc/HND".
- 🛑 **No silent misses.** MyJobMag ignores filter values it doesn't know and shows all jobs instead. The Actor stops and lists the valid values, so you never pay for unfiltered results.
- 📄 **Full job details.** Opens every job to get the description, qualification, experience, job type, salary range when listed, and closing date.
- ✉️ **How to apply.** The application instructions plus the email addresses and links found in them.
- 📅 **Scheduling and monitoring.** Run daily with [Apify Schedules](https://docs.apify.com/platform/schedules) to collect new jobs as they're posted.
- 🔌 **API and integrations.** Use the [Apify API](https://docs.apify.com/api/v2), or send jobs to Google Sheets, Zapier, Make, Slack, or webhooks with [Apify integrations](https://docs.apify.com/platform/integrations).

### What data can you extract from MyJobMag?

| Field | Description |
|-------|-------------|
| `title` / `listingTitle` / `pageHeader` | Job title, the title shown in search results, and the page heading |
| `companyName` / `companyUrl` / `brandLogo` | Hiring company, its MyJobMag page, and logo |
| `employmentType` | Full Time, Part Time, Contract, Internship, and others |
| `educationRequired` / `experienceRequired` / `experienceMonths` | Qualification and experience, as listed |
| `location` / `city` | State, region, or city |
| `jobField` / `industry` | MyJobMag job field and company industry |
| `salaryRange` | Salary, when the employer lists it |
| `datePosted` / `deadline` / `validThrough` | Posting date and closing date |
| `summary` / `description` | Short summary from the search results and the full description as plain text |
| `companyDescription` | About the company |
| `applicationMethod` / `applicationEmails` / `applicationLinks` | How to apply, with the email addresses and links in it |
| `sourceUrl` / `vacancyIndex` / `vacancyCount` | Job page, and the job's position when one page lists several vacancies |
| `country` / `countryName` / `scrapedAt` | Site the job came from, and when it was collected |

Some fields are only filled when the job lists them, like salary, deadline, and city.

### How to scrape MyJobMag jobs

1. Open [MyJobMag Jobs Scraper](https://apify.com/parsebird/myjobmag-jobs-scraper) on Apify Store and click **Try for free**.
2. Pick a **Country**.
3. Enter a **Keyword**, like `accountant` or `software engineer`, or leave it empty for the newest jobs.
4. Optionally add a **Location**, **Job field**, or **Education** filter.
5. Set **Max result pages** and **Max jobs**.
6. Click **Start** and wait for the run to finish.
7. Download the jobs as JSON, CSV, Excel, XML, or HTML from the **Output** tab, or read them with the API.

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

MyJobMag Jobs Scraper uses **pay-per-event** pricing. You pay for each job saved to the dataset. Compute costs are included in the event price.

| Event | Free | Bronze | Silver | Gold |
|-------|------|--------|--------|------|
| `job-scraped` (per job) | $0.00099 | $0.00089 | $0.00079 | $0.00079 |
| Per 1,000 jobs | **$0.99** | **$0.89** | **$0.79** | **$0.79** |

For example, 100 jobs cost about $0.10 on the Free plan, and 1,000 jobs cost $0.99. You can set a maximum cost per run in Apify Console, and the Actor stops when it's reached.

### Input

See the [Input tab](https://apify.com/parsebird/myjobmag-jobs-scraper/input-schema) for the full form.

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `country` | string | No | `NG` | `NG` Nigeria, `GH` Ghana, `KE` Kenya, `ZA` South Africa, `UK` United Kingdom |
| `keyword` | string | No | — | Job title, skill, or company. Empty = newest jobs |
| `location` | string | No | — | A location MyJobMag lists for that country, like `Lagos`, `Accra`, `Nairobi`, `Gauteng`, `London` |
| `field` | string | No | — | Job field, like `ICT / Computer`, `Banking`, `IT`, `HR` |
| `education` | string | No | — | Qualification, like `BA/BSc/HND`, `Bachelors`, `Masters`, `OND`, `PhD` |
| `maxPages` | integer | No | `5` | Result pages to read (about 18 jobs each). `0` = no limit |
| `maxResults` | integer | No | `100` | Jobs to save. `0` = no limit |
| `proxyConfiguration` | object | No | none | Not needed for MyJobMag |

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

### Output example

Each job is one row in the dataset. Long text is shortened here.

```json
{
    "title": "Senior Software Engineer (.Net) / C# Developer",
    "listingTitle": "Senior Software Engineer (.Net) / C# Developer at Advansio Interactive",
    "pageHeader": "Senior Software Engineer (.Net) / C# Developer at Advansio Interactive",
    "companyName": "Advansio Interactive",
    "companyUrl": "https://www.myjobmag.com/jobs-at/advansio-interactive",
    "brandLogo": "https://www.myjobmag.com/company_logo/136050646_Advansio Interactive.png",
    "employmentType": "Full Time",
    "educationRequired": "BA/BSc/HND",
    "experienceRequired": "6 - 8 years",
    "experienceMonths": 72,
    "location": "Lagos",
    "city": "Lagos",
    "jobField": "ICT / Computer",
    "industry": "Banking / Financial Services",
    "salaryRange": null,
    "datePosted": "2026-09-29T19:32:43+01:00",
    "deadline": null,
    "validThrough": "2026-10-13T00:00:00+0000",
    "summary": "Job Summary\nWe are looking to hire a skilled Senior.NET / C# Developer to join our growing engineering team.\nKey responsibilities\nDesign, develop, and maintain scalable backend system",
    "description": "Job Summary\n- We are looking to hire a skilled Senior.NET / C# Developer to join our growing engineering team.\n\nKey responsibilities\n- Design, develop, and maintain scalable backend systems and APIs.\n- Collaborate with f...",
    "companyDescription": "On some days, we say we are the financial technology company of the future. On other days, we say we are futuristic innovators. ...",
    "applicationMethod": "Interested and qualified candidates should send their CV to: hr@advansio.com using \"Application – Senior .NET / C# Developer\" as the subject of the mail.",
    "applicationLinks": [],
    "applicationEmails": ["hr@advansio.com"],
    "sourceUrl": "https://www.myjobmag.com/job/senior-software-engineer-net-c-developer-advansio-interactive",
    "vacancyIndex": 1,
    "vacancyCount": 1,
    "country": "NG",
    "countryName": "Nigeria",
    "scrapedAt": "2026-10-10T00:55:39Z"
}
```

### Use the MyJobMag Jobs Scraper API

Call the Actor from your own code with the [Apify API client](https://docs.apify.com/api/client/python). Find your token in [Apify Console → Settings → Integrations](https://console.apify.com/settings/integrations).

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/myjobmag-jobs-scraper").call(run_input={
    "country": "KE",
    "keyword": "accountant",
    "location": "Nairobi",
    "maxResults": 200,
})

for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["companyName"], job["applicationEmails"])
```

**JavaScript**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/myjobmag-jobs-scraper').call({
    country: 'ZA',
    field: 'Banking',
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((job) => console.log(job.title, job.location, job.datePosted));
```

You can also start runs over plain HTTP from the [API tab](https://apify.com/parsebird/myjobmag-jobs-scraper/api), or connect the Actor to AI agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Use cases

- **Job alerts and aggregators.** Collect new jobs daily and feed them to your own job site, newsletter, or Telegram or WhatsApp channel.
- **Recruitment research.** See which companies are hiring for a role, in which locations, and what they ask for.
- **Labour market analysis.** Track demand by job field, qualification, and experience level in Nigeria, Ghana, Kenya, and South Africa.
- **Lead generation.** Find companies that are actively hiring, with their application emails and websites.
- **Salary research.** Collect salary ranges where employers publish them.

### How it works

1. The Actor opens the MyJobMag site for your country and checks your location, field, and education against that site's own values.
2. It reads the search result pages and opens each job page for the full details.
3. In October 2026, MyJobMag's search returned no results on the Ghana and UK sites, even though both sites list jobs. There the Actor reads MyJobMag's category pages instead and matches your keyword and other filters against each job. Only matching jobs are saved and charged.
4. Each job is saved once per run.

### FAQ

**Do I need a MyJobMag account?**
No. The Actor only reads public job pages that anyone can open.

**Why did my run stop with "is not a location"?**
MyJobMag only filters by the locations, fields, and qualifications in its own lists, and silently shows all jobs for anything else. To avoid charging you for unfiltered jobs, the Actor stops and lists the valid values. For example, Nigeria uses states like `Lagos` and `Rivers`, so a neighbourhood like `Ikeja` isn't accepted.

**How many jobs can I get?**
Up to every job MyJobMag shows for your search. Set **Max result pages** and **Max jobs** to `0` for no limit. In our October 2026 test, 1,000 Nigerian jobs took about a minute and a half.

**How does keyword search work in Ghana and the UK?**
Because MyJobMag's own search returned nothing on those two sites in our October 2026 tests, the Actor checks each job title and summary for your keyword instead. The scan stops at **Max result pages**, so raise it to look through more jobs.

**Why are some fields empty?**
Employers don't always list a salary, deadline, or experience. Some older job pages also have less structured data, so `experienceMonths` and `validThrough` can be empty.

**Can I schedule runs or export to Google Sheets?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) for recurring runs and [integrations](https://docs.apify.com/platform/integrations) for Google Sheets, Zapier, Make, Slack, and webhooks.

**Something is missing or broken?**
Open an issue on the [Issues tab](https://apify.com/parsebird/myjobmag-jobs-scraper/issues). Feedback and feature requests are welcome there too.

### Is it legal to scrape MyJobMag?

The Actor collects only public job listings that MyJobMag shows to every visitor. It doesn't log in or access any account data. Job posts can include names, email addresses, and phone numbers of recruiters, so follow data protection laws like Nigeria's NDPA, Ghana's Data Protection Act, Kenya's Data Protection Act, South Africa's POPIA, and the UK GDPR when you store or contact them. Read more in Apify's blog post [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

### Other job scrapers

| Actor | What it does |
|-------|--------------|
| [Indeed Jobs Scraper](https://apify.com/parsebird/indeed-jobs-scraper) | Scrape Indeed job listings |
| [LinkedIn Jobs Scraper](https://apify.com/parsebird/linkedin-jobs-scraper) | Scrape LinkedIn job postings |
| [Totaljobs Scraper](https://apify.com/parsebird/totaljobs-scraper) | Scrape UK jobs from Totaljobs |
| [Jora Jobs Scraper](https://apify.com/parsebird/jora-jobs-scraper) | Scrape Jora jobs in Australia, New Zealand, Singapore, and more |
| [Hiring.cafe Jobs Scraper](https://apify.com/parsebird/hiring-cafe-scraper) | Search Hiring.cafe jobs with 20+ filters |
| [EURES Jobs Scraper](https://apify.com/parsebird/eures-jobs-scraper) | Scrape European job vacancies from EURES |

# Changelog

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

# Actor input Schema

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

Which MyJobMag site to search.

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

Job title, skill, or company name, like "software engineer" or "MTN". Leave empty to get the newest jobs.

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

State, region, or city as listed on MyJobMag for that country, like "Lagos", "Accra", "Nairobi", "Gauteng" or "London". The run stops and lists valid values if MyJobMag doesn't have it.

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

Job field, like "ICT / Computer", "Banking" or "Medical / Healthcare". Short forms like "IT", "HR" or "engineering" are matched to MyJobMag's field names.

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

Qualification, like "BA/BSc/HND", "Bachelors", "Masters", "OND" or "PhD". Each country uses its own names; common words like "Bachelor" are matched for you.

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

Stop after this many search result pages (about 18 jobs each). Set 0 for no limit.

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

Stop after saving this many jobs. Set 0 for no limit.

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

MyJobMag works without a proxy. Add one only if you need requests to come from a specific network.

## Actor input object example

```json
{
  "country": "NG",
  "keyword": "software engineer",
  "maxPages": 2,
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": 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",
    "keyword": "software engineer",
    "maxPages": 2,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/myjobmag-jobs-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",
    "keyword": "software engineer",
    "maxPages": 2,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/myjobmag-jobs-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",
  "keyword": "software engineer",
  "maxPages": 2,
  "maxResults": 20
}' |
apify call parsebird/myjobmag-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/myjobmag-jobs-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/B3yULmfAzc46l18df/builds/qJbMAveKd0vIzNJ1C/openapi.json
