Articles in this section

Sync orders and customers from Shopify to NetSuite

Overview

The Order flows import orders and associated customer information from Shopify into NetSuite. As soon as a buyer places an order on your Shopify website or an order is created by your Shopify admin in the Shopify admin portal, a real-time request is made by Shopify APIs to Celigo’s iPaaS platform integrator.io , which then requests NetSuite to transfer information about the order and the customer as defined in the Field Mappings option associated with the Order flow. The customer data flow is automatically triggered every time the Shopify Order to NetSuite Order Add flow runs.

You can add orders from Shopify into NetSuite in two different ways:

  • Sales Order: To add an order as a Sales Order, enable the Shopify Order to NetSuite Order Add flow in the Order section. Sales Orders provide a way for customers to purchase items using one or more partial payments. Payment is accepted when the sales associate fulfills the order and hands over the product.

  • Cash Sale: To add an order as a cash sale, enable the Shopify Order to NetSuite Cash Sale Add flow in the Order section. A cash sale is an order type for when the customer orders, picks up and pays for the goods immediately. The delivery is processed as soon as the order has been entered. A cash invoice can be printed immediately from the order, and billing is related to the order. Enter a cash sale when payment for goods or services has been received at the time of delivery.

The integration app includes many advanced settings that let you fine-tune it to your business needs. To understand each of the available advanced settings in detail, click Settings > Order.

Important

If you want the customer records created in Shopify to be synced to NetSuite with all the custom meta fields defined, we recommend scheduling the Shopify customer to NetSuite customer (add or update) flow first, and then the order flow. If you schedule/run the Shopify order flow first, the customer flow runs as part of this flow and creates the customer records in NetSuite with the minimum fields such as first name, last name, email, Shipping/Billing addresses, subsidiary, and currency.

The Order section consists of the following flows:

  1. Shopify order to NetSuite order (cash sale or sales order)

    • Syncs new Shopify orders as a cash sale or sales order to NetSuite, based on the option you select in the Using scheduled flow, sync Shopify Orders to NetSuite assetting ( Settings > Order section > Order tab).

    • Orders from all your different channels, like web, social channels, and POS, are synced with NetSuite.

    • This scheduled flow picks the orders created or updated since the last flow run. Creates a customer record in NetSuite if a customer is not found in NetSuite. If a customer is found in NetSuite, the flow ignores it. If the flow fails to create a customer, an error message is displayed on the integration.io Dashboard. Any updates to the customer record, such as Shopify ID or address, are synced via the Shopify customer to NetSuite customer (add or update) flow.

    • The flow also syncs order edits based on the Sync Shopify edited order data to NetSuite checkbox.

  2. Shopify order to NetSuite cash sale (add)

    • Syncs new Shopify orders as cash sales to NetSuite, along with their customer records. This real-time flow is auto-triggered when a new order is created in Shopify. This flow creates a customer record only if one doesn’t exist in NetSuite. For more information, see Sync orders and customers from Shopify to NetSuite.

    • Typically used by service companies that are not selling physical inventory or companies that perform fulfillment through an external 3PL directly integrated with Shopify.

    • Allows you to skip the order fulfillment process in NetSuite but still decrement the inventory in NetSuite as sales occur.

      Note

      For the above order flows, the "Get order fulfillment info from Shopify" page processor (export) is added if you check the Buy online, pick up in-store checkbox in the Settings > Order > POS tab.

  3. Shopify order to NetSuite sales order (add)

    • Syncs new Shopify orders as sales orders to NetSuite, along with their customer records. This real-time flow is auto-triggered when a new order is created in Shopify. This flow creates a customer record only if one doesn’t exist in NetSuite. For more information, see Sync orders and customers from Shopify to NetSuite.

  4. Shopify customer to NetSuite customer (add or update)

    • Adds or updates customers from Shopify to NetSuite. The Shopify order to NetSuite cash sale (add) flow only creates customers, and any updates to the customer record, such as Shopify ID or address, are synced via the Shopify customer to NetSuite customer (add or update) flow.

    • Includes syncing the basic customer information, as well as their billing and shipping address, etc.

  5. Shopify order transaction to NetSuite custom transaction record (add)

    • Syncs order transaction details from Shopify to NetSuite custom record (Celigo eTail Order Transaction) and links them to a corresponding NetSuite sales order or cash sale. This is a real-time flow.

How to

Each of the articles below covers details on how you can perform the most common tasks & self-manage your integration:

Prerequisite settings to run order flow

