Running the business · November 10, 2026 · 7 min read
Your Real Margin on Sold Materials: Paint, Posts and Cones When Prices Change
How to read the margin on materials a traffic control company sells outright: cost of goods sold, what happens to margin when purchase prices change, margin versus markup with a worked example, and why a line with no cost on file shows a fake 100% margin.

By The Key Bot
In this article+
Most of a traffic control company's revenue is time on assets: crew hours and device days. But many companies also sell materials outright. Pavement marking paint. Sign posts and hardware. Cones, drums and signs a customer buys and keeps. Those sales behave like retail, and they need retail thinking: what did this item actually cost, and what did we make on it?
This post covers how to read the margin on sold materials, what happens when purchase prices move, and the one reporting mistake that makes a materials business look far more profitable than it is.
Sold materials are cost of goods sold
When you rent a barricade, it comes back. When you sell a pail of paint, it does not. The cost of the paint leaves with it, and that cost is what accountants call cost of goods sold.
The IRS makes the same distinction. Its small business tax guide says the chapter on figuring cost of goods sold does not apply to a personal service business, but adds: "if you work in a personal service business and also sell or charge for the materials and supplies normally used in your business, this chapter applies to you" (IRS Publication 334). A traffic control company that sells materials is in exactly that position. How your business reports cost of goods sold for tax is your accountant's call. The management question this post is about is simpler: is each material line priced to make money?
Margin versus markup, with numbers
Two words get used as if they meant the same thing. They do not.
- Margin is profit divided by the selling price.
- Markup is profit divided by the cost.
An illustrative example, not real prices. Say you pay $100 for a pail of marking paint and sell it for $125. Profit is $25.
- Margin: $25 ÷ $125 = 20%.
- Markup: $25 ÷ $100 = 25%.
Same sale, two percentages. Now say your target is "30%."
- A 30% markup means a price of $100 × 1.30 = $130.
- A 30% margin means a price of $100 ÷ (1 − 0.30) = $142.86.
That is a $12.86 difference per pail on the same instruction. Across a few hundred pails a season it is real money. Decide which one your company uses for pricing, write it on the rate sheet, and make sure the estimator and the person reading the reports mean the same thing.
What happens when purchase prices change
Material costs move. A supplier raises prices, a freight surcharge appears, you buy a large lot at a discount. Then you hold stock bought at two or three different prices, and every sale raises the question: which cost goes with this unit?
There are three common answers. The IRS describes the first two in its publication on accounting methods (IRS Publication 538):
- FIFO (first in, first out) assumes the items you bought first are the first ones you sold.
- LIFO (last in, first out) assumes the items you bought last are the first ones you sold.
- Average cost blends what you paid across the units on hand.
The same publication explains why the choice matters: "In times of inflation, when prices are rising, LIFO will produce a larger cost of goods sold and a lower closing inventory," and the opposite holds when prices fall.
Another illustrative example. You receive 10 pails at $110 in March and 10 more at $125 in June. In July you sell 12 pails at $150 each, so revenue is $1,800.
- FIFO: the 12 pails cost 10 × $110 + 2 × $125 = $1,350. Profit $450. Margin 25.0%.
- LIFO: the 12 pails cost 10 × $125 + 2 × $110 = $1,470. Profit $330. Margin 18.3%.
- Average: the 12 pails cost 12 × $117.50 = $1,410. Profit $390. Margin 21.7%.
Nothing about the sale changed. Only the costing assumption did. In a rising market, a newest-first view tells you sooner that your old selling price no longer covers what you pay now. That is useful when you are deciding what to quote next.
Two cautions. First, your tax inventory method is a separate decision with its own rules. The IRS calls the LIFO rules "very complex" and lists a change in the method used to value inventory among the changes that need IRS approval. Talk to your accountant about tax. Second, whatever method you use for management reports, use it consistently, or no two months compare.
Freight and other costs that hide outside the unit price
The IRS treats freight as part of the cost of merchandise. Publication 334 says "freight-in, express-in, and cartage-in" on merchandise you purchase for sale "are all part of cost of goods sold." Heavy, low-priced materials are where this bites: a pallet of posts or sandbags can carry freight that is a large share of what the goods cost.
If your system costs sales from the unit price on the purchase order, freight billed as a separate charge is not in that cost. Know which way your numbers are built. For heavy items, either price the freight into the unit price you record, or add a margin cushion when you quote them.
The fake 100% margin
This is the mistake that matters most, because it flatters the report.
A sale with no cost on file has a cost of zero. A cost of zero makes the entire price look like profit: 100% margin. It happens in ordinary ways:
- A free-typed line. Someone types "Paint, yellow, 5 gal" on an invoice instead of picking the catalog item. The line is not linked to anything with a cost.
- An item never received on a purchase order. It was bought with a company card at a supply house, or before you started using purchase orders, so there is no receipt cost to draw on.
- A unit-of-measure mismatch. The catalog item is a 5-gallon pail, but the invoice line counts gallons. Quantity and cost stop meaning the same thing, and the margin goes wildly wrong in one direction or the other.
Mix a few of those lines into a report and the headline margin drifts upward while nothing about the business has improved. The fix is not a better report. It is discipline at the moment of sale: pick the catalog item, receive purchases on a purchase order, and keep units consistent between what you buy and what you sell.
How Traffic OS costs a sale
Traffic OS builds cost from purchasing and applies it at the moment of sale.
- Cost layers from receipts. Each time a purchase order is received, Traffic OS records a cost layer for that item at the unit price on the order line. Freight charged separately on the order is not spread into the layer.
- Newest layers first. When an invoice is sent or marked as sent, each sold catalog line takes its cost from the newest layers first. If you sell more than you have received, the shortfall is costed at the most recent layer's price.
- Sold before received. If a sale goes out before the purchase order for that item is received, receiving the order goes back and costs those earlier sales, oldest sale first.
- No receipt at all. If an item has never been received on a purchase order, Traffic OS uses the "last purchase cost" typed on the item. It refuses that fallback when the cost would be more than twice the line's revenue, which usually means a unit mismatch, and leaves the line visibly uncosted instead of inventing a loss.
- Rentals are not costed from purchase price. Renting a unit does not consume it.
The margin report shows revenue, cost of goods sold and gross margin by product for invoices sent in the period. It shows both margin and markup, and it marks any product with "no cost on file" or only partial cost. When some revenue has no cost recorded, the report says how much, and shows the margin on only the products it does have costs for. That second number is the one to read.
There is also an early warning. While you write a quote or invoice, the composer shows an estimated cost and margin from each catalog line's last purchase cost, flags any line priced at or below cost, and says how many lines it left out because no purchase cost is on file. A line priced below cost is visible while the price is still being decided, not a month later on a report.
See inventory and cost layers and the margin report on the features page. Receiving is covered in our post on purchase orders and vendor management, and counting stock in inventory cycle counts.
A weekly routine for material margin
- Open the margin report for the last week. Read the costed-only margin, not just the headline.
- Check the uncosted figure. If it is not near zero, find the lines. Usually they are free-typed or bought off a purchase order.
- Sort by margin. Look at the lowest-margin products first. A supplier price increase shows up here before anywhere else.
- Check units on anything strange. A margin far above or below the rest of the catalog is more often a unit mismatch than a pricing win.
- Reprice before the next quote, not after the next season.
Material sales are usually a small part of a traffic control company's revenue. That is exactly why they get priced from memory and never reviewed. Ten minutes a week keeps them honest, and keeps the overall margin report telling the truth. For the wider costing picture, see job costing for traffic control companies.
Frequently asked questions
What is the difference between margin and markup?+
Margin is profit divided by the selling price. Markup is profit divided by the cost. On an item that costs $100 and sells for $125, profit is $25: margin is 20% and markup is 25%. The two describe the same sale, so always say which one you mean.
Which cost should a sale carry when I paid different prices for the same item?+
That depends on the costing method. FIFO assumes the oldest units sold first, LIFO assumes the newest sold first, and an average method blends them. The IRS notes that when prices are rising, LIFO produces a larger cost of goods sold. Traffic OS costs sales newest-layer-first from purchase-order receipts. Your tax inventory method is a separate question for your accountant.
Why does my margin report show 100% on some items?+
Because the sale has no cost on file. A free-typed invoice line, or an item that was never received on a purchase order and has no purchase cost typed in, sells with a cost of zero, so the whole price looks like profit. Traffic OS labels those rows and shows the margin on only the items it has costs for.
Does freight belong in the cost of materials?+
For tax purposes the IRS says freight-in on merchandise you buy for sale is part of cost of goods sold. In Traffic OS a cost layer carries the unit price on the purchase-order line, so freight charged separately on the order is not spread into it. On heavy, low-priced items that difference can be visible.
How often should I review material margins?+
Look at the margin report weekly and before you quote a large material sale. When sales are costed newest-first, a supplier price change shows up in margin as soon as the first order at the new price is received, and a quote priced on an old cost can lose money on a line that used to be profitable.