Summary
This article describes how the integration captures invoices from Zuper into iPaaS.com as transactions. When an invoice is created or updated in Zuper, the integration reads the full invoice — including its line items, addresses, notes, payments, and tax — and creates the matching transaction in iPaaS.com through the parent collection and its seven child collections. A separate update collection applies later header changes to the transaction already captured. This keeps the iPaaS.com transaction records aligned with billing activity in Zuper so downstream systems connected to iPaaS.com work from current data.
ID Format
Manual Sync ID Format
The Manual Sync identifier is the Zuper invoice identifier (invoice_uid). Enter this value on the iPaaS.com Manual Sync page to capture a specific invoice.
Example: 32bc938b-d942-4eed-ad65-15f633c5b270
When the record is a job rather than a standalone invoice, the Zuper job identifier is used instead.
External ID Format
After a successful transfer, iPaaS.com records the Zuper invoice identifier as the external ID on a dedicated external-ID record, which routes later updates to the same iPaaS.com transaction. The TransactionNumber mapping also carries the invoice number onto the transaction, which provides visibility and serves as a fallback match when no external-ID record yet exists.
Deleted Record Support
This collection captures invoice creates and updates. It does not remove transactions from iPaaS.com. Hard deletion in Zuper is out of scope for this collection.
Mapping Collection Status
Enabled. A mapping filter is applied so that only standard invoices are captured; the child collections apply their own filters as noted in the Mappings section below.
Trigger Events: The TO iPaaS.com direction supports Zuper webhooks enabled under Inbound Data Flows — the Zuper invoice events, such as new invoice, invoice update, and invoice payment — plus Manual Sync. No automatic transfers occur until the invoice webhook events are enabled.
Duplicate or Conflicting Mappings
These collections all capture Zuper billing records as iPaaS.com transactions and are separated by their filters. Review them together and confirm each is filtered for the records it should own:
Add Zuper Invoice TO iPaaS.com captures new standard invoices (invoice number not ending in -D, status not DRAFT).
Add Zuper Deposit Ticket TO iPaaS.com captures deposit-ticket invoices (invoice number ending in -D).
Add Zuper Job TO iPaaS.com captures Zuper jobs as transactions.
Update Zuper Invoice TO iPaaS.com captures header updates to standard invoices already captured.
Collision Handling
This collection does not use collision handling. Records are matched by the saved external ID and, before an external-ID link exists, by the transaction number — not by a configurable collision rule.
Supported Child Collections
Add Zuper Invoice Line TO iPaaS.com captures the invoice line items.
Add Zuper Invoice Billing Address TO iPaaS.com captures the billing address.
Add Zuper Invoice Service Address TO iPaaS.com captures the service address.
Add Zuper Invoice Note TO iPaaS.com captures invoice notes.
Add Zuper Invoice Payment TO iPaaS.com captures recorded payments on fully paid invoices.
Add Zuper Invoice Payment Due TO iPaaS.com records the outstanding balance as a payment entry.
Add Zuper Invoice Tax TO iPaaS.com captures the invoice tax.
Each child is captured as part of this invoice transfer and is linked to the transaction it belongs to. The child collections do not run independently of the parent invoice transfer.
Zuper Caveats
Deposit tickets and drafts are excluded: this collection intentionally skips deposit-ticket invoices (invoice number ending in -D) and draft invoices; those are handled by their own collections or excluded by design.
Jobs and invoices share this transaction type: a Zuper job with no invoice number is captured as a transaction of type Job, using the job title as its number.
Webhook events must be enabled to capture changes automatically: until the Zuper invoice events are enabled under Inbound Data Flows, invoice changes are captured only through Manual Sync.
iPaaS.com Caveats
The captured transaction and its child records are created together; the child collections do not run independently of this invoice transfer.
Subtotal, discount, tax, and quantity totals are computed from the invoice's line items and tax entries at capture time, at the time this documentation was written.
Setup Requirements
Enable the Zuper invoice webhook events (such as new invoice, invoice update, and invoice payment) under Inbound Data Flows in the subscription configuration so that billing changes in Zuper flow into iPaaS.com automatically.
Authentication uses a Zuper API key. For the steps to obtain the API key and configure the subscription, see the Zuper Installation Instructions article.
Integration Flow
A single transfer brings the invoice into iPaaS.com:
The integration retrieves the full invoice from Zuper by its identifier, falling back to the Zuper Jobs data when the record is a job rather than a standalone invoice.
The invoice header is mapped to a transaction.
The related line items, addresses, notes, payments, and tax are captured through the child collections and linked to the transaction.
Add Zuper Invoice TO iPaaS.com
This collection maps the Zuper invoice header onto the iPaaS.com transaction.
Mapping Filter
if (InvoiceNo != null && InvoiceStatus != null){
if (InvoiceNo.EndsWith("-D") || InvoiceStatus == "DRAFT")
return false;
else
return true;
} else {return false;}The filter captures a record only when it has both an invoice number and an invoice status. Records whose invoice number ends in -D are deposit tickets and are skipped here (they are handled by the Deposit Ticket collection), and records whose status is DRAFT are skipped. All other invoices pass and are captured. Records missing an invoice number or status are skipped.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula | Dynamic Formula | SystemId | Records which connected system the transaction came from, using the source system identifier: |
Dynamic Formula | InvoiceNo / JobTitle | TransactionNumber | Sets the transaction number from the Zuper invoice number, falling back to the job title when there is no invoice number: |
Dynamic Formula | JobId | Type | Classifies the record: a record with no job identifier is an Order, otherwise a Job: |
Lookup Translation | InvoiceStatus | Status | Sets the transaction status by translating the Zuper invoice status. Lookup Translation: Zuper Invoice Status To iPaaS. Values not listed in the table below are passed through unchanged. Recommended. |
Dynamic Formula | Customer.Email / Organization.Email | EmailAddress | Sets the contact email from the customer's email, or the organization's email when the record belongs to an organization: |
Dynamic Formula | LineItems | DiscountAmount | Totals the discounts across line items, handling fixed and percentage discounts: |
Dynamic Formula | Tax | TaxAmount | Totals the tax across the invoice's tax entries: |
Dynamic Formula | LineItems | Subtotal | Totals the line items before tax, applying each line's fixed or percentage discount: |
Field | Total | Total | Sets the transaction total from the Zuper invoice total. Recommended. |
Dynamic Formula | LineItems | TotalQty | Totals the quantity across line items: |
Dynamic Formula | Dynamic Formula | TransactionCreatedDateTime | Records when the transaction was captured into iPaaS.com, using the current date and time: |
Dynamic Formula | Dynamic Formula | TransactionUpdatedDateTime | Records when the transaction was last updated in iPaaS.com, using the current date and time: |
Lookup Translation Tables
Zuper Invoice Status To iPaaS:
Source Value (Zuper) | Destination Value (iPaaS.com) | Notes |
DRAFT | Pending | Draft invoices are captured as Pending. |
PAID | Complete | Fully paid invoices are captured as Complete. |
AWAIT_PAYMENT | Pending | Invoices awaiting payment are captured as Pending. |
An additional rule sets the status to Pending for new or revisit jobs that have no invoice status yet. Subscribers can edit these pairs in the iPaaS.com lookup translation editor.
Add Zuper Invoice Line TO iPaaS.com
This child collection maps each Zuper invoice line item onto an iPaaS.com transaction line as part of the parent invoice transfer.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Field | LocationName | Zuper Fulfillment Location | Captures the fulfillment location name for the line into a custom field. Optional. |
Dynamic Formula | Specification | Serial Number | Captures the serial number or specification into a custom field when the line carries one: |
Static |
| Type | Marks the line as a Product line. Fixed classification for lines captured through this collection. |
Static |
| Status | Sets the line status to Pending by default. Subscribers who track a different line status can change this value. |
Field | ProductId | Sku | Captures the product identifier for the line. Recommended so the line can be matched to a product. |
Field | Name | Description | Captures the line item description (the product name) from Zuper. Recommended. |
Field | Quantity | Qty | Captures the quantity for the line item. Recommended. |
Dynamic Formula | UnitPrice, Quantity, Discount, DiscountType | UnitPrice | Calculates the per-unit price after any fixed or percentage line discount: |
Dynamic Formula | UnitPrice, Quantity, Discount, DiscountType | ExtendedPrice | Calculates the line total after any discount, accounting for quantity: |
Field | UnitPrice | OriginalUnitPrice | Captures the original unit price before any discount. Optional. |
Dynamic Formula | UnitPrice, Quantity, Discount, DiscountType | DiscountAmount | Calculates the discount applied to the line, based on whether the discount is a fixed amount or a percentage: |
Dynamic Formula | Total, UnitPrice, Quantity, Discount, DiscountType | EstimatedTaxAmount | Calculates the estimated tax for the line, derived from the line total after discount: |
Add Zuper Invoice Billing Address TO iPaaS.com
This child collection maps the invoice customer's billing address onto the iPaaS.com transaction as part of the parent invoice transfer.
Mapping Filter
SourceTypeName == "ParentOnly"
The filter captures this address only from the parent invoice header record (SourceTypeName equals ParentOnly), so a single billing address is captured from the invoice rather than repeated per line item.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Static |
| IsPrimaryBilling | Marks this address as the transaction's primary billing address. Fixed value for this collection. |
Dynamic Formula | Parent.CustomerBillingAddress.Street | Address1 | Captures the billing street from the invoice's customer billing address: |
Dynamic Formula | Parent.CustomerBillingAddress.City | City | Captures the billing city from the invoice's customer billing address: |
Dynamic Formula | Parent.CustomerBillingAddress.State | Region | Captures the billing state or region: |
Dynamic Formula | Parent.CustomerBillingAddress.Country | Country | Captures the billing country: |
Dynamic Formula | Parent.CustomerBillingAddress.ZipCode | PostalCode | Captures the billing postal or zip code: |
Dynamic Formula | Parent.CustomerBillingAddress.FirstName | FirstName | Captures the billing contact first name: |
Dynamic Formula | Parent.CustomerBillingAddress.LastName | LastName | Captures the billing contact last name: |
Dynamic Formula | Parent.Organization.Name | Company | Captures the company name when the invoice belongs to a Zuper organization: |
Add Zuper Invoice Service Address TO iPaaS.com
This child collection maps the invoice customer's service address onto the iPaaS.com transaction as part of the parent invoice transfer.
Mapping Filter
SourceTypeName == "ParentOnly"
The filter captures this address only from the parent invoice header record (SourceTypeName equals ParentOnly), so a single service address is captured from the invoice rather than repeated per line item.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Static |
| IsPrimaryShipping | Marks this address as the transaction's primary service (shipping) address. Fixed value for this collection. |
Dynamic Formula | Parent.CustomerServiceAddress.Street | Address1 | Captures the service street from the invoice's customer service address: |
Dynamic Formula | Parent.CustomerServiceAddress.City | City | Captures the service city: |
Dynamic Formula | Parent.CustomerServiceAddress.State | Region | Captures the service state or region: |
Dynamic Formula | Parent.CustomerServiceAddress.Country | Country | Captures the service country: |
Dynamic Formula | Parent.CustomerServiceAddress.ZipCode | PostalCode | Captures the service postal or zip code: |
Dynamic Formula | Parent.CustomerServiceAddress.FirstName | FirstName | Captures the service contact first name: |
Dynamic Formula | Parent.CustomerServiceAddress.LastName | LastName | Captures the service contact last name: |
Dynamic Formula | Parent.Organization.Name | Company | Captures the company name when the invoice belongs to a Zuper organization: |
Add Zuper Invoice Note TO iPaaS.com
This child collection maps Zuper invoice notes onto iPaaS.com transaction notes as part of the parent invoice transfer.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Static |
| Type | Classifies the captured note as an Invoice Note. Fixed value for this collection. |
Field | Content | Text | Captures the note text from the Zuper invoice note. Recommended. |
Add Zuper Invoice Payment TO iPaaS.com
This child collection maps recorded payments on a fully paid invoice onto iPaaS.com transaction payments as part of the parent invoice transfer.
Mapping Filter
SourceTypeName != "ParentOnly" && Parent.AmountDue == 0 && IsVoid == false
The filter captures a payment when it is a real payment record rather than the invoice header (SourceTypeName is not ParentOnly), the invoice has no remaining balance (Parent.AmountDue equals 0), and the payment is not voided (IsVoid is false). Voided payments and invoices with an outstanding balance are skipped and handled elsewhere.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula | PaymentMode.PaymentModeName | Method | Captures the payment method from the Zuper payment mode: |
Dynamic Formula | PaymentMode.PaymentModeName | Description | Sets the payment description from the Zuper payment mode: |
Field | Amount | Amount | Captures the payment amount from the Zuper invoice payment. Required for a payment record. |
Static |
| Status | Marks the payment as Captured, reflecting a completed payment on the invoice. Fixed value for this collection. |
Add Zuper Invoice Payment Due TO iPaaS.com
This child collection records the invoice's outstanding balance as an iPaaS.com transaction payment entry as part of the parent invoice transfer.
Mapping Filter
SourceTypeName == "ParentOnly" && Parent.AmountDue > 0
The filter creates this entry from the invoice header only (SourceTypeName equals ParentOnly) and only when the invoice has an outstanding balance greater than zero (Parent.AmountDue > 0). Invoices with no balance due do not produce a payment-due entry.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Static |
| Method | Labels the entry method as amount due, distinguishing it from a recorded payment. Fixed value for this collection. |
Static |
| Description | Sets the entry description to amount due. Fixed value for this collection. |
Dynamic Formula | Parent.AmountDue | Amount | Sets the entry amount to the invoice's outstanding balance: |
Static |
| Status | Marks the entry as Authorized, reflecting an outstanding (not yet captured) balance. Fixed value for this collection. |
Add Zuper Invoice Tax TO iPaaS.com
This child collection maps Zuper invoice tax entries onto iPaaS.com transaction tax as part of the parent invoice transfer.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Field | TaxName | Authority | Captures the tax authority (the tax name) from the Zuper invoice tax. Recommended. |
Field | TaxAmount | Amount | Captures the tax amount from the Zuper invoice tax. Recommended. |
Field | TaxPercent | TaxPercent | Captures the tax percentage from the Zuper invoice tax. Optional. |
Update Zuper Invoice TO iPaaS.com
This collection updates the header of a transaction already captured in iPaaS.com when the underlying Zuper invoice changes. Line items, addresses, notes, payments, and tax are handled by the capture collections above.
Mapping Filter
if (InvoiceNo != null && InvoiceStatus != null){
if (InvoiceNo.EndsWith("-D") || InvoiceStatus == "DRAFT")
return false;
else
return true;
} else {return false;}The filter updates a record only when it has both an invoice number and an invoice status, its number does not end in -D (deposit tickets are handled elsewhere), and its status is not DRAFT. Records missing an invoice number or status, and records that are deposit tickets or drafts, are skipped.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula | Dynamic Formula | SystemId | Records which connected system the transaction came from, using the source system identifier: |
Field | InvoiceNo | TransactionNumber | Sets the transaction number from the Zuper invoice number. Required; it identifies the transaction being updated. |
Static |
| Type | Sets the transaction type to Order. Fixed classification for this collection. |
Lookup Translation | InvoiceStatus | Status | Updates the transaction status by translating the Zuper invoice status. Lookup Translation: Zuper Invoice Status To iPaaS. Values not listed in the table below are passed through unchanged. Recommended. |
Dynamic Formula | Customer.Email | EmailAddress | Updates the contact email from the Zuper customer's email: |
Dynamic Formula | LineItems | DiscountAmount | Totals the discounts across line items, handling fixed and percentage discounts: |
Dynamic Formula | Tax | TaxAmount | Totals the tax across the invoice's tax entries: |
Dynamic Formula | LineItems | Subtotal | Totals the line items before tax, applying each line's fixed or percentage discount: |
Field | Total | Total | Updates the transaction total from the Zuper invoice total. Recommended. |
Dynamic Formula | LineItems | TotalQty | Totals the quantity across line items: |
Lookup Translation Tables
Zuper Invoice Status To iPaaS:
Source Value (Zuper) | Destination Value (iPaaS.com) | Notes |
DRAFT | Pending | Draft invoices are captured as Pending. |
PAID | Complete | Fully paid invoices are captured as Complete. |
AWAIT_PAYMENT | Pending | Invoices awaiting payment are captured as Pending. |
Error Handling
For the error messages you may see in the iPaaS.com logs for the Zuper integration, what causes them, and how to resolve them, see the Zuper Error Messages article.
Testing & Validation
Test Scenarios
Capture a standard invoice through Manual Sync using its invoice_uid and confirm a transaction is created in iPaaS.com with the correct transaction number, type, status, email, and totals.
Capture an invoice that has line items and confirm each line is created with the correct SKU, quantity, unit price, extended price, and any discount.
Capture an invoice with a billing address and a service address and confirm both are created and marked as primary billing and primary shipping respectively.
Capture an invoice with notes and confirm each note is created as an Invoice Note.
Capture a fully paid invoice (amount due of zero, payment not voided) and confirm the recorded payment is created with the correct amount, method, and a status of Captured.
Capture an invoice with an outstanding balance greater than zero and confirm a payment-due entry is created with the balance amount, a method and description of amount due, and a status of Authorized.
Capture an invoice with tax and confirm each tax entry is created with the correct authority, amount, and percentage.
Confirm a deposit-ticket invoice (number ending in -D) and a draft invoice are skipped by this collection.
Update the header of an already-captured invoice and confirm the Update collection applies the new status, email, and totals to the same transaction.
Confirm a job with no invoice number is captured as a transaction of type Job using the job title as its number.
Validation Checklist
The transaction number matches the Zuper invoice number (or the job title when there is no invoice number).
The transaction type is Order for standard invoices and Job for jobs.
The transaction status reflects the translated Zuper invoice status (DRAFT to Pending, PAID to Complete, AWAIT_PAYMENT to Pending; other values passed through unchanged).
The total, subtotal, discount, tax, and quantity totals are populated and consistent with the invoice line items and tax entries.
The billing and service addresses are present and flagged as primary billing and primary shipping.
Line items carry the correct SKU, quantity, unit price, and extended price.
Recorded payments appear only for fully paid, non-voided invoices; payment-due entries appear only for invoices with an outstanding balance.
Tax entries carry the correct authority, amount, and percentage.
The external ID on the transaction matches the Zuper invoice identifier so later updates route to the same transaction.
Additional Notes
Subtotal, discount, tax, and quantity totals are computed from the invoice's line items and tax entries at capture and update time, at the time this documentation was written.
The captured transaction and its child records are created together; the child collections do not run independently of the parent invoice transfer.
Deletion and bulk initialization are out of scope for this collection: it captures invoice creates and updates but does not remove transactions, and it does not support capturing all Zuper invoices in one operation.
