Enterprise DNA

Omni by Enterprise DNA

Enterprise DNA Resources

Step-by-step how-tos. Practical AI operating-system thinking for owners, operators, and teams doing real work.

220k+

Data professionals

Omni

AI agents and apps

Audit

Map the manual work

Guide Intermediate Omni Ops

How to Automate Material Markup in Your Trades Business

Stop losing profit to forgotten markups and wrong percentages. Automate dynamic pricing based on job type, customer tier, and supplier costs.

Sam McKay |
How to Automate Material Markup in Your Trades Business

You sent a tech to replace a water heater. He charged the customer for the unit at cost plus 15%. You wanted 35% on that job because it was a same-day emergency and you had to pull him off another site. The invoice went out before you caught it. You just left $280 on the table.

Multiply that across 40 service calls a week and the math gets ugly fast. Most trades businesses doing $2M to $10M a year are leaking $50K to $200K annually because markup gets applied inconsistently or not at all. The tech forgets. The office admin uses last month’s number. The pricing sheet is buried in a folder no one opens.

The fix isn’t another spreadsheet or a laminated card in the truck. It’s an agent that calculates the right markup every time, pulls current supplier pricing, applies your rules for job type and customer tier, and updates the estimate before it leaves your system.

This is what automating material markup looks like in practice. Not theory, not a dashboard you check once a quarter. Daily work handled by an AI agent that knows your pricing strategy better than most of your crew.

Why Material Markup Stays Manual in Most Shops

Walk into any plumbing, HVAC, electrical, or roofing business and ask how they handle material markup. You’ll get three answers.

First shop: “We add 25% to everything.” Flat rate, no exceptions. Simple until you realize you’re undercharging on small emergency jobs and overcharging on big commercial contracts where the customer is comparing three bids line by line.

Second shop: “It depends on the job.” The owner has a mental model. Residential emergency gets 40%. Scheduled maintenance gets 20%. New construction gets 15%. Commercial tenant improvement gets whatever keeps the GC happy. The problem is that model lives in one person’s head. When the office manager writes the estimate or the tech closes the job on-site, they guess.

Third shop: “We have a pricing matrix.” It’s a spreadsheet. It has tabs for different trades, columns for job type, rows for material categories. It was built two years ago and hasn’t been updated since the last supplier price increase. Half the team doesn’t know it exists.

All three shops are losing money. The first because they’re leaving margin on the table or pricing themselves out of work. The second because consistency is impossible when the system is one person’s judgment. The third because a static spreadsheet can’t keep up with supplier pricing that changes monthly or customer tiers that shift when someone becomes a maintenance-plan member.

The manual work looks like this. A call comes in. You dispatch a tech. He diagnoses the issue, identifies the parts, and either calls the office for pricing or writes an estimate based on what he thinks the markup should be. If he calls, someone has to look up the part cost, remember the markup rule, do the math, and call him back. If he writes it himself, he’s guessing or using the last number he remembers.

Then the estimate sits. Maybe the customer says yes on the spot. Maybe it goes to email and no one follows up. Maybe it gets revised three times because the scope changed or the customer pushed back on price. Every revision is another chance to apply the wrong markup or forget it entirely.

By the time the invoice goes out, you’ve touched that pricing decision four or five times. Any one of those touches can introduce an error. The tech uses 20% instead of 35%. The office admin pulls an old cost from the supplier portal. You override the price to close the deal and forget to note it for next time.

It’s not a training problem. It’s a system problem. You’re asking people to remember rules, look up costs, do math, and apply judgment in the middle of a dozen other tasks. That doesn’t scale past a two-truck operation.

What an Automated Markup Agent Actually Does

An agent that handles material markup isn’t guessing. It’s connected to your supplier pricing, your job management system, and the rules you’ve defined for different job types and customer segments.

Here’s the flow. A tech identifies the parts needed for a job. He enters them into the system, either from his phone or tablet. The agent pulls the current cost for each part from your supplier’s API or the last invoice if the supplier doesn’t have an API. It applies the markup rule you’ve set for that combination of job type, customer tier, and material category. It adds the marked-up materials to the estimate, calculates tax, and presents the total to the tech in under three seconds.

If the customer is on a maintenance plan, the agent applies the plan discount after markup. If it’s an emergency call outside business hours, the agent applies your emergency markup. If the job is over a certain dollar threshold, the agent flags it for owner review before the estimate goes out. All of this happens in the background while the tech is explaining the work to the customer.

The agent also tracks markup performance. It knows which jobs closed at which margin. It knows when you’re consistently losing bids in a certain category, which might mean your markup is too aggressive or your supplier pricing is off. It knows when a tech is manually overriding prices, which tells you there’s either a training gap or a rule that doesn’t match reality.

This is what we build with Omni Ops. The Estimate Follow-Up Agent already tracks every estimate that leaves your system and follows up on day 2, day 5, and day 14. Adding dynamic markup calculation to that flow means the estimate is right the first time and the follow-up is focused on closing the work, not revising the price.

