Skip to main content
2,200+ contractors in the research universe benchmarked. Do you know your gross profit per labor hour? See where you stand →
Level
Operations

Jobber API: Coverage, Job Costs and Finance Questions

Sam YangEx-CFO across trades, SaaS & services · $2.5B in total PE/banking transactions · Stanford MBA
Updated October 8, 2026·Originally published June 29, 2026·4 minute read
Share

Level system reality check

Pull every eligible Jobber record, page through all results, keep the original IDs and log that each pull finished

Sam Yang, Level

4 minute readOperations

Jobber is software for home and commercial service businesses. Owners and office teams use it to schedule customer work, prepare quotes, invoice customers and record payments. Field staff record the work done. Its QuickBooks Online (QBO) connection can move supported invoices and payments into the books; the account’s integration version and settings determine what moves.

Jobber records the work: jobs, visits, invoices and payments. Your accounting and payroll records explain the financial result, including costs that may not be entered in Jobber. Connecting the systems is useful, but an invoice syncing successfully does not prove that a job has complete costs or a reliable margin.

Start with one job. Find its visits, invoice and payment, then look for the related labor and supplier costs in the books. An API is the way another program asks Jobber for records automatically. An export is a file your team downloads from a report. The guide below explains which records and identifiers an API or export needs to supply, and what to check when the connection leaves a gap.

Confirm the integration edition and eligible population

Jobber documents new and legacy QuickBooks integration flows. Review the actual integration version and enabled record types in the account before assuming every created record should have synced. Eligible records are those expected under that account’s permissions, selected dates and status rules. Keep the source job, visit, invoice and payment identity separately traceable. An invoice list and a visit list can both be complete without answering the same owner question.

A visit is not paid crew time. Link recorded work time to approved payroll using a saved employee-name or ID mapping, dates worked and employer cost. That mapping, sometimes called employee aliases, identifies the same person when the systems use different labels. Large API results arrive in pages, meaning separate batches of records. The program must request the next page until no pages remain. Keep a record of every page the API returned, plus a log showing each download finished, so a partial query cannot look complete. Then compare the jobs in your report against the full list of eligible records Jobber returned. Neither a connection logo nor a payment total establishes full job contribution.

A poor match rate may be an identifier problem

Before buying more API access, inspect the ID used to match records in both systems. That ID is the matching key; joining means connecting records using it. Jobber’s original job ID, an internal job number and a customer’s work-order number are different identifiers. Similar-looking values do not prove they use the same numbering system, sometimes called a namespace.

Keep the original identifiers and save a crosswalk, a table pairing one system’s IDs with the other’s, instead of overwriting either. For an invented illustration, Jobber might label a job J-A while the customer labels its work order WO-A. Matching those labels requires a supported mapping; the shared letter alone does not prove they describe the same work.

Report three counts: all eligible source records, the records with a supported ID for matching across systems, and the records actually matched. A change to the crosswalk changes the middle count. A permissions fix changes which records can be collected. Neither establishes that the joined jobs have complete costs. This separates a mapping repair from a genuinely missing source.

What each Jobber record can and cannot answer

Record names, fields and API access can vary by plan and settings, so confirm each row in your own account before relying on it.

RecordCan help establishCannot establish on its own
JobThe customer engagement and original Jobber job ID used to match recordsTotal job cost or job margin
VisitScheduled or completed service dates and the assigned teamPaid crew hours or employer labor cost
InvoiceBilled amounts and which job or visits the invoice coversCash received, payroll or materials cost
PaymentCash received against an invoiceAccrued revenue for the period or any job cost
Time or expense entries, if your account records themOperational time or expenses captured in JobberApproved payroll, employer taxes and benefits, or supplier bills entered only in accounting

Free benchmark review

See whether your books are benchmark-ready.

Start with a free conversation about your priorities. With agreed access to the relevant records, we compare your numbers with applicable benchmarks and identify what to review first.

Where job costs come from

A job margin needs revenue and cost for the same job. Revenue can come from Jobber invoices. If Jobber does not hold approved payroll for your crew, labor cost comes from the payroll system. That means approved hours or pay by employee, the dates worked and pay date, plus employer taxes and benefits, mapped to Jobber jobs using the documented employee-ID mapping. Materials and subcontractor costs come from supplier bills wherever your team records them. In QBO, that means bills or expenses tagged to a job or customer, if your team tags them. If a cost lives only outside Jobber, the job’s margin stays incomplete until that cost is connected to the job. This page does not cover API pricing, plan requirements or rate limits. Check Jobber's current plan terms and developer documentation for those.

Fictional check: a job has one $1,800 invoice covering three visits. Payroll shows 9 approved hours at a $48 loaded hourly cost ($432), meaning hourly pay with the employer costs included under the stated basis, and one $610 supplier bill is tagged to the job. Contribution, revenue less the direct job costs included here rather than full company net profit, is $1,800 minus $432 minus $610, which is $758, or 42% of revenue. If the supplier bill were untagged, the same job would show $1,368 (76%) and look like a winner. That is why a job with an untagged cost belongs on the exceptions list.

Reproduce the fictional job check

Run this plain JavaScript in Node or a browser console. These are illustrative financial inputs, not Jobber API field names or a customer export.

