State construction apprentice-to-journeyman ratio requirements by trade
Apprentice-to-journeyman ratio requirements for construction trades in each US state. Each record is one state and one trade or program, giving the initial ratio (how many journeymen for the first apprentice), the ratio thereafter (how many additional journeymen per additional apprentice), and whether it applies to public works, private, or both. Answers 'what is the apprentice-to-journeyman ratio for [trade] in [state]' and 'how many journeymen do I need before I can hire another apprentice on this job'. Ratios vary widely, and states structure them differently: some (MN) delegate to individual JATC programs, each with its own ratio; others (CA) set a state-wide hourly ratio on public works with trade-specific exemptions.
The data
| State | Trade or program | Initial ratio | Thereafter ratio | Scope | Computation basis | Statute citation |
|---|---|---|---|---|---|---|
| California | California Apprenticeship Council (default) | one apprentice hour for every five journeyman hours | one apprentice hour for every five journeyman hours | public works | hourly | Labor Code 1777.5 (g) |
| California | Laborers – Northern California | not required to hire an apprentice until there are four journeymen on the jobsite | public works | Labor Code 1777.5 (g) | ||
| California | Laborers – Southern California | not required to hire an apprentice until there are four journeymen on the jobsite | public works | Labor Code 1777.5 (g) | ||
| California | Operating Engineers – Northern California | not less than one apprentice for each four journeymen | not less than one apprentice for each four journeymen | public works | Labor Code 1777.5 (g) | |
| California | Operating Engineers – Southern California | not less than one apprentice for each five journeymen | not less than one apprentice for each five journeymen | public works | Labor Code 1777.5 (g) | |
| California | Teamsters – Southern California | not less than one apprentice for each five journeymen | not less than one apprentice for each five journeymen | public works | Labor Code 1777.5 (g) | |
| Minnesota | Cement Masons Local 633 JATC | one to one | one to four | Minnesota Statute 178.036 | ||
| Minnesota | Construction Craft Laborers JAC | one to one for the first three | one to three | Minnesota Statute 178.036 | ||
| Minnesota | Design Electric | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Electrical Training Network (ETN) | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Elevator Constructors Local 9 JAC | two to one | three to two, seven to five and 11 to eight | Minnesota Statute 178.036 | ||
| Minnesota | FTIUM – Glaziers | two to one | one to two for the next three and one to three thereafter | Minnesota Statute 178.036 | ||
| Minnesota | Klein Electric | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Metro Sheet Metal JATC – Architectural | one to one | Minnesota Statute 178.036 | |||
| Minnesota | Metro Sheet Metal JATC – Commercial | one to three regularly employed journeyworkers | Minnesota Statute 178.036 | |||
| Minnesota | Metro Sheet Metal JATC – Residential | two to one | Minnesota Statute 178.036 | |||
| Minnesota | Metro Sheet Metal JATC – Specialty Kitchen | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Millwright and Machinery Erectors JAC | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Minneapolis Electrical JATC | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Minneapolis Plumbers JJATC | one to one | two to four journeyworkers for second apprentice, five to seven journeyworkers for third apprentice, eight to ten journeyworkers for fourth apprentice | Minnesota Statute 178.036 | ||
| Minnesota | Minneapolis/St. Paul Sprinkler Fitters JAC | two to two | one to three | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Apprenticeship Ratio Policy | one to one | three to one | headcount | Minnesota Statute 178.036 | |
| Minnesota | Minnesota Area Pile Drivers JAC | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Chapter of Associated Builders and Contractors – Electricians | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Chapter of Associated Builders and Contractors | one to one for the first three | one to three | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Operating Engineers JAC | one to one | one to five | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Roofing JAC | three to one | three to one | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Statewide Limited Energy JATC | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | Minnesota Teamsters JAC | one to one | four to 10 | Minnesota Statute 178.036 | ||
| Minnesota | Northern Mechanical and Iron Range Plumbers and Pipefitters JATC | one to one | one to two | Minnesota Statute 178.036 | ||
| Minnesota | Northern Minnesota Carpenters JAC | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Northern Minnesota Millwrights JAC | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Roofers and Waterproofers Local 96 JAC | one to one three to two four to three six to four | Minnesota Statute 178.036 | |||
| Minnesota | Roofers and Waterproofers Local 96 JAC (slate and tile) | one to two | one to two | Minnesota Statute 178.036 | ||
| Minnesota | S.E. Minnesota Plumbers and Steamfitters JAC | one to one | one to two | Minnesota Statute 178.036 | ||
| Minnesota | South Central Minnesota Electrical JATC | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | St. Paul Electrical JATC | two to one | two to one | Minnesota Statute 178.036 | ||
| Minnesota | St. Paul Plumbers JAC | one to one | two to four journeyworkers for second apprentice, five to seven journeyworkers for third apprentice, eight to ten journeyworkers for fourth apprentice | Minnesota Statute 178.036 | ||
| Minnesota | Twin Cities Carpenters JATC - HUD exemption | two to one; at least one apprentice must have over 4,000 hours | Minnesota Statute 178.036 | |||
| Minnesota | Twin Cities Carpenters JATC (Metro, Mankato, St. Cloud, Rochester) | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Twin Cities Floor Coverers JAC | one to one | one to one | Minnesota Statute 178.036 | ||
| Minnesota | Twin Cities Ironworkers Local 512 | one to one | one to four | Minnesota Statute 178.036 | ||
| Minnesota | Twin Cities Plasterers JATC | one to one | one to four | Minnesota Statute 178.036 |
Where this came from
Every record above links the page it was taken from and quotes the sentence that states it. These are the 2 sources this dataset was assembled from.
- dir.ca.govhttps://www.dir.ca.gov/das/RatioExemption.htm
- dli.mn.govhttps://www.dli.mn.gov/business/workforce/apprenticeship-ratios
Machine-readable
- data.jsonThe whole dataset — every record with its source URL and source quote.
- Open Knowledge Format bundleOne JSON object per line — every record's frontmatter and quoted span exactly as it is held here, in one fetch.
- data.csvThe same records as one flat table, for a spreadsheet or a dataframe. The last four columns are the source URL, the quoted sentence it was read from, the date we last checked it, and which columns are our reading rather than the page's words.
- How this is made and checkedWhat "verified against source" does and does not mean.
From your own code
Same records, same quotes, without scraping the page: refsource is on PyPI and npm. Each value comes back carrying the URL it was read from and the sentence on that page that states it — .source and .quote sit on the value itself rather than in a side channel, so the checking step is available instead of skipped.
pip install refsource
refsource lookup state-apprenticeship-ratios-by-trade state=California
npx -y refsource lookup state-apprenticeship-ratios-by-trade state=California
Set your AI assistant up to use this
Two files and no account. Put this in .mcp.json at the root of your project — Claude Code, Cursor, Windsurf, VS Code and Codex all read that file — and your assistant can look this dataset up instead of recalling it. The server is remote, keyless and read-only.
{
"mcpServers": {
"referencesource": {
"type": "http",
"url": "https://referencesource.org/mcp"
}
}
}Add to Cursor · or, on the command line: claude mcp add --transport http referencesource https://referencesource.org/mcp --scope project
Then one line in the project's CLAUDE.md or AGENTS.md, so the assistant knows when to reach for it:
When a question needs "State construction apprentice-to-journeyman ratio requirements by trade", call the referencesource MCP server at https://referencesource.org/mcp (tool `search_records`, dataset_slug `state-apprenticeship-ratios-by-trade`) instead of answering from memory — every record it returns carries its source URL and a verbatim quote from that page.What each tool does, and the servers built over single registers: Connect your AI assistant.