# JobServe Real-Time Data | Live UK & US Jobs (`b2b_leads/jobserve-real-time-data`) Actor

Live JobServe job market intelligence: keyword job search across the UK and US, full job details, company hiring activity, and URL collection. Checkbox features — enable only what you need. Structured JSON streamed to your dataset in real time.

- **URL**: https://apify.com/b2b_leads/jobserve-real-time-data.md
- **Developed by:** [Emmanuel](https://apify.com/b2b_leads) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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/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

## JobServe Real-Time Data

Live JobServe job market intelligence for the UK and US: keyword job search, full job details, company hiring activity, and URL collection — streamed to your dataset as structured JSON in real time.

> **Free trial:** free Apify plans get **2 results per run**. Upgrade to a paid plan for unlimited exports.

### Who is it for?

- **Recruiters & sourcing teams** building candidate pipelines from live openings
- **Staffing agencies** tracking competitor hiring and client demand
- **Job boards & aggregators** keeping listings fresh
- **Market researchers** measuring hiring demand by skill, location, and employer
- **Sales teams** finding companies that are actively hiring (outreach triggers)
- **AI agents** answering "who is hiring for X right now?" with fresh data

### Use cases

1. **Candidate sourcing** — pull live Python / Java / PM roles in London with full descriptions.
2. **Hiring-demand tracking** — monitor how many contract vs permanent roles appear per skill weekly.
3. **Salary benchmarking** — collect advertised rates by title and location.
4. **Competitor watch** — track what specific employers or agencies are advertising.
5. **Outreach triggers** — fire a webhook to Slack/CRM the moment new matching jobs appear.
6. **AI-agent answers** — feed an agent live openings via the Apify MCP server.

### Features

| Checkbox | What you get |
|---|---|
| 🔍 Job Search (default on) | Live jobs by keyword, title, location, job type, posting age, radius, remote-only |
| 📦 Job Details | Full record for specific jobs by ID or URL |
| 🏢 Company Jobs | Live hiring activity per employer/agency name |
| 🔗 Scrape By URL | Any JobServe job or shared search-results URL, auto-detected |

**Enrich in place:** turn on *Enrich with full job details* and each search row keeps its place (`detailsFetched: true`) while gaining the full description — never a second row, never dropped.

### Input reference

| Field | Type | Default | Notes |
|---|---|---|---|
| `country` | select | `GB` | `GB` (UK) or `US` |
| `enableJobSearch` | checkbox | `true` | Primary discovery |
| `jobKeywords` | string list | `["python developer", "data engineer"]` | Required when Job Search is on (or set Job title) |
| `jobTitle` | text | `""` | e.g. `Senior Java Developer` |
| `jobLocation` | text | `London` | e.g. `Manchester`, `New York`; empty = nationwide |
| `jobType` | select | `any` | `any` / `permanent` / `contract` |
| `jobDaysBack` | select | `7` | `1` / `2` / `3` / `7` days |
| `radiusMiles` | number | `50` | 1–100, snapped to the closest option the site offers |
| `remoteOnly` | checkbox | `false` | Remote-working flags only |
| `jobsPerQuery` | number | `10` | 1–200 per keyword |
| `fetchJobDetails` | checkbox | `false` | Enrich rows in place (adds time per job) |
| `enableJobDetails` | checkbox | `false` | + `jobIds[]` / `jobUrls[]` |
| `enableCompanyJobs` | checkbox | `false` | + `companyNames[]`, `jobsPerCompany` (default 10) |
| `enableScrapeByUrl` | checkbox | `false` | + `scrapeUrls[]` |
| `webhookUrl` | text | `""` | Extra real-time push per record |
| `webhookFormat` | select | `json` | `json` (full record) / `slack` (message) |
| `proxyConfiguration` | proxy | Residential GB | Match the market region |

Empty input still runs a useful demo: Job Search on, `python developer` + `data engineer` in London, 10 jobs max.

### Output fields

Every row carries `featureType` (`job_search` | `job_details` | `company_jobs` | `scrape_by_url`), `scrapedAt`, and `url`, plus:

`job_id`, `job_url`, `title`, `company`, `company_url`, `location`, `salary`, `job_type`, `industry`, `snippet`, `description_text`, `description_html`, `posted_date`, `start_date`, `duration`, `reference`, `apply_url`, `agency_logo_url`, `search_keyword` / `company_query`, `position`, `detailsFetched`, `pageType` (URL rows).

Filter dataset views by `featureType` (see the OUTPUT tab: Overview, Search, Details, Company Jobs, Scrape By URL).

### Webhooks

Set `webhookUrl` (+ `webhookFormat`) and every saved row is also POSTed there:

- **JSON** — the full record object, ready for Zapier / Make / n8n / your own receiver.
- **Slack** — a compact hiring alert (`:briefcase: Title • Company • Location • Salary` + link).

Delivery is fire-and-forget: a failed push never stops the run or the dataset write.

### MCP / AI-agent usage

Run this Actor through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) so your agent can query live jobs conversationally.

