Career Site Job Listing API avatar
Career Site Job Listing API

Pricing

$12.00 / 1,000 jobs

Go to Store
Career Site Job Listing API

Career Site Job Listing API

Developed by

Fantastic.jobs

Fantastic.jobs

Maintained by Community

The perfect Job Posting API for high-quality real jobs! Direct postings from over 105k company career sites across 35 ATS platforms like: Workday, Greenhouse, and Ashby. Enriched with AI and LinkedIn company data, with up to 60 fields per job! Includes Lever, Rippling, SuccessFactors, iCIMS

5.0 (1)

Pricing

$12.00 / 1,000 jobs

0

Total users

3

Monthly users

3

Runs succeeded

>99%

Last modified

a day ago

The perfect actor for job boards requiring high quality jobs, every week, day, or hour! We scrape data from 35 ATS Platforms, which covers over 105k company career sites. Jobs are stored in our database and enriched with AI and LinkedIn company profiles. We typically index over 1.5 million jobs every month

The maximum number of jobs per run is 5,000. If you wish to go over this number, please reach out to us!

Jobs in this Actor are solely from Career Sites / ATS platforms, allowing your users to directly apply with the employer without the need of a 3rd party.

Differene between this Actor and the Career Site Job Listing Feed

  • This Actor is incremental en contains only new jobs posted/indexed during a set time fram (1 hour, 24 hours, 1 week). It comes with a companion Actor for expired jobs.
  • This Actor works well for a multitude of applications that require fresh jobs like advanced job boards, lead gen and more.
  • The Career Site Job Listing Feed contains all active jobs every time your run the actor (up to your configured limit).
  • The Career Site Job Listing Feed works well with job board software requiring an active feed with auto-deletion once a job is removed from the feed.

The Data

We currently have jobs for the following ATS:

AshbyBamboohrBreezy HR
CareerPlugComeetCSOD
DayforceEightfoldFreshteam
GoHireGreenhouseHireHive
HirhingThingiCIMSJazzHR
JobviteJOIN.comLever.co
OraclecloudPaycomPaylocity
PersonioPhenompeoplePinpoint
PolymerRecruiteeRecooty
SmartRecruitersSuccessFactorsTeamTailor
TrakstarWorkableWorkday
Zoho RecruitRippling

In addition, we currently have jobs for the following organizations not using an ATS:

  • Apple
  • Microsoft
  • Amazon
  • Meta
  • Google

Missing an organization? Please let us know and we might be able to add it to the database

The number of jobs per country are estimated to be the following. Please send us a message if your country is not in the list:

CountryNo. Jobs per monthCountryNo. Jobs per month
United States800k-900kCanada50k-60k
India60k-70kUnited Kingdom50k-60k
Germany40k-50kFrance30k-40k
Australia15k-20kMexico15k-20k
Spain10k-15kNetherlands10k-15k
Brazil8k-12kPoland8k-12k
Austria8k-12kPhilippines8k-12k
Israel8k-12kChina8k-12k
Switzerland5k-8kSouth Africa5k-8k
Italy5k-8kSweden5k-8k
United Arab Emirates5k-8kBelgium3k-5k
Singapore3k-5kPortugal3k-5k
Ireland3k-5kColombia3k-5k
Malaysia3k-5kJapan2k-4k
Saudi Arabia2k-4kIndonesia2k-4k
Hungary2k-4kNew Zealand2k-4k
Romania2k-4k

Technical Details

  • This Actor calls a database that includes ATS and career site jobs posted during the last hour, day, week, or 6 months (for backfill purposes)

  • You may choose a time range using the 'Time Range' paramater. Pleae note that there are slight differences between the ranges:

1h: Includes jobs that have been indexed by our systems during the last hour

24h: Includes jobs that have been indexed by our systems during the last 24 hours

7h: Includes jobs that have been posted during the last 7 days

