Summary
iPaaS.com Transactions can be transferred out to Zoho CRM as Sales Orders, one order per transaction, either automatically on a Transaction create or update or on demand from the Manual Sync page. Each order carries its totals, tax and discount amounts, status, and both the billing and shipping addresses, and it is written together with its line items in a single call. This document covers the parent Sales Order collection and its Sales Order Line child together.
ID Format
Manual Sync ID Format
To transfer a single Transaction on demand, enter the iPaaS.com Transaction ID on the Manual Sync page — the numeric identifier of the Transaction record in iPaaS.com, for example 1234. The integration retrieves that Transaction with its lines and addresses and writes it to Zoho CRM. The child line collection has no separate Manual Sync id; lines are re-sent by re-syncing the parent transaction.
External ID Format
After a successful transfer, iPaaS.com saves the Zoho CRM sales order id — a long numeric value in the shape Zoho CRM uses for all record ids — on a dedicated external-ID record. That record routes a repeat transfer to an update of the existing order rather than creating a duplicate, and it is the only link between the two systems: this collection does not search Zoho CRM for a matching order before creating one. If the external-ID record is missing or cleared, the next transfer creates a second Zoho CRM sales order. Each returned line is matched back to its originating iPaaS.com transaction line after the write, so the line links are recorded too.
Deleted Record Support
Deletion is not propagated. Deleting a Transaction in iPaaS.com does not delete or cancel the corresponding Zoho CRM sales order; the order remains until it is removed in Zoho CRM directly.
Custom Field Support
Custom fields are supported on this collection. Before a custom field can be transferred, it must already exist in Zoho CRM: go to Settings → Customization → Modules and Fields → Sales Orders → Fields and create the field, then configure the matching custom field on the iPaaS.com subscription using exactly the Zoho CRM field label or API name — the integration matches on either, and API names differ from labels in that spaces and special characters are removed. The integration resolves each mapped name against the live Sales Orders field list on every transfer.
The Raise Custom Field Not Found Exception subscription setting controls what happens when a mapped custom field cannot be matched in Zoho CRM: True stops the transfer with a message naming the field; False sends the value anyway, and Zoho CRM has been observed to accept the request and ignore the unrecognised field, so the mapping fails silently. Subscribers or their MiSP still configuring the integration are advised to set it to True.
Mapping Collection Status
Status: Enabled. This collection has no mapping filter, so every Transaction sent to it is processed. Subscribers or their MiSP who only want certain transactions in Zoho CRM — for example only completed orders — should add a mapping filter before enabling automatic transfers.
Trigger Events: Created and Updated. Automatic transfers do not activate by default — subscribe to the transaction/created and transaction/updated triggers under Outbound Data Flows in the subscription configuration. Until those are enabled, no automatic transfers occur.
Duplicate or Conflicting Mappings
There are no other mapping collections in this integration that write to the Zoho CRM Sales Orders module, so no conflicting source of truth exists by default. Collision handling is not configurable on this collection.
Supported Child Collections
Add/Update Zoho CRM Sales Order Line FROM iPaaS.com: carries the order's line items — each line's product (matched by SKU), quantity, prices, discount, and per-line tax. The lines are written as part of the same call that creates the order rather than as separate requests. Zoho CRM will not accept a sales order without at least one line, so the parent and child always transfer together.
System Caveats
Zoho CRM Caveats
Products must exist before the order does: an order line is attached to a Zoho CRM product by matching the line's SKU against the product's code. The integration does not create the product on demand, so any product not already transferred causes the whole order to fail.
Subject is enforced by Zoho CRM, not by iPaaS.com: an order with no subject is rejected at the Zoho CRM end, so the failure appears in the error log rather than being caught before the call.
Call credits are consumed per transfer, and per line: a single order transfer makes one Zoho CRM call per line item to resolve products, plus the order write and its read-back, so orders with many lines consume proportionally more of the edition's rolling 24-hour allowance. When the allowance or concurrency cap is reached, Zoho CRM rejects the call and the transfer is not retried or rescheduled — it fails and is recorded under Dashboard / Integration Monitoring / Error Logs.
Taxes referenced on an order must already be configured: tax values written to a sales order reference the organization's configured taxes by name — the tax names used by the order and line tax mappings must exist in the Zoho CRM tax settings.
iPaaS.com Caveats
The customer must be transferred to Zoho CRM before the order: the contact on the order is resolved from an existing link between the iPaaS.com Customer and a Zoho CRM contact, created by Add/Update Zoho CRM Contact FROM iPaaS.com. This collection does not create it. Transferring an order for a customer that has never been transferred writes the order with no contact attached.
Transfers are not sequenced automatically: the integration does not transfer the customer or the products as prerequisites of an order. Subscribers or their MiSP are responsible for the order in which the initial data load is run — products and customers first, then orders.
Setup Requirements
In Zoho CRM, confirm the connected user can read and write the Sales Orders, Products, and Contacts modules.
Transfer the product catalog first (Add/Update Zoho CRM Product FROM iPaaS.com), confirming each product's code matches the SKU used on iPaaS.com transaction lines.
Transfer the customers first (Add/Update Zoho CRM Contact FROM iPaaS.com) so orders can attach to a contact.
In the Zoho CRM tax settings, create the tax names referenced by the order and line tax mappings.
Review the Status lookup translation and confirm the value pairs match the transaction statuses in use.
Subscribe to the transaction/created and transaction/updated triggers under Outbound Data Flows for automatic transfers.
Integration Flow
When a Transaction transfer is started from iPaaS.com, the integration:
Resolves every line's product. For each line it searches Zoho CRM for a product whose code matches the line's SKU. If any line's SKU cannot be found, the whole transfer stops with a message naming the problem — no partial order is created. A transaction with no lines stops for that reason instead.
Resolves the contact. The mapped formulas look up the Zoho CRM contact the transaction's customer was previously linked to. This reads an existing link; it does not create the contact.
Resolves any mapped custom fields against the live Sales Orders field list, handling unmatched fields per the Raise Custom Field Not Found Exception setting.
Creates or updates the sales order with its lines in a single call — a new order if the Transaction is not yet linked, otherwise an update in place.
Reads the order back and records the links, matching each returned line to its originating iPaaS.com line and recording the Zoho CRM sales order id as the external-id link.
Mappings
Add/Update Zoho CRM Sales Order FROM iPaaS.com
iPaaS.com data type: Transaction
Description: Writes an iPaaS.com Transaction to Zoho CRM as a Sales Order. This collection has no mapping filter — every Transaction sent to it is processed. Billing and shipping addresses are each selected from the transaction's address list by the corresponding primary-address flag; an address carrying neither flag leaves those Zoho CRM fields empty rather than falling back to another address.
Mapping Type | Source Field (iPaaS.com) | Destination Field (Zoho CRM) | Description |
Field | TransactionNumber | Subject | Required. Zoho CRM rejects a sales order without a subject; it is populated from the transaction number. |
Dynamic Formula |
| Customer_No | Recommended. Resolves the Zoho CRM contact id the customer was previously linked to. Depends on the customer having been transferred first; without the link the order is written with no customer number. |
Dynamic Formula | see Formula bodies below | Contact_Name | Recommended. Attaches the order to the Zoho CRM contact, using the same customer link. If no link exists, no contact is attached. |
Lookup Translation | Lookup Translation: OrderStatus | Status | Recommended. Translates the iPaaS.com transaction status to a Zoho CRM order status — see the Lookup Translation Table below. |
Field | Total | Grand_Total | Recommended. The order total, so it matches iPaaS.com. |
Field | Subtotal | Sub_Total | Recommended. The pre-tax total. |
Field | TaxAmount | Tax | Recommended. The order-level tax figure. |
Field | DiscountAmount | Discount | Recommended. The order-level discount. |
Field | ShippingAmount | Adjustment | Recommended. Carries the shipping charge — Zoho CRM sales orders have no dedicated shipping field, so it is placed in Adjustment. |
Dynamic Formula |
| Billing_Street | Optional. Street of the transaction's primary billing address. |
Dynamic Formula |
| Billing_City | Optional. City of the primary billing address. |
Dynamic Formula |
| Billing_State | Optional. State/region of the primary billing address. |
Dynamic Formula |
| Billing_Code | Optional. Postal code of the primary billing address. |
Dynamic Formula |
| Billing_Country | Optional. Country of the primary billing address. |
Dynamic Formula |
| Shipping_Street | Optional. Street of the primary shipping address. |
Dynamic Formula |
| Shipping_City | Optional. City of the primary shipping address. |
Dynamic Formula |
| Shipping_State | Optional. State/region of the primary shipping address. |
Dynamic Formula |
| Shipping_Code | Optional. Postal code of the primary shipping address. |
Dynamic Formula |
| Shipping_Country | Optional. Country of the primary shipping address. |
Dynamic Formula | see Formula bodies below | line_tax | Optional. Summarises the transaction's taxes into a single named tax entry written on the order. Placeholder value — replace during implementation: the formula pins a specific Zoho CRM tax record id ( |
Formula bodies. The multi-line formulas above, verbatim:
// Contact_Name
var number = await GetExternalIdAsync(CustomerId, "Customer", SpaceportSystemId);
if (number != null) {
var contact = new Integration.DataModels.ContactName() { id = number};
return contact
} else {
return null;
}// line_tax — the tax id and name below are placeholders; replace with a tax configured in your Zoho CRM organization
decimal taxPercent = 0;
decimal taxAmount = 0;
if (Taxes != null){
foreach (var ipTax in Taxes){
taxPercent += ipTax.TaxPercent;
taxAmount += ipTax.Amount;
}
}
dynamic tax = new ExpandoObject();
tax.name = "Sales Tax";
tax.percentage = taxPercent;
tax.value = taxAmount;
tax.id = "6027981000000021001";
var finalTaxList = new List<object>();
finalTaxList.add(tax);
return finalTaxList;
Lookup Translation Table — OrderStatus
Source Value (iPaaS.com) | Destination Value (Zoho CRM) | Notes |
Pending | Created | Confirm the pairs match the transaction statuses actually in use. |
Complete | Delivered | |
Cancelled | Cancelled | |
Shipped | Approved |
Add/Update Zoho CRM Sales Order Line FROM iPaaS.com
iPaaS.com data type: Transaction Line
Description: Carries one line item of the order. Lines are written as part of the parent order's call, never on their own. The SKU mapping resolves the Zoho CRM product the line is attached to.
Mapping Type | Source Field (iPaaS.com) | Destination Field (Zoho CRM) | Description |
Dynamic Formula | see Formula bodies below | SKU | Required. The product code used to match the Zoho CRM product. Where the iPaaS.com SKU is a composite |
Field | Qty | quantity | Required. The quantity ordered. |
Field | UnitPrice | unit_price | Recommended. The price charged per unit. |
Field | OriginalUnitPrice | list_price | Recommended. The list (pre-discount) unit price. |
Field | ExtendedPrice | total | Recommended. The line total. |
Field | ExtendedPrice | total_after_discount | Recommended. The line total after discount. |
Field | DiscountAmount | Discount | Optional. The line discount amount. |
Field | EstimatedTaxAmount | Tax | Optional. The line tax amount. |
Field | Description | product_description | Optional. The line description. |
Dynamic Formula | see Formula bodies below | line_tax | Optional. Builds a per-line named tax entry from the line's tax percent; returns nothing when the line has no tax percent. |
Formula bodies. The multi-line formulas above, verbatim:
// SKU
if (Sku.Contains("|")){
var pos = Sku.IndexOf("|");
return Sku.Substring(0, pos);
} else
return Sku;// line_tax
if (TaxPercent != null){
dynamic tax = new ExpandoObject();
tax.name = "Sales Tax";
tax.percentage = TaxPercent; var finalTaxList = new List<object>();
finalTaxList.add(tax);
return finalTaxList;} else {return null;}Error Handling
An order fails because a line's product is not in Zoho CRM. Product resolution runs across every line before the order is written; a single unmatched SKU stops the transfer with a message naming the problem. Resolution: transfer the product first (matching its code to the line SKU) and re-run the order.
An order is rejected for a missing subject. Zoho CRM enforces a subject; the failure appears in the error log. Resolution: ensure Subject is mapped and populated.
A transfer fails when the Zoho CRM call allowance or concurrency cap is reached. Order transfers make one call per line to resolve products, so bulk order loads reach the limit sooner than record counts suggest. The transfer is not rescheduled — it fails and is recorded in the error log. Resolution: stagger bulk loads and re-run affected transfers once the allowance resets.
A tax write fails because the referenced tax is not configured. The order and line tax entries reference Zoho CRM taxes by name (and, for the order, by id). Resolution: create the referenced tax names in the Zoho CRM tax settings and replace the placeholder tax id in the order line_tax formula.
A dedicated Zoho CRM Error Messages article covers the integration's error catalog in full.
Testing & Validation
Test Scenarios
Transfer a product, then a customer, then an order that references both, and confirm the Zoho CRM sales order is created with its line, its contact, and its totals.
Transfer an order whose line references a SKU not present in Zoho CRM and confirm the whole transfer stops with a naming error.
Update a transferred order's total and confirm the existing Zoho CRM order updates rather than duplicating.
Transfer an order with distinct primary billing and primary shipping addresses and confirm each set of Zoho CRM address fields is populated correctly.
Confirm the Status value written to Zoho CRM matches the OrderStatus translation for the transaction's status.
Manually sync by entering an iPaaS.com Transaction ID and confirm success.
Validation Checklist
The connected Zoho CRM user can read and write the Sales Orders, Products, and Contacts modules.
The product catalog and customers have been transferred first.
The tax names referenced by the order and line tax mappings exist in Zoho CRM, and the placeholder tax id in the order line_tax formula has been replaced.
The OrderStatus translation pairs match the transaction statuses in use.
Any custom fields exist in Zoho CRM with matching iPaaS.com subscription custom fields.
Additional Notes
One missing product fails the whole order — there is no partial order. Transfer the product first and re-run.
An order can reach Zoho CRM with no contact attached if the customer link does not yet exist; the order is still written, just unattached.
There is no fallback match — a lost external-ID link produces a duplicate sales order rather than a re-link.
Line-level tax is applied as a single named tax rather than reproducing each tax line separately.
There is no bulk initialization. For an initial order load, use bulk sync using Postman.
The following are out of scope: order deletion, inbound order sync, payments/shipments/tracking numbers, quotes/invoices/purchase orders, and deal or account association (orders attach to a contact only).
