Summary
This article documents how the Zuper integration captures jobs from Zuper into iPaaS.com as transactions. When a job is created or updated in Zuper, the integration reads the full job — including its product lines, addresses, notes, and description — and creates the matching transaction in iPaaS.com. This makes job activity visible alongside invoices and deposit tickets in iPaaS.com.
The data flow is one-directional: Source is Zuper and Destination is iPaaS.com. The parent collection captures the job header, and six child collections capture the job's lines, billing address, service address, notes, description, and an outstanding-balance entry. The children are captured as part of the same job transfer and are linked to the transaction they belong to; they do not run independently.
ID Format
Manual Sync ID Format
Manual Sync ID Format : The Zuper job identifier (job_uid). Example: 52100890-d152-11ee-83d4-fbdc23854096.
Enter this value on the iPaaS.com Manual Sync page to capture a specific job on demand.
External ID Format
External ID Format : After a successful transfer, iPaaS.com records the Zuper job identifier as the external ID on a dedicated external-ID record. This routes later updates to the same iPaaS.com transaction. The TransactionNumber mapping also carries the job's number onto the transaction, which provides visibility and serves as a fallback match when no external-ID record yet exists.
Deleted Record Support
This mapping family captures job creates and updates. It does not remove transactions from iPaaS.com. Deleting a job in Zuper does not delete the corresponding transaction in iPaaS.com.
Mapping Collection Status
Enabled.
All collections in this family are enabled. Mapping filters apply to the parent job collection and to the address, note, description, and payment-due children so that each collection captures only the records it should own. The Line collection has no filter, so every product line is captured with its parent job. Each collection's filter is described in its section under Mappings below.
Trigger Events: This TO iPaaS.com family is driven by Zuper job webhooks. In the subscription configuration's Inbound Data Flows section, enable the Zuper job events — such as new job, job update, and job status update — so that job activity in Zuper flows into iPaaS.com automatically. No automatic transfers occur until those events are enabled. A Manual Sync is also available at any time from the iPaaS.com Manual Sync page using the job identifier.
Duplicate or Conflicting Mappings
Several TO iPaaS.com collections capture Zuper billing and job records as iPaaS.com transactions. They are separated by their filters, so each owns a distinct record type. Review them together and confirm each is filtered for the records it should own:
Add Zuper Job TO iPaaS.com captures jobs (this article). Its filter requires a job identifier and job type and excludes identifiers ending in
-D.Add Zuper Invoice TO iPaaS.com captures standard invoices.
Add Zuper Deposit Ticket TO iPaaS.com captures deposit-ticket invoices (identifiers ending in
-D).Update Zuper Invoice TO iPaaS.com captures updates to standard invoices.
Collision Handling
Collision handling is not used. Records are matched by the saved external ID and, before an external-ID link exists, by the transaction number.
Supported Child Collections
The parent job collection captures the following six child collections as part of the same job transfer. Each child is linked to the transaction it belongs to and is not captured independently:
Add Zuper Job Line TO iPaaS.com: captures the job's product lines.
Add Zuper Job Billing Address TO iPaaS.com: captures the billing address.
Add Zuper Job Service Address TO iPaaS.com: captures the service address.
Add Zuper Job Note TO iPaaS.com: captures the job's line-level notes.
Add Zuper Job Description TO iPaaS.com: captures the job title and description together as a note.
Add Zuper Job Payment Due TO iPaaS.com: records an outstanding-balance entry.
Zuper Caveats
Jobs versus invoices and deposit tickets: this family captures Zuper jobs. Standard invoices and deposit tickets are captured by their own collections and are separated from jobs by filters.
Totals from product lines: the transaction totals — subtotal, discount, and quantity — are calculated from the job's product lines at capture time.
No tax on jobs: Zuper jobs do not carry tax, so the transaction tax amount is not populated from the job.
No billed balance until invoiced: a job does not carry a billed balance until it is invoiced, so the outstanding-balance entry defaults to zero.
Organization name: when a job belongs to a Zuper organization, the organization name is captured as the address company on the billing and service addresses.
iPaaS.com Caveats
The captured transaction and its child records are created together. The child collections do not run independently of the job transfer.
Captured product lines are recorded with a default status of Pending.
The billing address is marked as the transaction's primary billing address, and the service address is marked as the transaction's primary service (shipping) address.
The outstanding-balance entry is recorded with a status of Authorized.
Setup Requirements
Inbound Data Flows webhook events: in the subscription configuration's Inbound Data Flows section, enable the Zuper job events (new job, job update, job status update) so that jobs flow into iPaaS.com automatically. Until these events are enabled, no automatic transfers occur and the family runs only through Manual Sync.
API key authentication: the integration authenticates to Zuper with an API key. Ensure a valid Zuper API key is configured on the subscription.
Installation: for step-by-step setup, see the Zuper Installation Instructions article.
Integration Flow
A job is created or updated in Zuper, and an enabled Zuper job webhook event notifies iPaaS.com (or a subscriber runs a Manual Sync with the job identifier).
The integration retrieves the full job from Zuper by its identifier.
The parent collection's filter confirms the record is a job (it has a job identifier and job type) and is not a deposit ticket (its identifier does not end in
-D).The job header is mapped to an iPaaS.com transaction.
The child collections capture the job's product lines, billing address, service address, notes, description, and outstanding-balance entry, each linked to the transaction.
iPaaS.com saves the Zuper job identifier as the external ID so that later updates route to the same transaction.
Mappings
Add Zuper Job TO iPaaS.com
Description: Captures the Zuper job header as an iPaaS.com transaction, including transaction number, type, status, contact email, and calculated totals.
Mapping Filter
if (Id != null && JobType != null && JobId != null){
if (Id.EndsWith("-D") )
return false;
else
return true;
} else {return false;}Plain-language explanation:
The record is evaluated only when it has an identifier, a job type, and a job identifier. If any of these are missing, the record is skipped.
When those values are present, the filter checks the identifier: if it ends in
-D, the record is a deposit ticket and is skipped (returns false).Otherwise the record is a job and is captured (returns true).
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| TransactionNumber | Required. Sets the transaction number from the Zuper invoice number, falling back to the job title when the job has no invoice number. Identifies the transaction and is used to match it on later transfers. |
Static | "Job" | Type | Recommended. Sets the transaction type to Job for records captured through this collection. This is a fixed classification. |
Lookup Translation | Lookup Translation: Zuper Invoice Status To iPaaS | Status | Recommended. Sets the transaction status by translating the Zuper status. Values not listed in the translation table are passed through unchanged, and new or revisit jobs with no status are set to Pending. |
Dynamic Formula |
| EmailAddress | Recommended. Sets the contact email from the Zuper customer's email, or the organization's email when the job belongs to an organization. |
Dynamic Formula |
| Total | Recommended. Sets the transaction total by totaling the job's product lines, applying each line's fixed or percentage discount. |
Dynamic Formula |
| Subtotal | Recommended. Sets the transaction subtotal by totaling the job's product lines, applying each line's fixed or percentage discount. |
Dynamic Formula |
| DiscountAmount | Optional. Sets the total discount on the transaction by adding up each product line's fixed or percentage discount. |
Dynamic Formula |
| TaxAmount | Optional. Zuper jobs do not carry tax, so this returns no value and the transaction tax amount is left unpopulated. |
Dynamic Formula |
| TotalQty | Optional. Sets the total quantity on the transaction by adding up the line quantities. |
Dynamic Formula |
| SystemId | System-managed. Records which connected system the transaction came from. Leave as configured. |
Dynamic Formula |
| TransactionCreatedDateTime | System-managed. Records when the transaction was captured into iPaaS.com. |
Dynamic Formula |
| TransactionUpdatedDateTime | System-managed. Records when the transaction was last updated in iPaaS.com. |
Lookup Translation Tables
Source Value (Zuper) | Destination Value (iPaaS.com) | Notes |
DRAFT | Pending | Draft records are captured as Pending. |
PAID | Complete | Fully paid records are captured as Complete. |
AWAIT_PAYMENT | Pending | Records awaiting payment are captured as Pending. |
Values not listed above are passed through unchanged. Subscribers can edit these pairs in the iPaaS.com lookup translation editor.
Add Zuper Job Line TO iPaaS.com
Description: Captures each product line of the job as an iPaaS.com transaction line, with product, quantity, pricing, and discount.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Field | ProductId | Sku | Recommended. Captures the product identifier for the line so it can be matched to a product. |
Field | ProductDescription | Description | Recommended. Captures the line description from the Zuper product description. |
Field | Quantity | Qty | Recommended. Captures the quantity for the line. |
Dynamic Formula |
| UnitPrice | Recommended. Sets the per-unit price after any fixed or percentage line discount. |
Dynamic Formula |
| ExtendedPrice | Recommended. Sets the extended (line total) price, accounting for the line quantity and any discount. |
Field | Price | OriginalUnitPrice | Optional. Captures the original unit price before any discount. |
Dynamic Formula |
| DiscountAmount | Optional. Sets the discount amount for the line, based on whether the Zuper discount is a fixed amount or a percentage. |
Static | "Product" | Type | Fixed classification. Marks the line as a Product line for lines captured through this collection. |
Static | "Pending" | Status | Sets the line status to Pending by default. Subscribers who track a different line status can change this value. |
Field | LocationName | Zuper Fulfillment Location (custom field) | Optional. Captures the fulfillment location name for the line into a custom field. |
Dynamic Formula |
| Serial Number (custom field) | Optional. Captures the line serial numbers into a custom field, when the Zuper line carries them. |
Add Zuper Job Billing Address TO iPaaS.com
Description: Captures the job's customer billing address as the transaction's primary billing address.
Mapping Filter
SourceTypeName == "ParentOnly"
Plain-language explanation:
The address is captured only from the parent job record (
ParentOnly), so a single billing address is captured per transaction rather than once per line item.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Address1 | Recommended. Captures the billing street from the job's customer billing address. |
Dynamic Formula |
| City | Recommended. Captures the billing city from the job's customer billing address. |
Dynamic Formula |
| Region | Recommended. Captures the billing state or region from the job's customer billing address. |
Dynamic Formula |
| Country | Recommended. Captures the billing country from the job's customer billing address. |
Dynamic Formula |
| PostalCode | Recommended. Captures the billing postal or zip code from the job's customer billing address. |
Dynamic Formula |
| FirstName | Optional. Captures the billing contact first name from the job's customer billing address. |
Dynamic Formula |
| LastName | Optional. Captures the billing contact last name from the job's customer billing address. |
Dynamic Formula |
| Company | Optional. Captures the company name on the billing address when the job belongs to a Zuper organization. |
Static | "true" | IsPrimaryBilling | Fixed value. Marks this address as the transaction's primary billing address. |
Add Zuper Job Service Address TO iPaaS.com
Description: Captures the job's customer address as the transaction's primary service (shipping) address, when the job has a customer address.
Mapping Filter
SourceTypeName == "ParentOnly" && Parent.CustomerAddress != null
Plain-language explanation:
The address is captured only from the parent job record (
ParentOnly), so a single service address is captured per transaction.It is captured only when the job has a customer address. Jobs without a customer address do not produce a service address record.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Address1 | Recommended. Captures the service street from the job's customer address. |
Dynamic Formula |
| City | Recommended. Captures the service city from the job's customer address. |
Dynamic Formula |
| Region | Recommended. Captures the service state or region from the job's customer address. |
Dynamic Formula |
| Country | Recommended. Captures the service country from the job's customer address. |
Dynamic Formula |
| PostalCode | Recommended. Captures the service postal or zip code from the job's customer address. |
Dynamic Formula |
| FirstName | Optional. Captures the service contact first name from the job's customer address. |
Dynamic Formula |
| LastName | Optional. Captures the service contact last name from the job's customer address. |
Dynamic Formula |
| Company | Optional. Captures the company name on the service address when the job belongs to a Zuper organization. |
Dynamic Formula |
| IsPrimaryShipping | Fixed behavior. Marks this address as the transaction's primary service (shipping) address. |
Add Zuper Job Note TO iPaaS.com
Description: Captures the job's line-level notes as transaction notes.
Mapping Filter
SourceTypeName != "ParentOnly"
Plain-language explanation:
Notes are captured only when they are attached to the job's records rather than the job header (
SourceTypeName != "ParentOnly"), so line-level job notes are captured through this collection. The job header's own title and description are handled by the Add Zuper Job Description collection instead.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Field | Note | Text | Recommended. Captures the note text from the Zuper job note. |
Static | "Job Note" | Type | Fixed value. Classifies the captured note as a Job Note. |
Add Zuper Job Description TO iPaaS.com
Description: Captures the job title and description together as a single note on the transaction, giving the transaction a readable summary of the job.
Mapping Filter
SourceTypeName == "ParentOnly"
Plain-language explanation:
The note is captured only from the parent job record (
ParentOnly), so a single job-description note is captured per transaction.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Dynamic Formula |
| Text | Recommended. Captures the job title and description together as the note text, so the transaction carries a readable summary of the job. |
Static | "Job Description" | Type | Fixed value. Classifies the captured note as a Job Description. |
Add Zuper Job Payment Due TO iPaaS.com
Description: Records an outstanding-balance payment entry on the transaction captured from the job.
Mapping Filter
SourceTypeName == "ParentOnly"
Plain-language explanation:
The entry is created only from the parent job record (
ParentOnly), so a single outstanding-balance entry is recorded per transaction.
Mapping Type | Source Field (Zuper) | Destination Field (iPaaS.com) | Description |
Static | "0" | Amount | Placeholder default. Sets the entry amount to 0 because a Zuper job does not carry a billed balance until it is invoiced. Subscribers who want to record an actual outstanding amount for jobs should map this from a source value instead. |
Static | "amount due" | Method | Fixed value. Labels the entry method as amount due, distinguishing it from a recorded payment. |
Static | "amount due" | Description | Fixed value. Sets the entry description to amount due. |
Static | "Authorized" | Status | Fixed value. Marks the entry as Authorized, reflecting an outstanding (not yet captured) balance. |
Error Handling
For error messages this integration may return during a job transfer, and the recommended response to each, see the Zuper Error Messages article.
Testing & Validation
Test Scenarios
Create a new job in Zuper with product lines, a customer billing address, a customer service address, and one or more notes, then confirm a matching transaction is captured in iPaaS.com with type Job.
Update the job in Zuper and confirm the update routes to the same iPaaS.com transaction rather than creating a duplicate.
Capture a job that has a customer billing address but no customer service address, and confirm the service address record is not produced.
Capture a job whose identifier ends in
-Dand confirm it is skipped by this family (it is owned by the Deposit Ticket collection).Capture a job with fixed-discount and percentage-discount lines and confirm the transaction subtotal, total, discount amount, and per-line unit and extended prices calculate correctly.
Capture a job that belongs to a Zuper organization and confirm the organization name appears as the company on the billing and service addresses.
Run a Manual Sync using the job identifier (job_uid) and confirm the same transaction is captured.
Validation Checklist
The transaction is created with type Job and a transaction number drawn from the invoice number, or the job title when there is no invoice number.
The transaction status reflects the translated Zuper status (DRAFT to Pending, PAID to Complete, AWAIT_PAYMENT to Pending), with unlisted values passed through unchanged.
The contact email is populated from the customer's email, or the organization's email when the job belongs to an organization.
Subtotal, total, discount amount, and total quantity match the job's product lines; the tax amount is unpopulated.
Each product line carries the product SKU, description, quantity, unit price, extended price, and a Pending status.
The billing address is marked primary billing and the service address is marked primary service.
A single job-description note captures the job title and description, and any line-level notes are captured as Job Note entries.
The outstanding-balance entry is present with an amount of 0, method and description of amount due, and a status of Authorized.
The external ID is saved on the transaction so later updates route to the same record.
Additional Notes
Totals — subtotal, discount, and quantity — are computed from the job's product lines at capture time. Zuper jobs do not carry tax, so the transaction tax amount is not populated from the job.
The Payment Due amount is a placeholder default of 0. Because a job does not carry a billed balance until it is invoiced, review this value during implementation and map it from a source value if you need to record an actual outstanding amount for jobs.
All child collections travel with the parent job. None of them can be captured on its own.
