> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecroma.com/llms.txt
> Use this file to discover all available pages before exploring further.

# DOL H-1B and PERM Labor Certifications

> Every H-1B Labor Condition Application and every PERM labor certification DOL decided since fiscal year 2008, the filings an employer makes to hire a foreign worker and to sponsor one for a green card: the employer and its FEIN, the job, the wage, the worksites, the attorney and the decision.

Before a US employer can hire a worker on an H-1B visa (or an H-1B1 or E-3),
it files a Labor Condition Application with the Department of Labor: the job
and its occupation code, the wage it will pay against the prevailing wage for
the role, every place the worker will work, and the attorney who filed. DOL's
Office of Foreign Labor Certification certifies or denies it and publishes
every determination.

It is the most direct public record of which roles a company hires for from
abroad and what it pays. Every determination since fiscal year 2008, with
every worksite, organized and ready to query, and brought up to date as DOL
publishes each quarter. The employer's FEIN, published from fiscal year 2024,
joins a filing exactly to the same company's SEC filings.

To sponsor a worker for permanent residence, the employer then files a PERM
labor certification: the job and its requirements, the offered and prevailing
wage, how it recruited US workers first, and, on the form used until 2023, the
worker's citizenship, current visa and education. Every PERM determination
since fiscal year 2008 is here too, on both forms.

<Note>
  The whole source, organized and ready to query: every endpoint on this page answers in milliseconds. Every response carries `as_of`: how current the data is. [How datasets work](/datasets).
</Note>

## Search LCA determinations

`POST /us/dol-oflc/lca-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Searches the determinations by employer, job, FEIN, visa class, status, occupation,
worksite state, wage and date. Newest decision first.

| Field            | Type    | Notes                                                                                                                     |
| ---------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| `query`          | string  | Optional. Words to match in the employer's name, its trade name and the job title. Every word must match; no stemming.    |
| `employer_fein`  | string  | Optional. The employer's FEIN, nine digits, with or without the hyphen (published from fiscal year 2024).                 |
| `case_number`    | string  | Optional. DOL's case number, e.g. `I-200-25267-332158`.                                                                   |
| `fiscal_year`    | integer | Optional. The federal fiscal year DOL published the determination under (October to September), e.g. `2026`. Default `0`. |
| `visa_class`     | enum    | Optional. `H-1B`, `H-1B1 Chile`, `H-1B1 Singapore` or `E-3 Australian`.                                                   |
| `case_status`    | enum    | Optional. `Certified`, `Certified - Withdrawn`, `Withdrawn` or `Denied`.                                                  |
| `soc_code`       | string  | Optional. The occupation's SOC code, e.g. `15-1252.00` (software developers).                                             |
| `worksite_state` | string  | Optional. The primary worksite's state, two letters, e.g. `CA`.                                                           |
| `min_wage`       | number  | Optional. Only determinations offering at least this wage (in the wage's own unit, usually a year). Default `0`.          |
| `decided_from`   | string  | Optional. Decision date lower bound (`yyyy-mm-dd`, inclusive).                                                            |
| `decided_to`     | string  | Optional. Decision date upper bound (`yyyy-mm-dd`, inclusive).                                                            |
| `page`           | integer | Optional. 1-based page. Default `1`.                                                                                      |
| `per_page`       | integer | Optional. Results per page, 1-50. Default `20`.                                                                           |

```bash theme={"dark"}
curl https://api.croma.run/us/dol-oflc/lca-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "query": "software engineer",
        "worksite_state": "CA",
        "case_status": "Certified"
      }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `cases[]`, newest decision first.

