# H-1B Visa & LCA Sponsor Scraper - Employer Leads (`scrapesage/h1b-visa-scraper`) Actor

Scrape US DOL H-1B / LCA visa data: sponsoring employers, salaries, job titles, worksites, FEIN & NAICS, HR contacts (email & phone) and immigration attorneys & law firms. Search by employer, job or city, build sponsor profiles, monitor new filings. No API key. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/h1b-visa-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Jobs, Lead generation, Agents
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 h-1b / lca filings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## H-1B Visa & LCA Sponsor Scraper — Employer Leads, Salaries, HR & Attorney Contacts

Extract **complete US DOL H-1B / LCA visa-sponsorship data** — the fields other scrapers leave empty: **sponsoring employer firmographics (phone, FEIN, NAICS), the named HR / global-mobility point-of-contact with their direct email and phone, and the immigration attorney + law firm** representing each petition — plus salary, prevailing wage, wage level, worksite, job title and case status.

Every record is a ready-to-use **US B2B lead**: a company that actively spends on immigration, the exact person responsible for it, and the law firm they already use.

No login, no cookies, no browser, no API key — fast HTML extraction straight from the public DOL disclosure mirror.

### Why this H-1B scraper?

Most "H-1B salary" scrapers return only employer, title, and salary — a thin table. This actor pulls the **full LCA disclosure record** behind every filing and ships the **richest dataset in the category**:

| Data | Typical scrapers | This actor |
|---|---|---|
| Employer, job title, salary, worksite city | ✅ | ✅ |
| Annualized salary (hourly/weekly normalized) | ❌ | ✅ |
| Prevailing wage + wage level (I–IV) | ❌ | ✅ |
| Employer **phone, FEIN, NAICS code, full address** | ❌ | ✅ |
| Named **HR / global-mobility contact** (name + job title) | ❌ | ✅ |
| HR contact **direct email + phone** | ❌ | ✅ |
| **Immigration attorney** (name, email, phone) | ❌ | ✅ |
| **Law firm** name + bar/state of highest court | ❌ | ✅ |
| Case status (Certified / Denied / Withdrawn) | partial | ✅ |
| Full worksite address + county | ❌ | ✅ |
| Aggregated **employer / sponsor profile** | ❌ | ✅ |
| Lead score (0–100) per record | ❌ | ✅ |
| Monitor mode — only new filings | ❌ | ✅ |

### Use cases

