For Jira Cloud + QuickBooks Online

Documentation
& setup guide.

Everything needed to install InvoiceBridge, connect a QuickBooks Online company, configure a Jira project, and turn tracked worklogs into unsent invoices — plus a step-by-step walkthrough for verifying every function of the app on a test site.

Contents

  1. What InvoiceBridge is
  2. How it works
  3. Requirements
  4. Install & connect QuickBooks
  5. Set up a Jira project
  6. Create an invoice
  7. What keeps the numbers honest
  8. Verifying functionality — step by step
  9. Permissions, data & egress
  10. Troubleshooting
  11. Support
01

What InvoiceBridge is

InvoiceBridge reads the worklogs your team already logs in Jira and turns the ones you select into an unsent invoice in your own QuickBooks Online company. Every line is shown to you before anything is created, and nothing is ever emailed to a customer on your behalf.

It is built entirely on Atlassian Forge. There is no Worqflow server in the middle: your worklog data travels from Atlassian to exactly one destination — the QuickBooks company you connect.

02

How it works

ReadFor the project and date range you choose, InvoiceBridge finds issues with worklogs in that window, then reads those worklogs: issue key and summary, who logged the time, when, and how long.
PriceEach worklog is priced at the per-project rate, falling back to the site-wide default rate. Hours are rounded to two decimals and amounts are derived from those same rounded hours, so the figure on the invoice always equals QuickBooks' own quantity × unit price.
PreviewThe priced rows are shown in a table — date, issue, person, hours, rate, amount — with every row selected by default. You uncheck anything you don't want to bill.
CreateThe selected rows become an invoice in QuickBooks with EmailStatus: NotSet — an unsent invoice. Tax, numbering, terms and the send button all stay in QuickBooks, and stay yours.
RecordEvery invoiced worklog is written to a ledger held in Atlassian app storage. A worklog that has been invoiced once will never appear as billable again.
03

Requirements

04

Install & connect QuickBooks

Connecting is done once, by a Jira admin, from Jira Settings → Apps → InvoiceBridge. The page has three parts, in order.

  1. Install the app

    Install InvoiceBridge from the Atlassian Marketplace onto your Jira Cloud site. It adds one admin page and one project page; it does not modify issues, workflows or permissions.

  2. Connect your Intuit login

    On the admin page, under 1. Your Intuit login, click Connect Intuit login. Intuit's own sign-in and consent screen opens; approve access. The connection is per Atlassian user and is held by Atlassian's Forge external-authentication service — InvoiceBridge never sees or stores your Intuit password. The page then reads “✅ Your Atlassian user is connected to Intuit.”

  3. Point it at your QuickBooks company

    Under 2. QuickBooks company, paste your QuickBooks Company ID, choose the environment — Production for a real company, Sandbox for a developer test company — and click Validate & save. InvoiceBridge calls QuickBooks to confirm the ID resolves against your connection and echoes back the company name it found, so a mistyped ID cannot be saved silently.

  4. Set site-wide defaults

    Under 3. Defaults, set the default hourly rate used where a project has none, and choose how invoice lines are grouped: one line per worklog, or one line per issue (worklogs on the same issue at the same rate are merged into a single line). Click Save defaults.

Where to find your Company ID In QuickBooks Online, open the account information panel with the keyboard shortcut Cmd+Option+? — the Company ID is listed there. For a sandbox company, it is shown on the Intuit developer portal next to the company, under Dashboard → Sandboxes.
05

Set up a Jira project

Each project you bill is configured once, by a project admin, from that project's QuickBooks Billing page in the project menu.

On first visit the page shows Set up this project, with customers and service items loaded live from the connected QuickBooks company:

Click Save. The settings can be changed later with Edit settings.

06

Create an invoice

  1. Choose the period

    Set From and To, then click Refresh. The first time, the range defaults to the last 30 days; afterwards From defaults to where the previous invoice ended, so consecutive periods meet without a gap or an overlap.

  2. Review the lines

    Each uninvoiced worklog in the range appears as a row: date, issue, person, hours, rate, amount. Everything is selected by default — uncheck any row you don't want on this invoice. The running Total selected updates as you go.

  3. Create the unsent invoice

    Click Create unsent invoice — the button also shows how many worklogs are selected, e.g. Create unsent invoice (3 worklogs). InvoiceBridge re-reads the worklogs and recomputes every amount server-side — the figures posted to QuickBooks are never taken from the browser — then creates the invoice.

  4. Review and send in QuickBooks

    A confirmation shows the new invoice number and total, with an Open in QuickBooks link. The invoice is waiting there, unsent. Apply tax, adjust wording, and send it when you're ready.