const job = { invoice: 1800, approvedHours: 9, loadedHourlyCost: 48, supplierBill: 610 };
const laborCost = job.approvedHours * job.loadedHourlyCost;
const completeContribution = job.invoice - laborCost - job.supplierBill;
const missingBillContribution = job.invoice - laborCost;
console.log({
  complete: { contribution: completeContribution, marginPct: Math.round(100 * completeContribution / job.invoice) },
  missingBill: { contribution: missingBillContribution, marginPct: Math.round(100 * missingBillContribution / job.invoice) }
});

Output: complete contribution is $758 at 42%; omitting the bill shows $1,368 at 76%. The change is a missing-cost error in the job view, not proof that the company earned more money. If the bill has already been posted in the company ledger but has not been assigned to this job, company profit has not changed.

A revenue column does not establish job contribution

Inspect the actual values, statuses and relationships behind the heading. A visit export with a revenue column can still contain a different set of records from the invoices used to calculate revenue. An invoice export can show sales while omitting approved payroll, materials or other job costs. An access error establishes that the request failed under the current permission, not that the finance data does not exist anywhere in the product.

For a crew ranking, connect invoiced revenue and supported costs to the same jobs. State which hours count you divide by, the labor-hour denominator: visited, worked, approved paid or billed. A job with unlinked payroll needs missing-record review, not a high-margin ranking. Test one job with multiple visits and one invoice covering several visits before repeating the matching process. The Jobber playbook gives the collection route and owner review question.

Financial evidence in practice

How should a Jobber API run prove coverage?

Use the currently eligible object set, full pagination, retained IDs and a completed source-run receipt. A successful first page is not a complete roster. Invoice and payment coverage still does not establish payroll burden or all job costs.

Run the check

  1. Identify the required object and integration scope.
  2. Retain every page with stable identities and the expected census.
  3. Compare source and current projection coverage in both directions.
  4. Mark Visit-to-hours or expense gaps explicitly before calculating margin.

Fictional example: Complete job and export population

Four exported rows contain three of five expected jobs: 60% identity coverage. One retained job has no cost. Full-scope profit is withheld.

Invented teaching inputs; downloadable files store these dollar amounts in USD cents.

Inspect the expected output
{
  "fictional": true,
  "unit": "USD cents",
  "id": "complete-export",
  "rawRows": 4,
  "distinctRows": 3,
  "coveragePct": 60,
  "missing": [
    "D",
    "E"
  ],
  "costMissing": [
    "B"
  ],
  "completeProfitCents": null,
  "limitation": "This is teaching arithmetic from supplied invented inputs, not source authenticity, financial assurance or authority to post."
}
Reproduce this calculation

Download the code and input into one folder, then run:

node reproduce.mjs complete-export.input.json

The code checks declared units and identities and refuses unsupported inputs. No browser or customer account is used. Source authenticity and accounting approval require separate evidence.

Reviewed 2026-10-06. Level financial-control guidance, with visibly fictional teaching examples. The example shows a control boundary, not a measured customer outcome or industry benchmark.

Read this content revision history

Continue with the related financial decision →

Reconcile the eligible Jobber population with QBO

For the same company, period and status rules, count eligible source invoices, invoices with reliable matching IDs and invoices matched to accounting records. Review unmatched IDs and dollar totals separately. Equal counts can still contain different records or payments assigned to the wrong invoices.

Open the related financial check when the next question concerns that workflow. The Financial Systems Field Guide holds the named-system collection notes, pitfalls and bounded prompts.

Sources and method

Field Guide; Jobber integration documentation. Integration help articles were checked October 6, 2026; the developer pagination documents below were checked October 7, 2026. The rate-limit page is used for its pagination explanation, not a claim about the linked accounting integration. Level guidance explains how to check whether the records support a financial conclusion; the $1,800 fictional job arithmetic is reproducible in the code above. The downloads demonstrate a separate fictional population-completeness check; they are not this job or a customer export. No private customer documents or measured customer outcomes are included. Current account eligibility and report definitions must be checked before operational use.

Primary documentation: Jobber describes cursor-based pagination, returning a marker called a cursor so the program can request the next batch, in its API rate-limit documentation and requires pagination arguments in its getting-started examples. Reviewed October 7, 2026. These documents establish the API retrieval pattern; they do not prove your account exposes every cost field.

Share

Get the next one

Want next week's benchmark in your inbox?

One email a week. Real numbers from 2,200+ contractors in the research universe. No fluff. Unsubscribe anytime.

Sam Yang

About the author

Sam Yang

Founder & CEO

Founder of Level, the always-on finance team for contractors, service businesses, and ecommerce brands. Ex-CFO across trades, SaaS, and service businesses. 4 years as Director of Growth Product at BuildOps, building financial tooling used by 1,000+ commercial contractors. Four years in PE and investment banking rolling up and acquiring service businesses, $2.5B in total transactions including M&A and IPOs. Stanford MBA, Brown undergrad. The Level founding team's analysis of 2,200+ contractors ($13.25B in job revenue) across operating, private-equity, and CFO roles anchors the Level Index benchmark research.

LinkedIn

See whether your books are benchmark-ready.

Start with a free conversation about your priorities. With agreed access to the relevant records, we compare your numbers with applicable benchmarks and identify what to review first.

2,200+ businesses benchmarked$13.25B in revenue analyzedWeekly action cadence

No credit card. Start with a 15-min call. We only follow up if we can actually help.

No commitment. Real numbers, not generic advice.