Export timesheets and materials costs with a job reference on every row, add a loaded hourly cost for each crew, then have an AI assistant total revenue, labour and materials per job and group the result by job type and by crew. Check the totals against payroll and invoices before acting. One month shows patterns, not verdicts.
The trap is comparing crews on raw margin. A crew that lays patios and runs a long maintenance round will look worse than one that plants beds, even when both work at the same speed. Margin by job type tells you about your prices. Margin by crew, on the same job type, tells you about crews.
The month below is invented but built to behave like a real one: three crews, five kinds of work, fifteen lines, and a few deliberate data problems of the kind that turn up in every first export. Every figure is illustrative, and every step works the same with your own files.
Three exports and one job reference: what the sheet needs
Everything hangs on a job reference that appears in all three files. Without it an assistant will guess which materials belong to which job, and it guesses confidently.
| File | Columns you need | Where it comes from |
|---|---|---|
| Timesheets | Date, worker ID, crew, job reference, hours | Jobber's Timesheets report (under Work reports, sent with Email CSV), or any time-tracking or payroll export |
| Jobs | Job reference, job type, invoiced amount before tax, status | Jobber's One-Off Jobs report with a custom field for job type, or your accounting software's invoice list |
| Materials | Job reference, supplier, amount, description | Expenses linked to jobs in your software, or supplier invoices and card statements coded by job |
Job costing is available on Jobber's Grow and Plus plans. If you use it, the One-Off Jobs report carries expenses total, time tracked, labour cost total, line item cost total, total costs, profit and profit % for each job. Start there and use the sheet for what the report does not do. There is no job type column and the report filters only by client and date, but it can show custom fields on jobs as columns, so add a "job type" custom field now and the exports will carry it from next month.
Two Jobber limits are worth knowing. Its job costing help article says recurring jobs are costed over the last 30 days and that reporting is not available for recurring job costs, so your maintenance rounds need the sheet whatever plan you are on. It also says costs entered on both quote line items and expenses are counted twice, and recommends line item costs for materials only, with labour coming from timesheets.

