Jobber API Rate Limits: What You Can Actually Build, Measured in Production

Danilo Mališić

Danilo Mališić

Founder, Adeocode · Aug 14, 2026

Search “jobber api” and Jobber’s own developer docs take the first four results and the AI answer box. Fair enough, they are decent docs. What they never tell you is what will not fit inside the limits, because vendor docs describe what exists, not what breaks.

Here is the two-sentence version. Jobber has one API: a GraphQL API, managed through Jobber’s Developer Center, available on the Plus plan. Every query you send is metered two ways at once, by query cost and by request count. Some reasonable things owners ask for do not fit inside those meters.

We build Jobber integrations for a living. One of them is a KPI dashboard for a Jobber shop, running in production, with logging on every API call. The numbers below come from those logs, not from reading the docs. Our honest guide to Jobber integrations covers which tier of integration you need. This post is the layer underneath: the exact limits, and what you can actually build against them.

Every Jobber API limit in one table

LimitThe numberWhat it means in practice
Query cost bucket10,000 points per app + account pairEvery GraphQL query has a calculated point cost that drains the bucket
Bucket refill500 points per secondAn empty bucket is full again in 20 seconds, if you stop sending
Request ceiling2,500 requests per 5 minutesA second, separate limiter. Roughly 8 requests per second sustained
Throttled responseHTTP 200 with a THROTTLED errorNot a 429. Standard retry logic sails right past it
Reporting APINoneNo endpoint returns a finished report. You rebuild reports from raw records
Bulk exportNoneNo dump endpoint. Everything leaves through paginated queries
Delta sync on visitsNot possibleThe Visit type has no updatedAt field, so you cannot ask what changed
Webhook payloadID onlyEvery webhook costs a follow-up query to learn what happened

Sources: Jobber’s API rate limit documentation, plus our own production measurements, 2026. Last verified 2026-08-14. Jobber has not paid us and does not know we are writing this.

How the cost bucket actually works

Jobber’s primary limiter is not “requests per minute.” It is a query cost budget. Each GraphQL query gets a point cost calculated from what it asks for: more fields, more nested records, more rows per page, higher cost.

The bucket holds 10,000 points per app and account pair. It refills at 500 points per second. Send nothing for 20 seconds and you are back to full.

That sounds generous until you price a real workload. A query that pulls a page of jobs with their line items, visits, and invoice status is not a cheap query. Stack 40 of those into one screen and you have spent more than the bucket holds.

What one real dashboard load costs

The dashboard we run for one Jobber shop pulls jobs, visits, invoices, and payments to compute the owner’s weekly numbers. With per-call cost logging turned on, a single dashboard load measured 13,456 to 20,762 query-cost points across 41 to 52 API calls.

The budget is 10,000.

So one load of one dashboard for one user exceeds the entire bucket, on the low end by a third, on the high end by more than double. This is a real log line from that system:

Jobber throttle bucket low: 438/10000 points available

That is 438 points left out of 10,000, mid-load, with calls still queued. The naive version of this dashboard, “query Jobber when the page opens,” throttles itself before the page finishes rendering. Not on a bad day. Every time.

The fix is architectural, not clever retry code. The dashboard cannot read from Jobber at load time. It reads from its own database, and a background worker syncs that database from Jobber on a schedule, paced under the 500 points per second refill. Jobber’s rate limits are effectively a design requirement: any reporting integration becomes a sync pipeline plus a local store, whether you planned one or not.

The second limiter, and why webhooks make it worse

Even if your queries are cheap, there is a separate cap: 2,500 requests per 5 minutes, about 8 per second sustained. Two features of the API push you toward it faster than you would guess:

  • Webhooks carry only an ID. Jobber tells you “invoice 12345 changed” and nothing else. Every single webhook costs a follow-up query to fetch the record. A busy Monday at a 15-crew shop, with dispatchers rescheduling and invoices going out, turns into a burst of webhooks, and your follow-up queries eat both limiters at once.
  • There is no delta sync for visits. The Visit type has no updatedAt field. You cannot ask “which visits changed since last night.” If visits matter to your integration, and for scheduling work they always do, you re-pull them and diff on your side. That is more requests and more points, spent on data that mostly did not change.

The trap that gets every off-the-shelf client

When Jobber throttles you, the response is HTTP 200 with a THROTTLED error in the GraphQL body, not a 429 status.

This matters because nearly every retry library, HTTP client, and integration platform keys its backoff on status codes. A 200 means success to all of them. So a throttled integration built on standard tooling does not slow down. It keeps firing, keeps getting empty-handed 200s, and whatever was reading its output sees data quietly stop arriving. No error page, no alert, just numbers that stop updating.

Handling this correctly means parsing every response body for the THROTTLED error and treating it as a rate signal. It is not hard. It is just something nobody does until it has cost them a weekend.

So what can you actually build?

