# Skills in Demand: What Employers Are Hiring For Now (`precious_bathmat/skills-in-demand`) Actor

Reads thousands of live job postings from seven public boards and returns one row per skill: how many employers want it, which companies, what seniority, what it appears alongside. Search a role to see the market for it. No API key, no login, no proxy.

- **URL**: https://apify.com/precious\_bathmat/skills-in-demand.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Jobs, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/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

## Skills in Demand: What Employers Are Hiring For Now

**Not a list of jobs — a list of skills, ranked by how many employers are asking for them today.** Type a role, get the skills behind it, who is hiring, at what level, and what each skill is asked for alongside.

Reads seven public job boards. No API key, no account, no proxy.

### What does this do?

Every job scraper hands you postings. Nobody needs 1,600 postings; they need the answer to "what does this market actually want?"

This Actor reads the postings, opens each one, and reports the market instead of the list.

```mermaid
flowchart LR
    A[Role or keyword] --> B[7 public job boards<br/>~1,700 live postings]
    B --> C[Read each posting:<br/>skills, level, pay]
    C --> D[One row per skill:<br/>demand, employers, co-skills]
```

### Who is it for?

| You are | You use it to |
|---|---|
| **Recruiters and sourcers** | Write a spec that matches the market, and see who else is hiring for it |
| **Course and bootcamp creators** | Choose a curriculum from what employers ask for, not from last year's syllabus |
| **Career changers and job seekers** | See the skill that keeps appearing next to the one you already have |
| **Analysts and journalists** | Quote real counts for "the most in-demand skills" instead of a vendor's press release |
| **Founders and hiring managers** | Benchmark your job ad against every other ad for the same role |
| **Content marketers** | Publish a skills report with live numbers behind it |

### What data do you get?

One row per skill:

| Field | Meaning |
|---|---|
| `skill`, `category` | The skill and what kind it is (language, cloud, data, design, marketing, process…) |
| `postings`, `sharePercent` | How many postings ask for it, and what share of the role's market that is |
| `topCompanies` | The employers asking for it most |
| `topLocations` | Where those postings are open |
| `seniorityMix`, `seniorPlusPercent` | Entry, mid, senior and lead split |
| `topCoSkills` | What it is asked for alongside, with percentages |
| `postingsWithPublishedPay`, `publishedPayPercent` | How many of those postings publish pay at all |
| `boards`, `sampleJobs` | Where the postings came from, and three to click |

Turn on **Also return every posting as a row** for a second table: title, company, board, level, the skills found in it, and any pay it published.

### Example: three roles, one run

A real run on 17 September 2026, 1,676 live postings, 26 seconds:

| Software engineer | Product manager | Data engineer |
|---|---|---|
| React 43.5% | Product Management 97.2% | SQL 68.2% |
| AWS 41.9% | Roadmapping 69.4% | Python 63.6% |
| TypeScript 38.7% | Agile 16.7% | ETL 54.5% |
| Kubernetes 37.1% | Customer Success 16.7% | AWS 50.0% |
| Observability 37.1% | **LLMs 15.3%** | Airflow 40.9% |

Two things jump out of that table: **Kubernetes and Observability appear in exactly the same 37% of engineering postings** and are each other's top co-skill, and **one in seven product manager ads now asks for LLMs**.

Seniority is in every row too: Kubernetes postings are 91% senior or above, Airflow only 56%.

### What this does not do, and why

**It does not report salaries.** Across these boards, pay is published on about **3%** of postings, and what is published mixes annual salaries with hourly contractor rates. A median built on that would be invented, so the skill rows report how many postings publish pay, and the actual figures stay on the postings themselves, annualised and labelled.

**It is a snapshot, not a trend line.** These are postings open right now. Schedule the Actor and compare runs to see movement.

**It reads remote-first boards**, so the picture is the remote and distributed market: strong on software, data, product, marketing, support and finance; thin on anything that needs a site.

### How it reads a posting

- Skills come from the **title and description only**. Board tags are ignored on purpose: RemoteOK auto-tags a junior payroll job with `excel`, `dev`, `marketing` and `sys admin`, and counting those turned every second posting into a Golang job.
- Ambiguous words are read from the **title alone**, where boilerplate cannot reach them. "Our recruitment process has four stages" is not a recruiting job; "swift response" is not the language.
- The language **Go** is tracked as `golang`, because a bare "go" matches every posting ever written. The same goes for "R".
- Add anything the dictionary misses with **Extra skills to track**.

### How to use it

1. Put one or more **roles** in, one per line. Leave it empty to analyse the whole market.
2. Optionally add **extra skills** of your own.
3. Raise **Ignore skills with fewer postings than** for a shorter, sharper table.
4. Run it. Seven boards and 1,700 postings take about 25 seconds.

### Pay-per-event pricing

