# Job Postings Analytics API - Labor Market Hiring Trends (`nabeelbaghoor/job-postings-analytics-api`) Actor

Rank job postings by top hiring companies, in-demand titles, skills, occupations and locations from a labor market dataset, filtered by date, title, company, skill and geography. Export ranked results with posting counts. Pay per result. Bring your own API key.

- **URL**: https://apify.com/nabeelbaghoor/job-postings-analytics-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Jobs, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$10.00 / 1,000 ranked 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

## Job Postings Analytics API - labor market hiring trends

**Job Postings Analytics API** turns a large labor market job postings dataset into ranked, structured insight. Pick a dimension to rank by - top hiring companies, most in-demand job titles, most requested skills, busiest occupations or locations - filter by date window, title, company, skill and geography, and export the ranked results with posting counts as JSON, CSV or Excel.

Bring your own API credentials and pay only for the ranked results you keep.

### Why use this actor?

- **Hiring demand rankings** - rank the top companies, titles, skills, occupations, cities or states by job posting volume for any filter.
- **Deduplicated counts** - rank by unique postings (deduplicated) or total postings.
- **Time windows** - constrain to a posting date range down to the month to track how demand shifts over time.
- **Precise filters** - narrow by job title, company, skill, city and state, or pass a raw filter for full control.
- **Pay per result** - you are charged only for the ranked results actually returned, up to 1,000 per run.
- **No proxies, no blocks** - data comes through a stable API, so runs are fast and reliable.

### Use cases

- **Labor market research** - measure demand for a role, skill or occupation across a region and time window.
- **Competitor hiring analysis** - see which companies are posting the most roles in your space.
- **Skills intelligence** - rank the most requested skills for a job title or occupation.
- **Talent sourcing strategy** - find the cities and states with the most demand for a role.
- **Workforce planning** - track hiring trends month over month to inform headcount and compensation decisions.

### Input

Configure everything from the visual editor. Example JSON input:

```json
{
  "facet": "company_name",
  "rankBy": "unique_postings",
  "startMonth": "2025-01",
  "endMonth": "2025-12",
  "titles": ["Data Engineer"],
  "cities": ["Seattle"],
  "maxResults": 100,
  "scope": "postings:us",
  "clientId": "YOUR_CLIENT_ID",
  "apiKey": "YOUR_CLIENT_SECRET"
}
```

For filter fields beyond the built-in ones, use the advanced filter:

```json
{
  "facet": "skills_name",
  "rankBy": "unique_postings",
  "rawFilter": { "naics": ["5415"] },
  "maxResults": 50,
  "clientId": "YOUR_CLIENT_ID",
  "apiKey": "YOUR_CLIENT_SECRET"
}
```

### Output

One clean JSON object per ranked result:

```json
{
  "name": "Amazon",
  "facet": "company_name",
  "rank_by": "unique_postings",
  "value": 12840,
  "unique_postings": 12840,
  "total_postings": 20110,
  "total_unique_postings": 458200
}
```

### Do I need an API key?

Yes. This actor calls a job postings analytics API on your behalf using the OAuth client credentials flow, which requires your own **client ID** and **client secret**. Add both in the input, set the **scope** to the job postings product your account is licensed for (for example a US job postings scope), and run. Your client secret is stored securely and never logged.

### Pay per result

You pay only for the ranked results the actor actually returns - no subscriptions, no minimums. Set **Maximum results** to cap each run's spend exactly.

### FAQ

#### What is the Job Postings Analytics API?

It is a labor market data API that aggregates job postings and returns ranked demand metrics. Instead of raw listings, it answers questions like which companies are hiring the most, which skills are most requested, and where demand is concentrated. This actor runs one ranking query and exports the ranked buckets with posting counts as JSON, CSV or Excel.

#### What can I rank by?

Company, job title, skill, occupation, city, state or SOC occupation. Each ranked bucket becomes one row, sorted by unique postings (deduplicated) or total postings.