The following are the recommended configurations and settings that should be completed in the Shopify-NetSuite integration app before you execute the order flow:

  1. Ensure that the item on your Shopify also exists in NetSuite. You can use Celigo’s effective product flows, NetSuite Item to Shopify Product Add/Update , and NetSuite Matrix Item to Shopify Product Add/Update, in the Product section to ensure all your products in Shopify and NetSuite are always in sync with each other. For more information, see the Product Section.

  2. Click the ON/Off switch against each flow to enable them for importing the necessary information to NetSuite.

  3. Verify, update, and add field mappings as per your requirements.

  4. In the Shopify Customer to NetSuite Customer Add/Update flow, click Settings and define the Primary Customer Lookup Criteria and Secondary Customer Lookup Criteria.

    Note

    The conditional mapping is supported only if the record is identified via Primary Customer Lookup Criteria.

  5. Click Save.

  6. From Settings > Order, configure settings available in the Shipping tab and click Save.

  7. From Settings > Order, configure settings available in the Payment tab and click Save.

  8. From Settings > Order, select a value from the Add web orders into NetSuite drop-down list available in the Order tab and click Save.

    The following are the available options in the Add web orders into NetSuite drop-down list:

    When manual payment capture is enabled in Shopify (Settings > Payments > Payment authorization > Manually capture payment for orders), the payment is only authorized at the time of order placement. If the card is valid and has sufficient funds, the issuer authorizes the payment, and the order is created in Shopify with a Payment Status of “Pending". Once the status is Pending, the integration flow is triggered, and the order is imported into NetSuite. When the integration app is configured to process Authorized orders, it imports orders with a financial status of either Authorized or Paid. This ensures coverage for both scenarios:

    • Orders placed via the storefront typically have a status of Authorized (due to manual capture).

    • Orders created directly in the Shopify admin may have a status of Paid.

    When automatic payment capture is enabled in Shopify (Settings > Payments > Payment authorization > Automatically capture payment for orders), the payment is both authorized and captured immediately during order placement. If the card is valid, the customer is charged automatically, and the order is created with a Payment Status of “Paid". Once the status is Paid, the integration flow is triggered, and the order is imported into NetSuite.

When they are fulfilled in Shopify - Select this option if you only want to move orders that have the fulfillment status set as Fulfilled. Once the fulfillment information is added to an order and the status of Fulfillment Status changes from Unfulfilled to Fulfilled the order flow gets triggered, and the order is imported from Shopify to NetSuite.

Important

If you want the initial sales order in NetSuite to be created as a Pending Approval State (for example) for all orders, use the Lookup mapping instead of Hard-coded. In order to update the status settings, refer to Map source data fields to destination .

Information flow for the Order section in the Shopify - NetSuite integration app

Add Customer information from Integrator.io to NetSuite

When this flow is triggered, integrator.io sends the customer information from Shopify as defined in Field Mapping to NetSuite. Once this information reaches NetSuite, a check is made to see if the customer exists in NetSuite. If the customer doesn’t exist, a new customer record is created in NetSuite. If the customer already exists, the remaining information pertaining to the customer record is matched with new customer details, and updates are made if needed. Once this process is completed, a confirmation is sent to Integrator.io. If the process runs without any error, either of the order flows gets executed.

Note

The flow may generate an error if the customer already exists in your NetSuite account. To fix this issue, see Customer Addition Prerequisites.

The actions performed by the system for moving customer information

The following actions are performed when moving customer information from Shopify to NetSuite:

  1. The customer information, as displayed in the following image, based onthe field Mapping setting, is exported from Shopify to NetSuite:

    2_image.jpg
  2. Check for creating or updating a customer record in NetSuite. Duplicate customer check is performed as soon as the information reaches Integrator.io.

    The following two customer details are verified in the mentioned order to check if the Customer records already exist in NetSuite:

    i. Customer ID

    ii. Customer e-mail ID

  3. After the check is performed, a record is created for a new customer or the information is updated in NetSuite. The following image displays the updated information taken from Shopify and updated in NetSuite:

    NetSuite_Customer_import.jpg

    Once any of the aforementioned action is performed, the confirmation is sent to Integrator.io if the customer information is updated or a new record is created. If not an error is generated. In this case, you can resolve the issue and retry the flow to update the customer record in NetSuite.

Apart from the process described in the aforementioned section, there are a few more options you can leverage for adding the customer information using the Customer tab in Settings .

Add Order information from Integrator.io to NetSuite

Once the customer information is processed, either the Shopify Order to NetSuite Order Add flow or the Shopify Order to NetSuite Cash Sale Add flow is run. Based on the flow that is enabled, an order is added as a sales order or a cash sale. Other than the flow that is enabled, field mapping settings and advanced settings options control the information that is transferred to the NetSuite.

Actions performed by the system for moving the order information

