Real-Time Jobs API | LinkedIn, Indeed, Workday, Glassdoor,... avatar

Real-Time Jobs API | LinkedIn, Indeed, Workday, Glassdoor,...

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Real-Time Jobs API | LinkedIn, Indeed, Workday, Glassdoor,...

Real-Time Jobs API | LinkedIn, Indeed, Workday, Glassdoor,...

Real-time Jobs API aggregating LinkedIn, Indeed, Workday, Glassdoor, ZipRecruiter, XING, Arbeitsagentur, ICIMS, Talent.com, Randstad, Hays, Recruit.net, Bayt, Built In, Job Bank Canada, Walmart Careers, Uber Careers, and more.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(21)

Developer

Hermann Samimi

Hermann Samimi

Maintained by Community

Actor stats

21

Bookmarked

31

Total users

4

Monthly active users

0.18 hours

Issues response

3 days ago

Last modified

Categories

Share

Pingrole Job Search API

Fast, structured, and continuously updated job listings from Germany, Canada, the USA, the Netherlands, and the UK β€” sourced from LinkedIn, Indeed, and other major job boards.

Search by title, company, location, remote status, language, job-type flags, and more. Results are returned as clean, ready-to-use JSON records with 30+ data points per listing.

Coverage: πŸ‡©πŸ‡ͺ Germany Β· πŸ‡¨πŸ‡¦ Canada Β· πŸ‡ΊπŸ‡Έ USA Β· πŸ‡³πŸ‡± Netherlands Β· πŸ‡¬πŸ‡§ UK


Introduction

The Pingrole Job Search Actor gives you programmatic access to a structured, continuously refreshed job database covering Germany, Canada, the USA, the Netherlands, and the UK. Jobs are sourced from the major public boards β€” LinkedIn, Indeed, and others β€” and enriched with company data, role classification flags, and salary metadata where available.

The Actor supports rich filtering: job title, company, location, posting date range, remote/freelance/academic/B2B/part-time flags, language, country, and pagination. Each job record includes 30+ data points: title, description, company info, salary source, job level, URL, and classification flags.


Getting Started

1 β€” Subscribe

Visit the Actor page on Apify and click Try for free or subscribe to a plan. No credit card is required for the free tier.

2 β€” Make your first run

Go to the Input tab, set your filters (e.g. country: canada, title: engineer), and click Start. When the run finishes, open the Dataset tab and export your results as JSON, CSV, Excel, or XML.

3 β€” Integrate via API

Use the Apify API or any of the official client libraries (Python, JavaScript, etc.) to trigger runs and fetch results programmatically. Code examples are in the sections below.


Authentication

All API calls require an Apify API token. Pass it as a query parameter:

?token=YOUR_APIFY_API_TOKEN

Or in the Authorization header:

Authorization: Bearer YOUR_APIFY_API_TOKEN

You can find your token in the Apify Console under Settings β†’ Integrations.


Response Structure

Each Actor run writes one dataset record per job. The run result object contains:

{
"ok": true,
"total": 1240,
"count": 10,
"items": [ ...job records... ]
}
FieldDescription
oktrue on success
totalTotal matching jobs in the database
countNumber of records returned in this run
itemsArray of job objects

On error:

{
"ok": false,
"error": "Invalid filter value for 'language'"
}

Endpoints

Actor Run (POST)

Trigger a run via the Apify API:

POST https://api.apify.com/v2/acts/{ACTOR_ID}/runs?token={YOUR_TOKEN}
Content-Type: application/json

Body: a JSON object with any combination of the input parameters below.

Dataset Fetch (GET)

After a run completes, fetch results from the dataset:

GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?token={YOUR_TOKEN}

Input Parameters

Set action to choose the endpoint. Default is search_jobs.

action: search_jobs (default)

All parameters are optional except those noted. Combine freely to narrow results.

ParameterTypeMatchDescription
countrystringExactcanada, germany, netherlands, United States, or United Kingdom
languagestringExacten, fr, or de
titlestringPartialJob title (case-insensitive regex)
companystringPartialCompany name
locationstringPartialCity / region string, e.g. Toronto
sitestringExactJob board, e.g. indeed, linkedin β€” comma-separated for multiple
RemotebooleanExacttrue = remote jobs only
AcademicbooleanExacttrue = academic roles only
ResearchbooleanExacttrue = research roles only
FreelancerbooleanExacttrue = freelance roles only
B2BbooleanExacttrue = B2B contract roles only
PartTimebooleanExacttrue = part-time roles only
datetime_fromstringDate β‰₯ISO date e.g. 2026-01-01 or 2026-01-01@11:00
datetime_tostringDate ≀ISO date e.g. 2026-12-31 or 2026-12-31@17:45
limitintegerβ€”Records to return per run (1–100, default 10)
skipintegerβ€”Pagination offset (default 0)
sort_fieldstringβ€”datetime_from (default), title, company, site, language, country
sort_directionintegerβ€”-1 newest first (default) Β· 1 oldest first

Note on boolean flags: Omit a flag to ignore it entirely. Set true to include only matching roles. Set false to exclude them.

action: search_companies

Returns a ranked list of companies that posted jobs, with job counts. country and limit are required.

ParameterTypeRequiredDescription
countrystringYescanada, germany, netherlands, United States, or United Kingdom
limitintegerYesCompanies to return (1–100)
locationstringNoPartial match on job location (regex)
datetime_fromstringNoOnly count jobs posted on or after this date
datetime_tostringNoOnly count jobs posted on or before this date
skipintegerNoPagination offset (default 0)
sort_fieldstringNocount (default), company, country
sort_directionintegerNo-1 most jobs first (default) Β· 1 fewest first

