LWN: Comments on "Escape from QuickBooks (with data in hand)" https://lwn.net/Articles/729087/ This is a special feed containing comments posted to the individual LWN article titled "Escape from QuickBooks (with data in hand)". en-us Sat, 01 Nov 2025 09:02:08 +0000 Sat, 01 Nov 2025 09:02:08 +0000 https://www.rssboard.org/rss-specification lwn@lwn.net Escape from QuickBooks (with data in hand) https://lwn.net/Articles/926857/ https://lwn.net/Articles/926857/ vivekgani <div class="FormattedComment"> I've recently made some improvements to both the instructions and scripts based on my experiences with quickbooks 2022 &amp; 2023 to migrate to GnuCash in <a rel="nofollow" href="https://github.com/erikmack/qb-escape">https://github.com/erikmack/qb-escape</a> . <br> <p> <p> Notably, I found the exported data in the 'find all' approach in the article difficult to work with and the script was causing lots of imbalances (split and account values were sometimes mixed, relying on just the 'amount' value didn't work in many cases). Instead switched to an approach that uses the 'Journal' instead which had more consistent data. <br> <p> <p> Thanks to Jonathan Corbet, and the comments by jason.s and erikmack on instructions and setting up a github repo. <br> </div> Wed, 22 Mar 2023 15:41:02 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/894208/ https://lwn.net/Articles/894208/ Izwebusr <div class="FormattedComment"> Hi:<br> <p> Thank you very much for publishing these scripts.<br> <p> I am using these to migrate from QB to Gnucash. I have about 111000 transactions, over 22 years.<br> <p> I have exported the lists and transactions from QB. I have also installed Python and the scripts. However, the scripts produce an error because I am stuck on how to install the Python Bindings. I do not know what needs to be done to install them. This documentations page:<br> <p> <a rel="nofollow" href="https://wiki.gnucash.org/wiki/Python_Bindings#How_to_use_the_Python_bindings">https://wiki.gnucash.org/wiki/Python_Bindings#How_to_use_...</a><br> <p> is not too helpful. Or, at the least, not easy to understand for me.<br> <p> Is there any documentation someone can point me to?<br> <p> Also, would it be a good idea to try to find a consultant to give me a hand with this?<br> <p> Thanks!<br> </div> Sun, 08 May 2022 02:26:25 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/886958/ https://lwn.net/Articles/886958/ lragan <div class="FormattedComment"> My book in QuickBooks is not that large, so my method may not work for all, but here goes. I use GnuCash 2.6.19 in linux.<br> I was hanging on to QuickBooks 2008, which is not subscription. Giving up my Windows 7 machine, I discovered that I was, as I suspected, riding a dead horse. (I have switched to Linux for all but tax prep software. I keep a Windows 10 machine for that purpose, and occasional interaction with something that someone sends me, but for the most part, like a housecleaning service, I don&#x27;t do Windows!) But, I was able to write out an account list to a CSV file. After fumbling around a bit in the import function of GnuCash, I decided to follow their format precisely. It is revealed in the import process as a &quot;custom&quot; import option. Not understanding the symbols that make up the command, I simply took note of the field names. <br> Then, using a spreadsheet program, I rearranged the CSV file into the format of the import option, adding blank columns where needed, using their field names in the first row.<br> After importing, it was necessary to enter the balances from my CSV file (GnuCash, understandably, does not import the balances). This was done by a series of simple cut and paste operations. It was then necessary to edit the accounts into the hierarchy that I needed. I took this opportunity to delete accounts that I no longer used or needed (one can always add an account using GnuCash if necessary). <br> When done, the reports work to show balance sheet and income statement. I have not used the others yet, but suspect they work, too. I entered one month&#x27;s data (January 2022) taking off from the year end of QuickBooks in 2021, and all reconciles nicely. When one enters the balance for each account, GnuCash puts the compensating balance into an &quot;Unbalance&quot; account. If all is done correctly, this will go go zero when the last data is entered. <br> This is, I admit, a &quot;brute force&quot; approach, but for me, I feel certain that is was less work than writing code to do the job. For a more complicated business than mine, that might not be the case. I can now retire my ancient Windows 7 machine and let QuickBooks rest in peace...<br> Color me happy with GnuCash, and grateful for all who have contributed to it.<br> </div> Mon, 07 Mar 2022 02:26:59 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/871909/ https://lwn.net/Articles/871909/ pyz01 <div class="FormattedComment"> All -- not sure if this will help -- but this was taken from the QB site. It shows how to export specific data from QB directly to CSV: <br> <p> Export CSV files<br> You can export a list as a CSV file if you don’t have MS Excel installed on your computer or if you want to view and edit your data using a different format.<br> <p> Customers and Vendors<br> Open the Customer/Vendor Center.<br> Select the Excel drop-down, then choose:<br> Export Customer/Vendor list if you want to export customer/vendor data such as name, balances and contact information.<br> Export Transactions if you want to export transactions (either by name or transaction type).<br> In the Export window, choose Create a comma separated values (.csv) file.<br> Select Export.<br> Assign a file name, then choose the location where you want to save the file.<br> Locate, open, and edit the file as needed.<br> <p> Items<br> Go to the Lists menu, then select Item List.<br> Select the Excel drop-down, then choose Export all Items.<br> In the Export window, choose Create a comma separated values (.csv) file.<br> Select Export.<br> Assign a file name, then choose the location where you want to save the file.<br> Locate, open, and edit the file as needed.<br> <p> Reports<br> Open the report.<br> Select the Excel drop-down at the top of the report.<br> Select Create New Worksheet.<br> On the Send Report to Excel window, select Create a comma separated values (.csv) file.<br> Select Export.<br> Assign a file name, then choose the location where you want to save the file.<br> Locate, open, and edit the file as needed.<br> <p> Have not tried these yet -- but I am going to attempt to this weekend to see how far I can get in exporting QBooks data to GNUCash directly using CSV files. Will let you know if I am successful. <br> <p> </div> Tue, 05 Oct 2021 14:12:51 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/855078/ https://lwn.net/Articles/855078/ erikmack@gmail.com <div class="FormattedComment"> Thanks for this great article and these scripts. I have succeeded in importing data to GnuCash for my nonprofit.<br> <p> The customizations I required I&#x27;ve pushed to GitHub, in case someone else finds them useful: <a rel="nofollow" href="https://github.com/erikmack/qb-escape">https://github.com/erikmack/qb-escape</a><br> <p> The customizations include:<br> - Support python 3<br> - Open the file in the new way<br> - Support account parameters for Placeholder, Hidden, Description, and Code<br> - Match splits to accounts by account code not name<br> <p> My organization uses account codes so it&#x27;s useful to import them and use them during the import.<br> <p> Thanks again!<br> </div> Sat, 01 May 2021 13:44:50 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/843086/ https://lwn.net/Articles/843086/ raygor <div class="FormattedComment"> Thank you! I (re)discovered the git://git.lwn.net/qb-escape.git link 10 minutes after I hit submit.. :-/<br> <p> Additional request for clarity, please - can you share an example of how you used the remap.py map file?<br> <p> I am hopeful that this will help with QB losing the hierarchy of e.g.<br> <p> Liabilities -&gt; Credit Cards -&gt; Card1<br> Liabilities -&gt; Accounts Payable-&gt; AP<br> <p> Versus the current import where the middle tier is lost and everything is flattened under e.g. Liabilities.<br> <p> Liabilities-&gt;Card1<br> Liabilities-&gt;AP<br> <p> Thank you for publishing these scripts!<br> </div> Mon, 18 Jan 2021 20:09:13 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/843055/ https://lwn.net/Articles/843055/ corbet Those modules are in the repository with the rest of the code... Mon, 18 Jan 2021 16:12:45 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/842974/ https://lwn.net/Articles/842974/ raygor <div class="FormattedComment"> @Jonathan Corbet &amp; Jason.s - <br> <p> I seem to have missed some package dependency following your (and OP&#x27;s) instructions. Which packages are iif and remap loaded from?<br> <p> import iif<br> import remap<br> <p> python3 qb_iif_to_gc.py -c -r ~/Desktop/2021-01\ foo.iif<br> Traceback (most recent call last):<br> File &quot;qb_iif_to_gc.py&quot;, line 16, in &lt;module&gt;<br> import iif<br> ModuleNotFoundError: No module named &#x27;iif&#x27;<br> <p> <p> </div> Mon, 18 Jan 2021 15:56:44 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/833616/ https://lwn.net/Articles/833616/ jason.s <div class="FormattedComment"> I just spent the past few days using these wonderful scripts to move all my books over to GnuCash 4.2 from QuickBooks Pro 2017, and to return the favor to the open source community, I thought I might help with a simple set of steps, updated for use in 2020:<br> <p> Escape from QuickBooks to GnuCash (with data in hand), in simple steps (moving one company&#x27;s book):<br> ***The following was done moving from QB on Windows to GnuCash on MacOS***<br> <p> Export your QuickBooks data:<br> 1. Open QuickBooks and the Chart of Accounts<br> 2. Check &quot;Include inactive&quot; at the bottom to show all inactive/hidden accounts<br> 3. These scripts require that the accounts all have different names. Edit all accounts to be this way (double check subaccounts that may have the same name as other subaccounts). You can add numbers to the front of each to make them all uniquely named.<br> 4. Remove forward slashes / from all account names (the scripts tripped up on this).<br> 5. Export your Chart of Accounts and lists. Go to File &gt; Utilities &gt; Export &gt; Lists to IIF Files... Not sure if the scripts can support all lists, but I believe it worked when I checked Chart of Accounts, Customer List, Vendor List, and Other Names List. Click OK and save the IIF file somewhere. <br> 6. Determine when the EARLIEST transaction entry was ever made. If you don&#x27;t know which account has the first transaction of all time, come up with a date that is definitely before when you started using QuickBooks. <br> 7. Export all your transactions for all accounts of this company/book. Go to Edit &gt; Find... Select the Advanced tab at the top. Under Choose Filter, scroll down and select Date. Immediately to the right make sure All is selected in the dropdown menu and specify the From and To dates with From being the date you determined in the previous step (before the first transaction) and To being today&#x27;s date. <br> 8. Click the Find button at the top right. In the resulting list below, scroll down to the very bottom to make sure that the earliest transactions are listed. If you believe all transactions are shown, click on the Export... button on the right. In the Export dialog, select &quot;Create a comma separated values (.csv) file&quot;. Click Export below and save the CSV file where you saved the IIF file. <br> 9. Copy these two exported files to your other computer with GnuCash (not necessary if you&#x27;re using GnuCash on the same computer as QB). <br> <p> Import your data into GnuCash:<br> 10. On the computer with GnuCash, either use GIT to clone the import scripts offered on this page (if you understand GIT) from git://git.lwn.net/qb-escape.git or manually download both qb_iif_to_gc (<a rel="nofollow" href="https://lwn.net/Articles/730030/">https://lwn.net/Articles/730030/</a>) and qb_trans_to_gc (<a rel="nofollow" href="https://lwn.net/Articles/730031/">https://lwn.net/Articles/730031/</a>) to a folder for doing this import work. <br> 11. Install Python via MacPorts and the GnuCash Python bindings. Go to <a rel="nofollow" href="https://wiki.gnucash.org/wiki/Python_Bindings">https://wiki.gnucash.org/wiki/Python_Bindings</a> and follow the installation steps (I did this for Mac OS X). <br> 12. Note that if you used Homebrew to install Python before, MacPorts will install another set of them (note the directory where the MacPorts Python is). (Probably in /opt/local/bin/)<br> 13. I was only able to get the scripts working with Python 3.6. Unfortunately, this requires updating some of the script code to work with the new Python version. Open the two scripts up in your preferred code editor (or even TextEdit/Notepad). Update all print/except commands to have round brackets (). For example:<br> <p> print &#x27;Account %s already exists&#x27; % (name)<br> should be:<br> print(&#x27;Account %s already exists&#x27; % (name))<br> <p> except IOError, e:<br> should be:<br> except (IOError, e):<br> <p> In qb_trans_to_gc, update the following:<br> <p> Line 32: return gnucash.GncNumeric(ival, SCALE)<br> Should be:<br> return gnucash.GncNumeric(int(ival), SCALE)<br> <p> Under line 98: split.SetValue(GCVal(entry[&#x27;Amount&#x27;]))<br> Add<br> split.SetAmount(GCVal(entry[&#x27;Amount&#x27;]))<br> <p> (We need to SetValue AND SetAmount)<br> <p> Finally, for all instances of: entry = reader.next()<br> Change them to:<br> entry = next(reader)<br> <p> 14. It didn&#x27;t work for me, but on Line 154, you can try changing the currency that should be used for this book.<br> 15. Open GnuCash and create a new file by going to File &gt; New. Select the least amount of accounts to create (I chose &quot;A Simple Checkbook&quot;) that you can delete later on after importing in order to create the new file. Save the new book.<br> 16. Quit GnuCash (this is important - the scripts will not work if GnuCash is running at the same time). <br> 17. Open a terminal and run:<br> export PYTHONPATH=$PYTHONPATH:/opt/local/lib/python3.6/site-packages<br> 18. Import the Chart of Accounts and Lists by running: <br> /opt/local/bin/python3.6 ~/Documents/GnuCash/qb-escape/qb_iif_to_gc ~/Documents/GnuCash/qb-escape/listexports.IIF ~/Documents/GnuCash/&lt;YOUR GNUCASH FILENAME&gt;.gnucash<br> 19. Import your transactions by running:<br> /opt/local/bin/python3.6 ~/Documents/GnuCash/qb-escape/qb_trans_to_gc ~/Documents/GnuCash/qb-escape/exportedtransactions.CSV ~/Documents/GnuCash/&lt;YOUR GNUCASH FILENAME&gt;.gnucash<br> 20. Run GnuCash. You should see all your accounts and transactions if everything worked! You can now delete all the extra .gnucash and log files generated by the scripts (keep the original .gnucash file you created). Enjoy GnuCash!<br> </div> Tue, 06 Oct 2020 15:57:42 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/740774/ https://lwn.net/Articles/740774/ philtrick <div class="FormattedComment"> Thanks for this.<br> <p> Have been looking for an alternative to OpenERP 6 (haven't upgraded due to removal of features from the free version), and the stock and manufacturing of other systems aren't that great.<br> <p> Will have to give this a try..<br> </div> Wed, 06 Dec 2017 12:51:20 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/734673/ https://lwn.net/Articles/734673/ bsdimp <div class="FormattedComment"> There's three bugs that I found in this when doing my conversion from my 10-year-old collection of quickbooks data for my on-again, off-again consulting business....<br> <p> (1) Credit Card accounts are exported as CCARD in the iif file. These weren't handled by qb_iif_to_gc since they weren't in the table. The fix is trivial.<br> (2) QuickBooks mac 2007 exports values larger than $999.99 with commas. Fix GCVal to remove commas.<br> (3) Related, fix termination case to test for the string '0.00' rather than doing the float conversion.<br> <p> I have fixes for all these issues (though I had to hand-edit the csv files to remove the extra headers so qb_trans_to_gc wouldn't get confused. It would be nice if it filtered all that, but I gave up on hacking that together. It was easier to hack 10 files than to write code to cope. :/. I'll send them to the author of the article since I can't create a pull request since the git repo isn't on github...<br> <p> Still, don't count this as complaining. This stuff is awesome. While I still need to verify that all the data was transferred into gnucash correctly and the P&amp;L and Balance Sheet reports match, the initial scan of the data looks like it's there correctly.<br> <p> Warner<br> </div> Sun, 24 Sep 2017 00:34:07 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/731452/ https://lwn.net/Articles/731452/ njs &gt; the utility function I bashed together to create such values from the (text) floating-point values <p> This is why python has built-in support for exact decimal calculations :-) <pre> import decimal # Disable rounding on decimal arithmetic # (Not really an issue b/c the only operation is multiplying by 1000, which never # needs to round, but paranoia is cheap.) decimal.getcontext().traps[decimal.Inexact] = True SCALE = 1000 def GCVal(value): scaled = decimal.Decimal(value) * SCALE assert int(scaled) == scaled return gnucash.GncNumeric(int(scaled), SCALE) </pre> Sun, 20 Aug 2017 00:11:16 +0000 GnuCash vs other alternatives https://lwn.net/Articles/730772/ https://lwn.net/Articles/730772/ corbet That, and because I'm familiar with it through use for personal finance. It's just the starting point, no more. Sun, 13 Aug 2017 13:04:41 +0000 GnuCash vs other alternatives https://lwn.net/Articles/730771/ https://lwn.net/Articles/730771/ jnareb <div class="FormattedComment"> I guess that GnuCash was chosen for now, instead of other tool or accounting data format (like e.g. <a href="http://plaintextaccounting.org">http://plaintextaccounting.org</a>) because it can generate reports that you can compare with QuickBooks one. Do I understand this correctly?<br> </div> Sun, 13 Aug 2017 12:46:29 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730661/ https://lwn.net/Articles/730661/ diederich <div class="FormattedComment"> FYI: <a href="https://metacpan.org/release/Finance-IIF">https://metacpan.org/release/Finance-IIF</a> seems to be a thing.<br> <p> <p> </div> Fri, 11 Aug 2017 17:44:04 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730151/ https://lwn.net/Articles/730151/ timrichardson <div class="FormattedComment"> MYOB ODBC is free now. It's good enough for data conversion. It's well documented.<br> </div> Tue, 08 Aug 2017 11:19:30 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730141/ https://lwn.net/Articles/730141/ smurf <div class="FormattedComment"> You can obtain the starting balances for an account by taking the final balance and then subtracting all the transactions in that account. A bit involved but hardly rocket science.<br> <p> Splits obviously cannot have a commit method. That makes no sense. You can only commit the whole transaction, and then only when the splits sum up to zero. Otherwise Gnucash will "helpfully" credit the balance to a cure annoying "Imbalance-USD" account. (Disclaimer: that's what the UI does; I suspect the Python interface does the same thing.)<br> <p> Distributions do enable database integration, though the process to actually connect to one is anything but straightforward. Still, it may be a good idea to use that because one can then run SQL statements on the raw data, which tends to be faster than starting up Gnucash itself and reading the whole account history. Note though that Gnucash still is not multiuser capable just because you're using a database back-end; it has no way to refresh the in-memory set of transactions as it doesn't store the change log in the database. (At least it *has* a change log.)<br> </div> Tue, 08 Aug 2017 07:00:27 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730135/ https://lwn.net/Articles/730135/ ringerc <div class="FormattedComment"> I had similar issues with MYOB, but found that (at least at the time) their ODBC driver and API access is only available if you're signed on to the MYOB Developer program. And they get to tell you if they don't like what you're doing with it. <br> <p> It's also read-only except for specially authorised devs, so useful for export and reporting but not integration.<br> <p> Sigh. <br> </div> Tue, 08 Aug 2017 02:26:14 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730131/ https://lwn.net/Articles/730131/ Cyberax <div class="FormattedComment"> FWIW, QuickBooks has an API that allows you to connect to a running QB instance through a REST/XML API and introspect its database. It's fairly comprehensive and it can access values like the current balances that are difficult to obtain otherwise.<br> <p> In one of my previous jobs, I built a data converter that used it to pull data into another accounting system.<br> </div> Tue, 08 Aug 2017 01:12:56 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730130/ https://lwn.net/Articles/730130/ gerdesj <div class="FormattedComment"> My company escaped from Sage about a year ago. It is extremely liberating and worth persevering at. I no longer have to kick someone out to get a license and the PostgreSQL back-end we use is rather more efficient for multi user access than the shitty text files of the bottom end Sage offering. Our new system is not perfect by any means but can only improve as we add stuff to it. It already allows everyone in the firm to use it rather than the select few that licensing allows. I can point pgadmin and jdbc at it and mess around as I see fit (read only!)<br> <p> It probably isn't for everyone - <a href="https://www.uzerp.com/">https://www.uzerp.com/</a> and <a href="https://github.com/uzerpllp/uzerp">https://github.com/uzerpllp/uzerp</a> - but might be of interest to someone. It is UK focused but supports multi currency. It is really a ERP but we are are services company and it works very nicely for us. To cut a very long story short, the original sponsor is an accountant who set up a factory and decided to develop his own system and hired a programmer who has since retired. The current dev inherited a bit of a mess from his predecessor and has spent the last three years or so battering it into some sort of order. There's a lot more to do but it is extremely functional.<br> <p> uzERP runs the show for a few SMEs in the UK from manufacturing to services, that we know of. The source is GPL3 and PHP with a PostgreSQL back-end. <br> <p> Feel free to fork and crack on ...<br> </div> Tue, 08 Aug 2017 00:23:59 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730127/ https://lwn.net/Articles/730127/ Beolach <div class="FormattedComment"> All LWN articles are made public after 1 week.<br> </div> Mon, 07 Aug 2017 22:21:35 +0000 Escape from QuickBooks (with data in hand) https://lwn.net/Articles/730125/ https://lwn.net/Articles/730125/ cpitrat <div class="FormattedComment"> I guess to increase the likelihood of this article helping people who have the same need, it would make sense to not make it limited to LWN subscribers.<br> </div> Mon, 07 Aug 2017 22:03:27 +0000