The following actions are performed when moving order information from Shopify to NetSuite:

  1. Order information is exported from Shopify to Integrator.io based on the Add web orders into NetSuite drop-down list value in Settings > Order > Order tab. If the order in Shopify is in the state as selected in the drop-down list, the order information is moved to integrator.io.

  2. The order information (as shown below), along with more order details,s is retrieved from Shopify and moved to integrator.io.

    order_information__3_.jpg
  3. Before moving order information from Shopify to NetSuite, the following checks are performed:

    • Duplicate order Check: The integration app creates custom fields in NetSuite labeled “eTail OrderID” and “eTail Channel”. The order’s ID in Shopify is to be mapped to the “eTail Order ID” and the “P/O Number” fields in NetSuite. In addition, the integration app generates a special ExternalID for the order that indicates it was added by the integration app. While adding a new sales order, the integration app first checks whether there is an existing sales order in NetSuite with the same ExternalID as the mapped sales order. If the search finds a match, the new order is considered a duplicate and not added to NetSuite.

    • Shipping method mappings: Ship methods must be configured separately in both systems by clients. The integration app allows for unlimited ship method mappings.

    • Payment Method mappings: Payment methods must be configured separately in both systems by clients. The integration app allows unlimited payment method mappings.

    • Multi-Currency Support: If you are running a NetSuite multi-currency account, the integration app also checks the currency on the added order and sets that currency on the NetSuite customer record while adding the order, and NetSuite will automatically source the order’s currency from the attached customer record. NetSuite only allows this field to be set while no transactions exist for the given customer, so it is usually not possible to update the currency of a customer added from Shopify. In the case where a customer already exists in NetSuite, and the currency is not known, the integration app sets the correct currency when an order arrives. The integration app also reports an error if a customer attempts to change his or her currency setting and that operation is not allowed by NetSuite.

  4. Once the order information passes these checks, the order is added to NetSuite based on your assigned settings defined for Field Mappings and Settings. If an order does not pass these checks, an error is generated in the Dashboard.

    The following images display the various order information added from Shopify to NetSuite:

Img_4.jpg
Img5.jpg

Additional features supported by this flow:

The Setting section allows you to leverage the following add-on features while adding information from integrator.io to NetSuite:

  • Report Variance: Variances in taxes, discounts, shipping costs, and order totals between NetSuite and Shopify can be reported on the sales order. It is possible that the order total might not match between the two systems if information such as tax rates does not match. The integration app calculates the variance related to the order total. After each order is added to NetSuite, the integration app immediately compares the calculated totals with what was sent from Shopify. These fields include Tax Total, Ship Total, and Order Total. If there is a difference between the values calculated by NetSuite and the values sent from Shopify, the difference is stored in one of the variance custom fields on the sales order. You may report on these fields in NetSuite periodically and adjust your G/L with a journal entry if variance values exist.

  • Creating a line item entity: This integration app allows you to create different line item records for the following features:

    • Shopify gift card redemption

    • Shopify shipping cost

    • Shopify tax amount

  • Import POS order as sales order even when the Shopify Order to NetSuite Cash Sale Add flow is enabled. You can use the POS tab option to use this feature. When you select this checkbox and the Shopify Order to NetSuite Cash Sale Add flow is enabled, all your orders will get recorded in NetSuite as a sales order. This allows you to handle the order fulfillment in NetSuite for the sales order.

  • Taxes: Tax codes must be configured separately in both NetSuite and Shopify by you. If you choose to turn off the native NetSuite tax engine, the integration app also allows tracking the total tax from Shopify as a line item on the NetSuite sales order. Tax can be added as a single line or multiple lines, one each for county/state/country tax.

    Important

    The order flow in the integration app does not support setting different default tax codes based on country. However, you can hardcode the HST or PST tax values to zero and club them under GST for collective reporting.

  • Coupon Codes, Discount Item - Discount Codes: Discount codes in Shopify are either matched against existing coupon/promo codes in NetSuite, or a single discount item can also be used to track discounts in NetSuite. There are multiple ways you can handle discounts in NetSuite via the out-of-the-box integration app: You can either have the NetSuite promo/coupon codes map to Shopify discount codes. Otherwise, you can create a single discount item in NetSuite & that would apply to all the discounted orders from Shopify. The discount code used on the Shopify order is mapped to the "Shopify Discount Code" custom field on the Sales Order record in NetSuite & the discount item, the discount rate is applied on the body level in NetSuite.

  • Gift Cards: The integration app supports both sale and redemption. Gift Card Redemption in Shopify can be tracked as an additional Non-Inventory line item on the NetSuite sales order. The integration app allows mapping the Gift Card code on a Shopify Order to a custom field on a sales order in NetSuite.

    Note

    The integration app supports processing orders that include Shopify gift card transactions of types "kind": "sale", "kind": "authorization", and "kind": "capture".

  • Order Risks: Adds risk information (risk level, risk analysis) from Shopify order into NetSuite in real-time and ties it to the corresponding NetSuite sales order/cash sale. The integration app provides integrated risk-resolution capabilities to help store owners regain order-processing efficiency and eliminate losses from fulfillment delays. When risk information is generated in Shopify, the integration app automatically adds the associated risk data to NetSuite.

    Orders that are perceived as risky can be validated for approval, canceled/closed, or refunded from within NetSuite. The integration app prebuilt data flow, then instantly sends back cancellation and refund information to Shopify customers. Automated billing ensures that canceled orders and invoices are appropriately tagged with credit or cash refunds, leaving no room for human errors or delays due to disputes.