Output fields per company: logo_url, country, company, count.


Example Inputs

Latest 20 jobs in Canada:

{ "country": "canada", "limit": 20 }

Remote software roles in Germany (German-language):

{
"country": "germany",
"title": "software",
"Remote": true,
"language": "de",
"limit": 50
}

LinkedIn jobs in Toronto, posted this month:

{
"country": "canada",
"site": "linkedin",
"location": "Toronto",
"datetime_from": "2026-05-01@00:00",
"datetime_to": "2026-05-31@23:59",
"limit": 100
}

Page 2 of results (pagination):

{
"country": "canada",
"limit": 10,
"skip": 10,
"sort_field": "datetime_from",
"sort_direction": -1
}

Top 20 hiring companies in the United States:

{
"action": "search_companies",
"country": "United States",
"limit": 20
}

Top hiring companies in Canada, filtered by location and date:

{
"action": "search_companies",
"country": "canada",
"location": "Toronto",
"datetime_from": "2026-01-01",
"limit": 50,
"sort_field": "count",
"sort_direction": -1
}

Output Fields

Each job record includes the following fields. Missing values are returned as null.

FieldDescription
idInternal job identifier
job_idSource-specific job ID
siteJob board (e.g. indeed, linkedin)
job_urlDirect link to the listing
titleJob title
companyCompany name
locationLocation string
job_typee.g. fulltime, parttime
descriptionFull job description
salary_sourceSalary data source, if available
currencySalary currency
job_levelSeniority level
company_industryIndustry
company_urlCompany profile URL
company_logoLogo image URL
company_url_directCompany website
company_addressesCompany address(es)
company_num_employeesEmployee count
company_revenueRevenue info
company_descriptionCompany description
company_ratingCompany rating
timestampScrape datetime (UTC)
countrycanada, germany, netherlands, United States, or United Kingdom
languageen, fr, or de
RemoteRemote flag
AcademicAcademic flag
ResearchResearch flag
FreelancerFreelance flag
B2BB2B flag
PartTimePart-time flag

Example Record

{
"id": "li-4374072722",
"site": "linkedin",
"job_url": "https://www.linkedin.com/jobs/view/4374072722",
"title": "Software Engineer",
"company": "Example GmbH",
"location": "Berlin, DE",
"job_type": "fulltime",
"description": "We are looking for...",
"salary_source": null,
"currency": null,
"job_level": "mid-senior",
"company_industry": "Software Development",
"company_url": "https://linkedin.com/company/example-gmbh",
"company_logo": null,
"company_url_direct": "https://example.com",
"company_addresses": null,
"company_num_employees": "51-200",
"company_revenue": null,
"company_description": "Example GmbH is a Berlin-based...",
"company_rating": null,
"job_id": "li-4374072722",
"timestamp": "2026-05-16 14:50:09.053000",
"country": "germany",
"language": "de",
"Academic": false,
"Research": false,
"Remote": true,
"Freelancer": false,
"B2B": false,
"PartTime": false
}

Code Examples

Python

import json
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_API_TOKEN")
run = client.actor("YOUR_ACTOR_ID").call(run_input={
"country": "canada",
"title": "software engineer",
"Remote": True,
"datetime_from": "2026-01-01@11:00",
"datetime_to": "2026-12-31@17:45",
"limit": 25,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
for job in items:
print(json.dumps(job, indent=4, ensure_ascii=False, default=str))

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });
const run = await client.actor('YOUR_ACTOR_ID').call({
country: 'germany',
title: 'data engineer',
Remote: true,
limit: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(job => console.log(job.title, job.company));

curl

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_APIFY_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"country": "canada", "title": "engineer", "Remote": true, "limit": 20}'

Then retrieve results:

$curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_APIFY_API_TOKEN&format=json"

Common Use Cases

  • Job board apps β€” Power a job search UI with filtered, structured listings
  • Lead generation β€” Find companies actively hiring in a specific role or location
  • Recruitment tools β€” Feed filtered listings into your ATS, CRM, or Slack
  • Market research β€” Compare job volume by title, region, or date range
  • Salary benchmarking β€” Aggregate job-level and salary data across boards
  • Analytics pipelines β€” Schedule daily runs and export to CSV / BigQuery / Sheets
  • Competitive intelligence β€” Track hiring trends by company or job board

Scheduling & Integrations

  • Schedule runs in the Apify Console (e.g. daily at 08:00 UTC) to keep a dataset continuously fresh.
  • Webhooks β€” trigger your downstream app or pipeline the moment a run succeeds.
  • Apify integrations β€” connect directly to Google Sheets, Slack, Zapier, Make, Airtable, and more from the Actor run page.

Rate Limiting & Limits

  • Each run returns up to 100 records per call (set via limit).
  • Use skip + limit across multiple runs to paginate through large result sets.
  • Apify enforces platform-level rate limits based on your subscription plan. See Apify pricing for details.

Error Handling

HTTP StatusMeaningAction
400 Bad RequestMalformed input or invalid parameter valueCheck input types and allowed values
401 UnauthorizedMissing or invalid API tokenVerify your token in Apify Console
429 Too Many RequestsRate limit exceededWait for reset or upgrade your plan
500 Server ErrorUnexpected server errorRetry after a short delay; contact support if it persists

All actor-level errors are surfaced in the Log tab of your run in the Apify Console.


Live Dashboard

Explore the data interactively before integrating: realtime.pingrole.com


Support & Contact

Built by Hermann Samimi Β· Pingrole

For issues with a run, check the Log tab in the Apify Console. For feature requests, data coverage questions, or custom plans: