Skip to main content

iPaaS.com to QuickBooks Online Invoice Mapping Documentation

How iPaaS.com invoices, orders sold on terms and part-paid orders become QuickBooks Online invoices (Add and Update), with their lines, addresses and captured payments.

Summary

The Add/Update QuickBooks Online Invoice FROM iPaaS.com mapping collection writes iPaaS.com transactions to QuickBooks Online as invoices: transactions of type Invoice, orders sold on terms (with no payment yet), and orders whose captured payments do not cover the total. The first transfer creates the invoice; later transfers of the same transaction update that invoice. Three child collections carry the invoice's product lines, its billing and shipping addresses, and its payments.

Payments travel with the invoice. Each captured payment on the iPaaS.com transaction becomes a QuickBooks payment applied to the invoice, once. A payment added in iPaaS.com after the invoice was posted, such as a later instalment, is recorded when the transaction is sent again, as long as the invoice still has an open balance in QuickBooks (see Paid Invoice Protection). An order sold on terms and paid in full later reaches its invoice through Add QuickBooks Online Sales Receipt FROM iPaaS.com instead. The integration records payments in the QuickBooks books only: it does not charge cards or use QuickBooks Payments, and it never emails the invoice to the customer.

The customer and each line's item are found or created as the invoice is written. An update replaces the invoice's lines, unless the invoice was changed in QuickBooks since the integration last wrote it; a fully paid invoice is skipped; and a posted invoice whose transaction is cancelled, refunded or returned at the source is reported rather than changed.

ID Format

  • Manual Sync ID: the iPaaS.com Transaction ID, a numeric id such as 100387. The child collections have no Manual Sync of their own: send the parent transaction again.

  • External ID saved after sync: the QuickBooks invoice, in the form Invoice-{QuickBooks invoice id}, for example Invoice-1045. Later transfers of the same transaction update that invoice instead of creating another one.

  • Payments: each payment the integration records is linked to its iPaaS.com payment as {transaction external id}|{QuickBooks payment id}, for example Invoice-1045|1046. The integration also writes the iPaaS.com payment id at the start of the QuickBooks payment's memo and uses it to recognise the payment on later transfers.

  • Lines and addresses: not linked one by one. They are rewritten with the invoice.

  • Document number: the default mappings write the transaction number into DocNumber. It is visible on the QuickBooks invoice, and it is the key used to find an existing invoice when the transaction is not linked yet (see Duplicate or Conflicting Mappings). Remapping DocNumber to another value is supported, but invoices created before the change are no longer found by their number.

Deleted Record Support

Not supported. The integration creates and updates invoices only: it does not void, credit, refund or delete a QuickBooks invoice, and deleting a transaction in iPaaS.com does not change QuickBooks. A posted invoice whose transaction is cancelled, refunded or returned at the source is reported with QBOL-BIZL-1007 so the reversal can be entered in QuickBooks (see Reversals at the Source under Mappings).

Mapping Collection Status

  • Status: Enabled.

  • Trigger events: the iPaaS.com transaction/created and transaction/updated events, once subscribed under Outbound Data Flows. Whether a transfer creates or updates the QuickBooks invoice depends on whether the transaction is already linked to one, not on which trigger fired.

Duplicate or Conflicting Mappings

These collections also write or read the same QuickBooks invoices:

  • Add QuickBooks Online Sales Receipt FROM iPaaS.com: also writes iPaaS.com transactions to QuickBooks. The two filters divide transactions at each transfer: orders paid in full by captured payments go to the sales receipt collection; invoices, orders sold on terms and part-paid orders come to this collection; orders with payments but none captured are held by both (or come to this collection as open invoices, when the filter is changed as described in Posting an Open Invoice Instead of Holding the Order). When an order posted here as an invoice is paid in full later in iPaaS.com, it passes the sales receipt filter instead: the sales receipt collection finds the invoice the order was posted as, through the order's iPaaS.com link (its IpaasTransactionId mapping), records the payments against it, each once, rather than posting a sales receipt, and the order stays linked to that invoice. Another QuickBooks invoice that only has the same document number and customer is not paid: that collection's collision setting decides. A sale paid with two or more payment methods is also posted by the sales receipt collection as an invoice, paid by one QuickBooks payment per payment.

  • Update QuickBooks Online Invoice TO iPaaS.com: sends each QuickBooks invoice's status, balance and payments back to iPaaS.com, including payments entered in QuickBooks.

Important: Review the filters of both FROM collections together before enabling either, so that each transaction is written once, and decide whether iPaaS.com or QuickBooks is the source of truth for invoices. This collection treats iPaaS.com as the source of truth: an update replaces the QuickBooks invoice's lines, unless the invoice was changed in QuickBooks since the integration last wrote it (see Edits made in QuickBooks under System Caveats).

Collision handling. The Collision Handling Method setting on this collection's settings page applies when the first transfer of a transaction finds a QuickBooks invoice with the same document number. Only invoices are matched, and only by document number; a transaction without a document number is never matched and always creates a new invoice. A subscription built from the default templates starts with no collision setting, which behaves as Error.

  • Error: the transfer fails with QBOL-BIZL-1006, naming the existing invoice. Nothing is created.

  • Remap and Link: the transaction is linked to the existing invoice, and iPaaS.com then sends a separate update of the linked transaction through this collection's filter. With the shipped guard from Paid Invoice Protection, an invoice already fully paid in QuickBooks is left as it is and the transaction's payments are not recorded on it. Without the guard, or while the invoice has an open balance, the update replaces the invoice's lines and records the transaction's payments that are not already applied to it.

  • Update and Link: the transaction is linked to the existing invoice, and iPaaS.com reads that invoice before updating it, so the filter's guard is checked against it. With the shipped guard, an invoice already fully paid in QuickBooks is left as it is and the transaction's payments are not recorded on it. Without the guard, or while the invoice has an open balance, it is updated in the same transfer: its lines are replaced and the transaction's payments that are not already applied to it are recorded; a payment already applied to it is recognised and not recorded again, a payment with a different reference is recorded and overpays the invoice, and a same-amount payment with nothing that tells them apart is refused with QBOL-BIZL-1010 while the invoice is still linked.

  • Update and No Link: the existing invoice is updated, but no link is stored, so every later transfer matches it by number again and rewrites it. The guard never applies, so a matched invoice is rewritten on every transfer, even when it is fully paid.