| Event | Price |
|---|---|
| Role analysed | $0.05 |
| Posting analysed | $0.0005 |

Three roles across 156 matching postings: **$0.23**. The whole market, 1,676 postings: **$0.89**.

### Popular skill reports

- [Most In-Demand Skills Right Now, From Live Job Ads](https://apify.com/precious_bathmat/skills-in-demand/examples/most-in-demand-skills) — every posting on all seven boards
- [Software Engineer Skills Employers Ask For in 2026](https://apify.com/precious_bathmat/skills-in-demand/examples/software-engineer-skills) — "software engineer" postings
- [AI Engineer Skills: What the Job Ads Actually Ask For](https://apify.com/precious_bathmat/skills-in-demand/examples/ai-engineer-skills) — "ai engineer" postings
- [Data Engineer Skills in Demand: SQL, Python, ETL, Cloud](https://apify.com/precious_bathmat/skills-in-demand/examples/data-engineer-skills) — "data engineer" postings
- [Data Scientist Skills From Live Job Postings](https://apify.com/precious_bathmat/skills-in-demand/examples/data-scientist-skills) — "data scientist" postings
- [DevOps Engineer Skills: CI/CD, Kubernetes, Terraform](https://apify.com/precious_bathmat/skills-in-demand/examples/devops-engineer-skills) — "devops engineer" postings
- [Product Manager Skills From Live Job Ads](https://apify.com/precious_bathmat/skills-in-demand/examples/product-manager-skills) — "product manager" postings
- [Product Designer Skills: Figma, Wireframing, UX Research](https://apify.com/precious_bathmat/skills-in-demand/examples/product-designer-skills) — "product designer" postings
- [Account Executive Skills From Live Sales Job Ads](https://apify.com/precious_bathmat/skills-in-demand/examples/account-executive-skills) — "account executive" postings
- [Customer Success Skills From Live Job Postings](https://apify.com/precious_bathmat/skills-in-demand/examples/customer-success-skills) — "customer success" postings
- [Marketing Manager Skills From Live Job Ads](https://apify.com/precious_bathmat/skills-in-demand/examples/marketing-manager-skills) — "marketing manager" postings
- [Engineering Skills in Demand Across Every Engineer Role](https://apify.com/precious_bathmat/skills-in-demand/examples/engineering-skills-in-demand) — "engineer" postings
- [Design Skills in Demand: Figma, Wireframing, Adobe](https://apify.com/precious_bathmat/skills-in-demand/examples/design-skills-in-demand) — "designer" postings

Each page is this Actor with a different role. Open one, put your own role in, and run it.

# Actor input Schema

## `queries` (type: `array`):

A role or keyword per line, matched against posting titles: "data engineer", "product manager", "customer support". Every word has to appear, so "data engineer" also matches "Senior Data Engineer, Platform". Leave empty to analyse the whole market at once.

## `boards` (type: `array`):

Which public boards to read. All seven are keyless. We Work Remotely, Jobicy and RemoteOK carry the most postings.

## `extraSkills` (type: `array`):

Anything the built-in dictionary does not cover: a niche framework, a certification, your own product name. One per line, matched as a whole word.

## `minPostingsPerSkill` (type: `integer`):

Keeps one-off mentions out of the table. Raise it for a cleaner shortlist.

## `maxJobsPerQuery` (type: `integer`):

A cap on what a run costs. Postings are charged as they are analysed.

## `includeJobs` (type: `boolean`):

Adds a second table with one row per posting: title, company, board, location, the skills found in it and any pay it published.

## Actor input object example

```json
{
  "queries": [
    "data engineer",
    "product manager"
  ],
  "boards": [
    "WeWorkRemotely",
    "Jobicy",
    "RemoteOK",
    "WorkingNomads",
    "Arbeitnow",
    "Himalayas",
    "Remotive"
  ],
  "extraSkills": [
    "Webflow",
    "SAP",
    "Klaviyo"
  ],
  "minPostingsPerSkill": 3,
  "maxJobsPerQuery": 1000,
  "includeJobs": false
}
```

# Actor output Schema

## `skills` (type: `string`):

Every skill with its postings, employers, seniority mix and co-skills.

## `jobs` (type: `string`):

Every posting behind the numbers, when that option is on.

## `summary` (type: `string`):

How many postings were read per board, coverage, and the top skills.

# 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 = {
    "queries": [
        "data engineer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/skills-in-demand").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 = { "queries": ["data engineer"] }

# Run the Actor and wait for it to finish
run = client.actor("precious_bathmat/skills-in-demand").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 '{
  "queries": [
    "data engineer"
  ]
}' |
apify call precious_bathmat/skills-in-demand --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,precious_bathmat/skills-in-demand"
        }
    }
}
```

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/fXz5OgxA9JqaX1ml8/builds/YNMRgbMIqnIcb0Na6/openapi.json