Example question your agent can answer with it:

> *"Find live contract Python developer jobs in London posted in the last 3 days, with full descriptions and advertised rates."*

### FAQ

**Which proxies should I use?**
Residential proxies in the market country (GB for UK searches, US for US searches) give the most reliable results at scale. The default configuration already does this.

**How does the free trial work?**
Free Apify plans receive the first 2 results of a run, then the run finishes gracefully with an upgrade hint. Paid plans are uncapped.

**How fresh is the data?**
Every run collects live listings at that moment — titles, rates, and posting dates reflect what employers have advertised right now.

**Do I get the full job description?**
Enable *Enrich with full job details* (search/company rows, merged in place) or use *Job Details* / *Scrape By URL* for specific postings.

**Will partial results ever be dropped?**
No. Every discovered job is saved. If a full-details fetch fails for one row, the search card is still saved with a note in the logs.

# Actor input Schema

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

JobServe market to search. Affects listings and the recommended proxy country.

## `enableJobSearch` (type: `boolean`):

Live keyword search across JobServe — IT, engineering, finance, sales and more. On by default and prefilled so you can click Start and get results in seconds.

## `jobKeywords` (type: `array`):

One or more search terms, e.g. "python developer", "data engineer", "project manager". Required when Job Search is on (unless Job title is set).

## `jobTitle` (type: `string`):

Narrow results to a specific title, e.g. "Senior Java Developer".

## `jobLocation` (type: `string`):

City or region, e.g. "London", "Manchester", "New York". Leave empty to search nationwide.

## `jobType` (type: `string`):

Filter by contract type.

## `jobDaysBack` (type: `string`):

Only include jobs posted within this window.

## `radiusMiles` (type: `integer`):

Distance around the location (1–100). Snapped to the closest option the site offers. Ignored without a location.

## `remoteOnly` (type: `boolean`):

Only include jobs flagged with remote working.

## `jobsPerQuery` (type: `integer`):

Maximum jobs to return for each keyword (1–200). Default 10 — perfect for instant demo runs.

## `fetchJobDetails` (type: `boolean`):

When on, each search result stays ONE row (detailsFetched=true) but is enriched with the full job description and posting details. Adds a little extra time per job. When off, you get fast search cards with title, company, location, salary, and snippet. Every discovered job is always saved — never filtered out.

## `enableJobDetails` (type: `boolean`):

Fetch the full record for specific JobServe jobs by URL or job ID.

## `jobIds` (type: `array`):

JobServe job IDs (the code in jobid= links), e.g. A3C06B862BE0587BFF.

## `jobUrls` (type: `array`):

Full JobServe job URLs (detail pages or jobid links).

## `enableCompanyJobs` (type: `boolean`):

Track what a specific employer or agency is hiring for right now — keyword-matched hiring activity per company name.

## `companyNames` (type: `array`):

Employer or agency names to track, e.g. "GCS", "Accenture".

## `jobsPerCompany` (type: `integer`):

Maximum jobs to collect per company (1–200).

## `enableScrapeByUrl` (type: `boolean`):

