Hi everyone, I’m using the Shopify Integration App to sync POS orders to NetSuite Cash Sales.
There is one particular scenario where Shopify allows creating an order without an SKU (custom sale), for example when the barcode is missing or unreadable on the product. Has anyone already faced this situation?
I would like to implement the following criteria for item matching in NetSuite:
-
First, try to match the Shopify SKU with the NetSuite item name.
-
If the SKU is empty, try to match the Shopify product title with the NetSuite item description.
-
If no match is found, then use a default item.
Does anyone have any advice or best practices for handling this scenario?
Hey there, Vitor!
This is a very common scenario when dealing with Shopify POS. Because Shopify allows retail staff to ring up "Custom Sales" or manual line items without an explicit SKU, the Celigo integration needs a fallback strategy so it doesn't just error out with a "failed to resolve item" message.
Here is how you can configure this multi-tiered lookup logic using the Shopify-NetSuite Integration App (IO).
Instead of a simple standard mapping, you will use a Dynamic Lookup on the Item line-level field.
Step 1: Configure the Dynamic Item Lookup
-
Open your Shopify order to NetSuite order (cash sale or sales order) Flow.
-
Go to the Mappings for the order import.
-
Locate the NetSuite item internal ID mapping (usually Items : Item (InternalId)).
-
Change the mapping type from Standard to Dynamic Lookup (click the gear icon next to the mapping).
Step 2: Set Up the Multi-Tiered Search Criteria
In the Dynamic Lookup configuration, you can define how Celigo searches NetSuite. Configure it as follows:
How it works: Celigo will first look for a NetSuite item where the Name matches the Shopify sku. If the Shopify sku is empty or no match is found, it evaluates the next line and looks for a NetSuite item where the Description matches the Shopify product title.
Step 3: Handling the "Default Item" Fallback
If neither the SKU nor the Title finds a match in NetSuite, Celigo allows you to define a fail-safe.
-
Scroll down to the bottom of that same Dynamic Lookup settings window.
-
Look for the setting labeled "If no match is found..." or "Default Value".
-
Set this to Use Constant Value and enter the Internal ID of your default "Shopify Custom Sale" item from NetSuite (e.g., a Non-Inventory Item for Sale created specifically for this purpose).
Best Practices for this Scenario
-
Revenue Mapping: Ensure your default NetSuite item is mapped to a specific "Unmapped POS Revenue" or "Custom Sales" income account. This makes it incredibly easy for your finance team to reconcile these manual sales at the end of the month.
-
Preserving Original Data: Even though NetSuite will use the default item, make sure you are still mapping the Shopify title and price to the NetSuite line-item description and rate fields. This ensures the NetSuite Cash Sale still shows exactly what the customer bought (e.g., "Vintage Red Dress - No Tag") and what they paid for it, even if it's tied to a generic item record.
-
Trim Whitespace: Sometimes manual titles in Shopify have accidental spaces. In your mapping expression, you can use handlebars like {{trim title}} to ensure a cleaner match against NetSuite.
Give this a try in your sandbox first, and let the community know if you run into any mapping snags!
Hi Francis!
Thank you very much for your inputs! This works as expected!
Hi @francisapostol, this worked for orders with non-matrix items. However, for orders with multiple variants, for some reason the integration is not matching the correct SKU, which is leading to mismatches when trying to search by title. Is there anything else I could add to the mapping to improve this? Thanks!
Hi @Vitor_Correa
I'm glad to hear that worked for the non-matrix items!
Regarding the issue with the multiple variants, since the integration isn't matching the correct SKU and is causing those title mismatches, I strongly recommend submitting a support ticket so we can review your configuration further. Matrix item mappings can get a bit complex, and getting our support team to take a closer look at your specific setup will help us pinpoint exactly what else we need to add to the mapping to fix this for you.
Regards,
Francis