One HVAC contractor we work with was losing roughly $1,200 a week to inconsistent markup on refrigerant and small parts. Techs were adding 20% across the board because that was easy to remember. The owner wanted 50% on refrigerant for emergency calls and 30% for scheduled work. After we built the markup agent, margin on those jobs went up 18 points in the first month. The techs didn’t change their behavior. The system just stopped letting them apply the wrong number.

Building the Rules That Drive Markup Decisions

The agent is only as good as the pricing strategy you give it. This is where most shops get stuck. They know they want “better markup” but they haven’t defined what that means for different types of work.

Start with job type. Emergency calls, scheduled service, new installation, warranty work, and commercial contract work all deserve different treatment. Emergency calls can carry higher markup because speed and availability are the product. Scheduled maintenance should carry moderate markup because you’re competing on relationship and consistency. New construction and commercial work often run on thinner margin because the customer is comparing bids and volume matters.

Layer in customer tier. A first-time residential customer, a maintenance-plan member, a repeat commercial client, and a property manager all have different price sensitivity and lifetime value. Your maintenance-plan members are already paying you a monthly or annual fee. You can afford to run lower markup on their service calls because you’ve captured margin up front and you want to keep them renewing.

Then add material category. Commodity parts like copper fittings or PVC pipe have transparent pricing. Your customer can look up what you paid. High markup on those items makes you look like you’re gouging. Specialized parts, refrigerants, and equipment have less price transparency. You can run higher markup because the customer doesn’t have a reference point and you’re carrying inventory risk.

The combination of these three dimensions gives you a pricing matrix. Emergency residential call for a non-plan customer using specialized parts might be 40% markup. Scheduled commercial service for a repeat client using commodity materials might be 18%. The agent applies the right cell in that matrix every time.

You also need rules for when to flag a job for manual review. Any estimate over $5,000 should probably get a second look before it goes out. Any job where the customer is pushing back on price should trigger a review of your markup assumptions. Any material cost that’s jumped more than 15% since the last time you bought it should get flagged so you can decide whether to eat the increase or pass it through.

We help you define these rules during the Omni Audit for trades businesses. It’s a 60-minute working session where we map your current pricing process, identify where margin is leaking, and design the agent logic that fits your business model. You walk out with a pricing matrix, a list of flag conditions, and a plan to connect the agent to your supplier and job management systems.

Connecting Supplier Pricing and Job Data

The agent needs two data sources to work. Current material costs from your suppliers and job context from your dispatch or job management system.

Supplier pricing is the harder one. Most trades businesses buy from two or three main suppliers. Some of those suppliers have APIs that let you pull pricing in real time. Most don’t. If your supplier has an API, we connect directly and the agent always works with current costs. If they don’t, we pull pricing from your last invoice or from a CSV export you upload weekly.

Real-time pricing is better but weekly updates are good enough for most shops. Material costs don’t move that fast except in weird market conditions. What matters is that you’re not working off a spreadsheet someone built in 2023 and never updated.

Job context comes from your dispatch or service management system. The agent needs to know the job type, the customer ID, and whether this is a quoted job or a time-and-materials call. Most systems expose this through an API or a webhook when a new job is created. If your system doesn’t have an API, we can pull it from email notifications or from a Zapier integration.

The agent sits between these two systems. When a tech opens a job and starts adding materials, the agent queries the supplier pricing, applies your markup rules based on the job context, and writes the result back into the estimate. The tech never sees the math. He just sees the customer-facing price.

This is the same integration pattern we use for the 24/7 Dispatch Voice Agent. That agent answers the phone, qualifies the job, and books it directly into your dispatch system. The markup agent picks up from there and makes sure the estimate that comes out of that booked job has the right pricing baked in.

One electrical contractor told us they were spending six hours a week looking up part costs and calling techs back with pricing. Their supplier didn’t have an API so we built a weekly upload process. Every Monday morning the office manager exports a CSV from the supplier portal and drops it in a folder. The agent picks it up, updates its pricing table, and that’s it. The six hours went to zero.

What Happens When Pricing Strategy Changes

Your markup rules won’t stay static. Supplier costs move. You add a new service line. You start targeting a different customer segment. You hire a big commercial contract that needs its own pricing structure.

The agent needs to adapt without requiring a developer every time you want to change a number. This is why we build markup rules as a configuration layer, not hard-coded logic. You can log into the agent’s admin panel, adjust the markup percentage for a specific job type or customer tier, and the change takes effect immediately.

You can also set effective dates. If you’re raising markup on emergency calls starting next month, you can configure that now and the agent will apply the old rate until the cutover date. If you’re running a promotion for maintenance-plan signups that includes discounted service calls for 90 days, the agent can apply that discount automatically and then revert to standard pricing when the period ends.