6m: Includes jobs that have been posted during the last 6 months.

  • The job data is returned in our APIs with a one hour delay. For example, if a job is posted at 06:00 UTC, it will appear between 07:00 and 08:00 UTC

  • Our scrapers run continuously. We typically add a new job to our database within 3 hours of posting!

  • All jobs are checked on expiry once per day. You can use our companion Actor to retrieve a daily list of expired jobs. The cost of using the companion actor is $20 per month.

  • We will add new ATS platforms regularly, please check every once in a while if you apply filters on 'ats'.

  • All jobs in the database are unique based on their URL. However, organizations occasionally create duplicates themselves. More commonly, organizations sometimes create the same job listing for multiple cities or states. If you wish to create a rich and unique dataset, we recommend further deduplication on title + organization, or title + organization + locations

  • BETA Feature. We extract useful job details from the description with an LLM. We are currently enriching over 99.9% of all jobs. Please note that our enrichment is a simple one-shot prompt on each job description, so there might be some errors.

  • BETA Feature. We attempt to map every job to a LinkedIn Company profile, bringing in useful data like the number of employees, industry, and more. Please note that this enrichment is AI assisted, so there might be some errors. We've measured accuracy at 99%. Over 95% of jobs include LinkedIn Company data.

  • Domain Derived. Since ATS platforms don’t always include the domain or homepage of the company, we’ve developed a system to identify the company’s domain. This can be very helpful to do further analysis and enrichments. The accuracy is ~98%

FAQ

Wait, this isn't a scraper?
Technically, no, or yes? We scrape all jobs in the backend, and you're accessing our database with scraped jobs with a small delay. This is a much more reliable system since we're targeting over 100,000 companies career sites across 35 ATS platforms. This also allows us to enrich and derive data before sharing it with you, adding more value per job!

I wish to retrieve a feed of active jobs, is this possible?
A: Your use case is likely more suited for our Feed Actor, which has a more friendly price for this purpose: https://apify.com/fantastic-jobs/career-site-job-listing-feed

Can I see how many jobs will be returned for my query Not at the moment, please test with the free plan or create an issue and we'll have a look for you! Make sure to include all parameters.

How can I retrieve a XML with the jobs from my latest run?

  • Follow the documentation to create a saved task: https://docs.apify.com/platform/actors/running/tasks
  • Create a schedule for the task: https://docs.apify.com/platform/schedules
  • Copy the following endpoint to access the latest succesfull run from your scheduled task: Replace task-name with the the lower case username/task combination, there's a copy paste button on the task page. For example: 'username/task-name' Replace apiKey with your api key. You can find your API key at 'Settings' --> 'API & Integrations'

https://api.apify.com/v2/actor-tasks/*task-name*/runs/last/dataset/items?token=*apiKey*&format=xml&status=SUCCEEDED

You can export in several formats, not just XML. Please see the documentation for more information:

https://docs.apify.com/api/v2/actor-task-runs-last-get

https://docs.apify.com/api/v2/dataset-items-get

Input Parameters

Maximum Jobs

The maximum number of jobs that can be retrieved in a single run. Must be between 10 and 5,000.

Please set the memory to 512 for runs above 2,000 jobs!

Search Parameters

Our search parameters allow you to include or exclude jobs based on keywords. You may include :_ for prefix matching (e.g., 'Soft:_' will match 'Software', 'Softball', etc.)

Don't use abbreviations for location searches. NY should be New York, US should be United States

WARNING. The description searches are VERY intensive and at risk of time-out. Please be very specific, limit your searches to a handful of keywords, and combine with one of the other searches, preferably titleSearch. If you receive errors while using descriptionSearch or descriptionExclusionSearch, please reach out to us. We're here to

  • titleSearch: Terms to search in job titles
  • titleExclusionSearch: Terms to exclude from job titles
  • locationSearch: Terms to search in job locations
  • locationExclusionSearch: Terms to exclude from job locations
  • descriptionSearch: Terms to search in job descriptions
  • descriptionExclusionSearch: Terms to exclude from job descriptions
  • organizationSearch: Terms to search in organization names
  • organizationExclusionSearch: Terms to exclude from organization names

Domain Filter

Alternative for organizationSearch. Allows filtering on company domain instead of searching on name. Requires an exact match.

  • domainFilter: Domains to include
  • domainExclusionFilter: Domains to exclude

