# Daily Jobs Feed: New Career Site Jobs in Bulk (`atsfeed/daily-jobs-feed`) Actor

Every new job from 19,000 company career sites on Greenhouse, Lever, Ashby, Workable and more, in one scheduled run. Jobs you already received are skipped, so each job reaches you once.

- **URL**: https://apify.com/atsfeed/daily-jobs-feed.md
- **Developed by:** [Velavalapalli Mohana Durga Sai Ram](https://apify.com/atsfeed) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 new jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What does Daily Jobs Feed do?

Get every new job from about **19,000 company career sites** in one scheduled run, from Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and Breezy job boards. Each run returns the jobs this index first saw in the last day or two, with pay, skills, seniority, location and workplace type already pulled out. Jobs you already received are skipped, so a daily schedule gives you a clean **jobs feed** without repeats.

### Why use Daily Jobs Feed?

- **Bulk and fast.** Thousands of jobs per run from structured data, with no browser and no setup per site.
- **Each job once.** "New in the last N days" plus "Only jobs not returned before" delivers every job to you one time.
- **Direct from employers.** Postings come from companies' own job boards, not reposted aggregator listings.
- **Full descriptions when you need them.** Turn on **Include full job description** to read each job live from its source. Closed jobs are then dropped at no charge.
- **Delivered where you work.** Send each run to a webhook, Google Sheets, Amazon S3, Zapier, Make or your database.

#### Who uses a jobs feed?

- **Job boards and job apps** that need fresh, direct-apply listings every day.
- **Data teams and AI pipelines** that load a daily batch of structured jobs into a warehouse or a model.
- **Analysts** watching hiring across a market: every new data, sales or engineering role in a region.

### What data does Daily Jobs Feed deliver?

| Field | Type | Description |
|---|---|---|
| `title`, `company` | text | Job title and hiring company |
| `location`, `countries` | text, list | Location text and ISO country codes |
| `workplaceType` | text | `remote`, `hybrid`, `onsite` or `unspecified` |
| `salary` | object | Stated pay with `min`, `max`, `currency` and `period` |
| `skills`, `seniority`, `category` | list, text | Tools named, detected level and job family |
| `postedDate`, `firstSeenDate` | date | When the job was posted, and when this index first saw it |
| `jobUrl`, `applyUrl`, `careersPageUrl` | link | The posting, the application form and the company's job board |
| `source` | text | The applicant tracking system the job came from |
| `description` | text | Optional full text, read live |

### How to set up a daily jobs feed

1. Leave the defaults to get every new job, or add filters: title keywords, locations, sources, job categories or remote only.
2. Set **Maximum jobs** to cap your cost per run.
3. Click **Start**, then add a daily schedule in Apify Console under **Schedules**.
4. Send results where you need them with Apify integrations: webhooks, Google Sheets, Amazon S3, Zapier, Make or the API.

#### Example input

```json
{
  "firstSeenWithinDays": 2,
  "onlyNewJobs": true,
  "locations": ["United States"],
  "categories": ["engineering", "data_ai"],
  "maxResults": 20000
}
```

### How much does a jobs feed cost?

You pay per job delivered, and higher Apify plans pay less per job. The pricing panel on this page shows the price for your plan. On the Free and Starter plans:

| Jobs delivered | Cost |
|---|---|
| 1,000 | $1.00 |
| 10,000 | $10.00 |
| 50,000 | $50.00 |

Jobs you already received are not delivered again or charged, and closed jobs found during a live check are not charged. Platform usage is included.

### Input

See the **Input** tab for every option:

| Option | What it does |
|---|---|
| New in the last N days | Jobs this index first saw within this many days. Use 2 for a daily schedule |
| Job title keywords | Match any entry. Words in any order, or use double quotes for an exact phrase |
| Locations | City, state, country or area such as "Europe", in plain words |
| Maximum jobs | The run stops after this many jobs, which also caps your cost |
| Only these companies, only these sources | Company names or domains, and applicant tracking systems |
| Remote only, workplace type, seniority, category, employment type | Structured filters |
| Skills, pay, visa and clearance filters | Based on the employer's own wording |
| Include full job description | Reads each job live and adds the description. Slower for big runs |
| Only jobs not returned before | On by default. Remembers delivered jobs in your account and skips them next time |

### Output

Download the dataset as JSON, CSV, Excel, XML, RSS or HTML. Each job looks like this:

#### Example output

```json
{
  "id": "greenhouse:acme:5470571008",
  "title": "Senior Data Engineer",
  "company": "Acme",
  "location": "Austin, TX",
  "countries": ["US"],
  "workplaceType": "hybrid",
  "employmentType": "full_time",
  "seniority": "senior",
  "category": "data_ai",
  "department": "Data",
  "postedDate": "2026-11-05",
  "firstSeenDate": "2026-11-06",
  "salary": { "min": 150000, "max": 185000, "currency": "USD", "period": "year" },
  "skills": ["python", "snowflake", "dbt"],
  "visaSponsorship": null,
  "securityClearanceRequired": false,
  "jobUrl": "https://job-boards.greenhouse.io/acme/jobs/5470571008",
  "applyUrl": "https://job-boards.greenhouse.io/acme/jobs/5470571008",
  "careersPageUrl": "https://job-boards.greenhouse.io/acme",
  "source": "greenhouse",
  "verifiedLive": false,
  "checkedAt": null
}
```

### Tips for a reliable feed

- Schedule the Actor once a day with **New in the last N days** set to 2. With **Only jobs not returned before** on, the overlap never produces duplicates.
- Keep your filters stable, or set a **History name**, so the feed keeps its memory when you adjust them.
- Turn on **Include full job description** only if you need the text: big runs finish much faster without it.

### Use Daily Jobs Feed with the API and AI agents

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('atsfeed/daily-jobs-feed').call({ firstSeenWithinDays: 2, maxResults: 20000 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

AI agents in Claude, ChatGPT, Cursor or any MCP client can call this Actor as a tool through the Apify MCP server at `mcp.apify.com`. The **API** tab has Python, cURL and more.

### FAQ

#### What counts as a new job?

A job this index first saw within your window. When a company is added to the index, its open jobs count as new that day.

#### Can a closed job appear in the feed?

Without full descriptions, jobs come from the latest daily index and are not re-checked, so a job closed since then can appear. Turn on descriptions or **Check each job is still open** to check each job live.

#### Is it legal to collect these jobs?

This Actor reads only public job listings from endpoints that vendors publish for displaying jobs. It does not log in, solve CAPTCHAs or get around access controls, and it does not extract recruiter contact details. Postings belong to the employers who publish them, so link back to the original job when you display it.

### Coverage and accuracy

- **Index size, November 2026:** about 730,000 open jobs from 19,000 companies, refreshed daily.
- Skills, seniority, category, pay found in text and visa wording come from fixed rules applied to the employer's own words. They are helpful but can be wrong.
- Coverage is limited to public job boards of the supported systems. It does not include LinkedIn, Indeed or other job boards.

### Related Actors

- [Career Site Jobs API](https://apify.com/atsfeed/ats-job-search): open jobs from company career sites on eight applicant tracking systems, in one search.
- [Remote Jobs Scraper](https://apify.com/atsfeed/remote-jobs-search): remote jobs straight from company career sites.
- [Salary Benchmarks](https://apify.com/atsfeed/job-salary-benchmarks): pay ranges for any job title and location.
- [Hiring Signals & Technographics](https://apify.com/atsfeed/hiring-signals-technographics): companies hiring for a role or naming a tool in their postings.
- Job search for a single source: [Greenhouse](https://apify.com/atsfeed/greenhouse-jobs-search), [Lever](https://apify.com/atsfeed/lever-jobs-search), [Ashby](https://apify.com/atsfeed/ashby-jobs-search), [Workable](https://apify.com/atsfeed/workable-jobs-search), [SmartRecruiters](https://apify.com/atsfeed/smartrecruiters-jobs-search).

### Questions

Found a wrong result, or want another source added? Open an issue on the **Issues** tab with an example.

# Actor input Schema

## `firstSeenWithinDays` (type: `integer`):

Jobs this index first saw within this many days, whatever their posting date. 1 is today (UTC). For a daily schedule use 2 with "Only jobs not returned before", so a run that starts early or late misses nothing.

## `titleKeywords` (type: `array`):

A job matches if its title contains any entry. Words in an entry can be in any order: "data engineer" also finds "Engineer, Data". Put an entry in double quotes for an exact phrase. Leave empty for every new job.

## `excludeTitleKeywords` (type: `array`):

Skip jobs whose title contains any of these, for example "intern" or "manager".

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

Any city, state, country or two-letter country code, in plain words. Common spellings work: Bangalore and Bengaluru, UK and United Kingdom. Leave empty for worldwide.

## `includeGlobalRemote` (type: `boolean`):

Applies when you set locations. Keeps remote jobs that do not name a country.

## `maxResults` (type: `integer`):

The run stops after this many jobs. You pay per job returned, so this also caps your cost.

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

Company names, career board names or website domains, such as "Stripe" or "stripe.com".

## `excludeCompanies` (type: `array`):

Skip jobs from companies whose name contains any of these.

## `ats` (type: `array`):

Limit results to specific applicant tracking systems.

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

Only jobs marked remote by the employer or in the location text.

## `workplaceTypes` (type: `array`):

Filter by workplace. "Not stated" covers jobs that do not say.

## `seniority` (type: `array`):

Detected from the job title.

## `categories` (type: `array`):

Detected from the job title and department.

## `employmentTypes` (type: `array`):

Jobs that do not state a type are left out when this is set.

## `skills` (type: `array`):

Matches tools named in the job description, such as python, snowflake, salesforce or hubspot. Use lowercase. Works on jobs enriched from a full description, which is most but not all jobs.

## `salaryDisclosedOnly` (type: `boolean`):

Keep only jobs with a salary from the employer or found in the description.

## `minAnnualSalary` (type: `integer`):

Compares the top of the stated range, converted to yearly when pay is hourly or monthly. Applies only to jobs in the currency below.

## `salaryCurrency` (type: `string`):

Currency used by the minimum pay filter.

## `visaSponsorshipOnly` (type: `boolean`):

Based on wording in the description. Confirm with the employer.

## `excludeNoVisaSponsorship` (type: `boolean`):

Keeps jobs that say nothing about sponsorship.

## `excludeClearanceRequired` (type: `boolean`):

Skip jobs that mention a required security clearance.

## `includeDescription` (type: `boolean`):

Reads each job live from its source and adds the description as plain text. Much slower for big runs. Closed jobs are then skipped at no charge.

## `includeDescriptionHtml` (type: `boolean`):

Adds the original HTML when the source provides it.

## `verifyLive` (type: `boolean`):

Reads each job from its source before returning it. Slower. Always on when descriptions are included.

## `dedupe` (type: `boolean`):

Returns one job when a company lists the same title and location more than once.

## `onlyNewJobs` (type: `boolean`):

Remembers delivered jobs in a key-value store in your account and skips them next time, so a daily schedule returns each job once. Changing any filter starts a new history, unless you set a history name below.

## `deltaKey` (type: `string`):

Optional name for the "only new jobs" history, so you can change filters and keep it. Example: "sales-jobs-feed".

## Actor input object example

```json
{
  "firstSeenWithinDays": 2,
  "includeGlobalRemote": true,
  "maxResults": 1000,
  "remoteOnly": false,
  "salaryDisclosedOnly": false,
  "salaryCurrency": "USD",
  "visaSponsorshipOnly": false,
  "excludeNoVisaSponsorship": false,
  "excludeClearanceRequired": false,
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "verifyLive": false,
  "dedupe": true,
  "onlyNewJobs": true
}
```

# Actor output Schema

## `results` (type: `string`):

One item per open job, checked live at its source.

## `summary` (type: `string`):

How many jobs matched, were returned, or were skipped because they had closed.

# 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 = {
    "firstSeenWithinDays": 2,
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("atsfeed/daily-jobs-feed").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 = {
    "firstSeenWithinDays": 2,
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("atsfeed/daily-jobs-feed").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 '{
  "firstSeenWithinDays": 2,
  "maxResults": 1000
}' |
apify call atsfeed/daily-jobs-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,atsfeed/daily-jobs-feed"
        }
    }
}
```

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/iPEf7gAbj1VXDqfga/builds/2KB0IAWGJClVRcbEE/openapi.json