Important: On this collection, only Error, and Remap and Link or Update and Link with the shipped guard in place, keep an invoice already paid in QuickBooks from being rewritten. Leave the method at Error (the default) unless existing QuickBooks invoices have been reconciled, or checked for matching document numbers, before the first transfer. A paid order whose document number and customer match an existing QuickBooks invoice that is not its own is handled by the collision setting of Add QuickBooks Online Sales Receipt FROM iPaaS.com.

Supported Child Collections

  • Add/Update QuickBooks Online Invoice Line FROM iPaaS.com: the invoice's product lines. Each line's item is matched by SKU, then name, or created. Lines are rewritten with the invoice on every update and are not linked one by one.

  • Add/Update QuickBooks Online Invoice Address FROM iPaaS.com: the invoice's billing and shipping address (the first address of each type). Addresses are written with the invoice and are not linked one by one.

  • Add QuickBooks Online Payment FROM iPaaS.com: the transaction's captured payments, each recorded once as a QuickBooks payment applied to the invoice and linked as {transaction external id}|{QuickBooks payment id}.

None of the children runs on its own or has a trigger of its own: each is sent with its invoice whenever the parent collection runs.

System Caveats

QuickBooks Online Caveats

  • US companies only: the integration writes US tax codes (taxable and non-taxable), which exist only in US QuickBooks companies, and nothing blocks a non-US company from connecting. Companies outside the US are outside the scope of this integration. Both manual and automated sales tax are supported (see Sales Tax under Setup Requirements).

  • Edits made in QuickBooks: every write of the invoice ends its private note with a mark that starts with iPaaS.com sync, which records the line amounts the integration posted. Before an update, the integration compares the invoice's lines in QuickBooks with that mark. When a line was added, removed or repriced in QuickBooks, or the invoice was voided, the transfer stops with QBOL-BIZL-1008 naming the invoice, and nothing is overwritten. To keep the QuickBooks version, dismiss the error. To replace it with the iPaaS.com version, delete the iPaaS.com sync mark from the invoice's private note in QuickBooks and send the transaction again.

    • Payments and credits applied in QuickBooks do not count as edits, so an invoice paid in QuickBooks is still updated while it has an open balance.

    • An edit that keeps every line amount (for example, a changed description or item at the same amount) is not detected, and the next update overwrites it. An invoice with no mark (written before this check existed, or whose mark was deleted) is written, and marked.

    • Make corrections at the source, or with a credit memo in QuickBooks, rather than by editing the QuickBooks invoice.

  • Mapped header fields are overwritten: fields this collection maps are written on every update; a mapped header field whose value comes out blank is not sent, so QuickBooks keeps its value. ShippingAmount and DiscountAmount are different: they are written as lines, and every update rebuilds all of the lines, so a blank or zero shipping or discount amount on an update removes that line and changes the invoice total, with no error. QuickBooks fields this collection does not map are left as they are.

  • Document numbers: QuickBooks allows 21 characters in an invoice number.

  • Line amounts: QuickBooks requires a line's amount to equal its quantity times its unit price. A non-zero amount with a quantity of 0 is refused.

  • Line limit: QuickBooks accepts at most 750 lines on a taxable invoice.

  • Categories and bundles: QuickBooks item names are unique across all item types, and a category or bundle cannot be sold on a line (see the line child under Mappings).

  • Payment methods must exist: each translated payment method must exist in QuickBooks under that name, or the transfer fails with QBOL-NFND-1007.

  • Undeposited Funds: without a deposit account, QuickBooks puts payments in Undeposited Funds, to be deposited in QuickBooks.

  • No emails to customers: the integration never asks QuickBooks to send the invoice.

  • Books closing date: the integration does not check QuickBooks' closing date. QuickBooks refuses a change to an invoice dated in a closed period, and a new invoice dated in it, with QBOL-EXTN-1001 (code 6210); iPaaS.com retries the transfer, and it fails the same way while the period stays closed. A new payment the source records on such an invoice is recorded in the open period and applied to the invoice, which is left as it is; if the source also changed the invoice's lines or tax, that change is not written and the transfer reports QBOL-BIZL-1012, naming the payment. See QuickBooks Online Known Limitations, section 25.

  • Rate limiting: QuickBooks allows 500 requests per minute and 10 requests per second for each company. When a limit is reached, the transfer is automatically rescheduled and resumes after the limit window resets, except in the case described under When a payment fails after the invoice is created (see Error Handling). If rate-limit errors continue for hours, QuickBooks' monthly limit for the iPaaS.com app may have been reached: contact your MiSP or iPaaS.com Support.

iPaaS.com Caveats

  • Retries: iPaaS.com retries every errored transfer automatically on a growing schedule. A transfer whose cause is not fixed fails again on each retry until it is fixed or the error is dismissed, so fix the record, mapping or setting named in the error.

  • Updating transactions through the iPaaS.com API: when a source system or script updates an iPaaS.com transaction through the iPaaS.com API, it must include the existing line and payment ids. Without them, new lines and payments are added to the transaction, and the next transfer posts the extra line and can record the extra payment in QuickBooks.

  • Payment method translation: the translation QuickBooks Online Payment Method FROM iPaaS.com must have a row for every payment method a transaction can carry.

  • Primary address flags: which address is the shipping address depends on the iPaaS.com primary billing and primary shipping flags. Make sure the source system sets them.

  • Silent skips: a transaction the filter skips, including an update of a fully paid invoice and an order held because none of its payments is captured, does not appear in Dashboard / Integration Monitoring / Error Logs.