07

What keeps the numbers honest

No double billingEvery invoiced worklog is recorded in a ledger. Invoiced worklogs are filtered out of later previews, and an attempt to bill one anyway is refused with the offending worklog ids named.
Edits don't hideIf a worklog's time is changed after it was invoiced, the preview raises a drift warning naming the issue and both figures — invoiced 3.5h → now 4h — so you can decide what to do in QuickBooks. It is never silently re-billed.
Interrupted attemptsInvoice creation writes an intent record first and marks each invoice with a private-note marker. If a run is interrupted, the next attempt finds and adopts the invoice it already created instead of creating a second one. Anything still unresolved after an hour is surfaced as a warning to check QuickBooks before retrying.
CurrencyIf the project's configured currency doesn't match what the QuickBooks customer bills in, creation stops with an explicit message rather than posting a wrongly-denominated invoice.
Nothing is sentInvoices are created with EmailStatus: NotSet. InvoiceBridge has no code path that emails an invoice.
Permission checksBefore any privileged read or write, the app verifies the calling user's own Jira permission — project administrator for project billing actions, Jira administrator for the connection settings — and fails closed if that check cannot be completed.
08

Verifying functionality — step by step

This walkthrough exercises every function of the app end to end on a test Jira site against a QuickBooks Online sandbox company. It takes about fifteen minutes.

Test credentials A QuickBooks Online sandbox company and a dedicated login are available for Marketplace review. Those credentials are supplied on the review ticket rather than published on this page. Reviewers and evaluators can also request them at briano@worqflow.org, or use any QuickBooks Online sandbox company of their own — the app has a Sandbox environment setting for exactly this.

The sandbox company provided for review already contains active customers and service items, so there is nothing to prepare on the QuickBooks side. If you use a sandbox of your own instead, add at least one active customer and one active service item first — the app bills against them.
You will need two Jira users The final check verifies that permissions are enforced, which requires a second Jira user who is not an administrator. If your test site has only one account, either invite a second free account, or temporarily remove your own user from the jira-administrators group and from the project's administrator role for that step, then restore it. Every other step needs only the admin account.

Prepare test data in Jira

  1. Create a project and an issue

    Create (or pick) a Jira project, and create an issue in it — for example IBT-14 · Fix login bug.

  2. Log work on it

    On the issue, use Log work to record time — for example 3h 30m, dated today. Log a second entry on another issue if you want to see multiple lines.

Connect QuickBooks

  1. Open the admin page

    As a Jira admin, go to Settings → Apps → InvoiceBridge.

    The page loads with “Not connected yet.”
  2. Connect the Intuit login

    Click Connect Intuit login and complete Intuit's sign-in and consent screen with the sandbox credentials.

    The page returns to “✅ Your Atlassian user is connected to Intuit.”
  3. Validate the company

    Paste the sandbox Company ID, set Environment to Sandbox, and click Validate & save.

    A green confirmation naming the sandbox company, e.g. ✅ Connected to “Sandbox Company US 9b2f” — proof the app really reached QuickBooks. A deliberately wrong Company ID is rejected instead of saved.
  4. Save defaults

    Set a default rate — say 120 — leave grouping at One line per worklog, and click Save defaults.

    The values persist across a page reload.

Configure the project and bill it

  1. Open the project's billing page

    Go to the project and open QuickBooks Billing from the project menu.

    A Set up this project panel, with the Customer and Service item dropdowns populated from the sandbox company — confirming live reads from QuickBooks.
  2. Configure it

    Pick a customer and a service item, set the rate to 120, leave currency USD, and click Save.

  3. Preview the worklogs

    Set From and To to cover the day you logged work, then click Refresh.

    A row per logged worklog — 3.5 hours at $120.00/h for $420.00 — and a matching Total selected.
  4. Create the invoice

    Leave the rows checked and click Create unsent invoice.

    A green banner naming the new invoice number and total, with an Open in QuickBooks link.
  5. Verify it in QuickBooks

    Follow that link into the sandbox company and open the invoice.

    An invoice for the right customer and total, unsent, with one line per worklog described as IBT-14 Fix login bug — Ana, 3.5h × $120.00, and an InvoiceBridge marker: IB-… string in the private note.

