Jobber API: Coverage, Job Costs and Finance Questions
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
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.
| Record | Can help establish | Cannot establish on its own |
|---|---|---|
| Job | The customer engagement and original Jobber job ID used to match records | Total job cost or job margin |
| Visit | Scheduled or completed service dates and the assigned team | Paid crew hours or employer labor cost |
| Invoice | Billed amounts and which job or visits the invoice covers | Cash received, payroll or materials cost |
| Payment | Cash received against an invoice | Accrued revenue for the period or any job cost |
| Time or expense entries, if your account records them | Operational time or expenses captured in Jobber | Approved 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
- Identify the required object and integration scope.
- Retain every page with stable identities and the expected census.
- Compare source and current projection coverage in both directions.
- 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.jsonThe 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.
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.
Related reads
Operations
Why Your Field Software Numbers Don't Match Your Accounting
Reconcile field hours, invoices, recognized revenue, and job costs. Billing capture: 97.1% median, 66.9% bottom decile (963 companies).
Operations
The AI Inbox: Emailed Reports as Finance Pipelines
Asking for a report by email does not mean you have received and saved it. Track delivery, original attachment, parsing and review separately, preserving changed versions.
Operations
The API Is Not Enough for Finance Automation
Use APIs for supported records. Add native reports or permitted browser collection for verified gaps, then compare identities, dates and costs.

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