# Internship & New Grad Jobs Scraper API + H-1B Sponsors (`clearfeedlabs/entry-jobs-feed`) Actor

Internships, co-ops, new-grad and entry-level jobs from official public ATS APIs (Greenhouse, Lever, Ashby and more), with season, graduation year, visa sponsorship statements and DOL H-1B LCA sponsor history. Incremental: only new jobs.

- **URL**: https://apify.com/clearfeedlabs/entry-jobs-feed.md
- **Developed by:** [Clearfeed Labs](https://apify.com/clearfeedlabs) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 early-career jobs

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

### Internship & New Grad Jobs Feed with H-1B Sponsor Signals

**Internship & New Grad Jobs Feed** finds **internships, co-ops, new-grad, entry-level, apprenticeship and fellowship roles** straight from employers' own applicant tracking systems (Greenhouse, Lever, Ashby, Recruitee, Personio, Teamtailor, Pinpoint, Polymer) and adds **visa sponsorship signals**: what the posting says about sponsorship, and whether the employer filed **H-1B Labor Condition Applications in FY2025** according to public U.S. Department of Labor data.

Built for **students, new grads, international students on F-1/OPT/STEM OPT, career centers, bootcamps and early-career job boards**.

- **Leave `companies` empty** to scan a built-in preset of 22 companies with active early-career hiring (Stripe, Databricks, Figma, Coinbase, Roblox, Lyft, Pinterest, Cloudflare, Datadog, MongoDB, Affirm, Scale AI, SpaceX, Duolingo, Nuro, Waymo, Samsara, Verkada, Flexport, Notion, Ramp, Palantir), or list your own.
- **Every job is classified** as `internship`, `co-op`, `new-grad`, `entry-level`, `apprenticeship` or `fellowship`, with the evidence and a confidence level, plus the season (e.g. `Summer 2027`), graduation years and maximum years of experience when stated.
- **Sponsorship signals on every job:** `sponsorshipStatement` (`sponsors`, `no-sponsorship`, `mixed`, `not-mentioned`) with the quoted text, `h1bCertifiedLcasFY2025`, `h1bSponsorTier` and a combined `visaSponsorSignal`.
- **Incremental mode:** schedule it and get only new or changed jobs, plus removed ones (free).
- Straight from the employer's job board: fresh postings and direct apply links, without aggregator re-posts.

Need every role, not only early career? See the sister Actor [ATS Jobs Feed](https://apify.com/clearfeedlabs/ats-jobs-feed).

#### Ready-made examples (low spending caps)

- [Summer 2027 software and data internships at top tech companies](https://apify.com/clearfeedlabs/entry-jobs-feed/examples/summer-2027-tech-internships)
- [New grad and entry-level jobs at employers with H-1B history](https://apify.com/clearfeedlabs/entry-jobs-feed/examples/new-grad-jobs-h1b-sponsors)
- [Remote and US internships with H-1B employer details](https://apify.com/clearfeedlabs/entry-jobs-feed/examples/internships-h1b-employer-details)

#### Input highlights

| Field | What it does |
|---|---|
| `companies` | `greenhouse:stripe`, `lever:palantir`, `ashby:notion`, board URLs or names. Empty = student preset. |
| `earlyCareerTypes` | internship, co-op, new-grad, entry-level, apprenticeship, fellowship |
| `titleSignalsOnly` | Highest precision: only jobs whose title or employment type says so |
| `seasons`, `graduationYears`, `maxYearsExperience` | Narrow by term, class year and experience |
| `sponsorFilter` | any / hide "no sponsorship" / says it sponsors or has H-1B history / says it sponsors / has H-1B history |
| `minH1bFilings` | e.g. 10 = employers with 10+ certified FY2025 LCAs |
| `keywords`, `excludeKeywords`, `locations`, `remoteOnly`, `departments`, `postedSinceDays` | Standard job filters |
| `incremental`, `stateKey` | New and changed jobs only, per watchlist |
| `maxItems`, `maxJobsPerCompany` | Cost caps |
| `addH1bDetails` | Paid add-on, see pricing |

#### Output (one row per job)

```json
{
  "company": "Stripe", "title": "PhD Machine Learning Engineer, Intern",
  "earlyCareerType": "internship", "earlyCareerConfidence": "high", "earlyCareerEvidence": "title: \"Intern\"",
  "season": "Summer 2027", "graduationYears": [2027],
  "sponsorshipStatement": "not-mentioned", "h1bEmployerMatch": "Stripe, Inc.",
  "h1bCertifiedLcasFY2025": 290, "h1bSponsorTier": "frequent", "visaSponsorSignal": "history-only",
  "locations": [{ "raw": "...", "city": "...", "countryCode": "US" }], "workplaceType": "hybrid",
  "salary": { "min": null, "max": null, "currency": null },
  "applyUrl": "https://stripe.com/jobs/...", "changeType": "new"
}
```

Plus everything from ATS Jobs Feed: department, team, normalized locations, remote flags, structured or parsed salary, description text (contacts redacted by default), posted and updated dates and a content hash. The values above come from a test run on 2026-11-01 (URLs and locations shortened).

With the add-on, `h1bDetails` adds the employer's FY2025 LCA profile: certified filings, wage level I and II counts, `entryLevelShare`, median offered wage, top occupations and top worksite states.

#### Pricing

| Event | Price | When |
|---|---|---|
| Actor start | $0.00005 | Each run |
| Job | $0.0025 ($2.50 per 1,000) | Each new or changed early-career job. Unchanged and removed jobs in incremental mode are free. |
| Add-on: H-1B employer details | $0.002 | Only with `addH1bDetails`, and only on jobs where the employer was matched in DOL data |

The basic sponsorship signals (posting statement, FY2025 LCA count, tier) are **included in the job price**. Set a maximum cost per run in Apify to cap spend. A daily watch of the preset typically returns a few dozen new jobs, which costs cents.

#### How the pricing compares

Store list prices for similar Actors, checked on 2026-11-01 (they may change, so check each listing):

| Actor | What it covers | List price per 1,000 |
|---|---|---|
| **Internship & New Grad Jobs Feed** | 8 ATSs, early-career classification, sponsor statement + DOL H-1B history, incremental | **$2.50**, add-on optional |
| clearfeedlabs/ats-jobs-feed | Same ATSs, all roles, no early-career or visa signals | $2.00 |
| transparent_meteorite/visa-sponsorship-jobs-scraper | 3 ATSs, posting-text sponsor flag only | about $0.93 |
| santamaria-automations/wayup-us-scraper | One job site (WayUp) | about $5 per 1,000 detail rows |
| neuton/linkedin-visa-sponsorship-jobs-intelligence | LinkedIn postings mentioning sponsorship | $18.00 |
| pink_comic/dol-h1b-lca-visa-sponsor-salary-leads | Raw LCA filings, no jobs | $2.00 |

**What the extra $0.50 over the all-roles feed buys:** early-career classification with evidence and confidence, season and graduation-year parsing, experience caps, sponsorship statement parsing and an employer match against 32,681 employers with 2+ certified FY2025 DOL LCAs (out of 581,365 filings), all in one row. To get the same thing you'd have to run a jobs scraper plus an LCA scraper and join them yourself. **Compared with the text-only sponsor flag**, many postings never mention sponsorship (in our test, none of 80 early-career postings did), so DOL filing history is often the only signal available. Paying per new job in incremental mode keeps scheduled runs cheap.

#### Who it's for

- **International students:** filter to employers with real H-1B filing history and hide postings that say "no sponsorship".
- **Students and new grads:** a daily feed of fresh internships and new-grad roles from the source, before they spread to aggregators.
- **Career centers and bootcamps:** curated early-career feeds for Sheets, Slack or your job board via Apify integrations.
- **Early-career job boards and newsletters:** clean, deduplicated, incremental data with direct apply links.

#### Sources, attribution and responsible use

- Jobs come from employers' **public, documented ATS job-board APIs** (Greenhouse Job Board API, Lever Postings API, Ashby Job Posting API and others). We use no login, no employer key and no proxies, check robots.txt on every host, make at most 1 request per second per host, send an identifying User-Agent, and stop if a host says no.
- Sponsor history comes from the **U.S. Department of Labor, Office of Foreign Labor Certification, LCA disclosure data for FY2025** (https://www.dol.gov/agencies/eta/foreign-labor/performance), aggregated per employer (employers with 2 or more certified H-1B, H-1B1 or E-3 LCAs). We keep no personal contact data from those files.
- Not affiliated with or endorsed by any ATS vendor, employer, the Department of Labor or USCIS.

#### Disclaimer

- **Sponsorship signals are not a guarantee.** An LCA filing means an employer filed for a specific position, not that it sponsors every role, interns or new grads, or that a petition was approved. A posting's wording can be out of date. Employer-name matching across DOL and ATS data can miss or mismatch companies with different legal names. **Confirm sponsorship with the employer before applying or making plans.**
- **Not legal or immigration advice.** For visa, OPT, CPT or H-1B questions, talk to your school's international student office or a qualified immigration attorney.
- **Data accuracy:** jobs reflect what each employer publishes at run time. Postings can close, change or be filled without notice. Early-career classification is automatic and can be wrong; the evidence field shows why each job was included.
- Provided "as is" without warranty. You're responsible for how you use the data and for following applicable laws and each source's terms.

#### FAQ

**Do I need any accounts or keys?** No.
**Why are some jobs from companies with no sponsorship statement marked `history-only`?** The posting doesn't mention sponsorship, but the employer filed H-1B LCAs in FY2025.
**Can I add companies on other ATSs?** Only ATSs with documented public APIs are supported. Workday, LinkedIn and Indeed aren't, on purpose.
**Is the H-1B data updated?** It's a bundled FY2025 snapshot (Oct 2024 to Sep 2025). We refresh it when DOL publishes a full new fiscal year.

Built by **Clearfeed Labs**: clean, compliant data feeds. Found an issue or want a feature? Open an issue on the Actor's Issues tab with a small example input. If the Actor helped your workflow, an honest review helps other users decide.

***

More Clearfeed Labs tools: [clearfeedlabs.com](https://clearfeedlabs.com/actors/entry-jobs-feed/)

# Actor input Schema

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

Companies as "ats:slug" (e.g. greenhouse:stripe, lever:palantir, ashby:notion), board URLs, or plain names (we probe supported ATSs). Leave empty to scan the built-in student preset of companies with active early-career hiring.

## `careerPageUrls` (type: `array`):

Optional. A company's own careers page; the Actor reads it once (if robots.txt allows) and follows any Greenhouse/Lever/Ashby/Recruitee/Personio/Teamtailor/Pinpoint/Polymer board links it finds.

## `useStudentPreset` (type: `boolean`):

22 companies (Stripe, Databricks, Figma, Coinbase, Waymo, SpaceX, Palantir, Notion, Ramp and more) whose public boards had early-career roles when checked on 2026-11-01.

## `earlyCareerTypes` (type: `array`):

Empty = all early-career types.

## `includeNonEarlyCareer` (type: `boolean`):

Off = only jobs classified as internship, co-op, new grad, entry level, apprenticeship or fellowship.

## `titleSignalsOnly` (type: `boolean`):

Keep only jobs whose title or employment type says intern/new grad/entry level etc. Off also keeps jobs whose description clearly says so (e.g. '0-2 years', 'class of 2027'), marked earlyCareerConfidence = medium.

## `seasons` (type: `array`):

e.g. 'summer 2027', 'fall', '2027'. Matches the season/term found in the title or description.

## `graduationYears` (type: `array`):

e.g. \[2026, 2027]. Jobs that state other graduation years are excluded; jobs that state none are kept.

## `maxYearsExperience` (type: `integer`):

Drop jobs asking for more years than this (when stated).

## `sponsorFilter` (type: `string`):

Sponsorship signals come from the posting text and public DOL H-1B LCA disclosure data. They are signals, not guarantees.

## `minH1bFilings` (type: `integer`):

Only employers with at least this many certified H-1B/E-3 LCAs in FY2025.

## `addH1bDetails` (type: `boolean`):

Attach the employer's FY2025 LCA profile: certified filings, wage level I/II counts (entry-level share), median offered wage, top occupations and worksite states. Charged only on jobs where an employer match is found.

## `keywords` (type: `array`):

Keep jobs whose title or department contains any of these (case-insensitive).

## `excludeKeywords` (type: `array`):

Drop jobs whose title contains any of these.

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

City, region, country name or 2-letter country code (e.g. 'New York', 'Germany', 'US'). Remote jobs also match 'remote'.

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

Keep only jobs flagged remote.

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

Keep only these workplace types.

## `departments` (type: `array`):

Substring match on department or team.

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

Inferred from the title.

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

Keep only these normalized employment types.

## `postedSinceDays` (type: `integer`):

0 = no limit. Jobs without a posted date are kept.

## `incremental` (type: `boolean`):

Remembers what earlier runs saw (in the named key-value store 'ats-jobs-feed-state'). Outputs only new and changed jobs, plus free 'removed' records for jobs that disappeared. You pay only for new/changed jobs.

## `stateKey` (type: `string`):

Use a different key per saved search/filter set so their histories don't mix. Letters, digits, '\_' and '-'.

## `emitUnchanged` (type: `boolean`):

In incremental mode, also output (and pay for) jobs that did not change.

## `reportRemoved` (type: `boolean`):

In incremental mode, add a free record with changeType 'removed' for each job that is gone.

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

Include description (HTML + text).

## `redactContacts` (type: `boolean`):

Strips personal contact details (e.g. recruiter e-mails) from descriptions. Recommended for GDPR/CCPA.

## `dedupeAcrossSources` (type: `boolean`):

Drops a job if the same company + title + city was already output from another board in this run.

## `maxJobsPerCompany` (type: `integer`):

0 = no limit.

## `maxItems` (type: `integer`):

0 = no limit.

## `probeUnknownAts` (type: `boolean`):

For names without a URL, try each ATS's public board for the name (about 1 request per ATS).

## `minRequestIntervalMs` (type: `integer`):

Politeness delay per host. Never set below 500 ms; a robots.txt Crawl-delay is honoured if larger.

## `companyConcurrency` (type: `integer`):

Requests to the same host are always serialised and spaced.

## Actor input object example

```json
{
  "useStudentPreset": true,
  "includeNonEarlyCareer": false,
  "titleSignalsOnly": false,
  "sponsorFilter": "any",
  "addH1bDetails": false,
  "remoteOnly": false,
  "postedSinceDays": 0,
  "incremental": false,
  "stateKey": "default",
  "emitUnchanged": false,
  "reportRemoved": true,
  "includeDescription": true,
  "redactContacts": true,
  "dedupeAcrossSources": true,
  "maxJobsPerCompany": 0,
  "maxItems": 0,
  "probeUnknownAts": true,
  "minRequestIntervalMs": 1000,
  "companyConcurrency": 4
}
```

# Actor output Schema

## `jobs` (type: `string`):

No description

## `companyReport` (type: `string`):

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("clearfeedlabs/entry-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("clearfeedlabs/entry-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 '{}' |
apify call clearfeedlabs/entry-jobs-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,clearfeedlabs/entry-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/jBkCF00vjfEk7bUUB/builds/0y0dY2EzuWOqqxdB2/openapi.json