#### What filters can I use?

A posting date window (start and end month), plus job titles, companies, skills, cities and states. For any other supported field, pass a raw filter object in the Advanced field.

#### Do I need credentials?

Yes. The API uses OAuth client credentials. You supply your own client ID and client secret and the scope your account is licensed for. The actor requests an access token automatically and caches it for the run.

#### How many results can I get per run?

Up to 1,000 ranked results per run. To go deeper, narrow the filter (by title, skill or geography) and run additional queries.

#### How much does it cost?

Pricing is pay-per-result: a small fixed amount per ranked result returned, plus standard Apify platform usage, plus your own API usage against your credentials. A query that matches nothing costs almost nothing.

#### Can I run this on a schedule?

Yes. Use Apify Schedules to run it monthly or weekly and connect the dataset to Zapier, Make, n8n, webhooks or the API to track hiring trends over time.

#### Is this legal?

The actor returns aggregated labor market analytics retrieved through a licensed API using your own credentials. It focuses on aggregated hiring demand, not personal data.

### Keyword map

job postings api, labor market data api, hiring trends api, job market analytics api, workforce data api, skills demand api, recruitment intelligence api, talent market data, job demand data api, occupation data api, company hiring data.

### Support and feedback

Found an issue or missing a filter? Open an issue in the **Issues** tab - it is monitored daily.

# Actor input Schema

## `facet` (type: `string`):

The dimension to rank job postings by. Each ranked bucket becomes one row - for example the top hiring companies, most in-demand job titles, or most requested skills for your filter.

## `rankBy` (type: `string`):

Which posting count to rank and sort by.

## `startMonth` (type: `string`):

Start of the posting date window, as YYYY-MM, e.g. `2025-01`. Leave blank for the provider default window.

## `endMonth` (type: `string`):

End of the posting date window, as YYYY-MM, e.g. `2025-12`. Leave blank for the provider default window.

## `titles` (type: `array`):

Restrict to postings with these job titles, e.g. `Data Engineer`, `Registered Nurse` (matches the `title_name` filter). Combined as OR.

## `companies` (type: `array`):

Restrict to postings from these companies, e.g. `Amazon`, `Deloitte` (matches the `company_name` filter). Combined as OR.

## `skills` (type: `array`):

Restrict to postings requiring these skills, e.g. `Python`, `Project Management` (matches the `skills_name` filter). Combined as OR.

## `cities` (type: `array`):

Restrict to postings in these cities, e.g. `Seattle`, `Austin` (matches the `city_name` filter). Combined as OR.

## `states` (type: `array`):

Restrict to postings in these states, e.g. `Washington`, `Texas` (matches the `state_name` filter). Combined as OR.

## `rawFilter` (type: `object`):

Power users: a raw filter object merged into the request, e.g. `{ "naics": ["5415"], "soc": ["15-1252"] }`. See the provider's job postings API documentation for all supported filter fields.

## `scope` (type: `string`):

OAuth scope for the job postings product your credentials are licensed for. Default `postings:us`. Use the region scope that matches your account (for example a global or country job postings scope).

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

Number of ranked buckets to return (1-1,000). You are charged per result returned.

## `clientId` (type: `string`):

Your OAuth client ID for the job postings API. Required.

## `apiKey` (type: `string`):

Your OAuth client secret for the job postings API. Required. Stored securely and never logged.

## Actor input object example

```json
{
  "facet": "company_name",
  "rankBy": "unique_postings",
  "scope": "postings:us",
  "maxResults": 100
}
```

# 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 = {
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/job-postings-analytics-api").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 = { "maxResults": 100 }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/job-postings-analytics-api").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 '{
  "maxResults": 100
}' |
apify call nabeelbaghoor/job-postings-analytics-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nabeelbaghoor/job-postings-analytics-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eShdGI6Lyf8tsNrI9/builds/HqL2PSEbjxdLHGeHS/openapi.json
