1: When webhook is disabled

A) Contact does not already exist in Engage
A) Contact does not already exist in Engage
When:
- A customer does not exist in Engage
- And they place an order in Shopify
- A contact will be automatically created in Engage
- The
acceptsEmailvalue will be set to the marketing preference value in the Shopify order
B) Contact exists in Engage with acceptsEmail = false
B) Contact exists in Engage with acceptsEmail = false
When:
- A customer with marketing preference of “true” places an order in Shopify
- And they already exists in Engage with
acceptsEmail= “false”
- The
acceptsEmailvalue will be updated to “true” in Engage
C) Contact exists in Engage with acceptsEmail = true
C) Contact exists in Engage with acceptsEmail = true
When:
- A customer with marketing preference of “false” places an order in Shopify
- And they already exists in Engage with
acceptsEmail= “true”
- The
acceptsEmailfield is omitted in the update payload - The value in Engage remains “true” (meaning that no downgrade occurs)
2: When webhook is enabled

- We listen to all email marketing preference updates
- Changes are synchronized more dynamically between systems
- Preference updates can override existing values depending on the event type
A) Contact already in Engage when Shopify account is created
A) Contact already in Engage when Shopify account is created
When:
- The customer creates a new Shopify account with email marketing preference set to “false”
- A contact already exists in Engage, having been created via another system, with
acceptsEmail= “true”
- We omit the
acceptsEmailfield when updating the contact in Engage - This means the
acceptsEmailvalue will remain “true”
acceptsEmail during contact creation when marketing preference is “false”.B) Contact exists in both systems with different preferences
B) Contact exists in both systems with different preferences
When:
- In Shopify the marketing preference is “false”
- In Engage the
acceptsEmailvalue is “true” - The customer updates billing information in Shopify
- The update payload from Shopify will includes the marketing preference value (“false”)
- This will override the value in Engage so that
acceptsEmailwill now be “false”
Important exception
We always override anacceptsEmail value of “true” in Engage except when we receive the customer create webhook from Shopify with an email marketing preference value of “false” in the payload.
In other words, a marketing preference value of “false” at customer creation will not downgrade an existing “true” value of acceptsEmail in Engage.
Pre-selected opt-in setting
Voyado does not recommend enabling support for pre-selected opt-in in the Shopify app setup (or relying on Shopify’s pre-selected opt-in behavior).
Key recommendations
During onboarding, it is essential to:- Audit and align all email marketing preferences between systems
- Decide whether the webhook should be enabled based on the desired source of truth
- Clearly define whether Shopify or Engage should control opt-in logic going forward