Skip to main content
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 2020, 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 2020 is here too, on both forms.
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.

Search LCA determinations

POST /us/dol-oflc/lca-search/v1 Dataset Searches the determinations by employer, job, FEIN, visa class, status, occupation, worksite state, wage and date. Newest decision first.
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) and source_file. A case DOL decided again in a later fiscal year (a certification later withdrawn) is a determination of its own. 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 Dataset Resolves one case with every determination and its worksites.
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) and source_file. A case DOL decided again in a later fiscal year (a certification later withdrawn) is a determination of its own. 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, and the case’s employer_fein and employer_name.

Search worksites

POST /us/dol-oflc/lca-worksites-search/v1 Dataset Searches every worksite by place, employer and year.
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, and the case’s employer_fein and employer_name.

Search PERM determinations

POST /us/dol-oflc/perm-search/v1 Dataset Searches the PERM determinations by employer, job, law firm, FEIN, status, occupation, worksite state, the worker’s citizenship, wage and date. Newest decision first.
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 Dataset Resolves one PERM case with every determination.
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.

Full reference

Schemas, all response fields, and an interactive playground.