Back to Blog
profit marginsteel pricingfabrication businessmarkupyear-end planning

Steel Fabrication Profit Margin: 2027 Benchmarks

SteelFlo Team11 min read

Steel Fabrication Profit Margin: 2027 Benchmarks

A structural steel contractor typically runs a gross margin in the low-to-mid 20s and a net (pre-tax) margin of roughly 8-12%, with net margin climbing as revenue grows. One benchmark set built from CFMA and trade data puts net margin at 8% for $1M-$5M shops, 10% at $5M-$10M, and 12% at $10M-$25M. Most of the gap between a good year and a bad one is decided at bid time.

Those numbers come from ConstructionCFO's structural steel benchmarks, which combine the CFMA Construction Financial Benchmarker, Jones Maresca, and their own trade data. They're a useful yardstick, not a law. A misc-metals shop, a heavy structural erector, and a job shop that does a little of everything will land in different places, and your own last three years of job-cost reports beat any industry average.

This guide walks through what goes into each margin, the markup-versus-margin math that quietly costs estimators money, a worked 40-ton bid, and the places margin leaks out after the contract's signed.

What profit margin do steel fabricators make?

Here's the benchmark table, with the source noted. Treat it as "as of the 2025 benchmark editions" and check the source for updates.

Annual revenueGross margin (industry avg)Net margin, pre-tax (industry avg)
$1M-$5M23%8%
$5M-$10Mnot broken out10%
$10M-$25Mnot broken out12%

Source: ConstructionCFO, structural steel profit margins, compiled from CFMA, Jones Maresca and SPM trade data. Net = gross margin minus overhead, before tax.

Why does net margin rise with size? Overhead doesn't scale one-for-one with revenue. A $3M shop and an $8M shop both need an owner, a bookkeeper, an estimator, a crane, insurance, and a building. The bigger shop spreads those costs over more tons.

How work type shifts things, in practice:

  • Heavy structural (beams, columns, braces) moves a lot of weight per labor hour, so material is a big share of the price. Margin percentages tend to be thinner, but the dollars per job are large.
  • Miscellaneous metals (stairs, rails, lintels, embeds) is labor-heavy. You can carry a fatter percentage, but a single bad labor estimate wipes out a job.
  • Job shops live on quick turnarounds and small tickets. Margin depends on keeping the shop full and quoting fast enough to win.

If you're only tracking one blended margin across all three, you can't see which kind of work is actually paying the bills.

What goes into gross margin vs net margin?

Gross margin is what's left after the direct costs of the job. Net margin is what's left after overhead too.

LineGross margin counts it?Net margin counts it?
Steel material, bolts, consumablesYes (direct cost)Yes
Shop labor on the job (burdened)YesYes
Shop paint, galvanizing, freightYesYes
Detailing, erection sub, crane rentalYesYes
Estimator and PM salariesNoYes (overhead)
Building, utilities, insurance, softwareNoYes
Owner's salary, admin, accountingNoYes
Idle shop time between jobsNoYes (it hits overhead)

The trap is putting overhead into the job as a "direct" line on some bids and not others. Pick one method and use it on every estimate, or your job-cost reports will lie to you.

If you'd rather see the margin each bid really carries before you send it, load your own labor, material and markup rates into SteelFlo's Price This and check it against the drawing count. The first 3 takeoffs are free.

How is markup different from margin?

This is the one that trips up estimators every year. Markup is a percentage of cost. Margin is a percentage of the selling price. Add a 25% markup to cost and you don't get a 25% margin. You get 20%.

The conversions:

  • Margin = Markup ÷ (1 + Markup)
  • Markup = Margin ÷ (1 − Margin)
  • Price for a target margin = Cost ÷ (1 − Margin)
Target gross marginMarkup you need on cost
10%11.1%
15%17.6%
20%25.0%
25%33.3%
30%42.9%

So if your owner says "we need 25% on every job" and the estimator adds 25% to cost, the shop is under-pricing by about 4 to 5 points of revenue on every bid. Over a $5M year, that's roughly $200,000 to $250,000 that was never in the numbers. Our post on steel pricing strategies covers how to decide what that target should be in the first place.

Worked example: how do you price a 40-ton job to hit your margin?

Take a straightforward 40-ton structural package: W-shape beams and columns, some HSS braces, shop primer, erection by your own crew or a sub. 40 tons is 80,000 lb.

The inputs below are example numbers. Swap in your own material quote, shop rate and erection cost.

Cost lineBasisCost
Material80,000 lb × $0.55/lb (example mill/service center quote)$44,000
Bolts, hardware, consumablesallowance$3,000
Shop labor40 tons × 12 MH/ton = 480 MH × $42/hr burdened$20,160
Shop primerallowance$3,200
Freight2 loads$2,400
Detailing (outsourced)quote$6,000
Erectionsub quote$28,000
Total direct cost$106,760

Now price it two ways.

Wrong way: 25% markup. $106,760 × 1.25 = $133,450. Gross profit is $26,690. Margin = $26,690 ÷ $133,450 = 20.0%.

Right way: 25% target margin. $106,760 ÷ 0.75 = $142,347. Call it $142,350. Gross profit is $35,590. Margin = 25.0%, which is a 33.3% markup.

