Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to Jobber

Scalekit connector
Open markdown

The Jobber connector lets your AI agent act in each user's Jobber account. Each user signs in to Jobber once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 49 tools.

Tools
49
What they doRead · write · destructive
23 · 25 · 123 read25 write1 destructive
Users sign in with
OAuth app
Your own Jobber app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Jobber connection

    In AgentKit > Connections, create a Jobber connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Jobber connections use your own OAuth app. Register one with Jobber and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Jobber connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'jobber'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Jobber:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'jobber_account_get',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • jobber_account_getGet the Jobber account (business) that the connection is authorized for.Read-only

    Get Account

    Get the Jobber account (business) that the connection is authorized for. Returns the account id, name, company contact details and the account owner. Use it to confirm which Jobber business you are connected to. Use jobber_users_list for team members.

    Inputs

    This tool takes no inputs.

  • jobber_client_getGet one Jobber client by ID.Read-only

    Get Client

    Get one Jobber client by ID. Returns the client's names, company, contact preferences, emails, phones, billing address, tags and up to 10 properties. Use it for one client's full details. Use jobber_clients_list to search for a client first.

    Inputs

    client_idstringrequired
    Jobber encoded ID of the client. Jobber IDs are base64 strings returned in the id field of list and get tools. Example: Z2lkOi8vSm9iYmVyL0NsaWVudC8xMjM0NTY3OA==.
  • jobber_clients_listList clients in Jobber, optionally filtered by a text search, lead/company/archived flags, tags or dates.Read-only

    List Clients

    List clients in Jobber, optionally filtered by a text search, lead/company/archived flags, tags or dates. Returns each client's id, name, company, lead and archived flags, balance, emails, phones and billing address, plus pageInfo for paging. Use it to browse or find clients. Use jobber_client_get for one client's full details.

    Inputs

    afterstring
    Cursor for the next page. Pass the pageInfo.endCursor value from the previous response when pageInfo.hasNextPage is true. Leave empty for the first page. Example: MjU.
    created_afterstring
    Only return records whose creation time is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    created_beforestring
    Only return records whose creation time is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
    firstinteger
    Number of clients to return in this page. Defaults to 20. Keep it small (20 to 50) so the query stays within Jobber's per-request query cost budget. Example: 25.
    is_archivedboolean
    Set to true to return only archived clients, or false to exclude them. Example: false.
    is_companyboolean
    Set to true to return only company clients, or false for individuals only. Example: false.
    is_leadboolean
    Set to true to return only leads, or false to return only clients that are not leads. Example: true.
    search_termstring
    Free-text search across client names, emails, phone numbers and addresses. Leave empty to return all records. Example: Smith.
    tagsarray
    Only return clients that have these tags. Example: ["VIP", "Commercial"].
    updated_afterstring
    Only return records whose last update time is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    updated_beforestring
    Only return records whose last update time is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
  • jobber_expenses_listList expenses recorded in Jobber, optionally matching a text search.Read-only

    List Expenses

    List expenses recorded in Jobber, optionally matching a text search. Returns each expense's id, title, description, date, total, linked job and the users who entered it and are reimbursed, plus pageInfo. Use it for job costing. Use jobber_expense_create to record a new expense.

    Inputs

    afterstring
    Cursor for the next page. Pass the pageInfo.endCursor value from the previous response when pageInfo.hasNextPage is true. Leave empty for the first page. Example: MjU.
    firstinteger
    Number of expenses to return in this page. Defaults to 20. Keep it small (20 to 50) so the query stays within Jobber's per-request query cost budget. Example: 25.
    search_termstring
    Free-text search across expense titles and descriptions. Leave empty to return all records. Example: Smith.
  • jobber_invoice_getGet one Jobber invoice by ID.Read-only

    Get Invoice

    Get one Jobber invoice by ID. Returns the invoice's number, subject, status, dates, amounts and balance, client, billing address, up to 50 line items, linked jobs and up to 20 payment records. Use it for one invoice. Use jobber_invoices_list to find invoices.

    Inputs

    invoice_idstringrequired
    Jobber encoded ID of the invoice. Jobber IDs are base64 strings returned in the id field of list and get tools. Example: Z2lkOi8vSm9iYmVyL0ludm9pY2UvMTIzNDU2Nzg=.
  • jobber_invoices_listList invoices in Jobber, optionally filtered by client, status, text or issued, due and update dates.Read-only

    List Invoices

    List invoices in Jobber, optionally filtered by client, status, text or issued, due and update dates. Returns each invoice's id, number, subject, status, dates, amounts and balance, and client, plus pageInfo. Use it to review receivables. Use jobber_invoice_get for one invoice's line items and payments.

    Inputs

    afterstring
    Cursor for the next page. Pass the pageInfo.endCursor value from the previous response when pageInfo.hasNextPage is true. Leave empty for the first page. Example: MjU.
    client_idstring
    Jobber encoded ID of the client to filter by. Jobber IDs are base64 strings returned in the id field of list and get tools. Example: Z2lkOi8vSm9iYmVyL0NsaWVudC8xMjM0NTY3OA==.
    due_afterstring
    Only return records whose due date is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    due_beforestring
    Only return records whose due date is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
    firstinteger
    Number of invoices to return in this page. Defaults to 20. Keep it small (20 to 50) so the query stays within Jobber's per-request query cost budget. Example: 25.
    issued_afterstring
    Only return records whose issued date is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    issued_beforestring
    Only return records whose issued date is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
    search_termstring
    Free-text search across invoice subjects, numbers and client names. Leave empty to return all records. Example: Smith.
    statusstring
    Only return invoices with this status: draft, awaiting_payment, paid, past_due, bad_debt, sent_not_due or voided. Example: past_due.one of draftawaiting_paymentpaidpast_duebad_debtsent_not_duevoided
    updated_afterstring
    Only return records whose last update time is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    updated_beforestring
    Only return records whose last update time is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
  • jobber_job_getGet one Jobber job by ID.Read-only

    Get Job

    Get one Jobber job by ID. Returns the job's number, title, status, instructions, dates, totals, client, property, quote, up to 50 line items, 20 visits and 10 invoices. Use it for one job. Use jobber_jobs_list to find jobs.

    Inputs

    job_idstringrequired
    Jobber encoded ID of the job. Jobber IDs are base64 strings returned in the id field of list and get tools. Example: Z2lkOi8vSm9iYmVyL0pvYi8xMjM0NTY3OA==.
  • jobber_jobs_listList jobs in Jobber, optionally filtered by status, job type, text or date ranges.Read-only

    List Jobs

    List jobs in Jobber, optionally filtered by status, job type, text or date ranges. Returns each job's id, number, title, status, type, dates, totals, client and property, plus pageInfo. Use it to browse jobs. Use jobber_job_get for one job's line items and visits.

    Inputs

    afterstring
    Cursor for the next page. Pass the pageInfo.endCursor value from the previous response when pageInfo.hasNextPage is true. Leave empty for the first page. Example: MjU.
    created_afterstring
    Only return records whose creation time is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    created_beforestring
    Only return records whose creation time is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
    firstinteger
    Number of jobs to return in this page. Defaults to 20. Keep it small (20 to 50) so the query stays within Jobber's per-request query cost budget. Example: 25.
    job_typestring
    Only return ONE_OFF or RECURRING jobs. Example: ONE_OFF.one of ONE_OFFRECURRING
    search_termstring
    Free-text search across job titles, numbers and client names. Leave empty to return all records. Example: Smith.
    start_afterstring
    Only return records whose start date is on or after this ISO 8601 timestamp. Example: 2026-01-01T00:00:00Z.
    start_beforestring
    Only return records whose start date is on or before this ISO 8601 timestamp. Example: 2026-12-31T23:59:59Z.
    statusstring
    Only return jobs with this status, for example active, upcoming, late, requires_invoicing or archived. Example: active.one of requires_invoicingarchivedlatetodayupcomingaction_requiredon_holdunscheduledactiveexpiring_within_30_days