The Complete Excel Course with AI Integration
From formulas and pivot tables to Power Query, DAX, VBA and AI with Copilot, ChatGPT and Claude — hands-on from the first lesson.
By Sagnik Bhattacharya and Virginia Thorn, Primetime Emmy Award winner
Buy nowTurn each wage into a loaded hourly cost first
A timesheet gives hours. Margin needs money, and the number to use is what an hour of that person costs you, not what they take home. Jobber's help article says the cost entered for an employee should include wage, benefits and taxes. In a spreadsheet the same idea is one line.
Illustrative sum: a crew member on $22.00 an hour, plus 10% employer payroll costs ($2.20), 7% insurance ($1.54) and 5% for paid leave ($1.10), costs $26.84 an hour loaded. Those percentages are placeholders. Your accountant or payroll provider has the real ones, and the first time you ask is worth the call.
For crew-level reporting you do not need each person's rate. Average the loaded cost across the people in each crew and use one rate per crew. The example uses $27 for crew A, $28 for crew B and $26 for crew C. This also keeps individual pay out of any file you upload, and it means nobody's wage appears in a chat.
The worked month: fifteen lines across three crews
Hours here are labour hours, each person's time added together, so three people on one patio for a ten-hour day log 30 hours. Labour cost is hours times the crew's loaded rate. Profit is revenue minus labour and materials, which makes it margin before overheads. The twelve one-off jobs have a J reference, and the three maintenance lines (M1 to M3) are each a round's month of visits.
| Ref | Type | Crew | Revenue | Labour hours | Labour cost | Materials | Profit | Margin |
|---|---|---|---|---|---|---|---|---|
| J101 | Planting | A | $2,850 | 38.0 | $1,026 | $910 | $914 | 32.1% |
| J102 | Patio | B | $7,400 | 96.0 | $2,688 | $3,150 | $1,562 | 21.1% |
| J103 | Planting | B | $3,300 | 41.0 | $1,148 | $1,085 | $1,067 | 32.3% |
| J104 | Clean-up | C | $1,180 | 27.5 | $715 | $265 | $200 | 16.9% |
| J105 | Patio | A | $5,200 | 70.0 | $1,890 | $2,210 | $1,100 | 21.2% |
| J106 | Irrigation | C | $640 | 9.5 | $247 | $148 | $245 | 38.3% |
| J107 | Planting | C | $2,100 | 31.0 | $806 | $690 | $604 | 28.8% |
| J108 | Clean-up | A | $960 | 22.0 | $594 | $214 | $152 | 15.8% |
| J109 | Patio | B | $9,600 | 128.0 | $3,584 | $4,020 | $1,996 | 20.8% |
| J110 | Irrigation | A | $1,150 | 14.0 | $378 | $330 | $442 | 38.4% |
| J111 | Planting | A | $4,100 | 52.0 | $1,404 | $1,480 | $1,216 | 29.7% |
| J112 | Clean-up | B | $1,420 | 34.0 | $952 | $340 | $128 | 9.0% |
| M1 | Maintenance | C | $6,840 | 176.0 | $4,576 | $330 | $1,934 | 28.3% |
| M2 | Maintenance | A | $5,980 | 160.0 | $4,320 | $290 | $1,370 | 22.9% |
| M3 | Maintenance | B | $3,450 | 102.0 | $2,856 | $160 | $434 | 12.6% |
The month adds up to $56,170 of revenue, 1,001 labour hours, $27,184 of labour, $15,622 of materials and $13,364 of profit, a margin of 23.8% before overheads. That total is the first thing to hold on to, because every summary table you build from these rows must add back to it.
The prompt that groups it and the tables it gives back
Claude can run calculations on an uploaded CSV when its "Code execution and file creation" setting is on ("Create and edit files" in the newer settings layout; it is on by default on individual plans, with a 30 MB limit per file), and Gemini's help page lists spreadsheets among the files it accepts. ChatGPT also takes file uploads, with limits that depend on your plan. Whichever you use, ask for the working, because you want to be able to rebuild every number.
I run a landscaping business. Attached: jobs.csv (job_ref, job_type, crew,
invoiced_amount), timesheets.csv (date, worker_id, crew, job_ref, hours) and
materials.csv (job_ref, supplier, amount, description).
Loaded labour cost per hour by crew: A 27, B 28, C 26.
1. Join the files on job_ref. List any job_ref that appears in one file but
not in the others. Do not fix or guess them.
2. For each job show revenue, labour hours, labour cost (hours x crew rate),
materials, profit and margin (profit / revenue).
3. Summarise by job_type and by crew: total revenue, hours, labour cost,
materials, profit, and margin calculated as total profit / total revenue,
not an average of job margins.
4. Flag any job with margin under 15% or revenue per labour hour under 40.
5. Give me the SUMIFS formulas that reproduce each summary row.
Illustrative output, by job type:
| Job type | Lines | Revenue | Labour hours | Labour cost | Materials | Profit | Margin |
|---|---|---|---|---|---|---|---|
| Planting | 4 | $12,350 | 162.0 | $4,384 | $4,165 | $3,801 | 30.8% |
| Irrigation repairs | 2 | $1,790 | 23.5 | $625 | $478 | $687 | 38.4% |
| Patio and paving | 3 | $22,200 | 294.0 | $8,162 | $9,380 | $4,658 | 21.0% |
| Maintenance rounds | 3 | $16,270 | 438.0 | $11,752 | $780 | $3,738 | 23.0% |
| Clean-ups | 3 | $3,560 | 83.5 | $2,261 | $819 | $480 | 13.5% |
And by crew:
| Crew | Lines | Revenue | Labour hours | Labour cost | Materials | Profit | Margin |
|---|---|---|---|---|---|---|---|
| A | 6 | $20,240 | 356.0 | $9,612 | $5,434 | $5,194 | 25.7% |
| B | 5 | $25,170 | 401.0 | $11,228 | $8,755 | $5,187 | 20.6% |
| C | 4 | $10,760 | 244.0 | $6,344 | $1,433 | $2,983 | 27.7% |
Both tables add back to $56,170 of revenue and $13,364 of profit, so the grouping is sound. With a prompt like this the typical error is definition, not arithmetic. A careless answer averages the three maintenance margins (28.3%, 22.9% and 12.6%) and reports 21.3% for the type, when the revenue-weighted figure is 23.0%. That is why the prompt says total profit over total revenue. Another common slip is merging two job types, such as an irrigation repair and an irrigation install, into one. Read the job type column the assistant reports back before you read any number.
Step 4 of the prompt is where I would expect to adjust things. Illustrative flag list from the same run: J112 for a 9.0% margin, M3 for 12.6%, and all three maintenance rounds on revenue per labour hour (M1 $38.9, M2 $37.4, M3 $33.8). The first two are real signals. The round flags are a threshold problem, not a finding: rounds always bill less per hour than project work, so one $40 line flags every round every month. Set thresholds by job type, comparing each round with the others and giving projects a floor of your own choosing, then run it again. A flag list that cries wolf gets ignored, and that is how real problems get missed.
What the job-type table says about your prices
Look first at revenue per labour hour. Planting, irrigation and patios each bill about $76 for every labour hour. Maintenance bills $37 and clean-ups $43. That is normal for a round, where the customer pays for a visit rather than for skill, and it tells you where the labour is going: 438 of the month's 1,001 hours are maintenance.
The surprise is the patios. They bill the same $76 an hour as planting, yet earn 21.0% against 30.8%. The difference is materials: $9,380 against $22,200 of patio revenue is 42% of the price, while planting materials are 34% of revenue. When materials weigh that much, a thin markup on them costs more than a slightly low labour rate would, so I would look at how the patio quotes priced pavers, aggregate and edging before touching the hourly rate.
Quick sum: to earn 30% on those three patios, price has to cover cost of $17,542 divided by 0.70, which is $25,060, against $22,200 billed. That is about 13% more for the same work. The 13% is a prompt to look at the quotes, not an instruction to add 13% to the next one. For the quoting side, my tutorial on how landscapers use AI to stop underpricing jobs covers the price-list fixes.
Test the materials idea on one job before you change anything. Suppose the quote for J109 carried its $4,020 of materials at cost with no markup (your own quote will tell you). Adding 25% puts $1,005 on the price, so revenue becomes $10,605, profit becomes $3,001, and the margin moves from 20.8% to 28.3% without touching the hourly rate. If the quote already carried a markup, the test shows nothing, which is useful too: it sends you back to the hours.
Clean-ups are the other low line. Three jobs took 83.5 hours for $3,560 and left 13.5%. They are priced like visits but behave like projects, with waste to load, drive and tip. If you change one thing about them, change how they are priced: by the load or by the hour, with disposal as its own line, instead of a flat fee per visit. The itemised landscaping estimate template shows how to list waste separately.
Why crew B's 20.6% is not a verdict on crew B
Crew B has the lowest margin and the most revenue, and the temptation is to call it the weak crew. Put the crews side by side on the same type of work and the story changes.
| Margin by type and crew | Crew A | Crew B | Crew C |
|---|---|---|---|
| Planting | 30.6% | 32.3% | 28.8% |
| Patio and paving | 21.2% | 20.9% | no jobs |
| Maintenance round | 22.9% | 12.6% | 28.3% |
| Clean-up | 15.8% | 9.0% | 16.9% |
| Irrigation | 38.4% | no jobs | 38.3% |
On planting crew B is the best of the three, and on patios it matches crew A. Its average is dragged down by two lines: the round M3 at 12.6% and the clean-up J112 at 9.0%. Those are different problems. M3 earns $34 of revenue per labour hour against $39 for M1 and $37 for M2, which points to a spread-out route or too many hours on site, so the fix is the round, not the people. J112 logged 34 hours on a $1,420 job, and the first question is whether a load of waste was driven to the tip on the clock and never priced.
Two ways to fix M3, both quick sums. By price: cost of $3,016 at a 25% margin means $4,021, so $571 or 16.6% more across the round. By hours: at the current price, 25% leaves $2,427.50 for labour, or about 87 hours at $28, which is 15 fewer than the 102 logged. At 87 hours the cost is $2,596, profit is $854 and the margin is 24.8%. My tutorials on route planning for landscaping crews and scoring a new customer by route profit go further on the hours side.
Five checks before you act on any margin
- Hours reconcile to payroll. The timesheet export totals 1,001 hours; payroll paid 1,046 for the same three crews. The 45-hour gap (4.3% of paid hours) is yard time: loading, fuelling and servicing mowers. A gap is not an error, but you should know its size and treat it as overhead. I would look hard at anything over about 10%, because it usually means crews are not clocking on to jobs.
- Revenue ties to invoices. The jobs file should add up to what accounting shows for those jobs. A job invoiced in two parts, or with a deposit, can be counted once or twice.
- Materials tie to supplier statements. Here the materials file totals $15,622 and the supplier statements total $16,034. The $412 difference is a nursery invoice with no job reference. Left out, it overstates margin by about 0.7 points across the month. Allocate it by hand to the planting jobs it supplied.
- Odd rows get a person's attention. Zero hours on a job with revenue, materials with no hours, a job with hours and no invoice yet. In this month a job J113 finished on the last day with 31 hours and no invoice. Counted at zero revenue it would drag planting down; leave it out and carry it to next month.
- Nothing is counted twice. Jobber's warning about quote line costs and expenses applies to any system. If the nursery cost sits on the quote and on the expense, margin is understated.
Ask the assistant to run checks 1 to 4 for you as a list of exceptions, then verify the totals yourself with a SUM on the raw file. Assistants sort and group well and add unevenly, and a margin report that is out by $400 can send you chasing the wrong job.
One more thing quietly breaks crew reports: crews that change. If you move people between crews mid-month, the crew field on a timesheet row only records who clocked on where. Keep a roster tab with the week, the crew and its lead, and have the assistant assign crews from the roster instead of the free-text field. Otherwise "crew B" ends up meaning three different groups of people, and the table compares nothing.
Margin is not profit: the overhead line
Everything above is margin before overheads: trucks, fuel, equipment, insurance, software and the office. Illustrative overheads for this firm are $9,800 a month. Take that from $13,364 and $3,564 is left, 6.3% of revenue.
The same sum gives a floor for each job type. Overheads divided by revenue is $9,800 over $56,170, or 17.4%. A line earning less than 17.4% before overheads is not paying its share of the business at this month's volume. All three clean-ups (16.9%, 15.8% and 9.0%) and round M3 at 12.6% sit below it. That does not mean you stop doing them, since filling an idle crew with low-margin work can be worth it in a quiet week, but in a busy week they push out better work.
Recurring rounds and the gap in job costing reports
Maintenance is where Jobber's own report is thinnest, so it is the best use of the sheet. Build one row per round per month: revenue from invoices, hours from the timesheets report filtered to that round's visits, materials from fuel and consumables you code to the round. Then add revenue per labour hour and margin, and watch the trend across months, not the single figure. A round that drifts from $39 to $34 per hour over three months has usually picked up a far-flung customer or a gate that slows every visit. Those round-level numbers are also what you want in front of you when a maintenance contract comes up for renewal.
If your jobs come from an accounting package, not field software, the export route differs but the sheet does not. My tutorial on construction job costing with AI walks through tagging costs by job in QuickBooks or Xero, and the guide to cleaning messy data covers the formatting problems that every first export has.
A 40-minute monthly routine
- Export the three files for the closed month (5 minutes). Leave open jobs for next month.
- Paste the totals from payroll, accounting and supplier statements beside the file totals (5 minutes).
- Run the prompt, then run the five checks (10 minutes).
- Read the by-type table first, then the like-for-like crew table, then the exceptions (10 minutes).
- Write down one decision, such as "re-quote patios with materials at cost plus 25%" or "re-plan round M3" (5 minutes).
- Save the month's table to a tab, so after three months you can see trends (5 minutes).
The whole thing connects to the rest of the business: quotes that price what you learn here, crews briefed on the jobs where hours slip, and invoices out promptly. My landscape business workflow map shows where this review sits among the other handoffs.
Questions about crew and job profit reports
Do I need Jobber to work out job profit by crew?
No. All you need is three exports tied together by a job reference: hours by crew, invoiced amounts by job type, and materials costs. Jobber's job costing, on the Grow and Plus plans, adds profit per job automatically, but crews and job types still need a sheet. Any time-tracking app plus your accounting software can feed the same files.
How many months of data before I judge a crew?
Use one month to spot an obvious pricing problem on a job type, and at least three before you say anything about people. Job mix shifts through the season, so a crew that did mostly patios in May and mostly maintenance in July is not comparable with itself, let alone with another crew.
Is it safe to upload payroll hours to an AI chat?
Keep pay rates out of the upload. Send hours, worker IDs rather than names, and a crew-level cost per hour that you apply yourself. Business plans from ChatGPT and Claude do not train on your content by default, while consumer plans have a model-training switch in privacy settings that I would turn off for anything about your business. Do not upload anything you would not email to your accountant.
What margin should each landscaping job type earn?
There is no universal number. Work backwards from your own overheads: divide a month of overheads by a month of revenue, and any job type earning less than that after labour and materials is not paying its share. Then add the profit you want on top. The figure moves with your volumes, so recheck it each quarter.
Further reads
- How to Build a Job Costing Sheet in Excel With AI Help — Build the job costing sheet itself in Excel with AI help.
- Markup vs Margin in Construction: A Pricing Sheet Built With AI — Turn a target margin into the markup you actually charge.
- AI in Landscape Maintenance: Contract Renewals, Visit Notes, Upsells — Use round-level profit when renewing maintenance contracts.
- AI Payroll Checks: Catch Timesheet Errors Before Payday — Catch timesheet errors before they reach payroll and your margins.
- AI Time Tracking for Small Teams: Hours Without Timesheets — Capture hours cleanly if your crews forget to clock on.
- HVAC Markup and Margin: A Worked Check on Past Jobs With AI — The same past-jobs margin check for another trade.
- Lawn Care Price Increase Letter: Write and Personalise It With AI — Tell customers about a price rise once the numbers justify it.
- Best AI for a Landscaping Business: Eight Tools for Quotes, Calls and Crews — Eight tools for a landscaping firm, sorted by job, with list prices, peak-month call-cost sums and separate stacks for one crew and five crews.
- Best Landscape Design Software With AI: What to Compare First — Which landscape design software with AI suits a small firm? Compare picture, price and calendar tools, with a rule by crew size and job type.
- Commercial Landscaping Proposal: Bid Property Managers With AI Help — A four-building office park walked from site notes to a tiered, checked bid, with AI drafting the scope and you keeping control of the numbers.
- Hardscaping Business: Paver Patio Quotes From Site Photos With AI — Quote a paver patio from eight customer photos and three measurements: area, base, pavers, edging and labour lines, a price range, then a site visit.
- How to Price Garden Maintenance: Visit Rates and Seasonal Extras With AI — A six-garden route shows what travel really costs, then builds visit rates, hedge and leaf-clearance extras and a monthly plan from your own times.
- Window Cleaning Round Software: Can AI Plan and Rebook a Round? — AI can draft a round, reshuffle rain days and rebook skipped houses, but it needs a round app underneath. What each option costs and where it slips.
- Winter Work for Landscapers: Plan Off-Season Services With AI — A winter service menu for landscapers (snow, lights, pruning, planning) and a way to test demand with past customers before buying equipment or hiring.
- AI Tools and AI Development: The Complete 2026 Guide — the AI hub, including every tutorial in the AI-for-business series.
Sources: Jobber help centre (Job Costing, One-Off Jobs Report, Reports Basics) and Jobber pricing page; Claude help centre (Create and edit files with Claude); Google Gemini Apps help (upload files); all read on 1 November 2026.