Prerequisite Handling

The integration does not send customers or products through their own collections first. It resolves them while writing the invoice:

  • Customer: the QuickBooks customer the iPaaS.com customer is linked to; otherwise the QuickBooks customer with the same email; otherwise, when the transaction has no email, the customer whose display name equals the customer name or billing address name; otherwise it creates a customer from that name, the email and the billing address. QuickBooks display names are unique, so a transaction with no email and no linked customer is matched to the existing QuickBooks customer with that display name: two different people with the same name share one QuickBooks customer and its receivable. Send an email, or send customers through Add/Update QuickBooks Online Customer FROM iPaaS.com first so CustomerId is filled, to avoid it.

  • Items: each line's item is matched by SKU, then by name, among QuickBooks Inventory, Non-inventory and Service items, or created when Create Missing Items is on (see the line child under Mappings). Sending products through Add/Update QuickBooks Online Item FROM iPaaS.com first gives each line the item with the product's own name and settings, instead of one created from the line.

  • Payment methods: not created. Each payment's method must already exist in QuickBooks under its translated name.

Setup Requirements

iPaaS.com Configuration

  1. Automatic transfers do not activate by default. In the iPaaS.com subscription configuration, open the Outbound Data Flows section and subscribe to the transaction/created and transaction/updated triggers. Until they are subscribed, no automatic transfers occur.

  2. On this collection, leave the Collision Handling Method at Error (the default) unless existing QuickBooks invoices have been reconciled, or checked for matching document numbers (see Duplicate or Conflicting Mappings).

  3. Review this collection's shipped filter with the sales receipt collection's: the captured-payment status (Completed), the paid-invoice guard and the reversal clause. Decide whether orders with no captured payment are held (the default) or posted as open invoices (see Posting an Open Invoice Instead of Holding the Order). Keep IpaasTransactionId and SourceStatus mapped.

  4. Give the payment method translation QuickBooks Online Payment Method FROM iPaaS.com a row for every payment method your sales can carry.

  5. Check the subscription settings the invoice uses: Sales Tax Code (manual sales tax only), Create Missing Items, Default Item Type, Income Account, Shipping Item and Deposit Account. Their effects are described with the mappings that use them.

QuickBooks Online Configuration

  1. Confirm the company is a US company and whether it uses manual or automated sales tax (see Sales Tax below).

  2. Make sure every payment method named in the payment method translation exists (for example Cash, Check, Visa, MasterCard, American Express and Discover).

  3. To fill QuickBooks sales form custom fields, add and turn them on (see Custom Fields below).

Sales Tax. The integration supports US QuickBooks companies on manual sales tax and on automated sales tax. Keep TaxTotal mapped: the tax amount iPaaS.com sends, including 0.00, is what QuickBooks records. The tax code rules differ between the two.

  • US companies on manual sales tax: a non-zero TaxTotal is sent with a tax code (a TaxCode mapping, else the Sales Tax Code setting), and QuickBooks keeps that amount. Without a tax code, the transfer fails with QBOL-VALD-1014. Enter the sales tax code or tax group to use in the Sales Tax Code setting.

  • Zero tax: a zero TaxTotal marks every line non-taxable and sends no tax code. Lines are otherwise marked taxable.

  • US companies on automated sales tax: leave the Sales Tax Code setting blank and do not map TaxCode: the integration ignores both there and sends no tax code. QuickBooks keeps the TaxTotal amount and assigns a non-zero amount to its own state and local jurisdictions. QuickBooks calculates tax at the rate for the shipping address, else the company address (a billing address alone is not used), and only for states that have a tax agency set up in the company; a tax amount sent for a shipping address in a state with no agency is recorded as the transaction's tax but is not assigned to any agency. Make sure a tax agency is set up for every state the company collects tax in.

  • Differences from QuickBooks' calculation: when the tax amount from iPaaS.com differs from what QuickBooks would calculate, the iPaaS.com amount is recorded, with no error or warning.

  • Letting QuickBooks calculate (automated sales tax only): removing the TaxTotal mapping lets QuickBooks calculate the tax. This fits only invoices that are themselves the customer's bill, such as orders sold on terms with no tax charged at the source. iPaaS.com keeps the source's tax and total, so the two systems then disagree on the invoice total, and an order already paid at the source is left with an open balance in QuickBooks and comes back to iPaaS.com as Awaiting Payment. Do not remove it for orders charged at checkout.

Custom Fields. QuickBooks invoices support up to three text custom fields on sales forms. To fill one:

  1. In QuickBooks, add and turn on the custom field (Settings > Account and settings > Sales > Custom fields).

  2. In this collection, add a custom field mapping (+ Add Custom Field) named exactly like the QuickBooks field (case does not matter), and map the value to it. For example, a mapping named Sales Channel with the value Web Store fills the QuickBooks custom field Sales Channel.

Values are cut to 31 characters. A mapping whose name matches no turned-on sales form custom field fails the transfer with QBOL-NFND-1008. A PONumber mapping is written to a custom field named P.O. Number or PO Number when the company has one; otherwise it is added to the invoice's private note.

