Get your customers’ data out of QuickBooks Desktop and into your app.

For SaaS teams whose customers keep their books in QuickBooks Desktop or Enterprise. QuBe Sync reads the company file through the Web Connector and sends your app the customers, items, invoices, payments, reports, and whatever else you ask for as JSON. Tell us what you need from QuickBooks, and we’ll build the import in a free account.

Try real requests

GET /api/v2/connections/:id/customers?iterator=true&max_returned=5
No account necessary. Uses our QB Simulator by default.
Tell us what you need from QuickBooks
Your app sends one request, POST /api/v2/connections/:id/workflow-runs, naming the workflow pull_changes and the kinds from QuickBooks. QuBe Sync calls your webhook with 200 records a page: 292 Customers,80 Service items,424 Invoices, then workflow_run.completed with the count of each.

What do you need the data for?

How often you need it, and where it’s going determines the setup.

  • Keep your app in sync

    Your product shows or works on QuickBooks data regularly.

    The first run imports every record of the types you ask for. After that, your app passes the time of its last run, and the workflow only sends what changed since then, including what was deleted.

    How often
    On your schedule
    Price
    $25 or $50 per connection, per month
  • Import everything, once per customer

    You’re onboarding a new customer, or moving one off Desktop for good.

    Import every record you need, a page at a time.

    How often
    Once, or whenever you start over
    Price
    The same per-connection price while the connection is active. No export fee.
  • Your own books in a spreadsheet

    You run the business or keep its books, and want the data in Excel.

    QuBe Sync is an API for software teams, so it’s more than you need. QuickBooks Desktop already exports to Excel: every report has an Excel button, and the customer, vendor and item lists export from their own windows.

    How often
    Whenever you like
    Price
    Nothing: it’s in QuickBooks

    Exporting many company files, or the same data every month? Tell us about it

What the two connection speeds include

What you can query

107 read operations, each one a JSON request with QuickBooks’ own filters: by name, by date modified, by customer, by date range. These are the ones most apps start with.

How reads and paging work

Lists

  • Customers and jobs
  • Vendors
  • Employees
  • Items, of every type
  • The chart of accounts
  • Classes
  • Terms
  • Price levels
  • Sales tax codes

Transactions

  • Invoices
  • Sales receipts
  • Payments received
  • Credit memos
  • Estimates and sales orders
  • Bills and vendor credits
  • Purchase orders
  • Checks and deposits
  • Journal entries
  • Time entries

Reports

  • Profit and loss, balance sheet and the other summary reports
  • Transaction detail reports
  • A/R and A/P aging
  • Job reports
  • Time reports
  • Budgets
  • Payroll summaries and detail

Pushing records to QuickBooks too? The same connection creates and updates them

One request, and the data comes to you

Your customer connects once, from a link you send them. After that your app asks for what it needs, and QuBe Sync calls your webhook with each page of results as QuickBooks answers. No SOAP server, no qbXML, nothing to poll or manage.

The import and sync workflows

Your app starts the import

POST /api/v2/connections/:id/workflow-runs

{
  "workflow": "pull_changes",
  "input": {
    "lists": [
      "customer",
      "item_service",
      "item_inventory"
    ],
    "transactions": [
      "invoice",
      "receive_payment"
    ],
    "include_line_items": true
  },
  "webhook_url": "https://yourapp.example/webhooks/qube"
}

QuBe Sync calls your webhook

  1. auto-pagination Every page of every type you requested, in order.
  2. deleted If you include a start date to pull only what changed, you'll also receive anything deleted since then.
  3. workflow_run.completed How many records of each kind were sent, so your app knows it has them all.

Delivered to your app, not pretending to be synchronous

Some QuickBooks Desktop APIs try to answer on the same call (your request waits or times out while a PC in your customer’s office does the work). That might suit simple, manual requests, but leads to unexpected failures your code has to handle. Reliably syncing a company’s data is a different job.

  1. The PC is off, or QuickBooks is closed

    With a live query

    The call fails or times out, and your code decides when to try again.

    Delivered by QuBe Sync

    The request stays queued and is answered when QuickBooks is back. Your app is told if the connection stalls.

  2. The list is long

    With a live query

    Your app holds the cursor and asks for each page in turn, one request at a time.

    Delivered by QuBe Sync

    One request. Every page comes to your webhook, in order.

  3. You only want what changed

    With a live query

    Your code writes the date filter for each kind of record, and asks for the deletions separately.

    Delivered by QuBe Sync

    Your app keeps one date, the time of its last run. A workflow sends you what changed since then, as well as what was deleted.

  4. Your server is down when the answer is ready

    With a live query

    The call that was waiting is gone, and the read starts over.

    Delivered by QuBe Sync

    The delivery is retried, and you’re emailed if it never lands.

For getting data out in bulk, and keeping it current, delivery is what holds up.

Reading QuickBooks Desktop is about handling edge cases.

The data lives in a file on your customer’s PC, behind a program that has to be open, signed in and on the right company. We’ve been reading it for 16 years.

How we handle errors

What a read runs into

  1. The company file is big

    QuickBooks hands over customers, vendors, items and transactions a page at a time. Your app gets 200 records per webhook, in order, and never one answer too large to take.

  2. The session ends between pages

    QuickBooks keeps a paged read only for the session that began it. The workflow starts again from the first page and marks the repeat, so your app can take a page twice without harm.

  3. Records were deleted

    A query never returns what’s gone. A sync given the time of your last run also asks QuickBooks for what was deleted since then, which it keeps for 90 days.

  4. Another company file is open

    Each connection remembers its company file. Nothing is read from another one, and your customer is told to open the right file.

  5. QuickBooks is closed

    The read stays queued until QuickBooks is open again, and your customer is told, once, in words they can act on.

Need to push changes back to QuickBooks too?

The same connection can create or update any record QuickBooks allows. Push customers and items, add invoices and record payments, with 144 create and update operations and workflows that reconcile first, so nothing is created twice.

How writes work

Free to build. Paid per connection once it’s live.

No separate price for exports or imports: a connection costs the same whether your app reads from it once or all day.

$0 In your sandbox, against your own QuickBooks or a simulated one.
While you build
$25 Per month. RESTful, paged reads/writes for all 261 QB operations. Sync up to every 5 minutes.
Standard connection
$50 Per month. Adds workflows (including import and sync workflows), fuzzy cached searches, and syncs every 10s.
Realtime connection

Try real requests

GET /api/v2/connections/:id/customers?iterator=true&max_returned=5
No account necessary. Uses our QB Simulator by default.
Tell us what you need from QuickBooks

Tell us what your app needs out of QuickBooks Desktop. We’ll build the first version.

Tell us what you need from QuickBooks

Questions first? Write to support@qubesync.com and a real human will answer.

Rather build it yourself? Create a free account