Description Type

Type of description to fetch. Options:

  • text: Plain text description
  • html: HTML formatted description

Remote

Filter for remote jobs only. Set to false to include all jobs. This filter is very sensitive and will include jobs that have 'remote' in the title, description, or location. Use AI Work Arrangement filter for more precise results.

ATS

Array of ATS platforms to filter by. Available options:

  • ashby, bamboohr, breezy_hr, careerplug, comeet, csod, dayforce, eightfold, freshteam, gohire, greenhouse, hirehive, hiringthing, icims, jazzhr, jobvite, join, lever, oraclecloud, paycom, paylocity, personio, phenompeople, pinpoint, polymer, recruitee, recooty, smartrecruiters, successfactors, teamtailor, trakstar, workable, workday, zoho_recruit, rippling

AI Filters

  • includeAi: BETA Feature: Include AI enriched fields. We enrich jobs with AI to retrieve relevant data from the job description. Please note that this performed with a one-shot prompt, so there might be some errors. We enrich over 99.9% of all jobs.

  • aiEmploymentTypeFilter: BETA Feature: Filter by employment type. Available options: FULL_TIME, PART_TIME, CONTRACTOR, TEMPORARY, INTERN, VOLUNTEER, PER_DIEM, OTHER

  • aiWorkArrangementFilter: BETA Feature: Filter by work arrangement. Remote OK = remote with an office available. Remote Solely = remote with no office available. Include both to include all remote jobs. Available options: On-site, Hybrid, Remote OK, Remote Solely

  • aiHasSalary: BETA Feature: Filter for jobs with salary information only. Set to false to include all jobs. Results include jobs that have either an AI enriched salary or a raw salary (discovered in the job posting schema).

  • aiExperienceLevelFilter: BETA Feature: Filter by years of experience. Available options: 0-2, 2-5, 5-10, 10+

  • aiVisaSponsorshipFilter: BETA Feature: Filter for jobs offering visa sponsorship only. Set to false to include all jobs.

LinkedIn Filters

  • includeLinkedIn: BETA Feature: Include LinkedIn company data. We use AI to map each job to a LinkedIn organization. This is a beta so there might be some errors. We map over 95% of all jobs with 99% accuracy.

  • liIndustryFilter: BETA Feature: Filter by LinkedIn industries. You can find an overview on our website: LinkedIn Industries

  • liOrganizationEmployeesLte: BETA Feature: Maximum number of employees in the company. Must be greater than or equal to 0.

  • liOrganizationEmployeesGte: BETA Feature: Minimum number of employees in the company. Must be greater than or equal to 0.

Output Schema

Output Fields

NameDescriptionType
idThe job's internal ID. Used for expirationtext
titleJob Titletext
organizationName of the hiring organizationtext
organization_urlURL to the organization's pagetext
organization_logoURL to the organization's logotext
date_postedDate & Time of postingtimestamp
date_createdDate & Time of indexing in our systemstimestamp
date_validthroughDate & Time of expiration, is null in most casestimestamp
locations_rawRaw location data, per the Google for Jobs requirementsjson[]
locations_alt_rawComplimentary raw location field for ATS with limited location data, currently only in use for Workdaytext[]
locations_derivedDerived location data, which is the raw data (locations_raw or location_requirements_raw) matched with a database. This is the field where you search locations on.text[] [{city, admin (state), country}]
location_typeTo identify remote jobs: 'TELECOMMUTE' per the Google for Jobs requirementstext
location_requirements_rawLocation requirement to accompany remote (TELECOMMUTE) jobs per the Google for Jobs requirements.json[]
salary_rawraw Salary data per the Google for Jobs requirementsjson
employment_typeTypes like 'Full Time", "Contract", "Internship" etc. Is an array but most commonly just a single value.text[]
urlThe URL of the job, can be used to direct traffic to apply for the jobtext
sourcethe source ATS or career sitetext
source_typeeither 'ats' or 'career-site'text
source_domainthe domain of the career sitetext
description_textplain text job description - if includedtext
description_htmlraw HTML job description - if includedtext
cities_derivedAll cities from locations_derivedjson[]
regions_derivedAll regions/states/provinces from locations_derivedjson[]
countries_derivedAll countries from locations_derivedjson[]
timezones_derivedTimezones derived from locations_derivedjson[]
lats_derivedlats derived from locations_derivedjson[]
lngs_derivedlngs derived from locations_derivedjson[]
remote_derivedjobs flagged as remote by inclusion of the word 'remote' in title, description, raw location, and the offical google jobs 'TELECOMMUTE' schemabool
date_modifiedDate & Time of job modifcation being discovered and parsed in our databasetimestamp
modified_fieldsThe fields that have been modified during our job modification checks

