Shopify + Dotdigital
Everything you need to connect Shopify and Dotdigital: how to connect, which data moves, which settings there are and what to do when something goes wrong.
- 1 data flow
- Connect in about 15 minutes
1. Getting started
Prepare both systems first, then connect them in Junipeer.
- about 10 minutes
Prepare Shopify
- Find the MyShopify domain
- Enable app development
- Create the Junipeer app
- Add the required scopes
- Release and install the app
- Copy the credentials
- about 5 minutes
Prepare Dotdigital
- Open API users in Dotdigital
- Create a new API user
- Leave the generated username unchanged
- Set the password and enable the user
- Save and copy the credentials
- Paste the credentials into Junipeer
Connect and test
Enter the details in Junipeer, switch on the flows you need and test with one order before you go live.
Getting started with Junipeer
2. How the data flows
What Junipeer can move between the two systems. The arrow shows which way the data goes.
- Customers
3. Settings
The settings you see in Junipeer, in plain words. Open one to read more. The key is the technical name.
In Junipeer every setting has a ? that opens the same explanation next to the form, right when you need it. With the Junipeer MCP your AI assistant can also propose the settings from your own data.
How the Junipeer MCP worksSettings for Shopify (40)
| Setting | What it controls | Key |
|---|---|---|
| Disable new products in Shopify | This is a safeguarding feature for the newly imported articles to be labeled as "drafts" that await manual deployment. | shopify_disable_new_products |
| Admin API Access Token | An optional way to connect your Shopify store without the connect button. | shopify_api_key |
| Api Key | Enter the API key for Qliro. | sh_qliro_api_key |
| Api Secret | Enter the API secret for Qliro. | sh_qliro_api_secret |
| Client ID | Only needed if you want Junipeer to connect through your own Shopify app instead of Junipeer's. | shopify_client_id |
| Client Secret | Only needed if you want Junipeer to connect through your own Shopify app instead of Junipeer's. | shopify_client_secret |
| Default Shopify Warehouse | Choose the Shopify location that should receive stock when no specific Shopify location is selected. | shopify_default_location |
| Enable Multiple locations in Shopify | Turn this on if you want to manage stock separately for different Shopify locations, warehouses, shops, or stock areas. | shopify_multiple_locations |
Show all 40 settings
| Setting | What it controls | Key |
|---|---|---|
| Export order item locations | Send information about which location (warehouse) each order row is allocated to in Shopify. | shopify_order_export_item_locations |
| Fields to update | If you update existing products in Shopify, choose which product fields may be updated. | shopify_fields_to_update |
| Fulfill full deliveries by order quantity based on the SKU prefix | Decide whether a shipment that covers the whole order should fulfill all remaining items on the order in Shopify. | shopify_fulfill_full_delivery_by_order_qty |
| Import products | When handling the product data from the external service to Shopify, we can either: Create a new product entity if we don't find a match Ignore new products if we don't find a match | shopify_create_articles |
| Manual Payment Gateways | When Junipeer marks an order as paid in Shopify, it normally captures the payment. | shopify_manual_gateways |
| Map Locations (Warehouses) | Decide which Shopify location (warehouse) should get the stock from each warehouse in the other system. | shopify_map_locations |
| Map Order Statuses/Actions | Decide what should happen to the order in Shopify when the order gets a certain status in the other system (for example Fortnox). | shopify_map_order_statuses |
| Map Shopify variant metafields | Send extra product information (custom data) to Shopify variant metafields. | shopify_article_attributes_mapping |
| Map Shopify variant options | New articles (variants) in our Shopify connector will always create a parent and one variant. | shopify_article_options_mapping |
| Merchant ID | Enter your Svea Merchant ID. | svea_merchant_id |
| Order exclusion date | When an integration goes live, both connected systems already contain historical data — orders from before Junipeer entered the picture. | stdintegration_filter_shopify_order_created_date |
| Prices include VAT | Tell Junipeer whether the product prices you have entered in Shopify include VAT . | shopify_price_incl_vat_prodexp |
| Secret | Enter your Svea secret word. | svea_secret_key |
| Set Company External ID | Turning this on is a general recommendation for the B2B business model. | shopify_company_external_id |
| Shopify (API) Url | Enter the address Junipeer uses to connect to your Shopify store. | shopify_api_url |
| Shopify Currency | Choose the currency your Shopify store uses. | shopify_default_currency |
| Shopify Delivery Date attribute | If your customers choose a delivery date at checkout, Shopify stores it as a note attribute on the order. | shopify_order_delivery_date_attribute |
| Shopify Delivery Date format | Use this setting to tell the system how delivery dates are written in Shopify. | shopify_order_delivery_date_format |
| Shopify External ID Metafield | Needed when several articles in the other system are variants of the same product , for example sizes or colours of one T-shirt, and should be grouped under one product in Shopify. | shopify_external_id_metafield |
| Shopify Order Statuses | Choose which status an order must have in Shopify before it is sent to the other system. | shopify_order_statuses_to_export |
| Shopify Plan | Tell Junipeer which Shopify plan your shop is on. | shopify_plan |
| Shopify Url | Enter your Shopify store address, for example example.myshopify.com . | svea_shopify_url |
| Track inventory item | Decide whether new products that Junipeer creates in Shopify should have inventory tracking turned on. | shopify_mark_inventory_item_tracked |
| Translate order row product names | Show product names on the order rows in the customer's language instead of your shop's default language. | shopify_order_translate_line_names |
| Update customers? | Decide what happens when a customer that is sent to Shopify already exists there. | shopify_update_customers |
| Updating product | When handling the product data from the external service to Shopify, we can either: Override product data if we find a match Ignore the product data if we find a match | shopify_update_articles |
| Use GraphQL instead of REST API | Choose which of Shopify's two APIs Junipeer uses to talk to your shop. | shopify_api_graphql |
| Use Location Admin Email | Choose which e-mail address is used as the company e-mail when Shopify locations are exported as companies. | shopify_use_location_admin_email |
| Use name (instead of order_number) property as Order Number | Choose which Shopify order number is sent to the other system. | shopify_order_use_name_as_order_number |
| Use on-hand quantity when exporting stock | Turn this on if Shopify should be updated using the on-hand stock quantity instead of the available stock quantity. | shopify_use_on_hand_stock_quantity |
| Use presentment currency (money) | Choose which currency the order amounts are sent in. | shopify_order_use_presentment_money |
| Vat percentage | Some systems need a VAT rate when a new product is created there. | shopify_vat_percentage_prodexp |
Settings for Dotdigital (13)
| Setting | What it controls | Key |
|---|---|---|
| Consent Attribute Fallback | Choose what happens when the customer attribute doesn't contain consent information . | dotdigital_consent_from_attribute_fallback |
| Consent Attribute Field | Enter the name of the customer attribute that holds the consent text. | dotdigital_consent_from_attribute_field |
| Consent Text | Enter the consent text that is attached to a contact when it is created or updated in Dotdigital. | dotdigital_consent_text |
| Consent URL | Enter the web address (URL) where the customer gave their consent. | dotdigital_consent_url |
| Consent from Customer Attribute | Read the consent text from a customer attribute instead of using the fixed Consent Text . | dotdigital_consent_from_attribute_enabled |
| Contact Identifier | Choose how contacts are identified in Dotdigital. | dotdigital_contact_identifier |
| Default Contact List | Choose a Dotdigital list that contacts are added to by default. | dotdigital_default_list |
| List Attribute Fallback | Choose what happens when the customer attribute doesn't contain a list ID . | dotdigital_list_from_attribute_fallback |
Show all 13 settings
| Setting | What it controls | Key |
|---|---|---|
| List Attribute Field | Enter the name of the customer attribute that holds the Dotdigital list ID(s). | dotdigital_list_from_attribute_field |
| List from Customer Attribute | Read Dotdigital list IDs from a customer attribute , instead of (or in addition to) the list settings. | dotdigital_list_from_attribute_enabled |
| Map Country to Contact List | Add contacts to a specific Dotdigital list based on their billing country . | dotdigital_list_by_country |
| Map Customer Attributes to Data Fields (Store) | Write customer attributes to Dotdigital data fields when contacts are saved. | dotdigital_map_attributes_store |
| Map Customer Fields to Data Fields (Store) | Choose which customer fields are written to Dotdigital data fields when contacts are saved. | dotdigital_map_data_fields_store |
4. Troubleshooting
Choose what you see. Each case shows the cause and the solution.
HighCredentials stopped working
- if someone uninstalled the app from the Shopify admin, the credentials become invalid. Reinstall the app and use the new credentials.
See symptoms and resolution for details.
if someone uninstalled the app from the Shopify admin, the credentials become invalid. Reinstall the app and use the new credentials.
MediumFor troubleshooting common errors, see the Error Codes page or your connector pa
For troubleshooting common errors, see the Error Codes page or your connector pair's troubleshooting section.
Refer to the platform setup guide for resolution steps.
MediumCannot find the Developer Dashboard
- make sure you are accessing Shopify as a user with app development permissions. The Develop Apps option may not be visible to staff accounts without the right access level.
See symptoms and resolution for details.
make sure you are accessing Shopify as a user with app development permissions. The Develop Apps option may not be visible to staff accounts without the right access level.
Medium"Insufficient permissions" errors
- one or more API scopes are missing. Go back to the app in the Developer Dashboard, verify all scopes are present, release a new version, and reinstall.
See symptoms and resolution for details.
one or more API scopes are missing. Go back to the app in the Developer Dashboard, verify all scopes are present, release a new version, and reinstall.
5. More guides
Did this page help you?