Order Transactions - Order Transactions

This is an optional flow. If you enable this flow, the integration app adds all the successful transaction records for a Shopify order into NetSuite and ties them to the sales order for reconciliation purposes with the payment gateway.

The transaction, whose status in Shopify is successful, only gets added. Valid values of the transaction status are pending, failure, success, or error. This imported information includes authorization Code/transaction Id, payment gateway, gross amount, and so on for each individual successful payment.

A separate data flow is used for processing transactions to ensure minimal impact on the throughput of the order imports.

The following image displays the transaction record updated in the eTail tab in NetSuite:

Img6.jpg

Importing your first Order into NetSuite

Prerequisites

  1. Ensure you have an SKU in Shopify that also exists in NetSuite with the same SKU Name/Number. If you don't already have one, follow these steps:

    • In Shopify, create a new simple "Product" and populate the "SKU" field as "Celigo Test SKU 1".

    • In NetSuite, create a new "Inventory Item" and populate the "Item Name/Number" field also as "Celigo Test SKU 1".

  2. In Shopify, create a test sales order with the SKU from the above step, and also mark the order as paid in Shopify. Make a note of the Shopify order ID in the URL bar since we will need it shortly.

  3. Now navigate to the integration app settings page in the integrator.io, click on the "Settings > Order" section page, and perform these steps:

    • Click on the "Shipping" tab & open up the "Map Ship Methods" section.

    • Click on the refresh icon next to the "NetSuite Ship Method" label to pull all the shipping methods set up in your NetSuite account.

      Setting_Order_Ship.png
    • Once the refresh icon stops revolving, select a value in the "Default Lookup Value" field, then Save.

      Setting_Order_DefVal.png
  4. Now, perform the same steps for choosing a default payment method:

    • Click on the "Payment" tab & open up the "Map Payment Methods" section.

    • Click on the refresh icon next to the "NetSuite Payment Method" label to pull all the payment methods set up in your NetSuite account.

    • Once the refresh icon stops revolving, select a value in the "Default Lookup Value" field.

    • Hit Save.

  5. Enable one of the “Shopify Order to NetSuite Order Add” OR “Shopify Order to NetSuite Cash Sale Add” flows, depending upon whether you want to add the Shopify order as a sales order or cash sale in NetSuite. You can do this by clicking the "Off /On" switch next to the integration flow.

  6. You are ready to import your first order!

Importing the Order into NetSuite

  1. Under the "Settings > Order" only, click the "Order" tab now.

  2. Provide the Shopify Order ID (noted in Step 2 of the prerequisites above) in the "Shopify Order Id(s)" text box. Make sure you provide the Shopify Order ID and not the Shopify Order #.

    Sett_Orderno.png
  3. Click Save. This action will trigger the integration app to pull that specific order from Shopify and push it into NetSuite.

  4. To monitor the success/failure of this action, click on the speedometer icon to the top right of the "Settings" page to open up the integration app "Dashboard" page. On this page, you should see a new job in a few seconds that will change the status from Queued -> In Progress -> Completed.

    • If the job status shows "Completed" with a success count of 1, this means the order is successfully pushed into NetSuite, and you can directly go to Step #5.

    • If the job status shows "Errored" with an error count of 1, this means the order failed to push to NetSuite. You can follow the steps below to resolve the error:

      • Click on the "View" button next to the error count on the same job & it should tell why the order failed.

      • Fix the error by using our troubleshooting guide & retry the same job using the "Retry" button.

      • And since NetSuite does not report all errors with an order at once, you may need to fix errors one by one as they appear till the order is successfully pushed. This is the normal process to follow when importing an order.

  5. Navigate to your NetSuite account and put the same "Shopify Order ID" in the global search box for NetSuite. You should see a sales order/cash sale for the corresponding order in Shopify.