This functionality creates invoices or bills from a csv import file containing rows of invoice entry
data. The import file may contain rows for new and/or existing invoices. If an invoice
already exists, GnuCash
adds the imported entries to the invoice (unless the invoice is
already posted). If the import file contains posting data for an invoice, then GnuCash
will
also attempt to post the invoice. If any row of an invoice contains an error, GnuCash
will
ignore all rows of the same invoice.
The field separator in the csv file must be either a comma or a semicolon; field values may be enclosed in double quotes.
For the sake of readability, in this chapter the term “invoice” by itself is used to refer to both customer invoices and vendor bills.
The import file should contain rows of invoice entry data. Any row contains both header and entry
fields, but GnuCash
takes the invoice header data from the first row of an invoice ID. For
informational purposes, the header data may be repeated for each subsequent row of the same
invoice.
There is no information in the file to indicate whether it concerns customer invoice or vendor bill data. Instead, a user option in the import dialog makes that distinction.
Each row should contain the fields listed below, in the same sequence, separated by a comma or a
semicolon. The fields are listed here by their technical name, which GnuCash
uses in the
preview of the import data.
id
- The invoice ID. If the invoice ID is blank, GnuCash
replaces it with the invoice ID from the previous row. If the invoice ID already exists,
GnuCash
will add the entries to the existing invoice (unless it is already posted).
date_opened
- Use the same date format as defined in
Preferences. Defaulted to today's date if left blank, or if the date provided is not
valid.
owner_id
- Customer or vendor number. Mandatory in the first
data row of an invoice. If not provided, all rows of the same invoice will be ignored.
billingid
- Billing ID. Optional
notes
- Invoice notes. Optional.
date
- The date of the entry. Defaulted to date opened if left
blank, or if the date provided is not valid.
desc
- Description. Optional
action
- Action. Optional
account
- Account for the entry. Mandatory in each row. If not
provided or invalid, all rows of the same invoice will be ignored.
quantity
- Quantity. Defaulted to 1 if left blank.
price
- Price. Mandatory for each row. If not provided, all
rows of the same invoice will be ignored.
disc_type
- Type of discount. Optional. Only relevant for
invoices, not for bills. Use “%” or blank for percentage value, anything
else for monetary value.
disc_how
- Discount how. Optional. Only relevant for invoices,
not for bills. Use “>” for discount applied after tax, “=”
for discount and tax applied before tax, and “<”, blank or anything else
for discount applied before tax.
discount
- Amount or percentage of discount. Optional. Only
relevant for invoices, not for bills
taxable
- Is this entry taxable? Optional. Use
“Y” or “X” for yes, “N” or blank for no.
taxincluded
- Is tax included in the item price? Optional. Use
“Y” or “X” for yes, “N” or blank for no.
tax_table
- Tax table. Optional. If the tax table provided
does not exist, it will be blank in the invoice.
date_posted
- Date posted. Optional. Use the same date format
as defined in Preferences. If you provide a date posted for the first row of an invoice,
GnuCash
will attempt to also post the invoice (as opposed to only saving or updating it).
due_date
- Due date. Optional. Use the same date format as
defined in Preferences. Defaulted to date posted, if left blank. Only relevant in the
first row of an invoice, if the invoice is posted.
account_posted
- Post to account, for vendor or customer
posting. Only mandatory in the first row of an invoice, if the invoice is posted.
memo_posted
- Memo. Optional. Only relevant in the first row
of an invoice, if the invoice is posted.
accu_splits
- Accumulate splits? Optional. Use
“Y” or “X” for yes, “N” or blank for no. Only
relevant in the first row of an invoice, if the invoice is posted. If you use a
spreadsheet program to create the import file, it is advised not to use blank for no,
because a final column with only blanks may not be recognized as relevant data when the
spreadsheet program creates the csv file.
Example content for two bills; one of 2 entries, and one of 3 entries. The first is saved and posted, the second only saved. Using comma field separator, decimal point and dd/mm/yyyy date format.
1204;15/12/2018;2001;PO 210220;Special delivery;16/12/2018;Pride and Prejudice;pc;Expenses:Books;1;30.00;;;;X;;A1;17/12/2018;17/1/2019;Liabilities:Accounts Payable;;X 1204;15/12/2018;2001;PO 210220;Special delivery;16/12/2018;Electronic principles;pc;Expenses:Books;1;50.00;;;;X;;A1;17/12/2018;17/1/2019;Liabilities:Accounts Payable;;X 1205;15/12/2018;2044;PO 21099;;16/12/2018;Ultimate Guide;pc;Expenses:Books;1;10.01;;;;;;;;;;; 1205;15/12/2018;2044;PO 21099;;16/12/2018;Dinner & drinks;pc;Expenses:Dining;1;10.01;;;;;;;;;;; 1205;15/12/2018;2044;PO 21099;;16/12/2018;UG course;pc;Expenses:Education;1;10.01;;;;;;;;;;;
Example content for one customer invoice, with one entry, including tax and discount. Using comma field separator, decimal point and dd/mm/yyyy date format. The the value of the description field contains the separator character.
20221;16/12/2018;1001;Order 3378;Discount as agreed;4/12/2018;"Accounting part 1, 2";ea;Income:Other Income;1;769.95;%;=;10;X;N;A1;16/12/2018;16/01/2019;Assets:Accounts Receivable;Posted by import;X
To import your invoice data, navigate to
→ → to open a new import dialog, and provide the necessary information.1. Choose the file to import - Select your import file, or manually type the path and file name.
2. Select import type - Select the import type, either Bill or Invoice.
3. Select import options - Select your csv format. Use the with quotes options if your file contains fields enclosed in double quotes. These options also match fields not enclosed in quotes; except for the fields for description and notes, fields should not contain the quote character itself. See Note on double quotes above. Use one of the other options if your file does not have fields enclosed in quotes; any quote characters in the file will be imported as is.
4. Preview - Once you have selected your import file and csv format, GnuCash
shows you a preview of the data. You can verify if your data is listed in the correct
columns. If you do not see any rows in the preview, then GnuCash
was not able to match
your import data rows to the selected csv format. See
Section 18.1.5, “What could go wrong?” below.
5. Afterwards - You can choose if GnuCash
should open tabs for the invoices after
the import. Either for all invoices, or for the invoices that are saved but not posted,
or for none of the invoices. Opening tabs slows down the import process considerably.
Start the import - If you are satisfied with your selections, hit the button to start the import.
If your data file contains invoice IDs that already exist, then GnuCash
will ask you (once per import
session) to confirm that you want to update existing invoices. If not confirmed, all rows
for existing invoices will be ignored.
Note | |
---|---|
Internally, ^(?<owner_id>[^|]*)\|(?<id>[^|]*)\|(?<due_date>[^|]*)
With a custom regular expression, |
GnuCash
executes the import process in three steps:
Import
- Imports the data file and attempts to match each row
to the data fields.
Validation and adjustment
- Validates the data fields and
replaces data with defaults if applicable.
Processing
- Handles the currency related validations, and
creates, updates and posts the invoices.
After all steps have finished, GnuCash
issues information about the result of the process. The initial
dialog shows the informational or error messages from the validation and processing steps.
The second dialog shows the statistics of the process:
Import - rows ignored: the number of rows that could not be matched to the data fields.
Import - rows imported: the number of rows that were successfully matched to the data fields.
Processing and validation - rows fixed: the number of rows for which a default value was used for a field.
Processing and validation - rows ignored: the number of rows for that were not processed because of a validation error.
Processing and validation - invoices created: the number of invoices created.
Processing and validation - invoices updated: the number of invoices that were updated.
If there were unmatched rows in the import step, a final dialog shows the actual rows that could not be matched.
If the statistics show unmatched rows under “Import - rows ignored”, then there is some issue with the format of your import file. Verify that you use and select the correct separator. Verify that your data rows have exactly 21 separator characters (1 for each field, except for the last). Verify whether you use the separator character within a data field; if so, enclose the field in double quotes.
If you use one of the with quotes import options, verify if you use the double quote character in any of the data field values; if within the description or notes fields, make sure that the field value is quoted, and precede each double quote within the field with an extra double quote; if within any other field, remove the double quote character.
The following errors can occur in the validation step. Any error in a data row will cause all rows of the same invoice to be ignored.
Note | |
---|---|
In versions 3.4 and earlier, an error in a data row would cause just that row to be ignored, as opposed all rows of the same invoice. |
The field ID
is blank. GnuCash
replaces a blank invoice ID with the invoice ID from
the previous row. But the first row of the import file should always have an invoice
ID.
The field owner_id
is blank. Every first row of an invoice should have an owner_id.
The customer or vendor number in field owner_id
does not exist. The owner_id in the
first row of an invoice should be an existing customer (for invoices) or vendor (for
bills).
The date in field date_posted
is not a valid date. If you provide a value for
date_posted in the first row of an invoice, it should be a valid date. Did you use the
date format as set in Preferences?
The account in the field account_posted
does not exist. If you provide a value for
the field date_posted
in the first row of an invoice, the field
account_posted
should be an existing account.
The account in the field account_posted
is not of type Accounts Receivable (for
invoices) or Accounts Payable (for bills). If you provide a value for the field
date_posted
in the first row of an invoice, the field
account_posted
should be an account of the correct type.
The field price
is blank. Every row should have a value for the field
price
.
The account in the field account
does not exist. Every row should have an existing
account in the field account
.
Any error in the validation step is listed after the overall import process completes. Correct your data file accordingly.
The following errors can occur in the processing step.
The invoice cannot be updated because it is already posted. All rows of the same invoice will be
ignored. If you want to update the existing invoice, unpost it first in GnuCash
.
The currency of the invoice differs from the currency of the account posted (“Invoice x NOT
posted because currencies don't match”). GnuCash
determines the currency of the
invoice either from the customer or vendor master data (for a new invoice) or from the
invoice itself (for an existing invoice). The currency of the invoice must agree with
the currency of the post to account in the field account_posted
.
GnuCash
creates the invoice but cannot post it. Manually correct the invoice in GnuCash
.
The invoice requires currency conversion. (“Invoice x NOT posted because it requires currency
conversion”). The invoice contains entries on accounts with different
currencies, or the currency of the entries differs from the currency of the post to
account. For such an invoice, GnuCash
needs exchange rates to translate the currency
amounts. GnuCash
creates the invoice but cannot post it. Post the invoice manually in
GnuCash
, and provide the requested exchange rates.
Currently the invoice import function does not support (at least) the following:
Import of billing terms and job.
Import of customer and job in default chargeback project for bills.
Application of billing terms from customer or vendor master data.
Automatic numbering of invoices.
Credit notes.