The capabilities of QuickBooks can be expanded by the addition of “add on” or “QuickBooks Compatible” programs. This week I’ll talk about how developers can use the QuickBooks SDK method of integration and what this means to you as a QuickBooks user.
In my prior article on the IIF method of QuickBooks Integration I listed the different approaches that can be used to exchange data with QuickBooks:
- Excel imports
- IIF, using the export and import features in the File/Utilities menu.
- The QuickBooks SDK.
- The Intuit Partner Platform.
Each of these methods have their advantages and disadvantages.
What Is The QuickBooks SDK?
The QuickBooks SDK (sometimes referred to as the QBSDK) is a toolkit that Intuit provides through the Intuit Developer Network. It is free, but if you aren’t a programmer don’t bother looking it up. This is a very complicated programming toolkit that lets you access QuickBooks data using higher level languages like Microsoft C# or Visual Basic. You can use it with something like Excel or Access, but it takes a lot of work. This isn’t a tool that lets you directly access the data by itself, you will use it along with your programming tool of choice.
The SDK allows a program to send data to and receive it from the QuickBooks database. You will be exchanging data using an XML interface (referred to as QBXML) which is a standard data exchange format. A query might look like the following (this is a pared down version of the query):
This is a request for a list of inventory items. You would get a response that might look something like this (again, a partial listing):
The program actually sends all of this text information back and forth, which tends to make the exchange of data a bit slow sometimes. SDK programmers spend a lot of time in finding ways to optimize the process.
What Kinds of Data?
Almost all data in your QuickBooks company file can be accessed with the SDK. This is one of the significant advantages of an SDK based application over one that uses the IIF file format. IIF has not been significantly updated since roughly 2005, so it is missing all of the data features that have been added since then.
There are a number of things, however, that cannot be accessed with the SDK. This is a partial list to give you an idea.
- Memorized Transactions.
- Bank transfers
- Full Credit Card numbers in QuickBooks files created with the 2008 or later versions.
- Payroll items for deductions and taxes.
- Alternate Ship To addresses in the customer record.
- The new custom fields added in the 2010 Enterprise version.
In addition, portions of certain kinds of records cannot be accessed. For example, if you want to work with a Bill of Material in an Inventory Assembly item, you cannot access the unit of measure feature for the component items. There isn’t a comprehensive list (that I know of) that shows all of the shortcomings of the SDK.
The version of QuickBooks that you are using can affect what can be accessed. The older the program, the less information is available.
Limitations of SDK Applications
When compared to the IIF file approach, there are very few limitations in the SDK. A properly written program will reliably update the QuickBooks database. The primary limitations in my mind are:
- Intuit has not provided access to all of the records in the database. They have done a pretty good job, but there are some that are missing, which can cause problems.
- Intuit has not provided access to all of the data fields in some records. There is no good reason for this (other than credit card numbers perhaps), it is just sloppy work on their part and a lack of interest in providing a complete tool.
- The SDK does not provide a means to update the user interface in the QuickBooks program itself. Well, that isn’t entirely true – you can add some choices on a few menus, and you can make some reports or screens display. However, I cannot write a program that would add a field or feature to a data entry screen in QuickBooks by using the SDK.
- The SDK does not tie into all Intuit extensions of QuickBooks. For example, your desktop copy of QuickBooks has a document management feature, but that information cannot be accessed via the SDK.
- There is no SDK for the Mac version of QuickBooks.
There may be another major limitation to the SDK, although we will have to see how this plays out. At this time, apparently, Intuit has frozen development of the SDK. Usually a new version of the SDK comes out each year, shortly after the new release of QuickBooks. The 2010 release of QuickBooks came out, but Intuit did not release a new version of the SDK to match that. New fields and features in the 2010 release, such as the extended custom fields added to the Enterprise release, are not accessible. This also means that there are no fixes to bugs that are known to exist, or to shortcomings such as I listed above. It is not clear what Intuit’s intention is in the future, as there are many mixed messages and incomplete answers that SDK developers have been given on this. I will admit a bias here, as I am an SDK developer, but I certainly hope that Intuit sees the light and once again starts updating the SDK so that developers have access to all of the data that is held in the QuickBooks database.
Why Use the SDK?
At this time the QuickBooks SDK provides the programmer with the most complete way of accessing the most data in QuickBooks. It is reliable, and has been in use for many years.
If an application is written with the SDK, when a new release of QuickBooks comes out that program should continue to work with the new release. For example, I’ve written custom programs back in 2006 that continue to work with the 2010 version of QuickBooks without any changes required.
Programs written with the SDK have a very good chance of being able to work with the US, Canadian, UK and Australian versions of QuickBooks. The more current the version of QuickBooks, the more likely your SDK program will work with all of these versions.
I have seen some programs that appear to access data from QuickBooks without using the SDK. These will “scrape” the data from the screen. That is, they determine what the layout of a window is, and when you press a key they go to where they expect the data in that window and pull it in. They might also push some data back into QuickBooks through the screens. I urge you to be VERY cautious with programs that work this way. They may be violating the data rules that QuickBooks wants to enforce to keep everything working. They are very sensitive to minor changes in how information is presented, unlike an SDK based program.
Programs That Use the SDK
There are many programs that use the QuickBooks SDK that are available. The best place to start looking is in the Intuit Marketplace. To be listed here, an SDK program has to pass a certification test that looks at the application to see if it follows the programming guidelines that Intuit publishes for the SDK. This is not a guarantee that the program is a good fit for your business, but it is a start.
You will find a range of SDK applications here for many industries. You will find large applications such as ACCTivate, a comprehensive inventory management system, and you will find smaller utilities like CCRQBOM and CCRQInvoice (note, these last two are products that my company has developed).
Here are a few applications that I have reviewed in my blog at this time:
- Transaction Pro Importer and Transaction Pro Exporter
- Data Transfer Utility
- SmartVault Documentation Management
I would like to add that there are other programming interfaces that are available that can access the QuickBooks database, but these are all based on the SDK. The ODBC driver, Method, and a variety of Access and FileMaker database tools are available, but first they have to talk to the QuickBooks database via the SDK.
[…] This post was mentioned on Twitter by CCRussell, Quickbooks News. Quickbooks News said: QuickBooks Add On Programs: SDK : Practical QuickBooks: The capabilities of QuickBooks can be expanded by the addi… http://bit.ly/9RQfzG […]
Hello Charlie,
Great article on the SDK and its limitations.
Regarding items that can not be accessed by SDK:
“Alternate Ship To addresses in the customer record.”
While it is true that those addresses can’t be grabbed from the customer record, we offer a small utility named “ShipTo Address Exporter” that uses an indirect means to retrieve them using the SDK — by collecting them from the transactions in which they are used.
By the way, you do a great job in your tips and reviews. It’s at the top of my regular reading list.
Unfortunate that we have to go to that degree to get the info, and it might not always get exactly what we want, but that is about all that can be done. And then it isn’t in the regular database or the ODBC driver, and you have to run updates periodically. Wish Intuit had done it right, but from what I understand it will be very unlikely that we’ll see that changing.
[…] can use the QuickBooks SDK (software development kit) to access data, but this is a very complicated option even if you are an […]
Do you know if QB’s will allow negative invoices to come over from the interface program?
Oh, I have QB’s Pro 2009
Dana, I haven’t tried it, but a “negative invoice” is really a credit memo, and you probably should have it posted that way. The simplest rule of thumb on this is – if you can’t do it in the user interface, the SDK isn’t going to let you do it either.
Is there a complete list of ALL data and fields that SDK cannot access for QB 2011 ENT?
Ben, thank you for providing the “chuckle of the day”. No, no list like that. I don’t think Intuit knows themselves. The holes are odd and scattered about. And I’ve never seen a comprehensive list. It is frustrating.
Does any body know how I can Apply payment to quickbooks, with visual Basic?. Or let me know where I can find the source code to do this?.
Jose, you should look into the QuickBooks SDK, which you can find at https://ipp.developer.intuit.com/0085_QuickBooks_Windows_SDK
Thanks Charlie, have nice day.