Terms and Due Date. The default mappings do not include Terms or DueDate. Subscribers or their MiSP can map Terms (the name or id of a QuickBooks payment term, for example Net 30; the term must exist in QuickBooks, or the transfer fails with QBOL-NFND-1009) and DueDate (a date written as yyyy-MM-dd, for example 2026-11-13; when it is blank, QuickBooks calculates the due date from the invoice's terms). When neither is mapped, the invoice's terms and due date are left to QuickBooks' defaults. Confirm the result in a staging environment before relying on it in production.

Other fields available to map. TaxCode (manual sales tax only), CustomerName (the name used first to find a QuickBooks customer when there is no email, and the display name of a customer the integration creates; when blank, the billing address name is used), CustomerMemo (a message shown to the customer on the invoice, up to 1,000 characters), PONumber, and Class and Location (a QuickBooks class or location name or id, when class or location tracking is on in QuickBooks). On the line child, ItemId, Taxable, ServiceDate and Class; on the payment child, PaymentDate, Reference and DepositAccount.

Integration Flow

  1. The transaction/created or transaction/updated event, or Manual Sync with the iPaaS.com Transaction ID, starts the transfer.

  2. The filter decides whether the transaction is written as an invoice (see Mapping Filter under Mappings). Every other transaction is skipped without an error.

  3. Checks for an existing invoice (first transfer only). When the transaction has a document number, the integration looks for a QuickBooks invoice with the same number. If one exists, the collision setting decides what happens (see Duplicate or Conflicting Mappings).

  4. Checks the payments before anything is written. On an update, a transaction that is now Cancelled, Refunded, Partially Refunded or Returned at the source stops first, with QBOL-BIZL-1007 (see Reversals at the Source). Every payment not yet recorded needs an amount above zero: a 0.00, negative or missing amount fails the transfer with QBOL-VALD-1015 naming the amount, and nothing is written. On a new invoice, every payment's method is also checked against the payment method translation: a method with no translation row fails with QBOL-NFND-1007 naming it, whichever payment carries it.

  5. Finds the customer. As described under Prerequisite Handling. When two or more QuickBooks customers have the transaction's email, the transfer fails with QBOL-BIZL-1002 naming them, and nothing is written.

  6. Finds or creates each line's item. Shipping and the transaction discount are added as lines of their own, after the product lines.

  7. Writes the invoice. A new invoice is created with its header, addresses, lines and tax. An existing invoice is updated: the integration reads the invoice's current version just before writing, and the update replaces all of the invoice's lines, unless the invoice was changed in QuickBooks since the integration last wrote it (QBOL-BIZL-1008). Every write ends the invoice's private note with an iPaaS.com sync mark.

  8. Records the payments. The integration first reads the payments already applied to the invoice, so a payment already there is not recorded again. Each payment not yet recorded becomes a QuickBooks payment applied to the invoice, with the iPaaS.com payment's reference at the start of its memo.

  9. iPaaS.com saves Invoice-{QuickBooks invoice id} as the transaction's external ID, and links each recorded payment.

A retried create of the invoice carries the same request id as the first attempt, so when QuickBooks created the invoice but its answer was lost, QuickBooks returns that invoice instead of creating a second one. This needs a document number or an IpaasTransactionId on the transaction; the default template maps both.

Mappings

Add/Update QuickBooks Online Invoice FROM iPaaS.com

iPaaS.com data type: Transaction

Mapping Filter

// Invoices, orders sold on terms and part-paid orders, not cancelled, refunded, returned or drafts; orders with payments but none captured are held; never rewrite a fully paid invoice.
// A posted invoice cancelled, refunded or returned at the source passes, so the integration reports it (QBOL-BIZL-1007).
return (Status != "Cancelled" && Status != "Refunded" && Status != "Partially Refunded" && Status != "Returned" && Status != "Draft" && (Type == "Invoice" || (Type == "Order" && (Payments == null || Payments.Count == 0 || (Payments.Sum(p => p.Status == "Completed" ? p.Amount : 0) < Total && (Payments.Sum(p => p.Status == "Completed" ? p.Amount : 0) > 0 || DestinationValue != null))))) && (DestinationValue == null || DestinationValue.Balance > 0)) || (DestinationValue != null && DestinationValue.TransactionType == "Invoice" && (Status == "Cancelled" || Status == "Refunded" || Status == "Partially Refunded" || Status == "Returned"));

Filter Description. The filter has two parts joined by ||. A captured payment is one whose Status is Completed. DestinationValue is empty on the first transfer of a transaction and, on later transfers, holds the QuickBooks invoice it is linked to, including its open Balance.

The first part sends a transaction when all of these are true:

  • Its Status is not Cancelled, Refunded, Partially Refunded, Returned or Draft.

  • Its Type is Invoice, or its Type is Order and one of these holds:

    • Sold on terms: the order has no payments. It is posted as an invoice.

    • Part-paid: its captured payments are above zero but less than its Total. It is posted as an invoice; the captured payments are recorded and the rest is owed.

    • Already posted, not yet paid: it is already linked to a QuickBooks invoice and its captured payments are less than its Total. It is updated, so a declined payment attempt on an order sold on terms does not stop later updates; the declined payment is not recorded.

  • It is not linked to a QuickBooks invoice that is already paid in full (see Paid Invoice Protection).

The second part, the reversal clause, sends a transaction already posted as an invoice whose Status is now Cancelled, Refunded, Partially Refunded or Returned, so that the integration can report it (see Reversals at the Source).

Every other transaction is skipped without an error:

  • Paid in full: orders paid in full by captured payments are handled by Add QuickBooks Online Sales Receipt FROM iPaaS.com instead.

  • No captured payment: an order that carries payments, none of them captured, and is not posted yet, is held until a payment is captured. A held order is not reported anywhere.

  • Cancelled, refunded or returned before posting: never posted, as there is nothing to reverse. Drafts are not posted either.

  • Other types: transactions whose Type is neither Invoice nor Order.

Transactions of type Invoice pass whether or not they carry payments, so a payment added to an invoice later is recorded on it while the invoice has an open balance. The captured status Completed is also used by the sales receipt filter and both payment filters: if your source system reports captured payments with another status, change all four, and validate the change in a staging environment before relying on it in production. The Activity Tracker can show an informational message about the filter's parentheses; the filter itself works as written.

Paid Invoice Protection. The filter carries a guard that skips updates of a fully paid invoice: the part (DestinationValue == null || DestinationValue.Balance > 0). Without the guard, sending a transaction again after its invoice was paid rewrites the paid invoice under its payment, with no error: for example, an order corrected at the source from 40.00 to 30.00 changes a paid 40.00 invoice to 30.00 and leaves the customer overpaid by 10.00.

  • New invoices pass: the first transfer of a transaction always passes the guard and creates the invoice.

  • Invoices with an open balance pass: an unpaid or part-paid invoice is updated as before, so a later instalment added in iPaaS.com is recorded on it. A part-paid invoice can therefore still be rewritten by an update, including its lines, unless it was changed in QuickBooks since the integration last wrote it.

  • Fully paid invoices are skipped: once the invoice's balance is zero, whether through payments, a credit memo applied in QuickBooks, or a payment sent with the invoice that covered it in full, every later transfer of the transaction is skipped, including line, price and address changes. The one exception is a reversal at the source, which is reported.

  • The skip is silent: a skipped update does not appear in Dashboard / Integration Monitoring / Error Logs. The QuickBooks invoice simply stays as it was.

  • Changing the guard: subscribers or their MiSP can change or remove the guard. Without it, a fully paid invoice is rewritten on every update. Validate the change in a staging environment before relying on it in production.

  • Correct paid invoices in QuickBooks: correct a fully paid invoice in QuickBooks with a credit memo or a refund, not by re-sending the order.

  • Invoices matched by collision handling: the guard reads only an invoice the transaction is already linked to. On a first transfer that finds an existing invoice by document number, DestinationValue is empty, so the guard passes and the collision setting decides (see Duplicate or Conflicting Mappings).

  • Orders paid later: an order sold on terms and paid in full later is updated through Add QuickBooks Online Sales Receipt FROM iPaaS.com, whose shipped filter carries its own guard. Its payments are recorded only on the invoice the order was posted as, and a payment already applied there is not recorded again.

Reversals at the Source. The integration does not void, credit or refund a QuickBooks invoice. When a transaction already posted as an invoice becomes Cancelled, Refunded, Partially Refunded or Returned at the source, the reversal clause lets it through and the transfer stops with QBOL-BIZL-1007, naming the QuickBooks invoice and the reversal to enter: for a refund or return, a credit memo for the amount refunded and a refund for any money returned; for a cancellation, void the invoice if nothing was owed, or enter a credit memo, and refund any payment received. Nothing is changed in QuickBooks, and no refund payment is recorded. Enter the reversal in QuickBooks, then dismiss the error; iPaaS.com retries it until it is dismissed. Subscribers who do not want the check can unmap SourceStatus and remove the reversal clause from the filter (the part that begins || (DestinationValue != null and lists the four statuses); the reversed transaction is then skipped by the first part of the filter. See QuickBooks Online Known Limitations for the full lifecycle and a month-end reconciliation routine.

Posting an Open Invoice Instead of Holding the Order. By default, an order with no captured payment is held until a payment is captured. Subscribers or their MiSP who want such orders in QuickBooks straight away, for example to see them as receivables while a payment is pending, can change this collection's filter so that the order is posted as an open invoice instead. Replace the filter with:

return (Status != "Cancelled" && Status != "Refunded" && Status != "Partially Refunded" && Status != "Returned" && Status != "Draft" && (Type == "Invoice" || (Type == "Order" && (Payments == null || Payments.Count == 0 || Payments.Sum(p => p.Status == "Completed" ? p.Amount : 0) < Total))) && (DestinationValue == null || DestinationValue.Balance > 0)) || (DestinationValue != null && DestinationValue.TransactionType == "Invoice" && (Status == "Cancelled" || Status == "Refunded" || Status == "Partially Refunded" || Status == "Returned"));

Leave the sales receipt filter and both payment filters as they are. With this filter:

  • A declined or pending order: posted as an invoice owing the full amount; no payment is recorded.

  • When the payment is captured later: it is recorded once on that invoice, and no sales receipt is posted.

  • Revenue and tax are recorded when the invoice is posted: that includes, with QuickBooks automated sales tax, the tax on the sale, even though the payment may never be captured.

  • A cancelled order is not reversed: when the order is cancelled at the source (for example an authorisation that expires), the invoice stays open in QuickBooks: the integration does not void invoices. The transfer of the cancelled order stops with QBOL-BIZL-1007 naming the invoice. Void the invoice in QuickBooks, then dismiss the error, and review open invoices for cancelled orders as part of the month-end reconciliation.

Keep the Cancelled, Refunded, Partially Refunded and Returned conditions at the start of the filter: without them, a transaction reversed at the source before it was ever posted reaches the integration and is refused with QBOL-BIZL-1011. Validate the change in a staging environment before relying on it in production. After saving a filter, allow up to about 20 minutes before relying on it, and avoid saving repeated edits in quick succession.

Mapping Type

Source Field (iPaaS.com)

Destination Field (QuickBooks Online)

Description

Static

"Invoice"

TransactionType

Required. Tells the integration to write a QuickBooks invoice; without it the transfer fails with QBOL-VALD-1012. The value is fixed by design, so leave it as Invoice.

Dynamic Formula

return TransactionNumber != null && TransactionNumber.Length > 21 ? TransactionNumber.Substring(TransactionNumber.Length - 21) : TransactionNumber;

DocNumber

Recommended. The transaction number becomes the invoice number; QuickBooks allows 21 characters, so a longer number keeps its last 21 and the full number goes into PrivateNote. It is also the key used to find an existing invoice before a create, and two numbers that differ only before their last 21 characters collide. When blank, QuickBooks numbers the invoice and no existing-invoice check is made.

Dynamic Formula

return TransactionCreatedDateTime == null ? null : TransactionCreatedDateTime.Value.ToString("yyyy-MM-dd");

TxnDate

Recommended. The invoice date: the UTC calendar day of the transaction's created time, not the company's local day, so an order created at 7:30 PM Pacific time on March 31 is dated April 1. Subscribers or their MiSP can convert to their own time zone in the formula when that period cutoff matters. When blank, QuickBooks uses the current date.

Dynamic Formula

return GetExternalId(CustomerId, "Customer", SpaceportSystemId);

CustomerId

Recommended. The QuickBooks customer the iPaaS.com customer is already linked to. When blank, the integration finds or creates the customer (see Prerequisite Handling); with no linked id, no email and no billing name, the transfer fails with QBOL-VALD-1011.

Field

EmailAddress

CustomerEmail

Recommended. Finds the QuickBooks customer with exactly this email when CustomerId is blank, and is used when one is created; two or more QuickBooks customers with the email fail the transfer with QBOL-BIZL-1002. It is also the invoice's billing email; nothing is emailed to the customer.

Dynamic Formula

return "iPaaS.com transaction " + TransactionNumber;

PrivateNote

Optional. Keeps the full transaction number in the private note, which the customer does not see. The integration ends the note with its iPaaS.com sync mark. Up to 4,000 characters.

Field

TaxAmount

TaxTotal

Required for the invoice's tax to match iPaaS.com: when it is not mapped, no tax amount is sent and the tax is left to QuickBooks. The amount sent, including 0.00, is what QuickBooks records; a zero amount marks every line non-taxable (see Sales Tax).

Field

ShippingAmount

ShippingAmount

Recommended. A non-zero amount becomes a shipping line: QuickBooks' own shipping charge when shipping is on in the company's sales form settings, otherwise a line for the item in the Shipping Item setting (default Shipping), found by name or created as a Service item. On an update, a blank or zero value removes the shipping line and lowers the total.

Field

DiscountAmount

DiscountAmount

Recommended. A non-zero amount becomes one fixed-amount discount line; the sign is ignored. On an update, a blank or zero value removes the discount line and raises the total. Line discounts travel in each line's amount.

Field

Status

SourceStatus

Recommended. Turns on the reversal check (QBOL-BIZL-1007, see Reversals at the Source). To turn the check off, unmap it and remove the reversal clause from the filter.

Field

Id

IpaasTransactionId

Recommended. Identifies the transaction to QuickBooks, so a retried create returns the invoice QuickBooks already created, even when DocNumber is blank. Add QuickBooks Online Sales Receipt FROM iPaaS.com maps the same id to find the invoice an order was posted as when it is paid in full later.

Add/Update QuickBooks Online Invoice Line FROM iPaaS.com (child)

iPaaS.com data type: Transaction Line

Mapping Type

Source Field (iPaaS.com)

Destination Field (QuickBooks Online)

Description

Field

Sku

Sku

Recommended for reliable item matching. The first key used to find the line's QuickBooks item (inactive items included); without a SKU the item is matched or created by ItemName, and a line with neither fails. A SKU that belongs to a QuickBooks bundle fails with QBOL-BIZL-1005.

Field

Description

ItemName

Recommended. Finds the item when no item has the SKU, and names an item the integration creates (cut to 100 characters); when blank, the SKU is used. Keep item names distinct from QuickBooks category and bundle names.

Field

Description

Description

Recommended. The line description shown on the invoice. QuickBooks allows up to 4,000 characters; a longer description is not shortened, and QuickBooks refuses the invoice.

Field

Qty

Quantity

Required for an accurate invoice: when blank, a quantity of 1 is posted.

Field

UnitPrice

UnitPrice

Required for an accurate invoice. When Amount differs from the quantity times this price, the unit price is worked out from the amount instead. When both are blank, the line is posted at 0.00.

Field

ExtendedPrice

Amount

Recommended. When it differs from Quantity times UnitPrice (for example, after a line discount), the unit price is worked out from it. When blank, the amount is the quantity times the unit price. A non-zero amount with a quantity of 0 is refused by QuickBooks.

Item matching and creation. The integration looks for the QuickBooks item with the line's SKU, then for an item with the line's item name; only Inventory, NonInventory and Service items are used. When nothing matches and the Create Missing Items setting is on (the default), it creates a Non-Inventory item, or a Service item when the Default Item Type setting is Service (never an Inventory item), with the line's unit price and description and the income account from the Income Account setting. When Create Missing Items is off, the transfer fails with QBOL-NFND-1006: create the item in QuickBooks, send the product first, or turn the setting on.

Categories and bundles. A line whose name belongs to a QuickBooks category or bundle, and that has a SKU, gets its own item named with the SKU added, for example Gift Basket (GB-100) (created when Create Missing Items is on); the next sale finds that item by its SKU. A line whose SKU belongs to a bundle, or whose name belongs to a category or bundle and that has no SKU, fails with QBOL-BIZL-1005 naming the QuickBooks item and its type, and nothing is posted: rename the product or the QuickBooks category or bundle, or map the line's ItemId.

Taxability and other fields. Each line is marked taxable unless the invoice's tax total is zero. Lines can also carry ItemId (the QuickBooks item id; when filled, no matching is done), Taxable (true or false; blank is taxable), ServiceDate (yyyy-MM-dd) and Class (when class tracking per line is on in QuickBooks). Every line is written as a product line; QuickBooks bundle, subtotal and description-only lines are not written.

Add/Update QuickBooks Online Invoice Address FROM iPaaS.com (child)

iPaaS.com data type: Transaction Address

Mapping Type

Source Field (iPaaS.com)

Destination Field (QuickBooks Online)

Description

Dynamic Formula

return IsPrimaryShipping == true && IsPrimaryBilling != true ? "SHIP" : "BILL";

AddressType

Recommended; needed for a shipping address. An address marked primary shipping and not primary billing becomes the shipping address (SHIP); every other address, including one marked both, becomes the billing address (BILL). When blank, every address is treated as a billing address.

Dynamic Formula

return Company != null ? Company : FirstName + " " + LastName;

Name

Recommended. The company name, else the first and last name (for example Pat Lee). It takes the first line of the QuickBooks address block. On the billing address it is also the name used to find a QuickBooks customer when there is no email and no linked customer, and the display name of a customer the integration creates.

Field

Address1

Line1

Recommended. The first street line; it appears below the name.

Field

Address2

Line2

Optional. The second street line. The iPaaS.com address's third line (Address3) is not carried to QuickBooks.

Field

City

City

Recommended.

Field

Region

State

Recommended. The state or province, ideally as its code (for example CA) for consistent invoices.

Field

PostalCode

PostalCode

Recommended. The postal or ZIP code.

Field

Country

Country

Optional. The country, as text.

Address selection. The first non-empty billing address becomes the invoice's billing address and the first non-empty shipping address becomes its shipping address. Further addresses of the same type, and addresses whose mapped fields are all empty, are skipped. An address marked as both primary billing and primary shipping gives the invoice a billing address only; add a separate shipping address in iPaaS.com when the invoice needs one. The name and two street lines fill the first three lines of the QuickBooks address, followed by the city, state, postal code and country.

Add QuickBooks Online Payment FROM iPaaS.com (child)

iPaaS.com data type: Transaction Payment

Mapping Filter

// Captured payments above 0 only.
return Status == "Completed" && Amount > 0;

Filter Description. Only captured payments are recorded: payments whose Status is Completed and whose Amount is greater than zero. Declined, pending and refunded payments, and payments of zero or less, are left out without an error. When a pending payment is captured later and iPaaS.com sends the transaction again, the payment is recorded once on the invoice. Refunds are not recorded by this collection: correct a refunded payment in QuickBooks. If your source system reports a captured payment with a status other than Completed, change the value in this filter and in the transaction filters, and validate the change in a staging environment before relying on it in production.

Mapping Type

Source Field (iPaaS.com)

Destination Field (QuickBooks Online)

Description

Field

Amount

Amount

Required. Applied in full to the invoice. A payment that arrives with 0.00, a negative amount or no amount is refused with QBOL-VALD-1015 before the invoice is written. A payment larger than the open balance is accepted; the excess becomes unapplied credit on the QuickBooks customer.

Translation

Method (translation QuickBooks Online Payment Method FROM iPaaS.com)

Method

Recommended. Translates the iPaaS.com payment method into the name of a QuickBooks payment method, which must exist in QuickBooks, or the transfer fails with QBOL-NFND-1007.

Field

Description

Memo

Optional. Written to the QuickBooks payment's memo after "iPaaS.com payment" and the iPaaS.com payment id, which is how the payment is recognised on later transfers; leave that reference in place in QuickBooks. The whole memo is limited to 4,000 characters, and the reference comes first.

Field

Method

SourceMethod

Recommended. The iPaaS.com payment method as sent, without translation. When the translation has no row for the method, the transfer fails with QBOL-NFND-1007 naming this value instead of recording the payment without a method. Keep it mapped.

Payment Method Translation Values. The translation QuickBooks Online Payment Method FROM iPaaS.com ships with these rows:

iPaaS.com payment method

QuickBooks payment method

VISA

Visa

DISCOVER

Discover

AMEX

American Express

MASTERCARD

MasterCard

CASH

Cash

CHECK

Check

CreditCard-Visa

Visa

CRCARD

Visa

A method with no row (for example, store credit, SC) fails the transfer with QBOL-NFND-1007 naming the method; add a row, then resend. CRCARD becomes Visa, so a Diners Club payment that came from QuickBooks as CRCARD returns as Visa. Subscribers or their MiSP should add rows for every method their sales can carry.

Deposit account and other fields. Payments go to the account named in the Deposit Account setting, or a mapped DepositAccount (a QuickBooks account name or id); when both are blank, QuickBooks puts them in Undeposited Funds. A deposit account that does not exist in QuickBooks fails the transfer with QBOL-NFND-1009. PaymentDate (yyyy-MM-dd) can also be mapped; when it is blank, QuickBooks dates the payment on the day it is recorded, which can be later than the day it was paid. Reference (a check number or card authorization, cut to 21 characters) can be mapped too. The default templates map no payment date or reference.

Payments Added Later.

  • Recorded once: when a transaction that is already a QuickBooks invoice is sent again with a new payment, the new payment is recorded on the invoice, provided the invoice still has an open balance. A payment already applied to the invoice is not recorded again. The integration recognises it by the iPaaS.com payment {id} marker at the start of the QuickBooks payment's memo or, for a payment without the marker (entered by hand in QuickBooks, recorded earlier without its iPaaS.com id, or whose memo was edited), by the same amount and the same reference or, when either side has no reference, the same date. Each QuickBooks payment stands for one iPaaS.com payment only, and a payment marked for another iPaaS.com payment is never taken, so two equal instalments are recorded as two payments. This applies on every path that records payments on an invoice, including collision handling and a paid order applied through the sales receipt collection.

  • Different reference: a payment with a different reference is another payment and is recorded, even when it overpays the invoice. A different date alone is not enough: the payment is refused with QBOL-BIZL-1010.

  • Same amount, nothing that tells them apart: a payment of the same amount as one entered by hand in QuickBooks, with nothing that tells them apart, is refused with QBOL-BIZL-1010 and nothing is written. To settle it, edit the memo of the QuickBooks payment the message names: add iPaaS.com payment {id} if it is the same payment (nothing is recorded again), or iPaaS.com: not this payment if it is another payment (the integration then records this one). Then resend the transaction.

  • Overpayment: a payment larger than the invoice's open balance is accepted without an error; the invoice is paid and the excess becomes unapplied credit on the QuickBooks customer. When QuickBooks' Automatically apply credits setting is on (Settings > Account and settings > Advanced > Automation), QuickBooks applies that credit to the next invoice created for the customer. Review customers' unapplied credits in QuickBooks.

  • No changes or deletes: a payment the integration has already recorded is never changed or deleted from iPaaS.com. Correct it in QuickBooks.

Error Handling

Errors appear in Dashboard / Integration Monitoring / Error Logs, and iPaaS.com retries an errored transfer automatically on a growing schedule. Transactions skipped by the filters are not errors. Full messages are in QuickBooks Online Error Messages.

Before anything is written

  • QBOL-VALD-1012: TransactionType is missing. Keep the static Invoice mapping.

  • QBOL-VALD-1011: the transaction has no linked customer, no email and no customer or billing name. Map one of them.

  • QBOL-VALD-1009: a document number longer than 21 characters reached QuickBooks without the default DocNumber formula. Restore the formula.

  • QBOL-VALD-1015: a payment to record has an amount of 0.00, a negative amount or none. Fix the payment at the source, or exclude it with the payment filter, then resend.

  • QBOL-BIZL-1002: two or more QuickBooks customers have the transaction's email. Link the customer so CustomerId is filled, or give each QuickBooks customer its own email.

  • QBOL-BIZL-1006: QuickBooks already has an invoice with this document number, and the collision setting is Error. Link it, or change the collision setting (see Duplicate or Conflicting Mappings).

  • QBOL-BIZL-1007: a posted invoice's transaction is cancelled, refunded or returned at the source. Enter the reversal the message names in QuickBooks, then dismiss the error.

  • QBOL-BIZL-1011: a transaction cancelled, refunded or returned before it was ever posted reached the integration through a changed filter. Nothing was written. Enter the sale and its refund in QuickBooks if the books need it, otherwise dismiss the error, and restore those conditions in the filter.

  • QBOL-BIZL-1008: the invoice was changed in QuickBooks since iPaaS.com last wrote it. Dismiss the error to keep the QuickBooks version, or delete the iPaaS.com sync mark from its private note and resend.

  • QBOL-BIZL-1010: a payment of the same amount entered by hand in QuickBooks cannot be told apart from this one. Settle it in the QuickBooks payment's memo as described under Payments Added Later.

  • QBOL-BIZL-1005: a line's SKU belongs to a QuickBooks bundle, or its name to a category or bundle with no SKU on the line. Rename one of them, or map the line's ItemId.

  • QBOL-NFND-1006: a line's item does not exist and Create Missing Items is off (or the shipping item does not exist). Create the item, send the product first, or turn the setting on.

  • QBOL-NFND-1007: a payment method has no translation row, or the translated name is not a QuickBooks payment method. Add the row, or create the method in QuickBooks.

  • QBOL-NFND-1008: a custom field mapping matches no turned-on sales form custom field. Add the field in QuickBooks or remove the mapping.

  • QBOL-NFND-1009: a payment term, deposit account, class, location or sales tax code does not exist in QuickBooks. Create it, or fix the mapping or setting that supplies it.

  • QBOL-VALD-1014: a company on manual sales tax received a tax amount without a tax code. Fill the Sales Tax Code setting or map TaxCode.

When a payment fails after the invoice is created

  • QBOL-EXTN-1012: the invoice was created, but a payment could not be recorded (for example, a translated payment method that does not exist in QuickBooks); the error includes the payment's problem. The invoice is already linked, so the next transfer updates it and records only the payments not recorded yet.

  • QBOL-EXTN-1011: the same, after an update. Each retry rewrites the invoice and fails again until the cause is fixed; the shipped guard skips the retry only if the payments already recorded paid the invoice in full.

  • QBOL-EXTN-1013: QuickBooks limited the request rate; iPaaS.com retries after a minute. A rate limit reached while the payments are being recorded on a new invoice is different: the invoice is not linked yet, so the rescheduled transfer finds it by its document number and, with the collision setting at Error, fails with QBOL-BIZL-1006 naming it. Without a document number, the retried create returns the invoice QuickBooks already created when IpaasTransactionId is mapped (the default); with neither, it can create a second invoice. Check for the invoice named in the error before resending.

Connection errors (QBOL-AUTH codes) are covered in QuickBooks Online Error Messages. If an error persists after the data is corrected, or rate-limit errors continue for hours, contact your MiSP or iPaaS.com Support.

Testing & Validation

  1. Send an order sold on terms (no payments) with a SKU line, shipping and tax. Confirm a QuickBooks invoice numbered with the transaction number, with the line, a shipping line and the iPaaS.com tax amount, and that the transaction's external ID is Invoice-{id}.

  2. Add a captured payment to the transaction in iPaaS.com and send it again. Confirm one QuickBooks payment applied to the invoice, its memo starting with iPaaS.com payment. Send it again and confirm no second payment is recorded.

  3. Send a part-paid order (a captured payment below the total). Confirm the invoice and its payment, and that the invoice keeps an open balance.

  4. Edit a line amount on the invoice in QuickBooks, then send the transaction again. Confirm QBOL-BIZL-1008 and that the invoice is unchanged.

  5. Pay an invoice in full, change the order at the source and send it again. Confirm the invoice is not changed and no error is logged.

  6. Change a posted order's status to Refunded and send it. Confirm QBOL-BIZL-1007 naming the invoice, and that nothing changed in QuickBooks.

  7. Send an order whose only payment is pending. Confirm nothing is posted (or, with the open-invoice filter, an invoice owing the full amount).

Additional Notes

  • Out of scope: voids, credit memos, refunds and deletes (the integration creates and updates invoices only); emailing invoices; card processing (payments are recorded in the books only, and QuickBooks Payments is not used); changing or deleting payments already recorded; payments on sales receipts (part of the receipt); companies outside the US; multi-currency.

  • Known limitations: same-amount payments entered by hand are refused with QBOL-BIZL-1010 until settled; edits in QuickBooks that keep every line amount are overwritten; fully paid invoices are skipped silently and part-paid invoices can still be rewritten; Update and No Link is not protected by the guard; held orders are not reported; reversals at the source must be entered in QuickBooks; a rate limit between creating an invoice and recording its payments leaves it unlinked; changes to invoices in a closed period are refused (QuickBooks code 6210), while a new payment on one is recorded in the open period (a change sent with it is reported with QBOL-BIZL-1012); customers without an email are matched by name; a tax amount that differs from QuickBooks' own calculation is recorded without a warning. See QuickBooks Online Known Limitations.

Related Documents

Related Mapping Documentation

Did this answer your question?