QuickBooks Accounting Sandbox/Production Plugin

Demo to preview the settings

For Sandbox version see plugin setup below:


This plugin connects your Quickbooks account with your bubble application, so you will be allowed to create new accounts, grant access privileges, and manage your Quickbooks data, so you and your team can easily log in and work with it directly from your app.


You will need a developer account with Quickbooks in order to interact with the Plugin: https://developer.intuit.com/app/developer/qbo/docs/get-started​
Note: The documentation provides info for both Development and Production setup. Use both plugin versions for both setups in order to make sure that it works correctly, by starting with Sandbox.

Getting started

  • Once you are logged in, go to Dashboard & then 'Create new app'.
  • Click '+ Create an app' for a new application.
  • Select the platform you want to develop for
  • Insert a name for your new app and select the scopes
Image without caption
  • Navigate to the 'Keys' tab, in BOTH 'Redirect URI' sections add your app's redirect URL.
Image without caption
  • If you are using the Production plugin, do the same as for the Development keys:
Image without caption

If you already have an application here's how to setup

  • Click the β€œDashboard” tab.
  • Select your application from the list.
  • Get the Development and production secret and api key
Image without caption
  • Place your development & production ID & Secret into the plugin's settings in your app.​
Image without caption
If you wish to add the Webhooks & continue with your App Listing on the Quickbooks Marketplace you can do so although it's not required to use the plugin.

Plugin Parameters

The 'realmId'​
There are a few concepts that once are known will make your integration much easier to understand. The first is the realmId. As the user is going through the OAuth process and signing into your app they will choose the company they wish to use, Once this process is finished they will arrive back in your app and you will notice that there is now an extra parameter in your URL, eg. realmId=123456789.
It's important you grab this value from and save it to the current user because this will be needed in every action you use in reference to the current user's company. This should be saved as the parameter may not persist in other parts of your app.
The 'Sync Token'
Quickbooks uses a sync token to stop multiple users from corrupting data in the event the same record is altered at the same time. This means you should read the record then alter it, When you for example read a vendor's record - grab the sync token (tokens are numbers that increase by one each record change) & as you edit the record you will be able to provide the token there.
It's good practice to only save the token in states on the page, Saving them in the current user or another section of your database will reduce performance but more importantly can lead to errors.
Complex {Looking: "Actions"}
Quickbooks can achieve a lot, It's why they thrive and continue to grow. As you can imagine this makes the data more complex & in turn what we must provide when making calls / creating records also becomes more complex. To combat the number of actions the plugin would require to accommodate the millions of possible record variations we provide you the JSON so you can drop dynamic statements where you need them. This also means in the cases that you need something where your key & value need defining this is done with ease.
Let's look at one of the records, Here is a Vendor,
{ "BillAddr":{ "Line1":"Bill's Store", "Line2":"Bill Smith", "Line3":"1 Notreal Ave.", "City":"Notrealie", "Country":"U.S.A", "CountrySubDivisionCode":"TX", "PostalCode":"55555" }, "TaxIdentifier":"12-3456789", "AcctNum":"12345678", "Title":"Mr.", "GivenName":"Bill", "FamilyName":"Smith", "Suffix":"Sr.", "CompanyName":"Bill's Store", "DisplayName":"Bill's Store", "PrintOnCheckName":"Bill's Store", "PrimaryPhone":{ "FreeFormNumber":"(012) 345-6789" }, "Mobile":{ "FreeFormNumber":"(012) 345-6789" }, "PrimaryEmailAddr":{ "Address":"bill@test.com" }, "WebAddr":{ "URI":"http://billsstore.com" } }
When you see JSON properties like this, in most cases we provide ALL the properties. A lot of the time they are all required however sometimes this is not the case - To view the Quickbooks documentation in regards to these objects, you can click here.
Looking at the above example to make something dynamic in the Bubble, we can do the following.​
Image without caption
  • In the above example, you can see we have made the 'Line1' property dynamic.​​
It's a good idea to add an 'on unhandled error' action to your app - if a user was to then input something that QuickBooks will return an error from, the error will not transpire to your user's screen.
To learn about the proper use of the Quickbooks logo & to download image/button assets, you can visit here.

Plugin Data / Action Calls

Data Calls

Image without caption

Action Calls

Image without caption


Update: 12/01/21 -
  • Updated plugin authorization and API calls, and deployed sandbox and production versions of the plugin.
Update: 08.12.21 - Version 1.2.0
  • Minor changes
Update: 13.05.22 - Version 1.8.0
  • Minor updates
Update 1.11.22 - Version: 1.14.0
  • fixed problem with the authorization