- **B2B lead generation** — every H-1B sponsor is a company that spends on immigration, relocation, and hiring. Reach the **HR / global-mobility decision-maker** directly (`pocName`, `pocJobTitle`, `pocEmail`, `pocPhone`) — the exact buyer for immigration law firms, relocation & global-mobility platforms, RPO/staffing, payroll & HR SaaS, and benefits providers.
- **Immigration-law competitive intelligence** — see which **law firms and attorneys** file for which employers (`lawFirmName`, `attorneyName`, `attorneyEmail`). Find sponsors not yet represented, or prospect a competitor's client list.
- **Salary & compensation benchmarking** — real, government-filed wages by employer, job title, SOC code, worksite and wage level (`baseSalary`, `prevailingWage`, `pwWageLevel`) — feed comp tools, offer calculators and market reports.
- **Recruiting & sourcing** — find employers sponsoring specific roles in specific cities; target candidates near work-authorization renewals or build sponsor lists for job boards.
- **Sales territory & firmographic enrichment** — `employerFein` and `naicsCode` let you dedupe, classify by industry, and merge with your CRM.
- **Monitoring** — schedule a daily/weekly run to catch **newly filed petitions** for a target employer, role, or city the moment they post.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **H-1B Visa & LCA Sponsor Scraper**, choose a **mode**, enter employers / job titles / cities (or paste case numbers / URLs), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "search",
    "employers": ["Anthropic", "OpenAI"],
    "jobTitles": ["Software Engineer"],
    "year": "2024",
    "includeCaseDetails": true,
    "minSalary": 150000,
    "certifiedOnly": true,
    "maxResults": 200
}
```

- **mode** — `search` (individual filings), `employerProfile` (one aggregated sponsor record per employer), or `caseDetails` (full record for specific case numbers).
- **employers / jobTitles / cities** — `search` filters, combined as a cartesian product (capped by `maxSearchCombinations`). In `employerProfile` mode, one record per employer.
- **year** — disclosure year (`2012`–`2026`) or `All`.
- **caseNumbers** — `caseDetails` mode: exact LCA case numbers (e.g. `I-200-24291-412570`).
- **startUrls** — paste `h1bdata.info` URLs: `details.php?id=<CASE>` or `index.php?em=&job=&city=&year=`. Auto-routed.
- **includeCaseDetails** *(default true)* — fetch each filing's full detail page (employer firmographics, HR contact, attorney, wages, worksite). Turn off for fast, lightweight filing rows.
- **includeEmployerFirmographics** *(default true)* — `employerProfile` mode: attach firmographics & contacts from one representative case.
- **minSalary / certifiedOnly / withEmailOnly** — result filters.
- **monitorMode** *(default false)* — emit only records new since the last run.

### Output

`mode: "search"` with `includeCaseDetails` (or `mode: "caseDetails"`) — one full LCA record per filing (`type: "caseDetails"`):

```json
{
    "type": "caseDetails",
    "caseNumber": "I-200-24291-412570",
    "status": "Certified",
    "visaClass": "H-1B",
    "jobTitle": "Member of Technical Staff",
    "socCode": "15-1252",
    "socTitle": "Software Developers",
    "fullTimePosition": true,
    "submitDate": "2024-10-16",
    "decisionDate": "2024-10-23",
    "employmentStartDate": "2024-10-21",
    "employmentEndDate": "2027-10-20",
    "employerName": "Anthropic, PBC",
    "employerAddress": "548 Market Street PMB 90375",
    "employerCity": "San Francisco",
    "employerState": "CA",
    "employerPostalCode": "94104",
    "employerPhone": "14153266303",
    "employerFein": "86-1696045",
    "naicsCode": "541715",
    "pocName": "Elaine Go",
    "pocJobTitle": "Global Mobility",
    "pocPhone": "14153266303",
    "pocEmail": "elaine@anthropic.com",
    "agentRepresentingEmployer": true,
    "attorneyName": "Eddie Corona",
    "attorneyPhone": "14089191060",
    "attorneyEmail": "ecorona@fragomen.com",
    "lawFirmName": "Fragomen, Del Rey, Bernsen & Loewy, LLP",
    "worksiteAddress1": "155 Avenue of the Americas",
    "worksiteCity": "New York",
    "worksiteCounty": "NEW YORK",
    "worksiteState": "NY",
    "worksitePostalCode": "10013",
    "baseSalary": 300000,
    "wageRateFrom": 300000,
    "wageRateUnit": "Year",
    "prevailingWage": 179982,
    "pwWageLevel": "IV",
    "willfulViolator": false,
    "h1bDependent": false,
    "preparerName": "Ana Valencia Hernandez",
    "preparerEmail": "avalenciahernandez@fragomen.com",
    "leadScore": 92,
    "detailUrl": "https://h1bdata.info/details.php?id=I-200-24291-412570",
    "scrapedAt": "2026-06-19T12:00:00.000Z"
}
```

`mode: "employerProfile"` — one aggregated sponsor record (`type: "employerProfile"`) with `totalFilings`, `salaryMin/Median/Avg/Max`, `topJobTitles`, `topLocations` and representative firmographics + contacts.

`mode: "search"` with `includeCaseDetails: false` — lightweight rows (`type: "filing"`): employer, job title, salary, city/state, dates and case number.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly with `monitorMode` to capture newly filed petitions for a target employer, role, or city; perfect for lead pipelines and alerts.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/h1b-visa-scraper').call({
    mode: 'search',
    cities: ['Austin, TX'],
    jobTitles: ['Data Scientist'],
    year: '2024',
    includeCaseDetails: true,
    maxResults: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} H-1B records & leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new sponsor leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds new filings.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find H-1B sponsors hiring data scientists in Austin and list their HR contacts" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **B2B prospecting & firmographic stack**:

- **[Financial Advisor & Broker Scraper](https://apify.com/scrapesage/financial-advisor-scraper)** — FINRA & SEC advisor / RIA leads and compliance data.
- **[Court Records Scraper](https://apify.com/scrapesage/court-records-scraper)** — case law, federal dockets, parties, attorneys & judges.
- **[FindLaw Scraper](https://apify.com/scrapesage/findlaw-scraper)** — lawyers, law firms & legal leads with emails.
- **[NPI Registry Scraper](https://apify.com/scrapesage/npi-nppes-scraper)** — 8M+ US healthcare providers with direct contacts.
- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — company filings, financials & insider data.
- **[USASpending Scraper](https://apify.com/scrapesage/usaspending-scraper)** — federal contract & grant awards and recipient leads.
- **[Levels.fyi Scraper](https://apify.com/scrapesage/levels-fyi-scraper)** — tech salaries, compensation & leveling.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.

### Tips

- **Big employers**: a large sponsor (e.g. Amazon) can file tens of thousands of LCAs per year. Use `maxResults`, narrow with `jobTitles`/`cities`, or use `employerProfile` mode to get one aggregated record instead of every filing.
- **Cost control**: `includeCaseDetails` adds one request per filing (and the richer charge). Turn it off when you only need employer/title/salary rows.
- **Find the HR & attorney contacts**: they live on the detail page — keep `includeCaseDetails` on (search) or `includeEmployerFirmographics` on (employer profile).
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to receive only newly filed petitions each run.

### FAQ

**What is an LCA / H-1B disclosure?** Every H-1B (and H-1B1 / E-3) petition requires the employer to file a Labor Condition Application (ETA-9035) with the US Department of Labor, which DOL publishes. This actor reads that public disclosure data — including employer, wage, worksite, HR contact and attorney.

**Do I need an API key or login?** No. The data is public; the actor extracts it directly. Just run it.

**Which years are available?** 2012 through the current year (plus `All`). New filings appear continuously as DOL processes them.

**Where do the emails and phones come from?** They are part of the official LCA disclosure record itself (the employer's point-of-contact and the attorney/agent of record) — not scraped from anywhere else.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new sponsors automatically?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); each run emits only filings new since the last one. Add a [webhook](https://docs.apify.com/platform/integrations/webhooks) or [Zapier zap](https://docs.apify.com/platform/integrations/zapier) to push them into your CRM.

**Is scraping this data legal?** This actor collects publicly available US government disclosure data only. You are responsible for using it in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and the source's terms.

**A field is null — why?** Some filings genuinely omit a field (e.g. no agent/attorney, or a self-filed petition with no separate POC). Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `mode` (type: `string`):

search = individual H-1B/LCA filings (employer, job, salary, worksite, case #). employerProfile = one aggregated sponsor record per employer (filing volume, salary stats, top roles & locations + representative firmographics/contacts). caseDetails = full record for specific LCA case numbers.

## `employers` (type: `array`):

Sponsoring employers to search, e.g. "Google", "Amazon", "Anthropic PBC". search mode: matched against the employer name. employerProfile mode: one sponsor record per employer. Combined with jobTitles/cities in search mode.

## `jobTitles` (type: `array`):

search mode: filter filings by job title, e.g. "Data Scientist", "Software Engineer", "Product Manager". Combined with employers and cities (cartesian product, capped by Max search combinations).

## `cities` (type: `array`):

search mode: filter filings by worksite city, e.g. "New York", "San Francisco", "Austin, TX" (the state part is ignored — h1bdata matches by city name).

## `year` (type: `string`):

Disclosure year to search (DOL fiscal-year disclosure data). Use "All" to search across every year (large for big employers).

## `caseNumbers` (type: `array`):

caseDetails mode: exact LCA case numbers to look up, e.g. "I-200-24291-412570". Each returns the complete disclosure record.

## `startUrls` (type: `array`):

Paste h1bdata.info URLs to scrape directly: details.php?id=<CASE> (a single case) or index.php?em=\&job=\&city=\&year= (a search). Auto-routed.

## `includeCaseDetails` (type: `boolean`):

search mode: for every filing, also fetch its detail page — adding employer phone/FEIN/NAICS/address, the HR point-of-contact (name, job title, email, phone), the immigration attorney & law firm (name, email, phone), worksite, prevailing wage & wage level and compliance flags. One extra request per filing (charged as case details). Turn off for fast, lightweight filing rows only.

## `includeEmployerFirmographics` (type: `boolean`):

employerProfile mode: fetch one representative case per employer to attach firmographics (address, phone, FEIN, NAICS) and contacts (HR point-of-contact email/phone, immigration attorney & law firm). One extra request per employer.

## `minSalary` (type: `integer`):

Only return records with an annualized wage at or above this amount — a fast way to surface senior/high-value sponsored roles.

## `certifiedOnly` (type: `boolean`):

Only keep filings with a Certified status (excludes Denied/Withdrawn). Applies when case details are fetched.

## `withEmailOnly` (type: `boolean`):

Only keep records that carry at least one contact email (HR point-of-contact, attorney or preparer). Applies to case-detail and employer-profile records.

## `maxSearchCombinations` (type: `integer`):

search mode: cap on the number of employer × job × city query combinations to run.

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

Maximum number of records to return for this run.

## `monitorMode` (type: `boolean`):

Remember records seen in previous runs (in a named key-value store) and emit only records that are new since the last run — by case number for filings/case details, by employer+year for profiles. Ideal for a daily/weekly Schedule that watches an employer, job title or city for newly filed H-1B petitions. Does not conflict with Apify Schedules.

## `proxyConfiguration` (type: `object`):

Proxy for outbound requests. The default Apify Proxy is recommended — the actor rotates a fresh IP per request.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "mode": "search",
  "employers": [
    "Anthropic"
  ],
  "year": "2025",
  "includeCaseDetails": true,
  "includeEmployerFirmographics": true,
  "certifiedOnly": false,
  "withEmailOnly": false,
  "maxSearchCombinations": 60,
  "maxResults": 100,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped records as JSON items in the default dataset.

# 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 = {
    "employers": [
        "Anthropic"
    ],
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/h1b-visa-scraper").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 = {
    "employers": ["Anthropic"],
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/h1b-visa-scraper").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 '{
  "employers": [
    "Anthropic"
  ],
  "urlsFromFile": ""
}' |
apify call scrapesage/h1b-visa-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/h1b-visa-scraper"
        }
    }
}

```

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/4kHI0XrceMMkzmGFi/builds/47ix4jyOyCCJTdjW7/openapi.json
