# H-1B Visa Sponsor Checker & Score for Job Listings (`ultimatemc/h1b-visa-sponsor-score`) Actor

Check if a company sponsors H-1B visas. Adds U.S. Department of Labor H-1B filing history (LCAs by fiscal year, certified rate, top job titles, median offered wage) and a 0-100 sponsor score to company names or any LinkedIn, Indeed or jobs dataset. For job seekers, recruiters and job boards.

- **URL**: https://apify.com/ultimatemc/h1b-visa-sponsor-score.md
- **Developed by:** [Ultimate Foresight Inc](https://apify.com/ultimatemc) (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.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

**H-1B Visa Sponsor Checker** tells you whether a company sponsors H-1B visas, using official **U.S. Department of Labor (DOL) H-1B filing records**. Give it company names, or a jobs dataset from a LinkedIn, Indeed or careers-page scraper, and each employer gets its **H-1B filing history** (Labor Condition Applications by fiscal year, certified rate, top job titles, median offered wage, top worksite states) plus a **0-100 sponsor score** and tier. Click **Start** with the prefilled example (Google, Amazon, Infosys) to see results in seconds.

### What does H-1B Visa Sponsor Checker do?

- ✅ Looks up **any U.S. employer** in DOL H-1B LCA disclosure data for decisions from **2024-10-01 to 2026-06-30** (about 1.02 million cases, 86,789 employers)
- ✅ Returns filings per **fiscal year** (total, certified, denied, withdrawn, positions requested), certified rate, top 5 job titles, top occupations, **median offered wage** and top worksite states
- ✅ Adds a **sponsor score (0-100)** and tier: frequent, regular, occasional, rare, or no record found
- ✅ **Enriches job listings**: point it at the dataset from any Apify jobs scraper and every job gets an `h1bSponsor` object, so you can filter for visa-friendly employers
- ✅ Handles messy company names: ignores Inc, LLC, Ltd and similar suffixes, with exact, fuzzy and prefix matching, plus a match confidence and the matched DOL employer name
- ✅ Fast and private: the DOL index is bundled in the Actor, so no website is scraped and no personal data is returned

### Who is it for?

- 🎓 **International students and job seekers** (F-1, OPT, H-1B transfers) who want to apply only where sponsorship is likely
- 🧑‍💼 **Recruiters and staffing agencies** qualifying employers and roles
- 🗂️ **Job boards and career tools** adding a "sponsors visas" badge or filter
- 🤖 **AI job-search agents** that need a quick sponsor check as a tool

### How to check if a company sponsors H-1B

1. Click **Try for free** or **Start**. The input is prefilled with Google, Amazon and Infosys.
2. Type your own company names in **Employer names**, one per line.
3. Optional: to enrich job listings, pick a jobs dataset in **Jobs dataset ID**. The company field is auto-detected (companyName, company, employer, employerName, hiringOrganization, and others).
4. Click **Start**. Each company or job becomes one row.
5. Sort by `sponsorScore`, filter by `sponsorTier`, and download as JSON, CSV or Excel, or fetch through the API.

### Input example

This is the prefilled input:

```json
{ "employers": ["Google", "Amazon", "Infosys"] }
```

To enrich a jobs dataset instead (or as well):

```json
{ "datasetId": "YOUR_JOBS_DATASET_ID", "companyField": "companyName", "maxItems": 1000 }
```

Other options: `fuzzyThreshold` (default 92; higher means fewer but safer fuzzy matches) and `aggregateFamily` (off by default; sums all DOL entities whose names start with your query, such as every "Amazon ..." entity).

### Output example

This is real output from the prefilled input (run on 2026-10-21). Two of the three rows are shown; Infosys returned an exact match to INFOSYS LIMITED with a score of 100.

```json
[
  {
    "employerQuery": "Google",
    "normalizedQuery": "google",
    "matchType": "exact",
    "matchConfidence": 1,
    "matchedEmployer": "Google LLC",
    "matchedEntityCount": 1,
    "matchedEmployerNames": [
      "Google LLC"
    ],
    "hasH1bRecord": true,
    "sponsorScore": 100,
    "sponsorTier": "frequent sponsor",
    "lcaFilingsByFiscalYear": {
      "FY2025": {
        "lca_all": 8935,
        "h1b": 8778,
        "positions": 8778,
        "certified": 8684,
        "withdrawn": 79,
        "denied": 15
      },
      "FY2026": {
        "lca_all": 7486,
        "h1b": 7383,
        "positions": 8670,
        "certified": 7339,
        "withdrawn": 33,
        "denied": 11
      }
    },
    "certifiedLcaTotal": 16023,
    "deniedLcaTotal": 26,
    "certifiedRate": 0.9984,
    "topJobTitles": [
      {
        "title": "Software Engineer",
        "count": 9719
      },
      {
        "title": "Research Scientist",
        "count": 377
      },
      {
        "title": "Technical Program Manager",
        "count": 366
      },
      {
        "title": "Product Manager",
        "count": 350
      },
      {
        "title": "Program Manager",
        "count": 304
      }
    ],
    "topOccupations": [
      "Software Developers",
      "Data Scientists",
      "Computer and Information Research Scientists"
    ],
    "medianOfferedWageUsd": 186000,
    "lastCertifiedDecisionDate": "2026-06-30",
    "topWorksiteStates": [
      "CA",
      "WA",
      "NY"
    ],
    "relatedEmployers": [
      {
        "name": "Google Public Sector LLC",
        "h1bLcaTotal": 13
      },
      {
        "name": "Google Client Services LLC",
        "h1bLcaTotal": 2
      }
    ],
    "dataVintage": "DOL OFLC LCA decisions 2024-10-01 to 2026-06-30"
  },
  {
    "employerQuery": "Amazon",
    "normalizedQuery": "amazon",
    "matchType": "prefix-dominant",
    "matchConfidence": 0.75,
    "matchedEmployer": "Amazon.com Services LLC",
    "matchedEntityCount": 1,
    "matchedEmployerNames": [
      "Amazon.com Services LLC"
    ],
    "hasH1bRecord": true,
    "sponsorScore": 100,
    "sponsorTier": "frequent sponsor",
    "lcaFilingsByFiscalYear": {
      "FY2025": {
        "lca_all": 15528,
        "h1b": 15226,
        "positions": 58745,
        "certified": 15195,
        "withdrawn": 28,
        "denied": 3
      },
      "FY2026": {
        "lca_all": 13930,
        "h1b": 13715,
        "positions": 43878,
        "certified": 13712,
        "denied": 2,
        "withdrawn": 1
      }
    },
    "certifiedLcaTotal": 28907,
    "deniedLcaTotal": 5,
    "certifiedRate": 0.9998,
    "topJobTitles": [
      {
        "title": "Software Dev Engineer Ii",
        "count": 3430
      },
      {
        "title": "Software Development Engineer Ii",
        "count": 2812
      },
      {
        "title": "Software Dev Engineer I",
        "count": 1999
      },
      {
        "title": "Software Development Engineer I",
        "count": 1279
      },
      {
        "title": "Applied Scientist Ii",
        "count": 1089
      }
    ],
    "topOccupations": [
      "Software Developers",
      "Business Intelligence Analysts",
      "Computer and Information Systems Managers"
    ],
    "medianOfferedWageUsd": 156333,
    "lastCertifiedDecisionDate": "2026-06-30",
    "topWorksiteStates": [
      "WA",
      "CA",
      "TX"
    ],
    "relatedEmployers": [
      {
        "name": "Amazon Web Services, Inc.",
        "h1bLcaTotal": 6162
      },
      {
        "name": "Amazon Development Center U.S., Inc.",
        "h1bLcaTotal": 5032
      },
      {
        "name": "Amazon Data Services, Inc",
        "h1bLcaTotal": 2203
      },
      {
        "name": "Amazon Advertising LLC",
        "h1bLcaTotal": 321
      },
      {
        "name": "Amazon Payments, Inc.",
        "h1bLcaTotal": 22
      }
    ],
    "dataVintage": "DOL OFLC LCA decisions 2024-10-01 to 2026-06-30"
  }
]
```

With `datasetId`, each job item is copied unchanged and gets an `h1bSponsor` object with these same fields.

### How the sponsor score works

`score = volume (up to 60) + recency (up to 25) + certified rate (up to 15)`

- **Volume** = 60 × log10(1 + certified LCAs) / log10(1001). It reaches the maximum at about 1,000 certified LCAs in the data window.
- **Recency:** last certified decision within 90 days of the data end date scores 25; within 180 days, 20; within 365 days, 12; older, 5.
- **Certified rate** = certified / (certified + denied) × 15.

Tiers: frequent sponsor (70 or more), regular (40-69), occasional (15-39), rare (under 15), no record found.

### How much does an H-1B sponsor check cost?

This Actor uses **pay-per-event** pricing:

- **$0.002 per result** (one row per company or job item)
- a tiny Actor start fee of **$0.00005** per run
- plus the small Apify **platform usage** of the run, paid by you. For the prefilled 3-company example this was about **$0.0002** (512 MB, about 4 seconds).

So **1,000 companies or job listings cost about $2.00**, plus platform usage. You pay only for rows returned, and Apify lets you set a maximum cost per run.

### Use it through the API, integrations or AI agents

- **API:** `POST https://api.apify.com/v2/acts/ultimatemc~h1b-visa-sponsor-score/run-sync-get-dataset-items` with your Apify token and the input JSON as the body. JavaScript and Python examples are on the **API** tab.
- **AI agents (MCP):** add `https://mcp.apify.com?tools=ultimatemc/h1b-visa-sponsor-score` to Claude, Cursor, ChatGPT or any MCP client so your agent can answer "does this company sponsor H-1B?" with DOL data. See [Apify MCP server](https://docs.apify.com/mcp).
- **Chain it after a jobs scraper:** run any LinkedIn or Indeed jobs scraper, then pass its dataset ID here, manually, on a schedule, or with an Apify integration or webhook.

### Data source and license

- **U.S. Department of Labor, Office of Foreign Labor Certification, LCA Disclosure Data** (H-1B, H-1B1, E-3): [dol.gov/agencies/eta/foreign-labor/performance](https://www.dol.gov/agencies/eta/foreign-labor/performance). Files used: FY2025 Q1-Q4 and FY2026 Q3 (cumulative), covering decisions from 2024-10-01 to 2026-06-30. FY2026 is partial (October 2025 to June 2026).
- U.S. Government work, public domain (17 U.S.C. §105).
- Only employer-level fields are kept; contact, attorney and preparer fields are dropped.
- The data is bundled in the Actor and refreshed when the Actor is rebuilt with newer DOL files.

### FAQ

#### Does a certified LCA mean the company will sponsor me?

No. An LCA is the **first step** of H-1B sponsorship. A certified LCA is not an approved visa petition (USCIS decides that), and one LCA can cover several positions or be filed for an existing employee. Past filings don't guarantee future sponsorship.

#### Why does "Amazon" match "Amazon.com Services LLC"?

When there is no exact match, the Actor picks the largest DOL filer whose name starts with your query (`prefix-dominant`, shown with lower confidence) and lists other entities in `relatedEmployers`. Turn on `aggregateFamily` to sum them all.

#### A company shows "no record found". Does it never sponsor?

Not necessarily. It may file under a different legal name, be new to sponsorship, or have no decisions in the covered period. Try the legal entity name.

#### How current is the data?

Decisions through 2026-06-30. DOL publishes quarterly files with a lag of about 3-4 months.

#### Is this immigration advice?

No. It summarizes public DOL records. Talk to an immigration attorney about your situation.

### Limitations

- Matching uses the company name only, so different companies with similar names can be confused. Check `matchType`, `matchConfidence` and `matchedEmployer`.
- Median wage is the median of each case's lowest offered wage, converted to a yearly figure. With `aggregateFamily` it is a weighted median across entities.
- USCIS petition approvals and PERM green-card filings are not included.

### Other tools by Ultimate Foresight

- [Ad Copy Policy Checker for Meta, Google & TikTok](https://apify.com/ultimatemc/ad-copy-policy-checker): flags ad wording that may break platform ad policies before you submit.
- [Chain vs Independent Labeler for Google Maps Leads](https://apify.com/ultimatemc/chain-vs-independent-labeler): labels local businesses as chain, franchise or independent.

Wrong match or missing employer? Open an issue on the **Issues** tab with the company name.

# Actor input Schema

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

Company names to check, one per line, e.g. "Google", "Infosys Ltd". Legal suffixes (Inc, LLC, Ltd...) are ignored. Prefilled with three examples; replace with your own.

## `datasetId` (type: `string`):

ID of an Apify dataset with job items (e.g. output of a LinkedIn or Indeed jobs scraper). Each item is copied to the output with an added 'h1bSponsor' object.

## `companyField` (type: `string`):

Field in the dataset items holding the employer name. Leave empty to auto-detect (companyName, company, employer, employerName, hiringOrganization...).

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

Maximum number of names + dataset items to process.

## `fuzzyThreshold` (type: `integer`):

Minimum similarity for a fuzzy name match. Higher = fewer, safer matches.

## `aggregateFamily` (type: `boolean`):

If on, sums all employer entities whose name starts with the query (e.g. 'Amazon' = Amazon.com Services + Amazon Web Services + ...). Can mix unrelated companies with similar names. Off by default.

## Actor input object example

```json
{
  "employers": [
    "Google",
    "Amazon",
    "Infosys"
  ],
  "maxItems": 1000,
  "fuzzyThreshold": 92,
  "aggregateFamily": false
}
```

# Actor output Schema

## `results` (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 = {
    "employers": [
        "Google",
        "Amazon",
        "Infosys"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ultimatemc/h1b-visa-sponsor-score").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": [
        "Google",
        "Amazon",
        "Infosys",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ultimatemc/h1b-visa-sponsor-score").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": [
    "Google",
    "Amazon",
    "Infosys"
  ]
}' |
apify call ultimatemc/h1b-visa-sponsor-score --silent --output-dataset

```

## MCP server setup

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

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/ttzzn9LpIkXiBN5Xk/builds/6MPgy5olKy1f0Cxfk/openapi.json