AI Output Fields

BETA Feature

Set include_ai to true to include the fields in this table These fields are derived from the text with an LLM and might contain mistakes.

NameDescriptionType
ai_salary_currencyThe salary currencytext
ai_salary_valueThe salary value, if there's a single salary with no salary rangenumeric
ai_salary_minvalueThe salary minimum salary in a rangenumeric
ai_salary_maxvalueThe salary maximum salary in a rangenumeric
ai_salary_unittextIf the salary is per HOUR/DAY/WEEK/MONTH/YEARtext
ai_benefitsAn array with other non-salary benefits mentioned in the job listingtext[]
ai_experience_levelyears of experience required, one of: 0-2, 2-5, 5-10, or 10+text
ai_work_arrangementRemote Solely/Remote OK/Hybrid/On-site. Remote solely is remote without an office available, Remote OK is remote with an optional office.text
ai_work_arrangement_office_dayswhen work_arrangement is Hybrid, returns the number of days per week in officebigint
ai_remote_locationWhen remote but only in a certain location, returns the locationtext[]
ai_remote_location_derivedDerived remote location data, which is the raw data (ai_remote_location) matched with a database of locations. This is the same database as the locations_derived field.text[]
ai_key_skillsAn array of key skills mentioned in the job listingtext[]
ai_hiring_manager_nameIf present, the hiring manager nametext
ai_hiring_manager_email_addressIf present, the hiring manager's email addresstext
ai_core_responsibilitiesA 2-sentence summary of the job's core responsibilitiestext
ai_requirements_summaryA 2-sentence summary of the job's requirementstext
ai_working_hoursThe number of required working hours. Defaults to 40 if not mentionedbigint
ai_employment_typeOne or more employment types as derived from the job description: FULL_TIME/PART_TIME/CONTRACTOR/TEMPORARY/INTERN/VOLUNTEER/PER_DIEM/OTHERtext[]
ai_job_languageThe language of the job descriptiontext
ai_visa_sponsorshipReturns true if the job description mentions Visa sponsorship opportunitiesboolean

LinkedIN Company Output Fields

BETA Feature

Set include_li to true to include the fields in this table These fields are matched to the job company with AI and might contain mistakes.

NameDescriptionType
linkedin_org_employeesthe number of employees within the job's company according to LIint
linkedin_org_urlurl to the company pagetext
linkedin_org_sizethe number of employees within the job's company according to the companytext
linkedin_org_sloganthe company's slogantext
linkedin_org_industrythe company's industry. This is a fixed list that the company can choose from, so could be useful for classification. Keep in mind that this is in the language of the company's HQtext
linkedin_org_followersthe company's followers on LIint
linkedin_org_headquartersthe company's HQ locationtext
linkedin_org_typethe company's type, like 'privately held', 'public', etctext
linkedin_org_foundeddatethe company's founded datetext
linkedin_org_specialtiesa comma delimited list of the company's specialtiestext[]
linkedin_org_locationsthe full address of the company's locationstext[]
linkedin_org_descriptionthe description of the company's linkedin pagetext
linkedin_org_recruitment_agency_derivedIf the company is a recruitment agency, true or false. We identify this for each company using an LLM. The accuracy may vary and job boards might be flagged as false.bool
linkedin_org_slugThe slug is the company specific part of the url. For example the slug in the following url is 'tesla-motors': https://www.linkedin.com/company/tesla-motors/text