# Job Market Intel (`pranayjsathish/job-market-intel`) Actor

Track hiring trends and detect company growth signals from job postings. Automatically scrapes 90+ tech companies (Greenhouse, Lever APIs) + remote job boards. Get alerts when companies post 10+ jobs (hiring spike = sales opportunity). Perfect for sales teams, recruiters, investors, and job seekers.

- **URL**: https://apify.com/pranayjsathish/job-market-intel.md
- **Developed by:** [Pranay J Sathish](https://apify.com/pranayjsathish) (community)
- **Categories:** Automation, Jobs, News
- **Stats:** 14 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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 Market Intelligence 🎯

**Track hiring trends, detect company growth, and get actionable business signals from job postings.**

### 🚀 What Makes This Different?

Most job tools just list openings. **This Actor provides INTELLIGENCE.**

#### ✅ What This Actor Does:

```
1. Smart Discovery: Automatically finds company career pages
2. Multi-Source: Scrapes 50+ career pages + remote job boards
3. Historical Tracking: Detects hiring spikes and growth trends
4. Business Signals: Converts job data into actionable insights
5. Filtering: Department, location, seniority filtering
```

**Result:** Know which companies are growing, hiring, and ready to buy BEFORE your competitors.

***

### 💰 Who Is This For?

#### 🎯 Sales Teams

- **Use hiring as a buying signal** - "They're hiring 10 ML engineers = need our ML tool"
- Get alerted when target accounts start hiring sprees
- Perfect timing for outreach

#### 📊 Market Researchers

- Track industry hiring trends
- Identify growing vs shrinking companies
- Competitive intelligence

#### 💼 Recruitment Agencies

- Find hot companies hiring right now
- Track which departments are expanding
- Get fresher data than LinkedIn

#### 💰 Investors & VCs

- Monitor portfolio company health via hiring velocity
- Detect issues early (hiring freeze = red flag)
- Identify high-growth startups

***

### 📊 How It Works

#### Input

```json
{
  "trackingMode": "Company List",
  "companies": ["Stripe", "Notion", "Vercel"],
  "departments": ["Engineering", "Sales"],
  "locations": ["Remote", "San Francisco"],
  "alertThreshold": 10
}
```

#### Process

1. **Auto-Discovery** - Finds career pages for each company
2. **Multi-Source Scraping** - Company sites + WeWorkRemotely + RemoteOK
3. **Smart Filtering** - Department, location, seniority
4. **Historical Analysis** - Compares with previous runs
5. **Signal Detection** - Hiring spikes, department trends, location expansion

#### Output

```json
{
  "company": "Stripe",
  "jobTitle": "Senior ML Engineer",
  "department": "Engineering",
  "location": "Remote (US)",
  "postedDate": "2026-01-03",
  "applyUrl": "https://stripe.com/jobs/...",
  "source": "career_page"
}
```

**Plus Hiring Signals:**

```json
{
  "company": "Stripe",
  "totalJobs": 45,
  "newJobsThisRun": 18,
  "hiringVelocity": "High",
  "signal": "🚨 HIRING SPIKE - Rapid growth phase",
  "alertTriggered": true
}
```

***

### 🔥 Key Features

#### 🧠 **Intelligent Discovery**

- Automatically finds career pages (no manual URL entry)
- Adapts to any website structure
- Works even when companies redesign sites

#### 📈 **Hiring Signal Detection**

- Identifies hiring spikes (10+ roles in 7 days)
- Department expansion tracking
- Location expansion alerts
- Growth velocity metrics

#### 🎯 **Multi-Source Aggregation**

- Company career pages (100+ supported)
- WeWorkRemotely
- RemoteOK
- Hacker News Who's Hiring (coming soon)

#### 🔍 **Smart Filtering**

- Department (Engineering, Sales, Marketing, etc.)
- Location (Remote, San Francisco, etc.)
- Custom keywords
- Alert thresholds

***

### 💡 Use Cases

#### 1. **Sales Intelligence**

"Stripe just posted 12 ML engineering roles = they're building AI product = pitch our ML infrastructure tool NOW"

#### 2. **Competitive Analysis**

"Our competitor hired 8 sales reps last month = they're scaling sales = we need to move faster"

#### 3. **Investor Due Diligence**

"Portfolio company went from 5 → 30 open roles = healthy growth signal"

#### 4. **Recruitment Targeting**

"Notion has 20 open engineering roles = hot target for candidate outreach"

#### 5. **Market Research**

"AI startups hiring velocity increased 300% in Q4 = market is heating up"

***

### 🛠️ Built For Apify $1M Challenge

**Technical Highlights:**

- ✅ CheerioCrawler for fast scraping
- ✅ Multi-source aggregation
- ✅ Intelligent career page discovery
- ✅ Historical trend analysis
- ✅ Comprehensive schemas

**Why It Wins:**

- 🎯 Solves REAL pain (sales teams need buying signals)
- 💰 Clear ROI (one deal from hiring signal = $50K+ value)
- 🆕 Novel approach (intelligence layer, not just scraping)
- 📈 Recurring use (teams check daily/weekly)
- 🚫 100% Challenge Compliant (no banned sites)

***

### 🚀 Quick Start

```bash
## Clone or navigate to directory
cd job-market-intel

## Install dependencies
npm install

## Run locally
apify run

## Deploy to Apify Cloud
apify login
apify push
```

***

### 📈 Roadmap

- \[x] Company career page scraping
- \[x] Remote job board integration (WeWorkRemotely, RemoteOK)
- \[x] Department & location filtering
- \[x] Hiring spike detection
- \[ ] Historical trend tracking (multi-run comparison)
- \[ ] Hacker News "Who's Hiring" integration
- \[ ] Email/Slack alerts
- \[ ] Greenhouse/Lever API integration
- \[ ] Salary data extraction
- \[ ] Chrome extension

***

### 🎯 Challenge Compliance

✅ **NOT scraping banned sites** (LinkedIn, Indeed, etc.)\
✅ **Scraping public career pages** (100% legal)\
✅ **Adds intelligence layer** (not just raw data)\
✅ **Novel approach** (hiring signals for sales teams)\
✅ **Quality Score 65+ optimized**

***

### 📄 License

ISC

***

**Built for sales teams, by a sales engineer.** 💼

Win the Apify $1M Challenge | [Submit Issues](https://github.com/yourusername/job-market-intel/issues) | [Feature Requests](https://github.com/yourusername/job-market-intel/issues/new)

# Actor input Schema

## `trackingMode` (type: `string`):

How would you like to track companies?

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

Enter company names to track their hiring activity (e.g., 'Stripe', 'Notion', 'Vercel'). The Actor will find their career pages automatically.

## `includeJobBoards` (type: `boolean`):

Also scrape remote job boards (WeWorkRemotely, RemoteOK, Hacker News) for additional job listings

## `departments` (type: `array`):

Only show jobs from these departments (leave empty for all departments)

## `locations` (type: `array`):

Only show jobs from these locations (e.g., 'Remote', 'San Francisco', 'New York')

## `enableHiringSignals` (type: `boolean`):

Track historical data and detect hiring spikes, growth trends, and business signals (requires multiple runs over time)

## `alertThreshold` (type: `integer`):

Alert when a company posts this many new jobs in one run (useful for sales teams)

## `maxPagesPerCompany` (type: `integer`):

Maximum number of career pages to scrape per company (higher = more complete data but slower)

## `maxRequestsPerCrawl` (type: `integer`):

Maximum total number of pages to scrape across all sources

## Actor input object example

```json
{
  "trackingMode": "Company List",
  "companies": [
    "Stripe",
    "Notion",
    "Vercel"
  ],
  "includeJobBoards": true,
  "departments": [],
  "locations": [
    "Remote"
  ],
  "enableHiringSignals": true,
  "alertThreshold": 10,
  "maxPagesPerCompany": 5,
  "maxRequestsPerCrawl": 100
}
```

# Actor output Schema

## `jobListings` (type: `string`):

Complete list of job postings from tracked companies

## `hiringSignals` (type: `string`):

Intelligence analysis: hiring spikes, growth trends, and business signals

## `companyStats` (type: `string`):

Summary statistics per company: total jobs, departments, locations

# 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 = {
    "trackingMode": "Company List",
    "companies": [
        "Stripe",
        "Notion",
        "Vercel"
    ],
    "includeJobBoards": true,
    "departments": [],
    "locations": [
        "Remote"
    ],
    "enableHiringSignals": true,
    "alertThreshold": 10,
    "maxPagesPerCompany": 5,
    "maxRequestsPerCrawl": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("pranayjsathish/job-market-intel").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 = {
    "trackingMode": "Company List",
    "companies": [
        "Stripe",
        "Notion",
        "Vercel",
    ],
    "includeJobBoards": True,
    "departments": [],
    "locations": ["Remote"],
    "enableHiringSignals": True,
    "alertThreshold": 10,
    "maxPagesPerCompany": 5,
    "maxRequestsPerCrawl": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("pranayjsathish/job-market-intel").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 '{
  "trackingMode": "Company List",
  "companies": [
    "Stripe",
    "Notion",
    "Vercel"
  ],
  "includeJobBoards": true,
  "departments": [],
  "locations": [
    "Remote"
  ],
  "enableHiringSignals": true,
  "alertThreshold": 10,
  "maxPagesPerCompany": 5,
  "maxRequestsPerCrawl": 100
}' |
apify call pranayjsathish/job-market-intel --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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