This post helps you with loading your data from QuickBooks to Amazon Redshift. If you are looking to get analytics-ready data without the manual hassle you can integrate QuickBooks to Redshift with RudderStack, so you can focus on what matters, getting value out of your financial data.
Access your data on QuickBooks
The first step in loading your QuickBooks data to any data warehouse solution is to access that data and start extracting it through the available web API.
QuickBooks has a very rich and well-defined API, reflecting the extensive development that the product has gone through. The API is designed around the following main groups of resources.
- Transaction resources
- Name list resources
- Report resources
- Supporting resources
Report resources contain all the reports that QuickBooks also offer from within the application. They have a different data model than the rest of the resources and you need to account for these differences when extracting data from the API.
The rest of the resources contain pretty much every possible entity that QuickBooks define, each one with a different data model that is serialized in JSON.
In addition to the above, the things that you have to keep in mind when dealing with any API like the one Quickbooks has, are:
- Rate limits. Every API has some rate limits that you have to respect.
- Authentication. You authenticate on QuickBooks using an API key.
- Paging and dealing with a big amount of data. Platforms like QuickBooks tend to generate a lot of data, as financial transactions and accounting involve many different events that can happen. Pulling big volumes of data out of an API might be difficult, especially when you consider and respect any rate limits that the API has.
QuickBooks is an accounting software released and maintained by Intuit. It currently has two versions, a desktop one and a cloud-based one. This guide is about the latter, where data can be accessed through the REST API that Intuit has built around the product.
QuickBooks is mainly used by small and medium-sized companies and covers the whole spectrum of accounting-related activities of a company, from payroll to the management and payment of bills.
Historically, QuickBooks is one of the first accounting software that was ever released, its initial release was for the DOS operating system and it managed to dominate the small and medium-sized companies market for many years.
Transform and prepare your QuickBooks data
After you have accessed the QuickBooks data, you will have to transform it based on two main factors,
- The limitations of the database that data will be loaded onto
- The type of analysis that you plan to perform
Each system has specific limitations on the data types and data structures that it supports. If for example, you want to push data into Google BigQuery, then you can send nested data like JSON directly. But when you are dealing with tabular data stores, like Microsoft SQL Server, this is not an option. Instead, you will have to flatten out any data before loading it into the database.
Also, you have to choose the right data types. Again, depending on the system that you will send data to and any data types that the API exposes to you, you will have to make the right choices. These choices are important because they can limit the expressivity of your queries and limit your analysts on what they can do directly out of the database.
QuickBooks has a very rich data model, where many of the resources that you can access might have to flatten out and be pushed in more than one table.
Also, QuickBooks has a special set of resources, the reports, that have a tabular but nested format that looks similar to a complex spreadsheet. In order to make these reports compatible with a database data model, you need to redesign, parse and transform the reports into a tabular form that can be stored in a database.
Transform and prepare your Quickbooks data for Amazon Redshift
Amazon Redshift is built around industry-standard SQL with added functionality to manage very large data sets and high-performance analysis. So, in order to load any data, you will have to follow its data model which is a typical relational database model. Any data you extract from a data source should be mapped into tables and columns. Where you can consider the table as a map to the resource you want to store and columns the attributes of that resource.
Also, each attribute should adhere to the data types that are supported by Redshift.
As data is probably coming in a representation like JSON that supports a much smaller range of data types you have to be really careful about what data you feed into Redshift and make sure that you have mapped your types into one of the datatypes that are supported by Redshift.
Designing a Schema for Redshift and mapping data from the data source to it is a process that you should take seriously as it can both affect the performance of your cluster and the questions that you can answer. It’s always a good idea to have in your mind the best practices that Amazon has published regarding the design of a Redshift database. When you have concluded on the design of your database you need to load data on one of the data sources that are supported as input by Redshift, these are the following:
Load your Quickbooks data into Amazon Redshift
To upload data to Amazon S3 you will have to use the AWS REST API, as we see again APIs play an important role in both the extraction but also the loading of data in our data warehouse. The first task that you have to perform is to create a bucket, you do that by executing an HTTP PUT on the Amazon AWS REST API endpoints for S3.
You can do this by using a tool like CURL or Postman. Or use the libraries provided by Amazon for your favorite language. You can find more information by reading the API reference for the Bucket operations on Amazon AWS documentation.
After you have created your bucket you can start sending any data to Amazon S3, using again the same AWS REST API but by using the endpoints for Object operations. As in the Bucket case you can either access the HTTP endpoints directly or use the library of your preference.
Amazon Redshift supports two methods for loading data into it. The first one is by invoking an INSERT command. You can connect to your Redshift instance with your client, using either a JDBC or ODBC connection and then you perform an INSERT command.
The way you invoke the INSERT command is the same as you would do with any other SQL database, for more information you can check the INSERT examples page on the Redshift documentation.
Redshift is not designed for INSERT like operations, on the contrary, the most efficient way of loading data is by doing bulk uploads using a COPY command.