---
title: Jobber API Integration on Truto
slug: jobber
category: CRM
canonical: "https://truto.one/integrations/detail/jobber/"
---

# Jobber API Integration on Truto



**Category:** CRM  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 15 tools for Jobber that AI agents can call directly.

- **list_all_jobber_account** — Get information about the authorized Jobber account. Returns: id, name, countryCode, phone. No required parameters — the account is determined by the access token.
- **list_all_jobber_clients** — List Jobber clients. Returns: id, name, isLead, leadSource, email, phone, balance, tags, billingAddress, and totalCount rollups for jobs, requests, quotes and invoices. Filter with the filter param, e.g. {"isLead": true} for leads only. A client whose jobs.totalCount is 0 has never had work booked.
- **get_single_jobber_client_by_id** — Get a single Jobber client by id. Returns: id, name, isLead, leadSource, email, phone, balance, tags, billingAddress, and jobs/requests/quotes/invoices totalCount. Required: id.
- **jobber_clients_count** — Count Jobber clients matching a filter, without fetching the records. Returns: totalCount. Use filter {"isLead": true} to count how many leads have come through, optionally narrowed by createdAt.
- **create_a_jobber_client** — Create a Jobber client, e.g. to lodge a qualifying lead. Returns the created client; new clients start with isLead true. Accepts scalar fields only — to set emails, phones, addresses or custom fields, use the graphql tool with the clientCreate mutation.
- **update_a_jobber_client_by_id** — Update a Jobber client's scalar details. Returns the updated client. Required: id. Status tags (tagsToAdd / tagsToDelete) are not settable here — use the graphql tool with the clientEdit mutation. isLead is managed by Jobber and cannot be set at all.
- **jobber_clients_archive** — Archive a Jobber client. Required: client_id. Jobber refuses while the client has open jobs or work requests, returning a userErrors message.
- **list_all_jobber_requests** — List Jobber requests (incoming work enquiries). Returns: id, title, requestStatus, contactName, companyName, email, phone, source, client, salesperson, and jobs/quotes totalCount. Filter with e.g. {"status": "new"}.
- **get_single_jobber_request_by_id** — Get a single Jobber request by id. Returns: id, title, requestStatus, contact details, source, client, salesperson, and jobs/quotes totalCount. Required: id.
- **jobber_requests_count** — Count Jobber requests matching a filter, without fetching the records. Returns: totalCount. Use filter {"status": "new"} to count new leads awaiting action.
- **create_a_jobber_request** — Create a Jobber request (work enquiry) against an existing client. Returns the created request with requestStatus "new". Required in body: client_id. Accepts scalar fields only — for requestDetails, lineItems or formIds use the graphql tool with the requestCreate mutation.
- **update_a_jobber_request_by_id** — Update a Jobber request. Returns the updated request. Required: id. Only title, property, salesperson and referring client are editable — requestStatus is driven by Jobber workflow, not set directly.
- **list_all_jobber_jobs** — List Jobber jobs (booked work). Returns: id, jobNumber, title, jobStatus, jobType, total, scheduling timestamps, client and property. Use this to see which customers have actually had services delivered.
- **get_single_jobber_job_by_id** — Get a single Jobber job by id. Returns: id, jobNumber, title, jobStatus, jobType, total, scheduling timestamps, client and property. Required: id.
- **create_a_jobber_graphql** — Send an arbitrary GraphQL query or mutation to Jobber. Body: {query, variables}. Use this for anything the typed tools cannot express — setting client emails/phones/addresses, adding or removing status tags, or any mutation with a nested input object. Returns Jobber's raw response including data, errors and userErrors.

## How it works

