🔗 Zoho Inventory: Data Mapping & Synchronisation
This guide details exactly how data flows between your Zoho Inventory environment and Optiply. It outlines synchronisation schedules, custom configuration flags, and the specific mapping logic used to translate your e-commerce data, including Production and Assembly orders.
⏱️ Synchronisation General Board
Entity | Sync FROM -> TO | Frequency |
Products | ZohoInv > OP | each 60 minutes |
Product Compositions | ZohoInv > OP | each 60 minutes |
Suppliers | ZohoInv > OP | each 60 minutes |
Supplier Products | ZohoInv > OP | each 60 minutes |
Sell Orders | ZohoInv > OP | each 60 minutes |
Buy Orders | ZohoInv > OP | each 60 minutes |
| OP > ZohoBooks | Every 15 min |
Buy Order Deletions | ZohoInv > OP | each 60 minutes |
Buy Order Lines (including Deletions) | ZohoInv > OP | each 60 minutes |
Receipt Lines (Item Deliveries) | ZohoInv > OP | each 60 minutes |
⚙️ 1. Integration Options & Features
You can customise how the integration behaves using the following options.
Note: Options marked with (*) cannot be changed directly in the Optiply frontend. Please contact Customer Support at support@optiply.nl or via chat to adjust these settings.
Zoho Region: The Region of the company registered in Zoho
Products - Enable/Disable stockLevel sync from Zoho (*)
An option that allows a customer to decide if we should sync or not the product's stockLevel from Zoho, some customers have third-party apps and sync to our API to manage the stockLevel.
(Sync_Stock default true)
Products - Sync stockLevel from specific WarehouseIDs from Zoho (1*)
If clients have multiple warehouse sources and want to only get stock from some, they may only select specific warehouses from Zoho Inventory by clearly stating the warehouse id’s pretended, separated by commas. Furthermore, each ID should be numerical.
(warehouse_ids default "allWarehouses")
ProductCompositions - Sync composedProducts from Zoho (1*)
The client can choose not to sync the products' assembled attribute to Optiply by having this flag set to false.
(Sync_Assembled default false)
SellOrders - Sync only Completed Orders from Zoho
An option that allows a customer to decide if we should sync All Order statuses to Optiply or only salesorders.order_status == "closed". if pullAllOrders = True We pull all orders except salesorders.status == "draft"
(pullAllOrders default true)
Assembly to Zoho - Sync AssemblyOrders from Optiply to a specific warehouseID to Zoho
An option that allows a customer to decide if we should send the AssemblyOrders to a specific warehouse ID in Zoho. This is not mandatory, so by default, we don’t send this.
(export_warehouse_id default NULL)
(1*) It is not possible to change this option in your app. Please report to our Customer Support at support@optiply.nl or via chat.
🗺️ 3. Standard Data Mapping Details
Products
Optiply | Zoho Inventory |
name | name |
skuCode | sku |
price | rate |
articleCode | purchase_description |
status | if Otherwise |
eanCode | ean |
UnlimitedStock | False |
stockLevel (*) |
|
assembled (*) | is_combo_product |
remoteId | item_id |
createdAtRemote | created_time |
(*) The customer can decide if we should map this field or not. By default, we will map this field.
Product Compositions
Optiply | Zoho Inventory |
composedProductId | composite_item_id |
partProductId | mapped_items.item_id |
partQuantity | mapped_items.quantity |
remoteId | mapped_items.mapped_item_id |
Suppliers
Optiply | Zoho Inventory |
name | contacts.contact_name |
contacts.email | |
remoteId | contacts.contact_id |
Supplier Products
Optiply | Zoho Inventory |
name | name |
skuCode | sku |
articleCode | upc |
eanCode | ean |
price | purchase_rate |
supplierId | vendor_id |
productId | item_id |
Sell Orders
Optiply | Zoho Inventory |
totalValue | total |
placed | date |
remoteId | salesorder_id |
If pullAllOrders = False, we pull only salesorders.order_status == "closed"
If pullAllOrders = True, we pull all orders except salesorders.status == "draft"
Sell Order Lines
Optiply | Zoho Inventory |
productId | line_items.item_id |
quantity | line_items.quantity |
subtotalValue | line_items.rate * line_items.quantity |
Buy Orders Zoho > Optiply
Optiply | Zoho Inventory |
buyOrder.supplierId | op supplierId |
buyOrder.placed | date |
buyOrder.completed | Timestamp when order_status becomes “closed” |
buyOrder.expectedDeliveryDate | expected_delivery_date |
remoteId | purchaseorder_id |
buyOrder.totalValue | total * exchange_rate |
Buy Order Lines Zoho > Optiply
Optiply | Zoho Inventory |
productId | line_items.item_id |
quantity | line_items.quantity |
subtotalValue | line_items.quantity * line_items.bcy_rate * buyorder_exchange_rate |
buyOrderId | purchaseorder_id |
Since on Zoho Inventory multiple lines for the same product can be created, this will only be reflected in 1 line on optiply with the sums of lines inside Zoho Inventory with the same productId.
Buy Orders Optiply > Zoho
Optiply | Zoho Inventory |
buyOrder.supplierId | vendor_id |
If export_buyOrder_payment_terms is set, it will be sent with the purchase order
Buy Orders Lines Optiply > Zoho
Optiply | Zoho Inventory |
product.remoteId | item_id |
quantity | quantity |
Item Deliveries
Optiply | Zoho Inventory |
Ocurred | Date |
Quantity | line_items.quantity |
BuyOrderLineId | optiplyBuyOrderLineId |
remote_id | receive_id |
This integration supports multiple warehouses. If you have multiple warehouse sources and want to only get stock from some, they may only select specific warehouses from Zoho Inventory by clearly stating the warehouse IDs pretended separated by commas. Furthermore, each id should be numerical.
🛠️ 4. Production Orders (Assembly)
🛑 IMPORTANT SERIAL NUMBER LIMITATION:
If you use serial numbers on your composed products (or their underlying parts) in Zoho Inventory, Optiply cannot send Assembly Orders back to Zoho Inventory.
Production Orders (Assembly) - Zoho Inventory to Optiply
Optiply | Zoho Inventory |
totalValue |
|
remoteID |
|
placed |
|
completed | DateNow (*1) |
expectedDeliveryDate |
|
supplierId | (*2) |
(*1) Order will be set to completed when status=”bundled”
(*2) There is no Supplier for AssemblyOrders, but we need it to create the buyOrders in Optiply, and we will use the related Supplier in Optiply (the supplierProduct with a supplier_type=producer for that product).
If no SupplierProduct like that exists in Optiply for that product, the Assembly will not be synced to Optiply.
Production Order Lines - Zoho Inventory to Optiply
Optiply | Zoho Inventory |
optiplyWebshopProductArticleCode |
|
quantity |
|
subTotalValue |
|
Production Orders (Assembly) - Optiply to Zoho Inventory
One Assembly Order created in Optiply can have multiple lines, but in Zoho, as Assembly can only have one line, so for each orderLine in Optiply, we will create one Assembly in Zoho Inventory:
The order will be set to the original Assembly Order from Optiply to be completed when all the related Assembly are set to complete in Zoho Inventory.
Production Order with one line - Optiply to Zoho Inventory
Note: One Assembly Order in Optiply can contain multiple lines, but a Zoho Assembly can only have one. Therefore, for every order line in Optiply, we create a separate Assembly in Zoho. The overarching Optiply order is marked "completed" when all related Zoho Assemblies are completed.
To send an Assembly to Zoho, we map the product being assembled and the parts consumed:
Optiply |
| Zoho Inventory |
|
optiplyBuyOrderLineId |
| reference_number |
|
buyOrder.placed |
| date |
|
buyOrderLine.product.remoteId |
| composite_item_id |
|
wp.name |
| composite_item_name |
|
buyOrderLine.quantity |
| quantity_to_bundle |
|
composition | partProduct.remoteId | line_items | item_id |
| partProduct.name |
| name |
| buyOrderLine.quantity * partQuantity |
| quantity_consumed |
❓ 5. Frequently Asked Questions (FAQs)
Why didn't my Assembly Order sync from Zoho to Optiply?
For an Assembly Order to sync into Optiply, the composed product must be linked to a Supplier Product in Optiply where the supplier_type is set to "producer." If this doesn't exist, we have nowhere to attach the order in our system!
I have duplicate lines on a Purchase Order in Zoho. Will they show up in Optiply?
Yes, but they will be consolidated. Optiply will merge the duplicate lines into a single line item that contains the total sum of the quantities for that specific product.
How do I adjust which warehouses Optiply pulls stock from?
Because warehouse logic is handled deeply within the integration backend, you cannot toggle this yourself. Simply email support@optiply.nl with your numerical Warehouse IDs, and we will update your filters!