The agent also tracks when you manually override a price. If you’re consistently overriding the agent’s markup in a certain category, that’s a signal that your rule is wrong. Maybe your emergency markup is too high and you’re losing bids. Maybe your commercial markup is too low and you’re leaving money on the table. The agent logs every override and surfaces patterns in a weekly report.

We tune this during the advisory engagement that follows the audit. You’ll run the agent for 30 days, we’ll review the override log and the margin data, and we’ll adjust the rules based on what actually happened. Most shops make two or three rounds of adjustments in the first quarter and then the system stabilizes.

If you want a structured way to think about where pricing is leaking before you automate it, we built a worksheet that walks through after-hours call handling, follow-up, and pricing consistency. You can grab the After-Hours Call Recovery Plan for Trades and use it to map your current process. It’s designed for trades businesses doing $1M to $10M and it’ll show you where margin is walking out the door.

Tying Markup Automation to the Rest of Your Sales Process

Automated markup doesn’t live in isolation. It’s part of a system that starts when the phone rings and ends when the customer pays and leaves a review.

The 24/7 Dispatch Voice Agent answers the call, qualifies the job, and books it into your dispatch system. The markup agent ensures the estimate that comes out of that job has the right pricing. The Estimate Follow-Up Agent tracks that estimate and follows up if the customer doesn’t respond. The Review and Reactivation Agent asks for a review after the job closes and brings the customer back at the right service interval.

Each agent handles one piece of the workflow. Together they eliminate the manual work that’s keeping you trapped in the dispatch seat instead of running the business.

Most trades businesses we work with start with one agent. Usually dispatch or follow-up because those are the loudest pain points. Once that’s running, we add markup automation because it’s a natural next step and the integration work is already done. Then we layer in review collection and reactivation.

The full system takes 90 to 120 days to deploy and tune. You don’t flip a switch and walk away. You run it in parallel with your current process, adjust the rules based on what you see, train your team on the new workflow, and then cut over.

What the Omni Audit Covers for Material Markup

If you want to see what automating markup would look like in your shop, book a 60-min Omni Audit. It’s a working session, not a sales call. We’ll map your current pricing process, identify where margin is leaking, and design the agent logic that fits your business.

You’ll walk out with three things. A pricing matrix that defines markup rules for every combination of job type, customer tier, and material category. A data integration plan that shows how the agent will pull supplier pricing and job context. A 90-day deployment roadmap that breaks the work into phases so you’re not trying to automate everything at once.

We do these audits for trades businesses doing $1M to $25M. The session is 60 minutes. We don’t use slides. We’ll share a screen, build the logic in real time, and you’ll see exactly what the agent will do before we write a line of code.

The cost to build and deploy a markup agent typically runs $8K to $15K depending on how many suppliers you use and how complex your pricing rules are. Most shops recover that in 90 to 120 days through tighter margin and fewer pricing errors. If you’re in the $50K to $200K leakage band, the ROI is obvious.

You can also explore more guides and insights on the EDNA platform to see how other trades businesses are using agents to automate dispatch, follow-up, and customer reactivation. The principles are the same. Identify the manual work that’s costing you margin, build an agent to handle it, and redeploy your time to the work that actually grows the business.

The Real Cost of Inconsistent Markup

Let’s make this concrete. You run a plumbing business doing $4M a year. You average 35 service calls a week. Half of those involve material sales. That’s roughly 900 jobs a year where markup matters.

If your average material cost per job is $400 and your target markup is 30%, you should be adding $120 per job. If your actual markup is inconsistent and averages 22% because techs forget or use the wrong number, you’re adding $88 per job. That’s $32 per job left on the table. Across 900 jobs, that’s $28,800 a year.

That’s the low end. If you’re running emergency calls with specialized equipment and your target markup should be 40% but you’re actually hitting 25%, the gap is bigger. If your supplier pricing has increased 12% in the last 18 months and your markup percentages haven’t adjusted, you’re eating that increase instead of passing it through.

The businesses we work with typically find $50K to $150K in margin leakage when we map their pricing process during the audit. Some of that is missed follow-up on estimates. Some is forgotten markup. Some is applying the wrong percentage because the tech didn’t know the customer was on a maintenance plan.

An agent fixes all three. It applies the right markup every time. It tracks the estimate and follows up if the customer doesn’t respond. It knows the customer’s tier and applies the right discount or premium automatically.

You can keep doing this manually. You can train your techs better, update your spreadsheet more often, and hope everyone remembers the rules. Or you can build a system that doesn’t rely on memory or discipline.

If you’re ready to see what that system looks like in your business, book your Omni Audit here. Sixty minutes, three outputs, no deck. We’ll map the work, design the agent, and show you the ROI before you commit to anything.

This is what Omni for trades businesses is built for. Not dashboards you check once a month. Not reports you file away. Agents that do the work, every day, so you can stop leaving money on the table and start running the business you built.