Paste any JobServe URL — a job detail page or a shared search-results page.

## `scrapeUrls` (type: `array`):

Any JobServe job or search-results URL.

## `webhookUrl` (type: `string`):

Optional. Every record is always saved to the run dataset — this webhook is an ADDITIONAL real-time push. Each new row is also POSTed to this URL (Slack, Discord, Zapier, Make, n8n, custom hiring bot).

## `webhookFormat` (type: `string`):

json = full record object; slack = Slack-friendly message payload.

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

Residential proxy recommended. Match the country to the Market region above (GB by default).

## Actor input object example

```json
{
  "country": "GB",
  "enableJobSearch": true,
  "jobKeywords": [
    "python developer",
    "data engineer"
  ],
  "jobTitle": "",
  "jobLocation": "London",
  "jobType": "any",
  "jobDaysBack": "7",
  "radiusMiles": 50,
  "remoteOnly": false,
  "jobsPerQuery": 10,
  "fetchJobDetails": false,
  "enableJobDetails": false,
  "jobIds": [],
  "jobUrls": [],
  "enableCompanyJobs": false,
  "companyNames": [
    "GCS"
  ],
  "jobsPerCompany": 10,
  "enableScrapeByUrl": false,
  "scrapeUrls": [],
  "webhookUrl": "",
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Full dataset for this run (every featureType).

## `overview` (type: `string`):

Core fields across features, including detailsFetched for search rows.

## `search` (type: `string`):

featureType=job_search only. One job = one row; full details are merged when "Enrich with full job details" is enabled.

## `details` (type: `string`):

featureType=job_details — only from the Job Details feature (specific IDs/URLs), not from search enrichment.

## `company_jobs` (type: `string`):

No description

## `scrape_by_url` (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": "GB",
    "enableJobSearch": true,
    "jobKeywords": [
        "python developer",
        "data engineer"
    ],
    "jobLocation": "London",
    "jobType": "any",
    "jobDaysBack": "7",
    "radiusMiles": 50,
    "remoteOnly": false,
    "jobsPerQuery": 10,
    "fetchJobDetails": false,
    "enableJobDetails": false,
    "jobIds": [],
    "jobUrls": [],
    "enableCompanyJobs": false,
    "companyNames": [
        "GCS"
    ],
    "jobsPerCompany": 10,
    "enableScrapeByUrl": false,
    "scrapeUrls": [],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "GB"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/jobserve-real-time-data").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": "GB",
    "enableJobSearch": True,
    "jobKeywords": [
        "python developer",
        "data engineer",
    ],
    "jobLocation": "London",
    "jobType": "any",
    "jobDaysBack": "7",
    "radiusMiles": 50,
    "remoteOnly": False,
    "jobsPerQuery": 10,
    "fetchJobDetails": False,
    "enableJobDetails": False,
    "jobIds": [],
    "jobUrls": [],
    "enableCompanyJobs": False,
    "companyNames": ["GCS"],
    "jobsPerCompany": 10,
    "enableScrapeByUrl": False,
    "scrapeUrls": [],
    "webhookFormat": "json",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "GB",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/jobserve-real-time-data").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": "GB",
  "enableJobSearch": true,
  "jobKeywords": [
    "python developer",
    "data engineer"
  ],
  "jobLocation": "London",
  "jobType": "any",
  "jobDaysBack": "7",
  "radiusMiles": 50,
  "remoteOnly": false,
  "jobsPerQuery": 10,
  "fetchJobDetails": false,
  "enableJobDetails": false,
  "jobIds": [],
  "jobUrls": [],
  "enableCompanyJobs": false,
  "companyNames": [
    "GCS"
  ],
  "jobsPerCompany": 10,
  "enableScrapeByUrl": false,
  "scrapeUrls": [],
  "webhookFormat": "json",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}' |
apify call b2b_leads/jobserve-real-time-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2b_leads/jobserve-real-time-data"
        }
    }
}
```

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/X5lykVPfS8YZrwIVr/builds/KTmAmOIstBUtdO5y8/openapi.json