Verify the safeguards

  1. A worklog is billed once

    Back in Jira, click Refresh on the billing page.

    The worklogs you just invoiced are gone from the table — “No uninvoiced worklogs in this range.” They cannot be billed a second time.
  2. Edits to invoiced work are surfaced

    In Jira, edit the worklog you already invoiced — change 3h 30m to 4h — then Refresh.

    An amber drift warning: 1 already-invoiced worklog(s) changed since invoicing: IBT-14 (3.5h → 4h). The row is not silently re-billed.
  3. Line grouping

    Log two worklogs on the same issue, switch the admin default to One line per issue, then preview and invoice them.

    One merged invoice line carrying the summed hours, instead of two.
  4. Permissions are enforced

    As a Jira user who is not a project admin, open the project's QuickBooks Billing page. As a user who is not a Jira admin, open the InvoiceBridge admin page.

    Both refuse with a permission error rather than returning data. Billing actions require project administrator on that project; connection settings require Jira administrator.
  5. Nothing is emailed

    Check the invoice's status in QuickBooks.

    It remains unsent until a human sends it from QuickBooks.
09

Permissions, data & egress

Atlassian scopes

read:jira-workFind issues with worklogs in the chosen project and date range, and read those worklogs — issue key and summary, time logged, when, and by whom. Also backs the caller's own permission check before any privileged action.
read:jira-userResolve the display name of the person who logged the time, so an invoice line can say who did the work, and identify the admin who connected QuickBooks.
storage:appHold the app's own state: the QuickBooks connection and defaults, per-project billing settings, and the ledger of which worklogs have already been invoiced.

What leaves Atlassian, and where it goes

InvoiceBridge sends data to Intuit only — to the QuickBooks Online company that your own administrator connected. There is no Worqflow-operated server, no analytics endpoint, and no other third party.

appcenter.intuit.comIntuit's OAuth authorization screen, where your admin signs in and grants access. Handled by Atlassian's Forge external-auth service.
oauth.platform.intuit.comToken exchange and refresh.
accounts.platform.intuit.comReads the connected Intuit identity (the OpenID profile) so the connection can be attributed.
quickbooks.api.intuit.com
sandbox-quickbooks.api.intuit.com
The QuickBooks Online accounting API — production and sandbox respectively. Reads company info and preferences, the active customer and service item lists, and — only when recovering an interrupted attempt — searches that customer's invoices in a narrow date window to find one it may already have created. Creates the invoice.

The content of an invoice line is the data that reaches Intuit: issue key, issue summary, the display name of the person who logged the time, hours and rate. Nothing else from Jira is transmitted — no comments, no attachments, no other issue fields, and no data about issues without billed worklogs.

One piece of app-generated data is written alongside it: each invoice carries InvoiceBridge marker: IB-… in its QuickBooks private note. The marker is a one-way hash of the project key and the invoiced worklog ids — it identifies the invoice as one of ours on a later recovery attempt, and carries no readable Jira content.

Data kept, and for how long

See Privacy for the full statement.

10

Troubleshooting

“QuickBooks is not configured”No company has been connected yet, or the connection was made in a different environment. A Jira admin should complete the admin page.
Customer / service item dropdowns are emptyYour own Intuit login isn't connected yet, or the connected company has no active customers or service items. Connect on the admin page, and check the company in QuickBooks.
“Could not validate Company ID”The Company ID doesn't match the connected Intuit account, or the environment is set to Production for a sandbox company (or the reverse).
Currency mismatchThe project's configured currency differs from the QuickBooks customer's currency. Change one so they agree.
“Refusing: … already invoiced”Working as designed — those worklogs are already on an invoice. Refresh the preview to see what is genuinely outstanding.
An earlier attempt may not have completedCheck QuickBooks for an invoice matching the project before creating another, then retry — the retry adopts the existing invoice rather than duplicating it.
No rows in the previewThere are no uninvoiced worklogs in that range. Widen the dates, or confirm the work was logged on issues in this project.
11

Support

Email briano@worqflow.org. Support hours are Monday–Friday, 9:00 AM–5:00 PM America/Chicago, with a target first response within one business day.

When reporting a problem, the project key, the date range, and the exact message shown on screen are usually enough to identify it.