That's an $8,900 difference on one modest job. Then subtract overhead. If your overhead runs 15% of revenue, the "right way" bid nets about 10% ($14,240). The "wrong way" bid nets about 5%, and that's before anything goes wrong in the shop.

For a sanity check on the result, compare it against fabricated steel cost per pound ranges. $142,350 over 80,000 lb is about $1.78/lb fabricated and erected, which sits inside the typical erected range for straightforward framing. If your number lands way outside the range, find out why before bid day.

Where does margin leak on steel jobs?

You can price a job perfectly and still lose the margin. It usually leaks out in four places, and most of them trace back to the takeoff.

Takeoff misses

A missed member costs you twice: you buy and fabricate it anyway, and it was never in the price. Using the example above, say the takeoff missed 2 tons of misc steel (lintels, a few angle frames, some bent plate). At about $1.60/lb fabricated cost, that's 4,000 lb × $1.60 = $6,400 of unpriced work. The job's net drops from about $14,240 to $7,840, and net margin falls from 10% to about 5.5%. One missed sheet cut your profit nearly in half.

The usual culprits are members called out only on sections or details, schedule keys that never got resolved to a size, and repeat floors counted once. Our list of common steel takeoff mistakes walks through each.

Drops and waste

If you price with a 3% waste factor and the job actually nests at 7%, the extra 4% on 80,000 lb is 3,200 lb. At $0.55/lb that's $1,760 of material, plus the handling. Short-span misc work and odd lengths are where the gap shows up. See waste factors in steel fabrication for realistic numbers by member type.

Unpriced change orders

Revisions arrive, the shop builds them, and the change order gets written late, priced low, or not at all. A fabricator who doesn't diff the revised set against the bid set is guessing at what changed. The change order pricing guide covers markup on changes and how to document them so they get paid.

Shop labor overruns

Labor is the line with the most variance. If 480 MH turns into 560 MH, that's 80 hours × $42 = $3,360 gone. Track actual hours per ton by job type, then feed them back into the next bid. That's the only way the estimate gets better.

How should you set your 2027 rates?

Year-end is the right time to rebuild your rates from your own numbers instead of rolling last year's forward.

1. Rebuild your shop rate. Add up shop overhead for the year (rent, utilities, equipment, supervision, shop insurance) and divide by productive shop hours, not paid hours.

Example: $900,000 of shop overhead, 12 fitters and welders × 1,700 productive hours each = 20,400 hours. Overhead per hour = $900,000 ÷ 20,400 = $44.12. Add a $40/hr average burdened wage and your shop rate is about $84/hour. If you've been quoting $70, you've been subsidizing every job.

2. Check labor cost trends. Labor compensation in fabricated structural metal manufacturing (NAICS 332312) was about $10.0 billion in 2023 per FRED, and wages haven't gone backward since. Price your 2027 shop rate on what you'll pay in 2027, not what you paid in January 2026.

3. Check fabricated steel price trends. The PPI for fabricated structural metal products is on FRED as WPU107. As of August 2026 it was about 6.5% higher than a year earlier. Check the current figure before you set rates, since it updates monthly. Our steel fabrication costs post breaks down the cost components.

4. Set margin targets by work type. Use separate targets for structural, misc and job-shop work. Then convert each target to markup with the table above, so nobody has to do that math on bid day.

5. Review last year's jobs. Compare estimated vs actual hours, waste, and change-order recovery on every job over a set size. Wherever the misses cluster is where your 2027 process needs to change.

Bottom line

Margin is set mostly on bid day. Price to margin instead of markup, build your shop rate from real overhead and productive hours, and stop the leaks that start in the takeoff. If you want to check a bid before it goes out, SteelFlo's estimating tools let you run a drawing-based count through your own rates in Price This, so you can see the margin a bid actually carries.

Frequently Asked Questions

What is a good profit margin for a steel fabricator?

A pre-tax net margin of about 8-12% is typical for structural steel contractors, rising with revenue. One benchmark set puts gross margin around 23% for $1M-$5M shops. Shops that track job costs carefully and price to margin often beat the averages.

What markup do I need for a 25% margin?

You need a 33.3% markup on cost to hit a 25% gross margin. The formula is markup = margin ÷ (1 − margin), so 0.25 ÷ 0.75 = 0.333. A 25% markup only gets you a 20% margin.

Should overhead go into each steel estimate?

Yes, either as a shop rate that includes overhead or as a separate overhead line, but use the same method every time. Mixing methods makes it impossible to compare jobs. Most fabricators bury shop overhead in the hourly shop rate and carry office overhead in the margin.

Why are misc metals margins different from structural steel?

Misc metals is labor-heavy, so the price per pound is much higher and the labor estimate drives profit. Structural framing is material-heavy, so material price swings and missed tonnage matter more. Track and price them separately.

How much margin does a missed member cost?

The full fabricated cost of the missed piece comes straight out of profit, because you build it but never priced it. On the 40-ton example above, missing 2 tons of misc steel cut net margin from about 10% to about 5.5%.

Get from drawings to a priced estimate in one sitting.

SteelFlo counts every steel member on your PDF, then prices the list with your own material, fab, and install rates.

3 free takeoffsNo credit card requiredAISC + 5 international standards