Every determination carries `id` (`<fiscal_year>:<case_number>`), `fiscal_year`, `case_number`, `case_status`, `received_date`, `decision_date`, `original_cert_date`, `visa_class`, `job_title`, `soc_code`, `soc_title`, `full_time_position`, `begin_date`, `end_date`, the worker counts (`total_worker_positions`, `new_employment`, `continued_employment`, `change_previous_employment`, `new_concurrent_employment`, `change_employer`, `amended_petition`), `employer` (`{ name, trade_name_dba, address_1, address_2, city, state, postal_code, country, province, phone, phone_ext, fein, naics_code }`), `employer_contact` (name, job title, address, phone and email), `agent_representing_employer`, `agent_attorney` (name, address, phone and email), `law_firm` (`{ name, fein }`), `state_of_highest_court`, `name_of_highest_state_court`, `worksite` (the primary one), `wage` (`{ rate_from, rate_to, unit, prevailing_wage, prevailing_wage_unit, prevailing_wage_level, ... }`), `total_worksite_locations`, `agree_to_lc_statement`, `h1b_dependent`, `willful_violator`, `support_h1b`, `statutory_basis`, `appendix_a_attached`, `public_disclosure`, `preparer`, `appendix_a[]` (the exempt workers' institution, field of study and degree date), `answers` (the columns only files before fiscal year 2020 carry, such as `withdrawn` or `job_code`, as filed) and `source_file`.

A case DOL decided again in a later fiscal year (a certification later withdrawn) is a determination of its own, and a second, different filing a year's file lists under the same case number is `<fiscal_year>:<case_number>~2`. Files before fiscal year 2020 publish fewer columns: what they do not carry is `null`. Wages are US dollars per `unit`. Dates are `yyyy-mm-dd`; FEINs are nine digits; empty fields are `null`.

## One LCA case

`POST /us/dol-oflc/lca-case/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Resolves one case with every determination and its worksites.

| Field         | Type   | Notes                                                       |
| ------------- | ------ | ----------------------------------------------------------- |
| `case_number` | string | **Required.** DOL's case number, e.g. `I-200-25267-332158`. |

```bash theme={"dark"}
curl https://api.croma.run/us/dol-oflc/lca-case/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "case_number": "I-200-25267-332158" }'
```

Returns `found`, `case_number`, `as_of`, `determinations[]` (newest fiscal year first) and `worksites[]` (of the newest determination).

Every determination carries `id` (`<fiscal_year>:<case_number>`), `fiscal_year`, `case_number`, `case_status`, `received_date`, `decision_date`, `original_cert_date`, `visa_class`, `job_title`, `soc_code`, `soc_title`, `full_time_position`, `begin_date`, `end_date`, the worker counts (`total_worker_positions`, `new_employment`, `continued_employment`, `change_previous_employment`, `new_concurrent_employment`, `change_employer`, `amended_petition`), `employer` (`{ name, trade_name_dba, address_1, address_2, city, state, postal_code, country, province, phone, phone_ext, fein, naics_code }`), `employer_contact` (name, job title, address, phone and email), `agent_representing_employer`, `agent_attorney` (name, address, phone and email), `law_firm` (`{ name, fein }`), `state_of_highest_court`, `name_of_highest_state_court`, `worksite` (the primary one), `wage` (`{ rate_from, rate_to, unit, prevailing_wage, prevailing_wage_unit, prevailing_wage_level, ... }`), `total_worksite_locations`, `agree_to_lc_statement`, `h1b_dependent`, `willful_violator`, `support_h1b`, `statutory_basis`, `appendix_a_attached`, `public_disclosure`, `preparer`, `appendix_a[]` (the exempt workers' institution, field of study and degree date), `answers` (the columns only files before fiscal year 2020 carry, such as `withdrawn` or `job_code`, as filed) and `source_file`.

A case DOL decided again in a later fiscal year (a certification later withdrawn) is a determination of its own, and a second, different filing a year's file lists under the same case number is `<fiscal_year>:<case_number>~2`. Files before fiscal year 2020 publish fewer columns: what they do not carry is `null`. Wages are US dollars per `unit`. Dates are `yyyy-mm-dd`; FEINs are nine digits; empty fields are `null`.

Every worksite carries `id` (`<fiscal_year>:<case_number>:<n>`), `fiscal_year`, `case_number`, `n` (its order in the case), `workers`, `secondary_entity`, `secondary_entity_business_name`, the address (`address_1`, `address_2`, `city` as filed, `county`, `state` as a two-letter code, `postal_code`), `city_key` (the city as matched: `AUSTIN` for `Austin, TX`), the wage offered there (`rate_from`, `rate_to`, `unit`) and its prevailing wage, the case's `employer_fein` and `employer_name`, and `answers` (what only files before fiscal year 2020 carry for a worksite). Until fiscal year 2019 the worksites come from the case rows: two per case at most until 2014, one from 2015 to 2018, up to ten in 2019.

## Search worksites

`POST /us/dol-oflc/lca-worksites-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Searches every worksite by place, employer and year.

| Field           | Type    | Notes                                                                                                                     |
| --------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |
| `employer_fein` | string  | Optional. The employer's FEIN, nine digits, with or without the hyphen (published from fiscal year 2024).                 |
| `case_number`   | string  | Optional. DOL's case number: every worksite of one case.                                                                  |
| `fiscal_year`   | integer | Optional. The federal fiscal year DOL published the determination under (October to September), e.g. `2026`. Default `0`. |
| `state`         | string  | Optional. The worksite's state, two letters, e.g. `TX`.                                                                   |
| `city`          | string  | Optional. The worksite's city, in any case, e.g. `Austin`.                                                                |
| `postal_code`   | string  | Optional. The worksite's five-digit ZIP code.                                                                             |
| `page`          | integer | Optional. 1-based page. Default `1`.                                                                                      |
| `per_page`      | integer | Optional. Results per page, 1-50. Default `20`.                                                                           |

```bash theme={"dark"}
curl https://api.croma.run/us/dol-oflc/lca-worksites-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "city": "Austin", "state": "TX" }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `worksites[]`, newest fiscal year first.

Every worksite carries `id` (`<fiscal_year>:<case_number>:<n>`), `fiscal_year`, `case_number`, `n` (its order in the case), `workers`, `secondary_entity`, `secondary_entity_business_name`, the address (`address_1`, `address_2`, `city` as filed, `county`, `state` as a two-letter code, `postal_code`), `city_key` (the city as matched: `AUSTIN` for `Austin, TX`), the wage offered there (`rate_from`, `rate_to`, `unit`) and its prevailing wage, the case's `employer_fein` and `employer_name`, and `answers` (what only files before fiscal year 2020 carry for a worksite). Until fiscal year 2019 the worksites come from the case rows: two per case at most until 2014, one from 2015 to 2018, up to ten in 2019.

## Search PERM determinations

`POST /us/dol-oflc/perm-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Searches the PERM determinations by employer, job, law firm, FEIN, status, occupation,
worksite state, the worker's citizenship, wage and date. Newest decision first.

| Field                    | Type    | Notes                                                                                                                                |
| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `query`                  | string  | Optional. Words to match in the employer's name, its trade name, the job title and the law firm. Every word must match; no stemming. |
| `employer_fein`          | string  | Optional. The employer's FEIN, nine digits, with or without the hyphen (published from fiscal year 2024).                            |
| `case_number`            | string  | Optional. DOL's PERM case number, e.g. `G-100-25273-349207` or `A-23043-00641`.                                                      |
| `fiscal_year`            | integer | Optional. The federal fiscal year DOL published the determination under (October to September), e.g. `2026`. Default `0`.            |
| `case_status`            | enum    | Optional. `Certified`, `Certified - Expired`, `Withdrawn` or `Denied`.                                                               |
| `soc_code`               | string  | Optional. The occupation's SOC code, e.g. `15-1252.00` (software developers).                                                        |
| `worksite_state`         | string  | Optional. The worksite's state, two letters, e.g. `WA`.                                                                              |
| `country_of_citizenship` | string  | Optional. The worker's country of citizenship as DOL writes it, in English, e.g. `INDIA` (form used until 2023 only).                |
| `min_wage`               | number  | Optional. Only determinations offering at least this wage (in the wage's own unit, usually a year). Default `0`.                     |
| `decided_from`           | string  | Optional. Decision date lower bound (`yyyy-mm-dd`, inclusive).                                                                       |
| `decided_to`             | string  | Optional. Decision date upper bound (`yyyy-mm-dd`, inclusive).                                                                       |
| `page`                   | integer | Optional. 1-based page. Default `1`.                                                                                                 |
| `per_page`               | integer | Optional. Results per page, 1-50. Default `20`.                                                                                      |

```bash theme={"dark"}
curl https://api.croma.run/us/dol-oflc/perm-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "query": "software engineer",
        "worksite_state": "WA",
        "case_status": "Certified"
      }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `cases[]`, newest decision first.

Every determination carries `id` (`<fiscal_year>:<case_number>`), `fiscal_year`, `case_number`, `form` (`9089` for the form used until 2023, `9089_2023` for the revised one), `case_status`, `received_date`, `decision_date`, `decision_dates[]`, `employer` (`{ name, trade_name, address_1, address_2, city, state, postal_code, country, province, phone, phone_ext, fein, naics_code, employees, year_commenced, worker_ownership_interest, relationship_to_worker }`), `employer_contact` (name, job title, address, phone and email), `agent_attorney` (`representative_type`, name, `law_firm`, `law_firm_fein`, `state_bar_number`, `good_standing_state`, `good_standing_court`, address, phone and email), `job` (`{ title, soc_code, soc_title, occupation_type }`), `wage` (`{ offer_from, offer_to, offer_unit, offer_conditions, prevailing_wage, prevailing_wage_unit, prevailing_wage_level, prevailing_wage_source, prevailing_wage_tracking_number, ... }`), `worksite` (`{ type, address_1, address_2, city, county, state, postal_code, bls_area, multiple_locations }`), `worker` (the foreign worker's `country_of_citizenship`, `birth_country`, `class_of_admission`, `education`, `major`, `institution` and its address, `currently_employed`), `preparer`, `answers` and `source_file`.

The two forms ask different questions: a field one form does not ask is `null`, and `worker` is filled only on the form used until 2023 (the revised form moved the worker to an appendix DOL does not publish). `answers` holds every other answer on the form under DOL's column name in lower case (requirements, recruitment, notices, declarations), as filed. Wages are US dollars per `offer_unit`. Dates are `yyyy-mm-dd`; FEINs are nine digits; states are two-letter codes where the filing names a US state.

## One PERM case

`POST /us/dol-oflc/perm-case/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

Resolves one PERM case with every determination.

| Field         | Type   | Notes                                                                               |
| ------------- | ------ | ----------------------------------------------------------------------------------- |
| `case_number` | string | **Required.** DOL's PERM case number, e.g. `G-100-25273-349207` or `A-23043-00641`. |

```bash theme={"dark"}
curl https://api.croma.run/us/dol-oflc/perm-case/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "case_number": "G-100-25273-349207" }'
```

Returns `found`, `case_number`, `as_of` and `determinations[]`, newest fiscal year first.

Every determination carries `id` (`<fiscal_year>:<case_number>`), `fiscal_year`, `case_number`, `form` (`9089` for the form used until 2023, `9089_2023` for the revised one), `case_status`, `received_date`, `decision_date`, `decision_dates[]`, `employer` (`{ name, trade_name, address_1, address_2, city, state, postal_code, country, province, phone, phone_ext, fein, naics_code, employees, year_commenced, worker_ownership_interest, relationship_to_worker }`), `employer_contact` (name, job title, address, phone and email), `agent_attorney` (`representative_type`, name, `law_firm`, `law_firm_fein`, `state_bar_number`, `good_standing_state`, `good_standing_court`, address, phone and email), `job` (`{ title, soc_code, soc_title, occupation_type }`), `wage` (`{ offer_from, offer_to, offer_unit, offer_conditions, prevailing_wage, prevailing_wage_unit, prevailing_wage_level, prevailing_wage_source, prevailing_wage_tracking_number, ... }`), `worksite` (`{ type, address_1, address_2, city, county, state, postal_code, bls_area, multiple_locations }`), `worker` (the foreign worker's `country_of_citizenship`, `birth_country`, `class_of_admission`, `education`, `major`, `institution` and its address, `currently_employed`), `preparer`, `answers` and `source_file`.

The two forms ask different questions: a field one form does not ask is `null`, and `worker` is filled only on the form used until 2023 (the revised form moved the worker to an appendix DOL does not publish). `answers` holds every other answer on the form under DOL's column name in lower case (requirements, recruitment, notices, declarations), as filed. Wages are US dollars per `offer_unit`. Dates are `yyyy-mm-dd`; FEINs are nine digits; states are two-letter codes where the filing names a US state.

<Card title="Full reference" icon="code" href="/api-reference/overview">
  Schemas, all response fields, and an interactive playground.
</Card>