1. **Link your customer's Jobber account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Jobber.** The Proxy API is a 1-to-1 mapping of the Jobber API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Route inbound leads into Jobber automatically** — SaaS companies offering AI receptionists, web forms, or lead marketplaces can create clients and requests in Jobber the moment a homeowner reaches out, so dispatchers see fully-formatted enquiries without manual entry.
- **Trigger post-job workflows in reputation and marketing tools** — Review boosters and SMS platforms can watch job status changes in Jobber to fire off review requests, follow-up campaigns, or NPS surveys the instant a technician wraps a job.
- **Segment and nurture Jobber clients from marketing platforms** — Marketing automation SaaS can pull Jobber clients and use job and invoice rollup counts to separate cold leads from repeat customers, then run targeted drip sequences for each segment.
- **Power commission tracking and sales analytics** — Analytics and gamification tools can ingest job data — including totals, types, and scheduling timestamps — to calculate technician commissions and display live performance leaderboards.
- **Enrich client records from telephony and CRM tools** — VoIP and virtual receptionist products can look up callers by phone number in Jobber and use GraphQL mutations to append tags, custom fields, or secondary contact details to the matched client.

## What you can build

- **Inbound lead-to-request pipeline** — Capture leads from any channel and create a Jobber client plus a new request with status "new" so it lands directly in the dispatcher's triage queue.
- **Client lifecycle segmentation engine** — Read Jobber's rollup fields like jobs.totalCount to classify contacts as leads, active, or recurring customers and route them to the right campaign.
- **Job completion event triggers** — Poll list_all_jobber_jobs and detect jobStatus transitions to power downstream automations like review requests, upsell offers, or warranty follow-ups.
- **GraphQL-powered custom field sync** — Use create_a_jobber_graphql to run mutations like clientEdit and requestCreate for updating tags, custom fields, and nested objects that standard endpoints don't cover.
- **Client deduplication and enrichment** — Search existing clients before creation using list_all_jobber_clients, then update matched records with enriched data from your own product using update_a_jobber_client_by_id.
- **Revenue and job analytics dashboards** — Aggregate job totals, types, and scheduling data from list_all_jobber_jobs to build reporting on booked revenue, job mix, and technician performance.

## FAQs

### How does authentication work with Jobber?

Jobber uses OAuth 2.0. Truto handles the OAuth flow, token storage, and refresh — your end users connect their Jobber account through an embedded flow and you receive a connection ID to make API calls.

### Can I write to Jobber custom fields and tags?

Yes. Jobber's REST endpoints generally only accept scalar fields, so custom fields, tags, and nested objects (like secondary emails or line items) are handled via the create_a_jobber_graphql tool using mutations such as clientEdit and requestCreate.

### What Jobber objects are currently supported?

The integration covers Accounts, Clients (list, get, count, create, update, archive), Requests (list, get, count, create, update), and Jobs (list, get). For anything beyond these, you can use the GraphQL passthrough tool to hit any Jobber API resource.

### Can I manually set a client as a lead?

No. Jobber manages the isLead status dynamically based on whether a client has associated jobs or invoices, so it cannot be forced through the API. Use jobs.totalCount and related rollup fields to infer lead status instead.

### How do I detect job status changes for real-time workflows?

You can poll list_all_jobber_jobs and compare jobStatus values, or use the GraphQL tool to subscribe to Jobber's webhook events for job updates. Truto normalizes delivery so you can react to changes without managing retries or signature validation.

### How does Truto handle Jobber's pagination and rate limits?

Truto abstracts Jobber's cursor-based pagination behind consistent list parameters and automatically respects Jobber's API rate limits with backoff, so you don't need to implement throttling or paging logic per endpoint.

## Related reading

- [Connect Jobber to ChatGPT: Manage Leads, Requests and Job Status](https://truto.one/blog/connect-jobber-to-chatgpt-manage-leads-requests-and-job-status/) — Learn how to connect Jobber to ChatGPT using a managed MCP server. Execute workflows for clients, work requests, and job scheduling using natural language.
- [Connect Jobber to Claude: Track Work Requests and Service Bookings](https://truto.one/blog/connect-jobber-to-claude-track-work-requests-and-service-bookings/) — Learn how to connect Jobber to Claude using a managed MCP server. Automate service requests, client tracking, and job scheduling workflows with AI.
- [Connect Jobber to AI Agents: Automate Client and Request Workflows](https://truto.one/blog/connect-jobber-to-ai-agents-automate-client-and-request-workflows/) — Learn how to connect Jobber to AI agents using Truto's tools endpoint to automate client intake, work requests, and dispatching workflows.