What you wantFits the limits?How it has to be built
Notifications: job booked, post to SlackYes, easilyWebhook plus one follow-up query per event
Crew or booking calendar on top of JobberYesScoped queries, cached availability
Live KPI dashboard that queries Jobber on page loadNoMeasured at 13,456 to 20,762 points against a 10,000 budget
KPI dashboard with its own databaseYesBackground sync paced under the refill rate; dashboard reads local
One-click full export of your accountNoNo bulk endpoint exists
Scheduled full pull into a spreadsheet or warehouseYesPaginated, paced, resumable. Hours, not seconds
Two-way sync with another systemYes, carefullyWebhook-driven, with queued follow-ups and body-level throttle handling

The pattern across every row: the API is complete, but it is not fast, and it is not free-form. Anything that reads a lot of data has to become a paced pipeline with local storage. Anything event-driven has to budget a follow-up query per event. Once you design for that, the API holds up fine in production. We know because we run systems on it every day.

If you are scoping a build

Two honest checks before you spend money. First, confirm you are on or budgeting for the Plus plan, because the API does not exist below it. Second, if what you want is report-shaped, assume a sync pipeline from day one, and treat anyone who quotes you a “simple live dashboard” as someone who has not read their own logs. If the data you need is small and event-shaped, the build is genuinely small. And if all you need is your data in a spreadsheet, check the non-API routes first: we compared every one in how to export data from Jobber.

This is the work we do. Our custom Jobber reports and dashboards page covers what we build against this API, sync pipelines and crew calendars included. Or book a discovery call and bring the thing you want built. If it fits in a Zap, we will say so and save you the budget.

Danilo Mališić, founder of Adeocode

Talk to the founder

Bring us the workflow that doesn't fit

Every discovery call is with Dan, who wrote this and builds these systems. He stays your contact through the whole engagement: no sales team, no handoffs. If the tools you already pay for cover it, he'll tell you that too, and the call costs nothing.

Yes. Jobber has one API, a GraphQL API managed through Jobber's Developer Center at developer.getjobber.com. You register an app, an admin on the Jobber account authorizes it, and your queries are metered by a 10,000 point query-cost budget plus a cap of 2,500 requests per 5 minutes. API access requires Jobber's Plus plan.

Two limiters run at the same time. First, a query-cost bucket: 10,000 points per app and account pair, refilling at 500 points per second, where every GraphQL query drains a calculated cost. Second, a request ceiling of 2,500 requests per 5 minutes. You have to stay under both. Last verified August 14, 2026 against developer.getjobber.com.

No. Throttled requests come back as HTTP 200 with a THROTTLED error inside the GraphQL response body. Off-the-shelf retry libraries key on status codes, so they treat the response as a success and never back off. Your integration has to parse the response body and handle THROTTLED explicitly.

No to both. There is no endpoint that returns a finished report, and no endpoint that dumps your account data in one call. Anything report-shaped has to be rebuilt from raw records through paginated queries, paced under the rate budget.

No. A Jobber webhook carries only the ID of the record that changed. To learn what actually happened, your integration has to send a follow-up query for that record, which costs points from the same rate budget. Busy accounts generate webhook bursts, so those follow-up queries have to be queued and paced.

Custom API access is gated to Jobber's Plus plan, the top tier. Lower plans can use marketplace apps and Zapier, but cannot authorize a custom app. Our Jobber integrations guide covers the plan gate and current pricing in detail.

You may like these

A Jobber MCP Server: Connecting Claude to Jobber's GraphQL API

A Jobber MCP Server: Connecting Claude to Jobber's GraphQL API

Aug 16, 2026

A Jobber MCP server is a translator between Claude and your Jobber account. Every question it answers has to fit Jobber's 10,000 point query budget. We run Jobber integrations in production, and one dashboard load we logged cost 13,456 to 20,762 points against that budget. This post covers what Claude can answer, a TypeScript sketch of a read-only server, and the staged path to approved write actions.

Read more
Job Costing in Jobber: Getting Per-Job Gross Margin When Jobber Has the Jobs and QuickBooks Has the Costs

Job Costing in Jobber: Getting Per-Job Gross Margin When Jobber Has the Jobs and QuickBooks Has the Costs

Aug 16, 2026

Five systems, one margin number. Jobber has the jobs. QuickBooks has the costs. The margin the owner trusts lives in a spreadsheet only the owner maintains. Three real ways to close the gap, compared for accuracy, weekly effort, and what breaks each one.

Read more
Jobber Integrations: The Honest Guide to What Connects and What's Gated

Jobber Integrations: The Honest Guide to What Connects and What's Gated

Aug 1, 2026

Jobber integrations come in three tiers: native marketplace apps (QuickBooks, Gusto, Zapier, available on mid plans), Zapier automations (good for notifications, weak for live two-way data), and custom API integrations, which require the Plus plan at $399 to $529 per month billed annually. Most owners hit the ceiling at tier two without knowing tier three has a paywall. Pricing verified August 1, 2026.

Read more
How to Export Data From Jobber (And What You Can't)

How to Export Data From Jobber (And What You Can't)

Aug 14, 2026

Jobber exports data one CSV report at a time. There is no bulk export and no reporting API, which is why so many shops run a weekly spreadsheet ritual to stitch reports together. The three real ways to get your data out: manual CSV, middleware, and a custom API pull, with the honest limits of each.

Read more