QuickBooks Integration and Invoicing Creating QuickBooks Invoices from Monday Orders

Automate your billing process by generating QuickBooks Online (QBO) invoices directly from your Monday.com orders. This guide explains how the integration maps your Monday parent items and subitems into a complete QBO invoice, including custom business logic for sorting and filtering line items.

flowchart TD
    A["Monday.com Order Updated"] --> B["Fetch Order & Subitems"]
    B --> C{"Is product Standard Delivery?"}
    C -- Yes --> D["Skip Line Item"]
    C -- No --> E["Sort & Format Line Items"]
    E --> F["Create QBO Invoice"]
    F -- Success --> G["Update Monday: 'Delivered' + Invoice Link"]
    F -- Failure --> H["Update Monday: 'Invoice Error'"]

How the integration works

The workflow listens for specific column changes on your Orders board. Once triggered, it gathers all necessary data from the parent order and its associated subitems, formats it for QuickBooks, and generates the invoice. Finally, it updates the Monday.com order with the new invoice details.

  1. 1

    Trigger the workflow

    The process begins automatically when a specific column value (like a status change) is updated on the Monday.com Orders board.

  2. 2

    Fetch and prepare data

    A background script retrieves the parent order details and all connected subitems from the Subitems of Orders board. It sorts the items, applies filtering rules, and formats the text.

  3. 3

    Create the QuickBooks invoice

    The formatted data is sent to QuickBooks Online. The integration creates a new invoice, attaching the correct customer, billing details, and line items.

  4. 4

    Update Monday.com

    Upon success, the Monday.com order is updated with the QBO Invoice Link, the QBO Document Number, and the Deal Stage is changed to Delivered.

If the invoice creation fails, the integration automatically updates the Monday.com Deal Stage to Invoice Error so your team can investigate.

Data mapping reference

To ensure your invoices are generated accurately, your Monday.com boards must contain specific columns. Here is how the data maps from Monday.com to QuickBooks Online.

Parent Order mapping

These fields are pulled from the main item on the Orders board (Board ID: 7932413985).

Monday.com ColumnQuickBooks Online FieldNotes
Order NumberInvoice Number
Client Email AddressBilling Email
Team MemberCustom Field: Sales Rep
TaxTotal Tax
ScheduledTransaction Date
Client TypeShip Via
Site IDCustom Field: Site ID
Address for TotalMessage / NoteThe cfAddress field is automatically truncated to 31 characters.

Subitem mapping

These fields are pulled from the Subitems of Orders board (Board ID: 7932414329) to create the individual line items on the invoice.

Monday.com Subitem ColumnQuickBooks Online Field
QBO Product IDProduct/Service
QuantityQTY
PriceRate/Amount
Title SortUsed internally to sort line items

Standard Delivery Exception
Any subitem with the QBO Product ID 1010000449 (Standard Delivery) is hardcoded to be skipped. It will never be included on the generated invoice.

Advanced: Custom data preparation

For administrators maintaining this integration, the data preparation step uses a custom GraphQL query to Monday.com's API (v2) to fetch parent and subitem data simultaneously.

View the data preparation logic

The integration uses custom JavaScript to flatten the Monday.com column values, filter out skipped products, and sort the line items before sending them to QuickBooks.

// Filter out Standard Delivery and map subitems
const lines = item.subitems
  .map(s => flat(s.column_values))
  .filter(v => v[COL.product] && !SKIP.includes(v[COL.product]));

// Sort line items based on the 'Title Sort' column
// Blank sort values are pushed to the end
const key = v => (v[COL.sort] === '' ? 1e9 : Number(v[COL.sort]));
lines.sort((a, b) => key(a) - key(b));

// Truncate address for QuickBooks custom field limits
const cfAddress = message.slice(0, 31);