CRM
Jobber
API integration
Ship CRM features without building the integration. Full Jobber API access via Proxy and 10+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Jobber
Common scenarios for SaaS companies building Jobber integrations for their customers.
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
Ship these features with Truto + Jobber
Concrete product features your team can ship faster by leveraging Truto’s Jobber integration instead of building from scratch.
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.
SuperAI
Jobber AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Jobber
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 750+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Jobber in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Jobber account
Use Truto’s frontend SDK to connect your customer’s Jobber account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Jobber
Truto’s Proxy API is a 1-to-1 mapping of the Jobber API. You call us, we call Jobber, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Jobber’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Jobber on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Jobber integration guides
Deep dives, architecture guides, and practical tutorials for building Jobber integrations.
Jobber
Get Jobber integrated into your app
Our team understands what it takes to make a Jobber integration successful. A short, crisp 30 minute call with folks who understand the problem.