QuickBooks¶
Overview¶
The QuickBooks task works in your QuickBooks Online company from a workflow. It can:
- Invoices — create one (and email it from QuickBooks), change one, find one or a list, email it, or void it.
- Payments — record a customer's payment against an invoice.
- Estimates — create one, or find one.
- Customers — create one, change one, find one or a list.
When to use this task:
- Raise the QuickBooks invoice when a deal is won in BaseCloud.
- Add a new client to QuickBooks as a customer the moment they sign up.
- Record the payment in QuickBooks when a customer pays through BaseCloud.
- Send a list of overdue invoices to the account manager every Monday.
Connecting QuickBooks¶
Pick the company under QuickBooks account, or choose + New Connection to connect one. Each connection is one QuickBooks company. See App connections.
Configuration¶
Builder fields¶
The Field column is the label as it appears in the task builder; Key is the name the value is stored under and referenced by.
| Field | Key | Type | Default | Notes |
|---|---|---|---|---|
| What to do | action |
select | create_invoice |
Options: Create an invoice · Change an invoice · Find an invoice · Find invoices · Email an invoice · Void an invoice · Record a payment on an invoice · Create an estimate · Find an estimate · Create a customer · Change a customer · Find a customer · Find customers |
| QuickBooks account | app_connection_id |
app-connection | – | |
| Customer ID | customer_id |
text | – | Only shown when action is update_customer, get_customer |
| Customer ID (optional) | customer_id |
text | – | Only shown when action is create_invoice, create_estimate |
| Only this customer’s invoices (optional) | customer_id |
text | – | Only shown when action is get_invoices |
| Customer name | customer_name |
text | – | Only shown when action is create_customer, update_customer, get_customer, create_invoice, create_estimate |
| Company name | company_name |
text | – | Only shown when action is create_customer, update_customer |
| First name | first_name |
text | – | Only shown when action is create_customer, update_customer |
| Last name | last_name |
text | – | Only shown when action is create_customer, update_customer |
| Email address | email |
text | – | Only shown when action is create_customer, update_customer, get_customer, create_invoice, update_invoice, create_estimate |
| Phone | phone |
text | – | Only shown when action is create_customer, update_customer |
| Mobile | mobile |
text | – | Only shown when action is create_customer, update_customer |
| Street address | address_line1 |
text | – | Only shown when action is create_customer, update_customer |
| City | address_city |
text | – | Only shown when action is create_customer, update_customer |
| State or province | address_state |
text | – | Only shown when action is create_customer, update_customer |
| ZIP or postal code | address_postal_code |
text | – | Only shown when action is create_customer, update_customer |
| Country | address_country |
text | – | Only shown when action is create_customer, update_customer |
| Notes | notes |
textarea | – | Only shown when action is create_customer, update_customer |
| Name contains (optional) | name_contains |
text | – | Only shown when action is get_customers |
| Include inactive customers | include_inactive |
checkbox | 0 |
Only shown when action is get_customers |
| Invoice ID | invoice_id |
text | – | Only shown when action is update_invoice, get_invoice, send_invoice, void_invoice, record_payment |
| Invoice number | invoice_number |
text | – | Only shown when action is update_invoice, get_invoice, send_invoice, void_invoice, record_payment |
| Invoice number (optional) | invoice_number |
text | – | Only shown when action is create_invoice |
| Estimate number (optional) | invoice_number |
text | – | Only shown when action is create_estimate |
| Estimate ID | estimate_id |
text | – | Only shown when action is get_estimate |
| Estimate number | estimate_number |
text | – | Only shown when action is get_estimate |
| Invoice date (optional) | invoice_date |
text | – | Only shown when action is create_invoice, update_invoice |
| Estimate date (optional) | invoice_date |
text | – | Only shown when action is create_estimate |
| Due date (optional) | due_date |
text | – | Only shown when action is create_invoice, update_invoice |
| Valid until (optional) | expiration_date |
text | – | Only shown when action is create_estimate |
| Products or services | line_items |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Descriptions | line_descriptions |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Quantities | line_quantities |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Prices | line_prices |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Tax codes (optional) | line_tax_codes |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Prices are | tax_calculation |
select | default |
Options: As QuickBooks is set up · Before tax · Including tax · Not taxed. Only shown when action is create_invoice, update_invoice, create_estimate |
| Discount % (optional) | discount_percent |
text | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Message to the customer (optional) | customer_memo |
textarea | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Note for your team (optional) | private_note |
textarea | – | Only shown when action is create_invoice, update_invoice, create_estimate |
| Email it to the customer from QuickBooks | send_after |
checkbox | 0 |
Only shown when action is create_invoice |
| Send to (optional) | send_to |
text | – | Only shown when action is send_invoice |
| Only invoices with something still owing | unpaid_only |
checkbox | 0 |
Only shown when action is get_invoices |
| Dated from (optional) | date_from |
text | – | Only shown when action is get_invoices |
| Dated up to (optional) | date_to |
text | – | Only shown when action is get_invoices |
| Order | order |
select | newest |
Options: Newest first · Oldest first · Due soonest first · Due latest first · Highest total first · Most owing first. Only shown when action is get_invoices |
| Amount (optional) | payment_amount |
text | – | Only shown when action is record_payment |
| Payment date (optional) | payment_date |
text | – | Only shown when action is record_payment |
| Reference (optional) | payment_reference |
text | – | Only shown when action is record_payment |
| Deposit to account ID (optional) | deposit_account_id |
text | – | Only shown when action is record_payment |
Which other fields show depends on What to do.
Invoice lines¶
Products or services, Descriptions, Quantities, Prices and Tax codes each take one value per
line. For more than one line, put a | between the values, in the same order in each box:
| Box | Value |
|---|---|
| Products or services | Design|Hosting |
| Descriptions | Homepage redesign|Monthly hosting |
| Quantities | 1|12 |
| Prices | 500|25 |
- A product or service is found by its name, or its SKU, exactly as it is in QuickBooks. Leave it empty to use Services, which every QuickBooks company has.
- Quantities left empty are 1.
- Tax codes: in the US,
TAXfor a taxable line andNONfor one that is not; QuickBooks works out the sales tax. Outside the US, the tax code's ID in QuickBooks, and Prices are says whether prices include tax. One tax code is used for every line. - Discount % comes off the whole invoice. Discounts must be switched on in QuickBooks first (Settings › Account and settings › Sales).
- When changing an invoice, filling in any line box replaces all of its lines. Leave them all empty to keep the lines as they are.
Dates¶
Write dates year-month-day, like 2026-11-04, so they can never be read the wrong way round. A date in another
format stops the task with a message saying so; a Date Formatter task can change it first. An
empty invoice date is today; an empty due date follows the customer's payment terms.
The customer on an invoice or estimate¶
Give the Customer ID, or just the Customer name. With only a name, the customer is found by name, and added to QuickBooks when there is none yet — so a workflow can raise the first invoice for a brand-new client.
How it behaves¶
- A search that finds nothing is not an error. Find a customer, Find an invoice and Find an estimate
carry on with
foundset tofalse, so an If task can decide what happens next. - Creating a customer whose name is taken returns that customer. No two customers in QuickBooks can share a
name, so a workflow that runs twice for the same person gets the existing customer, with
existingset totrue. - An invoice number that already exists stops the task, rather than making a second invoice with it.
- Emailing straight after creating. When Email it to the customer from QuickBooks is ticked and the email
cannot be sent, the invoice is still created; the run says why the email failed, in
send_error. - Recording a payment takes everything still owing unless an Amount is given, and refuses more than is owed. Without a Deposit to account ID, QuickBooks puts it in Undeposited Funds.
- Voiding keeps the invoice in QuickBooks, with its number, at zero.
- Test runs are real. Running the task to test it creates and changes records in QuickBooks, as a live run does. Use a QuickBooks sandbox company to try things out.
Output Fields¶
| Field | Description |
|---|---|
found |
true when the record was created, changed or found. |
invoice_id, invoice_number |
The invoice's ID and number in QuickBooks. |
invoice_date, due_date |
The invoice's dates. |
total, tax, balance, amount_paid |
The invoice's total, its tax, what is still owed, and what has been paid. |
status |
Paid, Partly paid, Overdue, Unpaid or Voided. |
email_status |
Whether QuickBooks has emailed it, for example EmailSent. |
lines |
An invoice's or estimate's product and service lines, one entry each: item, description, quantity, unit_price, amount, tax_code, tax_rate. Use it in a Loop. |
line_descriptions, line_quantities, line_unit_prices, line_tax_rates, line_items |
The same lines with a | between them, in the order the BaseCloud Accounting task takes them — see Copy an invoice into BaseCloud. |
line_count |
How many lines. |
discount_amount, discount_percent |
A discount on the whole invoice, if it has one. |
customer_memo |
The message to the customer on the invoice. |
customer_id, customer_name |
The customer. |
display_name, email, phone, mobile, company_name |
A customer's details (customer actions). |
existing |
Create a customer: true when the name was already taken and that customer is returned. |
customers, invoices, count |
Find customers / Find invoices: the list, and how many. |
total_balance |
Find invoices: what is still owed across the list. |
truncated |
true when a list was too long to keep whole. Narrow it. |
payment_id, payment_amount, payment_date |
Record a payment: the payment made. |
estimate_id, estimate_number, expiration_date, estimate_status |
An estimate's details. |
quickbooks |
Everything QuickBooks sent back about the record. |
{{task_ID_run_text}} |
What the task did, for example Invoice 1042 created in QuickBooks. |
Copy an invoice into BaseCloud¶
Find an invoice and Find invoices return each invoice's lines, so a workflow can bring existing QuickBooks invoices into BaseCloud — for example when a new client joins, with all their invoices so far.
- QuickBooks → Find invoices, with Only this customer's invoices set to the customer's QuickBooks ID.
- A Loop over
invoices. -
Inside it, a BaseCloud Accounting task that creates an invoice, with its line boxes set to the loop item's values:
BaseCloud Accounting box QuickBooks value Item Description(s) line_descriptionsItem Quantity(ies) line_quantitiesUnit Cost(s) line_unit_pricesTax Rate(s) line_tax_rates(a percentage, such as8.25)Item Code(s) line_items
Good to know:
- Tax. QuickBooks keeps tax on the invoice, not on each line. Each taxed line gets the invoice's own rate (its tax divided by what its taxed lines come to), which is exact when all of them are taxed at the same rate. When prices include tax, unit prices are given without it, as BaseCloud's are.
- Bundles are opened up into the products inside them. A discount on the whole invoice is not a line: it is in
discount_amount. - A
|inside a description becomes/, so it cannot split the line in two. - The invoice is new in BaseCloud: it gets BaseCloud's next number, and a paid QuickBooks invoice (
statusisPaid) has to be marked paid in BaseCloud too.
Related¶
- QuickBooks Trigger — start a workflow when a customer pays.
- Xero and Sage — the same kind of task for Xero and Sage.
- BaseCloud Accounting — quotes and invoices in BaseCloud itself.