Global Jobs Search API - 2.5M+ Direct ATS Jobs
Pricing
from $0.80 / 1,000 job results
Global Jobs Search API - 2.5M+ Direct ATS Jobs
Search 2.5M+ live jobs normalized from 38 direct ATS sources. Filter by role, company, location, salary, remote status, employment type, skills, date, and source; receive canonical apply URLs.
Pricing
from $0.80 / 1,000 job results
Rating
0.0
(0)
Developer
Thirdwatch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Global Jobs Search API — 2.5M+ Direct ATS Jobs
Search more than 2.5 million live jobs from 38 direct ATS sources and export normalized titles, companies, locations, salaries, skills, descriptions, work arrangements, and canonical apply URLs.
What you get from the Global Jobs Search API
Search a continuously maintained global jobs index instead of configuring individual company career pages. Combine keywords with company, title, country, city, source, posting date, salary, employment type, and remote-work filters, then export the matching jobs as JSON, CSV, Excel, XML, RSS, or HTML.
Results use one normalized schema across all 38 supported ATS sources. Each row preserves the direct application URL and includes source information, location normalization, role taxonomy, enrichment provenance, duplicate grouping, and full description text when requested.
Quick start
- Enter a role, skill, company, or other search phrase in
query. - Narrow the search with location, company, salary, date, employment type, or work-arrangement filters.
- Keep descriptions disabled for compact discovery runs, or enable them for downstream analysis.
- Set the result limit and click Start.
- Export the dataset or connect it to a scheduled recruiting, sales, or market-intelligence workflow.
Global jobs output fields
| Field | Description |
|---|---|
job_key | Stable normalized job identifier |
external_id | Identifier supplied by the originating hiring system, when available |
title | Public job title |
title_clean | Normalized job title |
organization | Hiring company or organization |
company_key | Normalized company identifier, when available |
url | Canonical direct application URL |
status | Current indexed job status |
closed_at | Closure timestamp, when applicable |
close_reason | Recorded reason for closure, when available |
first_seen | First time the job was observed |
last_seen | Most recent observation time |
date_posted | Public posting date, when available |
locations | Original public location labels |
locations_derived | Structured city, country, country code, latitude, and longitude records |
countries_derived | Normalized country names or codes |
remote_derived | Whether the role is identified as remote, when available |
work_arrangement_derived | Normalized remote, hybrid, on_site, or unknown arrangement |
employment_type | Normalized employment types such as full-time, contract, or internship |
language_derived | Detected job language, when available |
experience_level_derived | Normalized experience level, when available |
skills_derived | Skills extracted from the job posting |
benefits_derived | Benefits extracted from the posting |
department | Hiring department or team, when available |
has_salary | Whether structured salary information is present |
salary | Original public salary text, when available |
salary_min_derived | Normalized minimum salary |
salary_max_derived | Normalized maximum salary |
salary_currency_derived | Normalized salary currency |
salary_period_derived | Salary period such as year, month, or hour |
salary_derived | Combined structured salary object, when available |
taxonomy | Normalized role family, subfamily, and skill clusters |
description_snippet | Compact job-description excerpt |
description_text | Full job description when includeDescriptions is enabled |
duplicate_group_id | Identifier linking duplicate representations of the same opening |
enrichment_tier | Data-enrichment level applied to the record |
enrichment_provenance | Source, confidence, and timestamp for derived fields |
source | Originating ATS family |
source_slug | Source board or tenant identifier |
source_endpoint | Public source endpoint associated with the job |
directory_verified_at | Most recent source-directory verification time |
Optional fields remain absent or empty when the employer or source does not publish them.
Example global job output
{"job_key": "greenhouse:acme:4582197","title": "Senior Data Engineer","title_clean": "Senior Data Engineer","organization": "Acme Analytics","url": "https://boards.greenhouse.io/acme/jobs/4582197","status": "open","date_posted": "2026-07-14T09:30:00Z","locations": ["London, United Kingdom"],"locations_derived": [{"city": "London","country": "United Kingdom","country_code": "GB","lat": 51.5072,"lng": -0.1276}],"countries_derived": ["GB"],"remote_derived": true,"work_arrangement_derived": "hybrid","employment_type": ["FULL_TIME"],"skills_derived": ["Python", "SQL", "Airflow"],"has_salary": true,"salary_min_derived": 85000,"salary_max_derived": 105000,"salary_currency_derived": "GBP","salary_period_derived": "year","taxonomy": {"family": "engineering_technology","subfamily": "data_engineering","skill_clusters": ["data_platforms", "analytics_engineering"]},"description_snippet": "Build and operate reliable data products used across the company...","source": "greenhouse"}
Global Jobs Search API input parameters
| Parameter | Required | Default | Description |
|---|---|---|---|
query | No | data engineer | Role, skill, company, or free-text search. At least one search or filter is recommended. |
title | No | — | Normalized job-title filter. |
country | No | — | Country name or two-letter code such as US, GB, Germany, or India. |
city | No | — | City filter. |
company | No | — | Employer-name filter. |
atsSource | No | — | ATS source such as workday, greenhouse, lever, ashby, or smartrecruiters. |
postedSince | No | — | Earliest posting time in ISO format, such as 2026-07-01T00:00:00Z. |
hasSalary | No | false | Set to true to return only jobs with structured salary data. |
minimumSalary | No | — | Minimum structured salary value. Combine with location and currency-aware analysis. |
employmentType | No | — | Employment type such as full_time, part_time, contract, or internship. |
workArrangement | No | — | Work arrangement such as remote, hybrid, or on_site. |
excludeDuplicates | No | true | Collapse the same opening found through multiple source URLs. |
includeDescriptions | No | false | Include full description text instead of compact snippets only. |
maxResults | No | 25 | Maximum jobs returned across the complete search, from 1 to 100,000. |
Example input
{"query": "data engineer","country": "GB","city": "London","postedSince": "2026-07-01T00:00:00Z","hasSalary": true,"workArrangement": "hybrid","excludeDuplicates": true,"includeDescriptions": true,"maxResults": 500}
Global job data use cases
- Recruiters and staffing teams: Discover fresh openings by role, location, company, and employment type.
- Job boards and aggregators: Populate normalized listings with canonical application URLs from many ATS sources.
- Sales and market-intelligence teams: Identify companies hiring for relevant teams, skills, or locations.
- Workforce researchers: Analyze demand for roles, skills, compensation, and work arrangements across markets.
- Developers and AI teams: Build job alerts, matching systems, search products, analytics, and retrieval pipelines.
Global Jobs Search API limitations
- The index reflects publicly available employer postings and can lag a source between refreshes.
- Salary, skills, experience, benefits, and exact posting dates are unavailable when an employer does not publish enough information.
minimumSalarycompares normalized values; account for currency and salary period when combining multiple markets.- Full descriptions increase dataset size and are only returned when
includeDescriptionsis enabled. - Very broad searches can produce many valid matches. Use title, company, location, source, date, or work-arrangement filters for more targeted datasets.
- Canonical application URLs can expire after an employer closes or replaces a posting.
Compared to other ATS jobs scrapers
- Compared with
bovi/greenhouse-lever-ashby-job-scraper, this Actor searches an existing index spanning 38 ATS sources instead of requiring users to supply company slugs across six supported systems. - Compared with
fantastic-jobs/jobs-scraper, this Actor is built for cross-company keyword and attribute search rather than collecting jobs from user-provided career-page URLs. - Choose this Actor when discovery and normalized search across a large jobs index matter. Choose a career-page crawler when you need to target a specific company board that is not yet represented in the index.
Global Jobs Search API FAQ
Do I need to provide company career-site URLs?
No. Search the existing jobs index by keywords and filters. Use company or atsSource when you want to narrow the source set.
Can I return more than 1,000 jobs?
Yes. Set maxResults as high as 100,000. The Actor continues through available result pages and writes all accepted jobs to one dataset.
Can I search only remote jobs with salaries?
Yes. Set workArrangement to remote and hasSalary to true, then add role and location filters as needed.
Are application links direct?
The dataset preserves the canonical public application URL supplied by the originating ATS whenever available.
How do I get full job descriptions?
Set includeDescriptions to true. Otherwise, each result uses the compact description_snippet field to keep discovery datasets smaller.
Can I schedule new-job monitoring?
Yes. Combine postedSince with an Apify schedule, then send each dataset to a webhook, database, spreadsheet, Slack workflow, or another integration.
Related Thirdwatch Actors
- Career Sites Scraper — collect jobs from specific employer career pages
- LinkedIn Jobs Scraper — LinkedIn job search and detail data
- Indeed Jobs Scraper — Indeed listings, descriptions, salary, and remote fields
Explore more recruiting and labor-market data tools from Thirdwatch.
Last verified: 2026-07