Contact data mapping
| Engage | Source data (Shopify) | Notes |
|---|---|---|
| Contact.externalId | Customer.id | |
| Contact.contactType | ”member” or “contact” | Only set on contact creation. according to “Customer contact type” setting |
| Contact.firstName | Customer.firstName | |
| Contact.lastName | Customer.lastName | |
| Contact.email | Customer.email | |
| Contact.gender | voyado.gender | Available as a customer metafield in Shopify. |
| Contact.mobilePhone | Customer.phone | |
| Contact.createdInStore | Associated Store for Customer.locale | Based on market configuration in Engage App in Shopify |
| Contact.street | Customer.defaultAddress.address1 , Customer.defaultAddress.address2 | |
| Contact.city | Customer.defaultAddress.city | |
| Contact.country | Customer.defaultAddress.country | |
| Contact.countryCode | Customer.defaultAddress.countryCodeV2 | |
| Contact.language | ||
| Contact.externalId | Shopify internal Id | |
| Contact.preferences.acceptsEmail | Customer.emailMarketingConsent.marketingState == SUBSCRIBED | Set on Contact creation and opt-in through an order |
| Contact.preferences.acceptsSms | Customer.smsMarketingConsent.marketingState == SUBSCRIBED | Set on Contact creation and opt-in through an order |
| Contact.preferences.acceptsPostal | false | Only set on Contact creation. |
| Contact.consents[id=“hasShopifyAccount”].value | Customer.state == ACTIVE | Set for all customers who have an account online |
| Contact.consents[id=“hasShopifyAccount”].source | ”Shopify” |
Receipt data mapping
| Engage | Source data (Shopify) - orders/create | Source data (Shopify) - refunds/create | Notes |
|---|---|---|---|
| Receipt.contact.matchKey | Associated Contact Voyado Contact ID | ||
| Receipt.contact.matchKeyType | ”contactId” | ||
| Receipt.uniqueReceiptId | Order.id | Refund.order.id | |
| Receipt.receiptNumber | Order.name | Refund.order.number | |
| Receipt.createdDate | Order.createdAt | Refund.createdAt | |
| Receipt.storeExternalId | Associated Store External ID by Customer.locale retrieved from database | Based on market configuration in Engage App in Shopify | |
| Receipt.currency | Order.currencyCode | Refund.order.currencyCode | |
| Receipt.exchangeRateToGroupCurrency | The exchange rate between “voyado group currency” (see settings) and Order.currencyCode / Refund.order.currencyCode , retrieved from third party service (with 24-hours accuracy) | ||
| Receipt.totalGrossPrice | Order.totalPriceSet.shopMoney.amount | Refund.totalRefundedSet.shopMoney.amount | |
| Receipt.taxDetails | Order.taxLines | ||
| Receipt.taxDetails[].description | Order.taxLines[].title | ”Tax refund” | |
| Receipt.taxDetails[].value | Order.taxLines[].priceSet.shopMoney.amount | sum(Refund.refundLineItems[].totalTaxSet.shopMoney.amount) | |
| Receipt.paymentMethods[].type | Order.transactions[].gateway | Refund.transactions[].gateway | |
| Receipt.paymentMethods].description | Order.transactions[].[paymentProvider.name | Refund.transactions].[paymentProvider.name | |
| Receipt.paymentMethods[].value | Order.transactions[].amountSet.shopMoney.amount | Refund.transactions[].amountSet.shopMoney.amount | |
| Receipt.items[] | Order.lineItems[] | Refund.refundLineItems[] | |
| Receipt.items[].type | ”PURCHASE" | "RETURN” | |
| Receipt.items[].quantity | Order.lineItems[].quantity | Refund.refundLineItems[].quantity | |
| Receipt.items[].grossPaidPrice | Order.lineItems[].discountedTotalSet.shopMoney.amount | Refund.refundLineItems[].priceSet.shopMoney.amount | |
| Receipt.items[].taxAmount | Sum of Order.lineItems[].taxLines[*].priceSet.shopMoney.amount | Refund.refundLineItems[].totalTaxSet.shopMoney.amount | |
| Receipt.items[].sku | Order.lineItems[].sku | Refund.refundLineItems[].lineItem.sku | |
| Receipt.items[].articleNumber | Order.lineItems[].sku | Refund.refundLineItems[].lineItem.sku | |
| Receipt.items[].discounts[].type | Derived from type of Order.lineItems[].discountAllocations[].discountApplication | See *A1 | |
| Receipt.items[].discounts[].description | Derived from type of Order.lineItems[].discountAllocations[].discountApplication | See *A2 | |
| Receipt.items[].discounts[].value | Order.lineItems[].discountAllocations[].allocatedAmountSet.shopMoney.amount |
*A1 - Discount type mapping
| DiscountApplication type | Engage discount description |
|---|---|
| AutomaticDiscountApplication | 235 |
| DiscountCodeApplication | 235 |
| ManualDiscountApplication | 235 |
| ScriptDiscountApplication | 235 |
*A2 - Discount description mapping
| DiscountApplication type | Engage discount description |
|---|---|
| AutomaticDiscountApplication | Automatic discount: \${AutomaticDiscountApplication.code} |
| DiscountCodeApplication | Discount code: \${DiscountCodeApplication.code} |
| ManualDiscountApplication | Manual discount: \${ManualDiscountApplication.description} |
| ScriptDiscountApplication | Script discount: \${ScriptDiscountApplication.title} |
Cart abandonment
| Engage | Source |
|---|---|
| [].CartReference | AbandonedCheckout.cart_id |
| [].Time | AbandonedCheckout.updated_at |
| [].ContactId | Identified contact ID |
| [].Language | AbandonedCheckout.customer_locale |
| [].Url | AbandonedCheckout.abandoned_checkout_url |
| [].Items[].Sku | AbandonedCheckout.line_items[].sku |
| [].Items[].Quantity | AbandonedCheckout.line_items[].quantity |
Engage order notification
| Engage | Source (Shopify) - orders/* | Source (Shopify) - refunds/create | Notes |
|---|---|---|---|
| contact.matchKey | Order.email or Order.phone (based on customer identification method, see settings.) | ||
| contact.matchKeyType | ”email” or “phone” (based on customer identification method) | ||
| orderStatus | See *B3 | ||
| paymentStatus | See *B4 | ||
| orderNumber | Order.name | ||
| createdDate | Order.createdAt | ||
| shippingDate | Order.fulfillments[0]?.createdAt | ||
| statusChangedDate | Order.updatedAt | ||
| storeId | Associated store ID for Order.customerLocale (see store locale mapping.) | ||
| currency | Order.currencyCode | ||
| language | Order.customerLocale.split(’-’)[0] | ||
| totalGrossPrice | Order.totalPriceSet.shopMoney.amount | ||
| freightFee.value | Order.shippingLine.discountedPriceSet.shopMoney.amount | ||
| freightFee.tax | sum(Order.shippingLine.taxLines[].priceSet.shopMoney.amount | ||
| totalTax | Order.totalTaxSet.shopMoney.amount | ||
| taxDetails[].description | Order.taxLines[].title | ||
| taxDetails[].value | Order.taxLines[].priceSet.shopMoney.amount | ||
| extraData.CreatedDate | Order.createdAt | ||
| extraData.ShippingDate | Order.fulfillments[0]?.createdAt | ||
| extraData.ReturnDate | Order.refunds[0]?.createdAt | ||
| extraData.TrackingNumber | Order.fulfillments?[0].trackingInfo.number | ||
| extraData.TrackingLinkHTML | Order.fulfillments?[0].trackingInfo.url | ||
| extraData.ShippingMethod | Order.shippingLine.code | ||
| extraData.ShippingAddressFirstName | Order.shippingAddress.firstName | ||
| extraData.ShippingAddressLastName | Order.shippingAddress.lastName | ||
| extraData.ShippingAddressStreet | Order.shippingAddress.address1 + Order.shippingAddress.address2 | ||
| extraData.ShippingAddressZipCode | Order.shippingAddress.zip | ||
| extraData.ShippingAddressCity | Order.shippingAddress.city | ||
| extraData.ShippingAddressCountry | Order.shippingAddress.countryCodeV2 | ||
| extraData.ShippingAddressPhone | Order.shippingAddress.phone | ||
| extraData.ShippingAddressEmail | Order.email | ||
| extraData.PaymentMethod | Order.paymentGatewayNames.join(’,‘) | ||
| extraData.BillingAddressFirstName | Order.billingAddress.firstName | ||
| extraData.BillingAddressLastName | Order.billingAddress.lastName | ||
| extraData.BillingAddressStreet | Order.billingAddress.address1 + Order.billingAddress.address2 | ||
| extraData.BillingAddressZipCode | Order.billingAddress.zip | ||
| extraData.BillingAddressCity | Order.billingAddress.city | ||
| extraData.BillingAddressCountry | Order.billingAddress.countryCodeV2 | ||
| extraData.BillingAddressPhone | Order.billingAddress.phone | ||
| extraData.BillingAddressEmail | Order.email | ||
| items[] | Order.lineItems[LineItem.refundableQuantity > 0] | Order.refunds[].refundLineItems[] | |
| items[].type | ”purchase" | "return” | |
| items[].sku | Order.lineItems[].sku | Order.refunds[].refundLineItems[].sku | |
| items[].quantity | Order.lineItems[].refundableQuantity | Order.refunds[].refundLineItems[].quantity | |
| items[].grossPaidPrice | Order.lineItems[].discountedTotalPriceSet.shopMoney.amount | Order.refunds[].refundLineItems[].priceSet.shopMoney.amount | |
| items[].taxAmount | sum(Order.lineItems[].taxLines[].priceSet.shopMoney.amount) | Order.refunds[].refundLineItems[].totalTaxAmount.shopMoney.amount | |
| items[].description | Order.lineItems[].name | ||
| items[].imageUrl | Order.lineItems[].image.src | ||
| items[].discounts[].type | Order.lineItems[].discountAllocations[].discountApplication | See *B1 | |
| items[].discounts[].description | Order.lineItems[].discountAllocations[].discountApplication | See *B2 | |
| items[].discounts[].value | Order.lineItems[].discountAllocations[].allocatedAmountSet.shopMoney.amount |
*B1 - Discount type mapping
| DiscountApplication type | Engage discount type |
|---|---|
| AutomaticDiscountApplication | 235 |
| DiscountCodeApplication | 235 |
| ManualDiscountApplication | 235 |
| ScriptDiscountApplication | 235 |
*B2 - Discount description mapping
| DiscountApplication type | Engage discount description |
|---|---|
| AutomaticDiscountApplication | Automatic discount: \${AutomaticDiscountApplication.code} |
| DiscountCodeApplication | Discount code: \${DiscountCodeApplication.code} |
| ManualDiscountApplication | Manual discount: \${ManualDiscountApplication.description} |
| ScriptDiscountApplication | Script discount: \${ScriptDiscountApplication.title} |
*B3 - Order status mapping
| Condition | Value |
|---|---|
| Order.refunds | ”REFUNDED” |
| Order.fulfillments | ”FULFILLED” |
| Order.partialFulfillments | ”PARTIALLY_FULFILLED” |
| Order.cancellations | ”CANCELLED” |
| Otherwise | ”CONFIRMED” |
*B4 - Order payment status mapping
| Condition | Value |
|---|---|
| Order.fullyPaid | ”PAID” |
| Order.unpaid | ”UNPAID” |
| Otherwise | ”PARTIALLY_PAID” |