Summary
This mapping enables product creation in Shopify from iPaaS data sources. It covers the core product attributes (title, description, type, vendor, media, categories), and supports associated inventory, product options, and product variants through child mappings.
The flow ensures accurate synchronization of product catalog data between iPaaS and Shopify.
Field Constraints
SKU must be unique within Shopify.
Categories must match Shopify’s collection taxonomy.
InventoryPolicy requires translation values aligned with Shopify’s expected codes.
Mapping Collection Status
Status: Enabled
Trigger Events: Product Add, Update, or Delete in iPaaS
Id Format
When manually transferring data from iPaaS to Shopify, it is essential to enter the correct Product Id (e.g., 10) into the iPaaS input field on the manual sync page.
Custom Field Support
Description
Shopify stores additional contact information in custom fields. These fields are exposed in the customfields property when products are retrieved through the API. In iPaaS.com flows, the customfields property can be accessed to retrieve values for specific custom fields that need to be transferred or mapped.
Template
For transfer of custom fields from iPaaS.com, the following formula can be used to access a custom field value by its name from the customfields property:
return GetValueFromCustomField(customfields, "[CustomFieldName]");
This function is used in the From iPaaS.com flow to retrieve a Shopify custom field value when its data needs to be stored in iPaaS.com.
Deleted Record Support
Product deletion is supported in this flow.
Duplication or Conflicting Collections
This is the only active mapping collection for Product sync. No other overlapping Product-to-Product collections exist.
Supported Child Collections
Parent Collection: Shopify Product Add/Update From iPaaS
Child Collection: Shopify Product Inventory Add From iPaaS – ensures Product inventory in iPaaS is also created/updated in Shopify.
Child Collection: Shopify Product Options Add From iPaaS– ensures Product options in iPaaS are also created/updated in Shopify.
Child Collection: Shopify Product Option Values Add From iPaaS– ensures Product option Values in iPaaS are also created/updated in Shopify.
Child Collection: Shopify Product Variant Add From iPaaS – ensures Product variants in iPaaS are also created/updated in Shopify.
Child Collection: Shopify Product Variant Inventory Add From iPaaS – ensures Product variants inventory in iPaaS are also created/updated in Shopify.
System Caveats
Shopify Caveats
Shopify requires a title, price, and SKU for creating a product.
Product deletion and archiving must be done manually.
iPaaS Caveats
Dynamic Formulas must resolve correctly; otherwise, sync will fail.
Product categories are converted during sync and may require review.
Setup Requirements
iPaaS Configuration
Enable Shopify Product Add From iPaaS and associated child mappings.
Validate Lookup Translations for Status and InventoryPolicy.
Shopify Configuration
In the integration settings, enter the following correctly.
OAuth URL Template:
https://{API Store}.myshopify.com/admin/oauth/authorize?client_id={SystemTypeVersion:Client_Id}&scope={SystemTypeVersion:Scope}&redirect_uri={SystemTypeVersion:RedirectUrl}&state={iPaaSState}
OAuth Identifier Field: timestamp
OAuth Success Callback Field: code
Shopify Store Credentials
Client_Secret: Secret saved when creating your Shopify store
Scope: write_Products, write_product_feeds, write_product_listings, write_inventory, write_files
RedirectUrl:
Authentication & Security
OAuth 2.0 Token: Used for Shopify API authentication.
Integration Flow
Product data is sent from iPaaS to Shopify.
Core product attributes are created in Shopify.
Child mappings handle inventory, options, and variants.
Variants and inventory are linked back to parent product records.
Mappings
Shopify Product From iPaaS (Parent)
Mapping filter
if (Sku == "SHOPIFY-GC") {return false;} if (TrackingMethod == "Product") { var value = await ValidateProductSkuCountAsync(Sku); if (value == false ) { //Sku was found on another Shopify product and will need to be manually repaired return false; } else { //Sku is unique and can be added to Shopify return true; } } else if (TrackingMethod == "Variant") { if (Variants != null && Variants.Count > 0) { var value = await ValidateProductSkuCountAsync(Variants[0].Sku); if (value == false) { //"Sku was found on another Shopify product and will need to be manually repaired return false; } else { //Sku is unique and can be added to Shopify return true; } } }Description
The filter checks whether a product SKU already exists in Shopify before adding it by using the ValidateProductSkuCountAsync function. If this is a variant product, only the first variant SKU is checked for duplicates.
If the SKU already exists or matches the giftcard placeholder SKU "SHOPIFY-GC", this mapping collection filter prevents the product from transferring.
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) | Description |
Static | test global prod | global.SH_CUSTOM_GLOBAL_PRODUCT |
|
Static | test value for test | new testing 123 |
|
Static | test value global prod new | global.SH_CUSTOM_GLOBAL_Test_Product |
|
Field | C5_Custom_Product | SH_Custom_Product |
|
Field | Sku | SH_Custom_Product3 |
|
Static | testing value just | test shopify |
|
Dynamic Formula |
| SH_Custom_Product2 |
|
Static | specific value | SpecificTesting |
|
Field | Weight | Weight |
|
Lookup Translation | InventoryPolicy | This lookup Translation converts iPaaS Custom Field "Inventory Policy" having values like "BUY NOW" , "PRE ORDER" to Shopify inventory Policy values like "BUY NOW" => "CONTINUE" "PRE ORDER" => "DENY" | |
Field | Name | Title |
|
Dynamic Formula |
| BodyHtml |
|
Static | ipaas-integration | Vendor |
|
Field | Type | ProductType |
|
Dynamic Formula |
| MediaUrls | This mapping will include media details such as the "public URL," "media type," and "media caption." The format to send the media is: "{alt} | {Image Type} | {Public URL}" and if there are multiple images then the format would be "{alt1}|{Image Type1}|{Public URL1},{alt2}|{Image Type2}|{Public URL2}" |
Dynamic Formula |
| InventoryLevel_RequiresShipping | This code checks the "Requires Shipping" custom field: If the field has a value, it returns true if that value is "true" (case-insensitive); otherwise, it returns false. If the field is empty or null, it defaults to true for physical products and false for all others. Please note that the requires_shipping field is now deprecated. The equivalent functionality is now achieved by mapping true or false to the InventoryLevel_RequiresShipping field. |
Dynamic Formula |
| InventoryLevel_Tracked | This code checks the "Inventory Tracked" custom field: If the field has a value, it returns true if that value is "true" (case-insensitive); otherwise, it returns false. If the field is empty or null, it defaults to true. Please note that the inventory_management field is now deprecated. The equivalent functionality is now achieved by mapping true or false to the InventoryLevel_Tracked field. |
Static | false | DisableChannelAssignment | This field is used to disable the feature, so transfers from iPaaS do not make any channel assignment changes and keep existing assignments in Shopify. By Default, its value will be false |
Dynamic Formula |
| ChannelIds | This method retrieves a list of unique channel IDs for each channel name provided, matching them case-insensitively against a set of existing channels. Example: |
Lookup Translation | Status | This lookup translation converts the status of iPaaS Transaction Status to Shopify Transaction Status. For example, Disabled => draft Active => active | |
Field | Sku | Sku |
|
Field | DefaultPrice | Price |
|
Field | Barcode | Barcode |
|
Dynamic Formula |
| Categories | Convert a list of iPaaS.com Categories to Shopify Ids. The categories must already exist in Shopify; otherwise, they will not be transferred. |
Shopify Product Inventory From iPaaS (Child)
Mapping Filter
GetExternalId(LocationId, "Location", SpaceportSystemId) != null
Description
This filter checks if the given location already exists in Shopify. If it is not present, the transfer will not proceed for that location.
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) | Description |
Field | QtyAvailable | Available |
|
Dynamic Formula |
| LocationId | This code extracts the Shopify location ID from the given iPaaS.com Location Id. |
Shopify Product Options From iPaaS (Child)
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) |
Field | OptionName | Name |
Field | Order | Position |
Shopify Product Option Values From iPaaS (Option’s Child)
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) |
Field | Order | Order |
Field | Value | OptionValue |
Shopify Product Variant From iPaaS (Child)
Description
Apart from Add/Update, it’s also a standalone for deleting Product variants.
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) | Description |
Dynamic Formula |
| MediaUrls | This mapping will include media details such as the "public URL," "media type," and "media caption." The format to send the media is: "{alt} | {Image Type} | {Public URL}" and if there are multiple images, then the format would be
|
Dynamic Formula |
| VariantOption |
|
Dynamic Formula |
| InventoryLevel_RequiresShipping | This code checks the "Requires Shipping" custom field: If the field has a value, it returns true if that value is "true" (case-insensitive); otherwise, it returns false. If the field is empty or null, it defaults to true. Note that the requires_shipping field is now deprecated. The equivalent functionality is now achieved by mapping true or false to the InventoryLevel_RequiresShipping field. |
Dynamic Formula |
| InventoryLevel_Tracked | This code checks the "Inventory Tracked" custom field: If the field has a value, it returns true if that value is "true" (case-insensitive); otherwise, it returns false. If the field is empty or null, it defaults to true. Note that the inventory_management field is now deprecated. The equivalent functionality is now achieved by mapping true or false to the InventoryLevel_Tracked field. |
Dynamic Formula |
| Id |
|
Dynamic Formula |
| Price | Variant price |
Field | Sku | Sku |
|
Lookup Translation | Inventory Policy | This lookup Translation converts iPaaS Custom Field "Inventory Policy" having values like "BUY NOW" , "PRE ORDER" to Shopify inventory Policy values like "BUY NOW" => "CONTINUE" "PRE ORDER" => "DENY" | |
Static | manual | FulfillmentService |
|
Field | Barcode | Barcode |
|
Dynamic Formula |
| Weight |
|
Shopify Product Variant Inventory From iPaaS (Variant’s Child)
Description
Part of Add/Update, it’s also a standalone for updating the Product variant inventory.
Mapping Type | Source Field (iPaaS) | Destination Field (Shopify) | Description |
Dynamic Formula |
| Id | The code first retrieves a Shopify product variant inventory ID string using an asynchronous method. It then extracts the part of the string before the pipe (|) separator. Finally, it converts the extracted prefix to a 64-bit integer and returns it. Note: This applies only to Standalone transfers for updating a Product variant. |
Dynamic Formula |
| LocationId | This code extracts the Shopify location ID from the given iPaaS.com Location Id. |
Field | QtyAvailable | Available | Variant available quantity |
LookUp Translations
SH Product Presale From iPaaS
Source Field (iPaaS) | Destination Field (Shopify) |
BUY NOW | DENY |
PRE ORDER | CONTINUE |
true | DENY |
SH Product Status From iPaaS
Source Field (iPaaS) | Destination Field (Shopify) |
Active | active |
Disabled | draft |
Discontinued | archive |
Preorder | draft |
SH Product Variant Presale From iPaaS
Source Field (iPaaS) | Destination Field (Shopify) |
BUY NOW | DENY |
PRE ORDER | CONTINUE |
true | DENY |
Error Handling
Duplicate SKU: Shopify rejects duplicate SKUs.
Invalid Category: Categories must resolve to Shopify collections.
Missing Required Fields: Title, Price, and SKU must be present.
Testing & Validation
Test Scenarios
Product Creation: Product created successfully with name, SKU, and price.
Inventory Sync: Quantities reflected per Shopify location.
Option Sync: Product options (e.g., Color/Size) appear correctly.
Variant Sync: Variants created with correct SKUs, prices, and inventory.
Validation Rules
SKU must be unique per variant.
Weight must be numeric.
Inventory must have valid location linkage.
Validation Checklist
Product appears in Shopify Admin.
Options and variants created.
Inventory values match iPaaS source.
Additional Notes
Child mappings must be enabled along with parent product mapping for full functionality.
All static values should be reviewed and adjusted for production.
