Skip to main content

Shopify Product from iPaaS

Create Shopify products from iPaaS source data

Updated today

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

Authentication & Security

  • OAuth 2.0 Token: Used for Shopify API authentication.

Integration Flow

  1. Product data is sent from iPaaS to Shopify.

  2. Core product attributes are created in Shopify.

  3. Child mappings handle inventory, options, and variants.

  4. 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

GetCustomFieldValue(CustomFields, "C5_Custom_Product")

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

Description

BodyHtml

Static

ipaas-integration

Vendor

Field

Type

ProductType

Dynamic Formula

var images = "Comparison video, showing the different models of watchesIMAGEhttps://i.ibb.co/fYZpW80/1080-1721284657-1111-1721278087-brochure-1456.png,Comparison, video showing the different models of watchesIMAGEhttps://i.ibb.co/fYZpW80/1080-1721284657-1111-1721278087-brochure-1456.png"; return images;

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

var value = GetCustomFieldValue(CustomFields, "Requires Shipping"); if (!string.IsNullOrEmpty(value)){ return value.ToLower() == "true"; } if (Type == "Physical") { return true;} return false;

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

var value = GetCustomFieldValue(CustomFields, "Inventory Tracked"); if (!string.IsNullOrEmpty(value)){ return value.ToLower() == "true"; } return true;

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

var customFieldvalue = GetCustomFieldValue(CustomFields, "Shopify Product Channels"); var channels = ""; if (!string.IsNullOrEmpty(customFieldvalue)){ channels = customFieldvalue; } if(!string.IsNullOrEmpty(channels)) { return await GetChannelIdsByNames(channels); } return null;

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: var names => "Point Of Sale,Online Store" GetChannelIdsByNames(names) takes a list of names (separated by commas if there is more than one) and returns a list of strings containing the corresponding channel IDs.

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

ConvertCategoriesToShopifyIds(Categories)

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

GetExternalId(LocationId, "Location", SpaceportSystemId)

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

var images = "Comparison video showing the different models of watchesIMAGEhttps://i.ibb.co/fYZpW80/1080-1721284657-1111-1721278087-brochure-1456.png,Comparison video showing the different models of watchesIMAGEhttps://i.ibb.co/fYZpW80/1080-1721284657-1111-1721278087-brochure-1456.png"; return images;

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

return SetVariantOptionAndValues(Options);

VariantOption

Dynamic Formula

var value = GetCustomFieldValue(CustomFields, "Requires Shipping"); if (!string.IsNullOrEmpty(value)){ return value.ToLower() == "true"; } return true;

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

var value = GetCustomFieldValue(CustomFields, "Inventory Tracked"); if (!string.IsNullOrEmpty(value)){ return value.ToLower() == "true"; } return true;

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

return await GetExternalIdAsync(Id, "Product Variant", SpaceportSystemId);

Id

Dynamic Formula

CoalesceToDecimal(DefaultPrice, SalePrice, Parent.DefaultPrice, Parent.SalePrice)

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

return SetMeasurementForWeight(Weight,"POUNDS");

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

var external = await GetExternalIdAsync(Id, "Product Variant Inventory", SpaceportSystemId); string parsedIdPrefix = external.Substring(0, external.IndexOf("")); return Convert.ToInt64(parsedIdPrefix);

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

GetExternalId(LocationId, "Location", SpaceportSystemId)

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.

Did this answer your question?