Integration
Shopify Native Overview
Customer Experience
Localized Journey
The customer country is automatically detected using Shopify's geolocation detection.
3-Steps Checkout
Product Restrictions
When browsing products that are restricted for the customer country, Shopify shows a notification both on the product page and in the cart page, as shown in the following example.
Integration
Shopify Admin - Order Details
✓ Order created as per customer transaction ✓ Custom properties: Global-e order id ✓ “Global-e Carrier Service” shipping source with the actual shipper ✓ Global-e payment gateway ✓ Fraud approval order tag ✓ End-customer billing and shipping |
Integration Overview: With Global-e
Native Product State
Available on Shopify Advanced and Plus plans
Out-of-stock refunds are available from the Global-e Web Portal with recalculation of Duties & Taxes
Returned products refunds done from Shopify include product tax paid by the customer - Using Global-e Web Portal allows prepaid labels with the cost deducted from the refund
Refund an order using a gift card on Shopify Plus only
Support of multi-region fulfilment currently pending Shopify support
Ship to Shop and Collection Points
Flash Sales
Raffles
Dangerous Goods
Integration Details
General Steps
Install both Global-e Apps
CrossBorder App
Payment App
Set up Alternative Payment Methods: Enable Shopify Payments
Scripts tags and theme includes (e.g. checkout) are automatically added. Only applies to checkout for headless setups
A Sandbox is required for the pilot to prepare the rollout
Fraud approval for export from Shopify to be fulfilled based on order tag, not “PAID” status
Downstream Flow Behind Shopify
OMS/ERP Data Flow
Shopify Order Value
Order Flow Adjustments
Item | Requirements |
---|---|
Order export from Shopify | Fraud approval order tag “Globale::Approved” |
Order identification – Finance | Shopify Order payment gateway "Global-e Payments" |
Order identification – Shipping | Shopify Order shipping_lines
|
Order Processing - Shipping |
|
Disable OMS updates to Shopify |
|
Update Product Details from Shopify to Global-e
This section described the Global-e flow for updating product details from Shopify to Global-e.
To update product details from Shopify to Global-e:
Each time a product is added or updated in Shopify, Global-e gets the
ProductUpdated
webhook from Shopify.Global-e writes the message to Kafka.
A Global-e service reads the message from Kafka.
Kafka calls the following Shopify APIs:
GraphGetInventoryItems
GetProductService
For each variant, Global-e creates a product based on Webhook Data (
apiProduct
).After validation, the Global-e service calls the internal Global-e API
SaveProductListAPI
(updatedProducts
is the list of variants that was just created).
Shopify-to-Global-e Field Mapping
When performing an update, Global-e reviews the following fields. This process applies to all products.
Shopify Field | GE System Field | Description |
---|---|---|
Title | Name | The name of the product. |
BodyHtml (HTML removed) | Description | Product description in plain text. |
Variant ID | ProductCode | Unique identifier for each product variant. |
Variant SKU or Variant Barcode | ProductCodeSecondary | Secondary identifier, often the SKU or Barcode, depending on the configuration on the Global-e side. |
Product ID | ProductGroupCode | Identifier for the product group. |
Variant Price | OriginalSalePrice | The sale price of the product. |
Variant CompareAtPrice | OriginalListPrice | The original list price of the product. |
Product Images | ImageURL | URL of the product's primary image. |
https://{AdminDomain}/products/{Product Handle}?variant={Variant ID} | URL | URL to the product page in your Shopify store. |
Tags | Categories, ProductClassCode | Product categorization based on tags. |
InventoryItem CountryCodeOfOrigin | OriginCountryCode | The country of origin of the product. |
InventoryItem RequiresShipping | IsVirtual | Determines if the product is a virtual good. |
InventoryItem HarmonizedSystemCode | GenericHSCode | Harmonized System Code for international shipping. |
Options | Attributes | The product attribute. The product can have up to three attributes, for example, size + colour + material. |
Title | productNameEnglish | When using translation, the Shopify title is translated to productNameEnglish. |
BodyHtml (HTML removed) | productDescriptionEnglish | When using translation, the Shopify Product Description is translated to productDescriptionEnglish |
Tags | IsBlockedForGlobalE | Global-e has blocked the product based on Global-e's MAS internal parameter and Shopify tags. |
Quick Start Integration Steps
Global-e creates an account for the merchant in the Global-e system.
Global-e requests user access and permissions to the merchant's site.
The merchant installs the Global-e CrossBorder application.
The merchant installs the Global-e Payment application.
Optional: The merchant installs the required 3rd party applications (geolocation, search, analytics, and more).
The merchant performs the required website adjustments (country selector, geolocation, and more).
The merchant and Global-e gradually enable Global-e countries, first by validating the functionality of a few operated countries, and then adding the remaining countries.
Additional Integration Features
Analytics
Use the Shopify checkout object to map Shopify data to any Analytics party.
Example of GA4 Mapping
Shopify Native | Google Analytics 4 | Description |
---|---|---|
| Item_id | Product SKU |
| Item_name | Product name |
| Currency | Local currency |
| Price | Product price in local currency. You must add the logic to deduct discounts from the product price. |
| Quantity | Product quantity |
| transaction_id | Order ID |
| Value | Order value (excluding shipping and tax) in local currency. |
| Tax | The customer paid the tax in local currency. |
| Shipping | The customer paid the shipping cost in local currency. |
Shopping / Marketing Feeds (Liquid Storefronts)
Domestic Feeds
To prevent price mismatches between the feed and the prices appearing on the storefront due to automatic geo-IP detection and redirection features, you must update the product links in their domestic feeds.
We recommend that you update your domestic product links to include a country parameter to prevent Google feed violations.
Example: For a US merchant: https://www.mystore.com/products/red-shirt?country=US
Failure to do this may result in warnings from Google, after which they will prevent your from submitting marketing feeds.
International feeds
There are 3 main methods you can use to generate an international Marketing feed:
Using supported Shopify apps (recommended).
Manually generating the feed yourself by writing a custom script or program, or creating an Excel sheet.
Using a 3rd party service such as Feedonomics or Channel Advisor.
Supported Shopify apps
The following apps are compatible with Shopify Markets' multi-currency features:
Pricing in the feed
International prices in marketing feeds must be retrieved from the Shopify platform to ensure they are correct.
Due to the complexity of doing this via the APIs, most merchants use a compatible app, which can easily generate the feeds with the correct localized prices.
Alternatively, if you are using a 3rd party vendor such as Feedonomics, they will handle this for you.
Shopify Markets API for product price retrieval:
Retrieving Prices Manually
To generate your own marketing feed you need to generate the prices manually in one of the following ways:
Get the price data via Shopify Product Feeds feature. This is likely the most efficient method to retrieve all product pricing data.
For more information see Developer Changelog, Product Feeds, and Unidirectional Product Synchronization
Get the price data via Shopify storefront API.
For more information see Query Product Prices.
Get the price data via Shopify Admin API.
Option 1:
Step 1: Get the price ID for each market. For example, CA Price, AU Price etc. See Pricelists API.
Step 2: Get the localized price for each product, using the price IDs. See Pricelist API
Option 2: use the
contextualPricing
request to retrieve the price for each variant and country combination. For example, replacingProductVariant
and country with each request:{ productVariant(id:"gid://shopify/ProductVariant/39999460245576") { id product{id} contextualPricing(context:{country:CA}) { price{amount, currencyCode} compareAtPrice{amount, currencyCode} } } }
Note
These queries can be set up as bulk operations which do not count against rate limits but may take significantly longer to complete.
Country and language considerations
If you have subfolders enabled, you can use the subfolders in your product URLs.
Example: https://mystore.com/en-ca/product/shoes
You can also use the country parameter, regardless of the subfolder settings. If you do have subfolders enabled, this link will redirect the customer to the appropriate subfolder.
Example: https://mystore.com/product/shoes?country=CA
You can use the subfolder and country parameter together, but this is redundant and not recommended.
Example: https://mystore.com/en-ca/product/shoes?country=CA
Note: If the countries do not match, the country parameter takes precedence.
If you have translations for a country’s default language, you can use subfolders to indicate that in the product URL.
Example: https://mystore.com/es-es/product/shoes
Timing
Merchants in PCE countries: You should generate your feeds at 5:00 AM UTC to ensure the daily FX price updates are completed. This configured time may shift to an hour earlier during daylight savings time.
Merchants in CBS countries: You should generate your feed at 1AM UTC to ensure the updated country FX rate is in Shopify.
Shipping rates
Shipping rates should be defined in the Google Merchant Center as "range-based" and should match the configurations in the flat shipping rates section in the Global-e admin.
If you do not have flat rates, discuss with your Customer service management about switching to flat rates.
Tax rates
Taxes are relevant to merchants shipping to the US with Global-e.
Global-e does not currently support building a specific tax rate per state into the product feeds. This needs to be managed independently. Information on setting up taxes can be found here.
Updating product links
The following methods enable you to update your product links to include the targeted international country by leveraging:
Shopify’s Deep Linking feature:
Include a country parameter in your product links (https://help.shopify.com/en/manual/markets/international-domains/directing-customers/deep-links)
Example: https://merchant_url/products/t-shirt?country=DE [Product page for Germany]
Shopify’s subfolder feature. This feature is required if you plan to use the Shopify translation features and requires additional configuration by Global-e.
Example:
https://merchant_url/en-de/collections/products/t-shirt [Product page for Germany]
https://merchant_url/en-ca/collections/products/t-shirt [Product page for Canada]
Note
For headless merchants: Any country-specific URL logic for your Shopping feeds must be implemented by your development team, as the above-documented methods only work for Liquid-based storefronts out of the box.
Fixed Prices
Fixed Prices via the Merchant Portal
Fixed Prices Overview
Fixed prices may be required if you have resellers or offline shops in specific countries or regions and wish to keep the same prices everywhere.
Global-e implements your fixed prices as defined, without converting them.
Manage Fixed Prices (Global‑e Merchant Portal)
You can manage local market prices on the Global-e Merchant Portal by uploading a file specifying fixed prices for the relevant products and territories.
To manage fixed prices:
From the Global‑e Merchant Portal, go to:
Merchants > Product Management > Fixed Prices Management
The Fixed Prices Management screen is displayed.
Download a Current Price List
If you previously configured a price list for the current site, you can download a CSV file with the current configuration of fixed prices for your current site (by default, this file is empty).
Set up a New Price List
The following procedure details the steps required to set up a new list of fixed prices and upload it to Global-e.
Step 1. Prepare your CSV File with your Price List
To set up your price list, you can use the template or prepare your own CSV file.
Using the Template
To prepare your CSV file using the Template:
From the fixed price management screen (see Manage Fixed Prices (Global‑e Merchant Portal)), click File Format Example to download the template.
The following figure shows an example of a downloadable template for fixed prices (CSV file):
This CSV template file provides the correct column header formatting, field descriptions and requirements, as well as examples (under the Examples tab).
Preparing your own CSV
To prepare your own CSV file:
In your CSV file, make sure to name the columns headers A through F, as shown below:
Field Descriptions and Requirements
Headers / Fields | Description |
---|---|
SKU | Enter the Product SKU as it appears in your product catalog. The SKU may not include spaces. If this field is empty, the |
Variant ID | Enter the Product Variant ID, as assigned in your product catalog. If this field is empty, the |
country_code | Enter the ISO-2 country code to indicate the country relevant to this price. For instance, DE (Germany), US (USA). If this field is empty, the |
currency_code | Enter the 3-char currency code (ISO-4271) to indicate the currency relevant for this change. For instance, USD (US dollar), AUD (Australian dollar), EUR (Euro), CHF (Swiss franc), and more. If this field is empty, the |
price | Enter a fixed price value for the product. This value can only contain numbers. CautionDo not include commas in the prices you list in the CSV file as the prices will not parse correctly. Keep empty to remove a previously set fixed price without setting a new one. In this case, the dynamic price conversion rules set for the current country apply. |
compare_at_price | Enter fixed price value of the product before discount. This value can only contain numbers. CautionDo not include commas in the prices you list in the CSV file as the prices will not parse correctly. Keep empty to remove a previously set fixed price without setting a new one. In this case, the dynamic price conversion rules set for the current country apply. |
Step 2. Populate your CSV File
Note
When enabling editing in your CSV file, your security settings may change the CSV file format to Excel. Make sure to save your file back to CSV before uploading it to Global-e.
To populate your CSV file:
Add your list of products, one product per row with the relevant information in the relevant column, according to the Field Descriptions and Requirements detailed in Step 1. Prepare your CSV File with your Price List.
To ensure optimal accuracy, make sure to use the following values when populating fixed price data in your CSV file.
Caution
Do not include commas in the prices you list in the CSV file as the prices will not parse correctly.
Price per country and currency:
Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: {{sku}},{{variant_id}},DE,EUR,6,6
OR (based on
variant_id
):Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: ,{{variant_id}},DE,EUR,6,6
Price per currency (affects all countries with the same currency):
Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: {{sku}},{{variant_id}},,EUR,6,6
OR (based on
variant_id
):Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: ,{{variant_id}},,EUR,6,6
When done, make sure to save your file as CSV.
Step 3. Upload your Price List to the Global-e Merchant Portal
When your CSV file is ready, upload it to the Global-e System.
To upload your Price List file in CSV format:
In the Fixed Price Management screen, click Browse to retrieve your CSV file, then select it.
Click Upload.
The file is added to a table that displays the status of the upload along with the file name, upload date, User email, and links to the uploaded files.
File Upload Status
Track the progress of the file you are uploading by viewing the percentage of completion next to the upload status.
Fixed Price Notifications
Global‑e sends you a notification email when you upload a Fixed Priced List and a follow-up email when the upload is completed.
To add email addresses for receiving notifications:
In the email text box, type in the desired email address.
Click on the Plus sign to save the email address.
On the left of the text box, click the arrows to view all the saved email addresses.
To delete an email address click on the X beside it.
In the User column of the table are listed the email addresses for the Users who will receive email notifications.
Completed Files
After a file is uploaded and processed, the status in the table changes to Completed.
This applies to both valid and invalid files.
Valid File: If your file is valid (formatted and populated correctly), it has the status of Completed with a green check mark. The Download column also includes a link to the uploaded file. This means that Global‑e has successfully updated all the fixed prices.
Invalid file: When Global‑e is unable to update all of the prices due to errors in the file, the status in the table is shown as Completed alongside a yellow shield icon.
The Download column includes two files, the original file and a file detailing the errors.
Review the error file and correct the issues in the original file. Also, ensure that the file is formatted correctly and saved in CSV format.
After the original file is corrected it can be uploaded again.
Common Errors When Uploading the CSV File
The following lists some of the common errors you may encounter when uploading your CSV file. (You will generally receive an email notification with the error).
Error | Fix |
---|---|
The line is missing the Country or Currency - or Prices are Empty | If the country or currency or prices are empty, the entire CSV file fails. Make sure the file contains the correct information. |
Product Code or Secondary Product Code is not unique | Make sure to use unique names for the Product Code and Secondary Product Code. - If the file contains an - If the file contains both, an - We recommend uploading a file with either the - It is best to use |
The file contains a | Make sure that the (Make sure you have uploaded the product to Shopify before uploading the CSV file to Global-e). |
The file contains both a | Make sure that the SKU exists in Shopify before uploading the CSV file to Global-e. (Make sure you have uploaded the product to Shopify before uploading the CSV file to Global-e). |
The file is not in CSV format | Make sure to save your file in CSV format. |
Wrong header | Make sure the header is set as follows: |
Spaces in the data | Make sure that the data and header in the file does not contain spaces. |
Modify your Price List
To modify your price list:
On the Fixed Price Management screen, click the CSV file with the current configuration to download your price list for the current site.
Edit the content as needed (according to the requirements) and make sure to save your file as CSV. See Step 2. Populate your CSV File .
Upload your modified file. See Step 3. Upload your Price List to the Global-e Merchant Portal.
Caution
Do not include commas in the prices you list in the CSV file as the prices will not parse correctly.
Search for Files
You can search for particular files by filtering the dates in the calendars above the table.
Fixed Prices Upload via API
The Upload Fixed Prices API lets you upload your list of fixed prices to Global-e. In addition, you can check the upload status and retrieve the error file.
Prerequisites
Prepare your CSV file containing your list of fixed prices and populate it.
Each column in your CSV file must have the following headers, respectively:
SKU, variant_id, country-code, price, compare_at_price.
Variant_id
Country-code
Price
Compare_at_price
Do not use commas as part of the values in the following fields: price and compare-at-price
For more information, see Set Up a New Price List.
Authentication: MerchantGUID
To implement API calls with Global-e the only required information is the merchantGUID
provided by Global-e.
For authentication, make sure to include your Merchant GUID as part of each call or as part of the header so that Global-e can verify your identity. Make sure to use the appropriate merchantGUID, depending on the Global‑e integration environment used for development or production purposes. See Global-e Environments.
MerchantGUID in URL
Add your MerchantGUID as part of each API URL.
MerchantGUID as part of the header
Add your MerchantGUID as part of the header as illustrated below.
curl --location 'https://[globale domain]/[API]' \ --header 'MerchantGUID: D2ED2A7F-F6ED-4CCB-B611-B44AC8D02250' \ --header 'Content-Type: application/json' \ --data-raw '
Flow
Call the UploadFile endpoint to upload your Fixed Prices CSV file to Global-e.
Call the GetUploadedFileDetails to get the details of the file you uploaded and verify the Upload status.
Call GetFileWithValidationErrors to retrieve the file containing the errors.
If previously configured, you can retrieve your configuration file, modify your price list, and re-upload it. However, note that the prices (data) are overwritten and a new RunId
(Global-e ID) is created.
UploadFile
Upload your Fixed Price CSV File to Global-e.
PATH: https://<domain address>/PCE/UploadFile?merchantGUID=<Merchant GUID>
TYPE: POST
BODY:
<Fixed Price CSV File>
(from data)
RESPONSE:
200 OK: { RunId ": " b2b477e7 - 9e0e-4b07 - be89 - 2b9122788d6b " }
ERRORS:
HTTP Status Code | Message | Description |
---|---|---|
| { "Message": "CSV file contains rows with invalid data. Make sure the file has the correct format and contains the correct information.", "Errors": [ ",43416058200314,,PLN,201,201,400", ",43416058200314,FR,EUR,301,401,400" ] } | This file has the wrong column format and/or values. Check the rows that returned the error. |
| "Only one file should be uploaded. Make sure to upload only one file." | This endpoint expects only one file per request. |
| "The uploaded file is empty and cannot be processed. Make sure to populate the file correctly." | The file is empty or did not load correctly. |
| "The format of the uploaded file is incorrect. Please upload a CSV file. Make sure to save your file to .csv format." | The uploaded file had the wrong extension. |
| "Failed to upload the file. Please contact Support." | This is an internal error. If it appears, please contact Support. |
CUrl EXAMPLE:
curl--location--request POST 'https://<domain>.com/PCE/UploadFile?merchantGUID=<Guid>' \ --form '=@"/<Full Path Name>.csv"'
GetUploadedFileDetails
This endpoint returns the details of the uploaded file, including the upload completion status.
TYPE: GET
RESPONSE:
200 OK: { "RunId": "84f9929c-1ea1-4edd-bc56-c4ef73a92e88", "FileName": "[Ecommerce_Platform_Name]_QA_Artem_01.08.2023_06_all_valid.csv", "DateCreated": "2023-08-11T10:04:57.462022+00:00", "Status": "Completed", "HasErrors": false, "CompletionPercentage": 100 }
PARAMETERS:
Parameter | Type | Description |
---|---|---|
| string | The Global-e file Id Sample UID format: |
| string | The file name given by the merchant in CSV format |
| string | The file upload date. |
| string | Statuses:
|
| bool | Whether the file upload has errors. |
| Integer | Shows the progress of the file upload completion in per cent. Note: The integer value is a number without the per cent symbol. Example: "CompletionPercentage": 100 |
ERRORS:
HTTP Status Code | Message | Description |
---|---|---|
| "Cannot find the information for the current runId!" | The application cannot find the upload with this This can happen if the file did not upload correctly, the Verify that your file has uploaded correctly and returns a valid |
| "Failed to get the uploaded file’s {runId} for PCE.” | Unexpected internal error during file upload. Please contact Support. PCE: Price Calculation Engine |
GetFileWithValidationErrors
This endpoint always returns a CSV file with the headers. If there are errors, the file contains the rows where errors were identified.
TYPE: GET
RESPONSE:
200 OK: File (application/octet-stream)
ERRORS:
HTTP Status Code | Message | Description |
---|---|---|
| "Cannot find the information for the current runId!" | The application cannot find the upload with this This can happen if the file did not upload correctly, the Verify that your file has uploaded correctly and returns a valid |
| "Failed to get the validated file containing the rows with errors for PCE." | Unexpected internal error during file upload. Please contact Support. PCE: Price Calculation Engine |
Set up a New Price List
The following procedure details the steps required to set up a new list of fixed prices and upload it to Global-e.
Step 1. Prepare your CSV File with your Price List
In your CSV file, make sure to name the columns headers A through F, as shown below:
Field Descriptions and Requirements
Headers / Fields | Description |
---|---|
SKU | Enter the Product SKU as it appears in your product catalog. The SKU may not include spaces. If this field is empty, the |
Variant ID | Enter the Product Variant ID, as assigned in your product catalog. If this field is empty, the |
country_code | Enter the ISO-2 country code to indicate the country relevant to this price. For instance, DE (Germany), US (USA). If this field is empty, the |
currency_code | Enter the 3-char currency code (ISO-4271) to indicate the currency relevant for this change. For instance, USD (US dollar), AUD (Australian dollar), EUR (Euro), CHF (Swiss franc), and more. If this field is empty, the |
price | Enter a fixed price value for the product. This value can only contain numbers. CautionDo not include commas in the prices you list in the CSV file as the prices will not parse correctly. Keep empty to remove a previously set fixed price without setting a new one. In this case, the dynamic price conversion rules set for the current country apply. |
compare_at_price | Enter fixed price value of the product before discount. This value can only contain numbers. CautionDo not include commas in the prices you list in the CSV file as the prices will not parse correctly. Keep empty to remove a previously set fixed price without setting a new one. In this case, the dynamic price conversion rules set for the current country apply. |
Step 2. Populate your CSV File
Note
When enabling editing in your CSV file, your security settings may change the CSV file format to Excel. Make sure to save your file back to CSV before uploading it to Global-e.
To populate your CSV file:
Add your list of products, one product per row with the relevant information in the relevant column, according to the Field Descriptions and Requirements detailed in Step 1. Prepare your CSV File with your Price List.
To ensure optimal accuracy, make sure to use the following values when populating fixed price data in your CSV file.
Caution
Do not include commas in the prices you list in the CSV file as the prices will not parse correctly.
Price per country and currency:
Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: {{sku}},{{variant_id}},DE,EUR,6,6
OR (based on
variant_id
):Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: ,{{variant_id}},DE,EUR,6,6
Price per currency (affects all countries with the same currency):
Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: {{sku}},{{variant_id}},,EUR,6,6
OR (based on
variant_id
):Header: sku,variant_id,country_code,currency_code,price,compare_at_price Value: ,{{variant_id}},,EUR,6,6
When done, make sure to save your file as CSV.
Multi-Hubs
Shipping from Multiple Countries using a Single Store
Overview
You can use more hubs in various countries alongside your primary hub. This approach enables faster delivery times to customers and cost reduction for the merchant (Shipping, D&T).
You can operate hubs from different Shopify stores, but this only allows a fixed setup (one hub per destination) and adds the overhead of managing multiple stores.
Multi Hub Models
The Global-e Multi-hub solution for Shopify allows brands to fulfil orders to Global‑e operated markets from different locations worldwide.
The following operational models are supported (depending on brand requirements).
Fixed model | Each warehouse serves only specific countries |
Fallback model | Order fulfilment is performed at the local/regional warehouse used to serve specific countries but when stock is not available, order fulfilment falls back to the main warehouse. |
Fully Dynamic model | Each warehouse can be used to fulfil orders to any country |
Note
Currently, the Shopify routing logic prioritises the location based on the distance between the hub and the customer shipping address. Therefore, currently, orders must ship in their entirety from a single location.
Key Considerations
The following
Operations
Countries to be served from each hub
Options available for outbound and inbound shipping
Technical
Order routing from checkout decision
Legal & Finance
The Merchant and Global-e both have a local entity or registration in the country
Goods are owned by the merchant at the point of sale to Global-e
Reconciliation and invoicing between the new contracting parties
Scenarios
Title | Description | Known issues / limitations |
---|---|---|
Multi storefronts with multi merchants | Separate GE merchants, each configured on separate site/store when the origin is identified user is redirected to relevant store to complete checkout Cart and order history typically not maintained between sites which makes it a poor solution or create additional effort |
|
Single merchant no split | Single merchant on one site with relevant checkout and billing rules loaded based on the cart hub country.
|
|
Prerequisites
Make sure you have the Shopify new order flow configured.
Provide the following information to Global-e:
Topic | Notes |
---|---|
Logistics map - origins and destinations | Countries with hubs/stores ship from:
Note that currently, Shopify does not support ship-to-store or pick-up API/Admin coverage or requirements from each new location (same usual rules regarding API / Full WYOL) |
Carriers | The list of carriers for outbound and returns logistics ( ! countries where we don’t have options, eg. Domestic US) |
Storefront architecture | See .... reference
Shopify context presentation on capabilities and requirements: GLBE ShopifyNative MultiHub.pptx |
Stock decision logic | Make sure to choose the country from which to ship the stock before checkout, except for locations within the EU. |
Settlement Currency | Full order multi-hub: For a single site, the reconciliation currency must be the same as your default Merchant currency. |
Legal/Commercial |
|
Integration Flow and Responsibilities
This section details the activities that the Merchant and Global-e need to perform to prepare the setup for the feature.
To prepare the setup for this feature:
The Merchant:
Sets up Shopify locations with product inventory in Shopify.
Sets up Shipping Profiles in Shopify.
Sets up Order Routing Rules in Shopify.
See Shopify Settings.
Global-e configures the feature for you on the Global-e side.
The Merchant and Global-e collaborate to align and address the financial and operational requirements.
Shopify Settings
Set up the Location of Each Hub
Create a location for each local hub.
Setup Locations (Settings → Locations)
Set up Product Availability in Each Location
Define the stock availability of each product or variant per location.
Products → For Each Product Variant
You can hide products from markets where there are no hubs available for fulfilmentfulfillment.
Set up Shipping Profiles
Assign the shipping profile to each location.
Define the markets to be fulfilled from the location
Rate set a ‘Global-e Carrier Service’ (the relevant shipping services are configured on the Global-e side)
Settings → Shipping and delivery
For fixed multi-hubs, set up each shipping origin only for the relevant destinations.
For dynamic multi-hubs, set up shipping origins for all destinations. (Prerequisite - Shopify order routing is enabled for the store)
Set up Order Routing Rules
Define the order routing logic for the different locations as configured in your Shopify store, based on the selected operation model (fixed, fallback, or fully dynamic).
Note that Global-e can request for this feature to be enabled if it is not already available in your store,
Settings → Shipping and delivery → Order routing
Note
Since this is still an Early access feature, it requires that Shopify adds it to the merchant store. Shopify documentation: https://help.shopify.com/en/manual/shipping/setting-up-and-managing-your-shipping/order-routing
Select Ship from the closest location OR Stay within the destination market
Set up Stock Availability for Each Hub
To make sure that the Shopify routing logic can decide based on the stock available in each hub, clear the option “Continue selling when out of stock”.
Make sure that all products have the same location settings in all shipping profiles.
Taxes and Duties
Global-e configures the taxes and duties for Merchants with domestic sales in the US or Canada.
Mapping Orders to 3rd Party Systems
Introduction
This guide provides instructions on how to import Global-e orders from Shopify to systems such as an OMS/ERP, WMS or middleware.
Key Shopify order data and high-level downstream order flow are illustrated for mapping purposes.
If you are currently running live Global-e’s previous Shopify integration and upgrading to the new version integrated natively into Shopify’s checkout, see Migrating Global-e to the Native App.
Downstream Data Flow from Shopify
Starting with the checkout, international prices, duties & taxes, and shipping methods are calculated by Global-e.
Order Creation
Orders are created by Shopify, per Shopify’s multi-currency concepts in two currencies:
Presentment money: this is the currency that the international customer sees on the storefront, cart, checkout, and transactional emails.
Shop money: this is the main currency of your Shopify store; this currency is also used for reporting and analytics.
Note
Shop money is what should be mapped downstream by your order management and accounting systems.
Fraud Check
Fraud check is managed by Global-e for international orders, as follows:
Initial order creation has the payment status PENDING and an order tag Globale::Pending.
Important
Do not submit any orders for fulfilment at this time and wait for Global-e to complete the fraud check.
When completed, the payment status gets updated to PAID and the order tag gets replaced with Globale::Approved.
You can now submit orders for fulfilment.
Note
For merchants who have configured Shopify to capture payment at fulfilment or manually, the "AUTHORISED" status assigned by Shopify at order validation will be updated automatically to "PAID" by Global-e after a few minutes.
WMS and Operations
For Global-e to generate international shipping labels and customs documents, the warehouse pick-pack process must reference the Shopify order name and Shopify SKU.
Alternatively, you can use the Shopify order number. EAN, barcode, and variant ID. Contact Global-e as an additional configuration may be needed in those cases.
See End-to-End Order Flow Interfaces for an illustration of end-to-end interfaces between Shopify, OMS/ERP, and WMS.
Shopify Order Data
For illustration, this Shopify store is from a US merchant and the storefront currency is based on USD. A single product was purchased.
Let’s examine two different order scenarios:
Duties & taxes paid by the customer – the checkout explicitly displays D&T-related line items.
Duties & taxes inclusive/baked in the product prices – the merchant subsidizes the D&T costs.
Duties & Taxes Paid by the Customer
Market: Israel. The customer pays separately for all the D&T-related costs, including the customs clearance fee (CCF) represented here in the Additional Fee field.
Note
The Additional Details section provides information; it is not required for data consumption. CalculatedDutySubsidy
represents the total order level subsidy in storefront currency. In this example, there is no subsidy for this order, hence the $0.
Subtotal
{"total_line_items_price_set":
{"shop_money":{"amount":"992.51","currency_code":"USD"},
"presentment_money":{"amount":"3650.00","currency_code":"ILS"}}}
Current Subtotal Price
"current_subtotal_price": "886.17", "current_subtotal_price_set": { "shop_money": { "amount": "886.17", "currency_code": "USD" },
Discount
{"current_total_discounts_set":
{"shop_money":{"amount":"99.25","currency_code":"USD"},
"presentment_money":{"amount":"365.00","currency_code":"ILS"}}}
Shipping
{"total_shipping_price_set":
{"shop_money":{"amount":"10.00","currency_code":"USD"},
"presentment_money":{"amount":"36.78","currency_code":"ILS"}}}
Duties
{"current_total_duties_set":
{"shop_money":{"amount":"0.00","currency_code":"USD"},
"presentment_money":{"amount":"0.00","currency_code":"ILS"}}}
Tax
{"current_total_tax_set":
{"shop money":{"amount":"172.33","currency_code":"USD"},
"presentment_money":{"amount":"633.74","currency_code":"ILS"}}}
Additional Fee
{"current_total_additional_fees_set":
{"shop_money":{"amount":"2.70","currency_code":"USD"},
"presentment_money":{"amount":"9.93","currency_code":"ILS"}}}
Total
{"current_total_price_set":
{"shop_money":{"amount":"1078.29","currency_code":"USD"},
"presentment_money":{"amount":"3965.45","currency_code":"ILS"}}}
Important
The Additional Fee set is a new Shopify data line available in Shopify’s API release version 2023-04. See https://shopify.dev/docs/api/admin-rest/2023-04/resources/order.
Duties & Taxes Included in the Product Price
Market: United Kingdom. Duties, taxes, and customs clearance fees are all-inclusive in the £500.00 product price in this example.
CalculatedDutySubsidy: 139.72 USD includes duties, VAT, and CCF.
Notice here that the D&T line items do not appear in the order details at all.
Subtotal
{"total_line_items_price_set":
{"shop_money":{"amount":"620.95","currency_code":"USD"},
"presentment_money":{"amount":"500.00","currency_code":"GBP"}}}
Discount
{"current_total_discounts_set":
{"shop_money":{"amount":"62.09","currency_code":"USD"},
"presentment_money":{"amount":"365.00","currency_code":"GBP"}}}
Shipping
{"total_shipping_price_set":
{"shop_money":{"amount":"12.42","currency_code":"USD"},
"presentment_money":{"amount":"15.00","currency_code":"GBP"}}}
Total
{"current_total_price_set":
{"shop_money":{"amount":"577.48","currency_code":"USD"},
"presentment_money":{"amount":"465.00","currency_code":"GBP"}}}
Conclusion
Duty, tax, and customs clearance fees (CCF) are all part of the overall duties and taxes calculation.
When a customer’s checkout displays duty & tax-related fees, these costs will appear as order line items.
Any subsidized costs, whether both duties and taxes or just duty or just taxes – will appear in the note attributes
CalculatedDutySubsidy
field.
Accounting Perspective
From a Shopify view, orders are created per customer B2C transaction with Global-e.
From an accounting perspective, orders should be treated as domestic B2B orders booked against a Global-e account.
You may book any order line items to calculate gross revenue, and of course, bear in mind that Global-e is responsible for handling remittance and filing of local VAT and other taxes in most scenarios.
For estimated net revenue, you can subtract the CalculatedDutySubsidy
field.
For actual revenue, refer to the Global-e financial reconciliation report.
Shipping Lines
When the Global-e CrossBorder app gets installed in Shopify, a shipping zone with Global-e operated countries is automatically added. The order shipping line data is standardized by Shopify and cannot be changed.
"shipping_lines": [{ "id": 4525092405308, "code": "EXPRESS_GLOBALE_DDP", "source": "Global‑e Carrier Service", "title": "Express Courier (Air)"
Field Description:
Source: fixed value
Global-e Carrier Service
Title: two possible values,
Express Courier (Air)
orStandard Courier
Standard Courier
Express Courier (Air)
Tracked Post
Standard Delivery
Virtual Goods
Express Courier
Untracked Post
Store Collection
Standard Post
Express Shipping
Standard Shipping
Collection Point
Tracked Standard
Express Plus
Premium Standard
Tracked Post to Pickup location
Code: multiple permutations, depending on the service type.
Important
The code always contains GLOBALE.
Notes:
For services in use for specific stores, contact a Project Manager.
When shipping from the US, note that only Express Courier (Air) and Standard Courier mappings are applicable.
Service Values:
Express service | 5 possible permutations:
|
Standard service | 5 possible permutations:
|
Tracked Post | 5 possible permutations:
|
Standard Delivery | 5 possible permutations:
|
Virtual Goods | 5 possible permutations:
|
Express Courier | 5 possible permutations:
|
Untracked Post | 5 possible permutations:
|
Store Collection | 5 possible permutations:
|
Standard Post | 5 possible permutations:
|
Express Shipping | 5 possible permutations:
|
Standard Shipping | 5 possible permutations:
|
Collection Point | 5 possible permutations:
|
Tracked Standard | 5 possible permutations:
|
Express Plus | 5 possible permutations:
|
Premium Standard | 5 possible permutations:
|
Tracked Post to Pickup location | 5 possible permutations:
|
Migrating Global-e to the Native App
If you are currently running live on the legacy version of the Global-e integration with Shopify, a.k.a the “hosted checkout”, you must migrate to the latest version where Global-e is natively integrated into Shopify’s checkout, as detailed in this section.
The key differences for the Shopify order data are as follows:
Order transaction is no longer per B2B transaction in a single currency; instead, it is per customer B2C transaction with presentment currency and shop currency.
The B2B VAT is no longer reflected in Shopify.
Order id - the Shopify order_name no longer starts with ‘GE’ (e.g., GE2034304US).
The Order name is now assigned by Shopify as done for domestic orders (e.g., #1234).
The Global-e order id is available, see .
Shipping lines/code is now standardized by Shopify as explained in the previous section.
Shipment confirmation emails no longer come from Global-e; instead, they are managed by Shopify and the merchant.
Fraud approval no changes to this flow. This flow is still relying on the payment status
pending
(before the fraud check) and a subsequent update topaid
status upon fraud approval with the addition of an order tagGlobale::Approved
.Payment gateway no longer shows
globale
; instead, it shows:Global-e Payment (INT)
when installing the Global-e payment method in production mode.Global-e Payments
when installing the Global-e payment method in test mode.
From the Additional Details Section in Order data
The Global-e order is still available in Shopify but not upon initial order creation and only as a note_attribute
, which is updated by the Global-e Shopify app a few seconds after post-order creation.
Example:
"order": { "id": 4525092405308, "name": "#1976", "note_attributes": [{ "name": "GEOrderId", "value": "GE10071428326US" }
Shopify Order JSON Example
Below is an example of an order JSON file. Alternatively, you can download this example from here.
{ "orders": [{ "id": 5288094433599, "admin_graphql_api_id": "gid://shopify/Order/5288094433599", "app_id": 580111, "browser_ip": "207.122.133.98", "buyer_accepts_marketing": false, "cancel_reason": null, "cancelled_at": null, "cart_token": "dca8943832f868ed5e6084c8f97a9d29", "checkout_id": 36643575464255, "checkout_token": "d9f4127c78947546efc15845cf0a0a0b", "client_details": { "accept_language": "en-GB,en-US;q=0.9,en;q=0.8", "browser_height": 802, "browser_ip": "207.122.133.98", "browser_width": 1688, "session_hash": null, "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36" }, "closed_at": null, "company": null, "confirmed": true, "contact_email": "[email protected]", "created_at": "2023-03-31T03:46:56-04:00", "currency": "USD", "current_subtotal_price": "886.17", "current_subtotal_price_set": { "shop_money": { "amount": "886.17", "currency_code": "USD" }, "presentment_money": { "amount": "493020.00", "currency_code": "CRC" } }, "current_total_additional_fees_set": { "shop_money": { "amount": "2.70", "currency_code": "USD" }, "presentment_money": { "amount": "1502.00", "currency_code": "CRC" } }, "current_total_discounts": "98.46", "current_total_discounts_set": { "shop_money": { "amount": "98.46", "currency_code": "USD" }, "presentment_money": { "amount": "54780.00", "currency_code": "CRC" } }, "current_total_duties_set": { "shop_money": { "amount": "125.84", "currency_code": "USD" }, "presentment_money": { "amount": "70012.00", "currency_code": "CRC" } }, "current_total_price": "1169.56", "current_total_price_set": { "shop_money": { "amount": "1169.56", "currency_code": "USD" }, "presentment_money": { "amount": "650685.00", "currency_code": "CRC" } }, "current_total_tax": "144.85", "current_total_tax_set": { "shop_money": { "amount": "144.85", "currency_code": "USD" }, "presentment_money": { "amount": "80587.00", "currency_code": "CRC" } }, "customer_locale": "en-CN", "device_id": null, "discount_codes": [{ "code": "STGDISCOUNTTEST", "amount": "98.46", "type": "percentage" } ], "email": "[email protected]", "estimated_taxes": false, "financial_status": "paid", "fulfillment_status": null, "landing_site": "/", "landing_site_ref": null, "location_id": null, "merchant_of_record_app_id": null, "name": "#TEST1057", "note": "", "note_attributes": [{ "name": "ftkn", "value": "9c73a8ad0f5c46e2bc74b295703f2ef3_1680248630954__UDF43_9ck" }, { "name": "GEOrderId", "value": "GE40705954US" }, { "name": "CalculatedDutiesSubsidy", "value": "0" }, { "name": "PaymentMethodName", "value": "PayPal" }, { "name": "InternationalOrderProductsForCustoms", "value": "{\"132522\":493020}" }, { "name": "DutiesPrePaid", "value": "True" } ], "number": 57, "order_number": 1057, "order_status_url": "https://demosite.myshopify.com/68893344063/orders/ 536686a3998499ce9916d052c5016ac3/ authenticate?key=68da9939c8b9dbed005fd7c26fef6ded", "original_total_additional_fees_set": { "shop_money": { "amount": "2.70", "currency_code": "USD" }, "presentment_money": { "amount": "1502.00", "currency_code": "CRC" } }, "original_total_duties_set": { "shop_money": { "amount": "125.84", "currency_code": "USD" }, "presentment_money": { "amount": "70012.00", "currency_code": "CRC" } }, "payment_gateway_names": [ "Global‑e Payment (INT)" ], "phone": null, "presentment_currency": "CRC", "processed_at": "2023-03-31T03:46:54-04:00", "reference": null, "referring_site": "", "source_identifier": null, "source_name": "web", "source_url": null, "subtotal_price": "886.17", "subtotal_price_set": { "shop_money": { "amount": "886.17", "currency_code": "USD" }, "presentment_money": { "amount": "493020.00", "currency_code": "CRC" } }, "tags": "Globale::Approved", "tax_lines": [{ "price": "144.85", "rate": 0.1611, "title": "GST", "price_set": { "shop_money": { "amount": "144.85", "currency_code": "USD" }, "presentment_money": { "amount": "80587.00", "currency_code": "CRC" } }, "channel_liable": false } ], "taxes_included": false, "test": false, "token": "536686a3998499ce9916d052c5016ac3", "total_discounts": "98.46", "total_discounts_set": { "shop_money": { "amount": "98.46", "currency_code": "USD" }, "presentment_money": { "amount": "54780.00", "currency_code": "CRC" } }, "total_line_items_price": "984.63", "total_line_items_price_set": { "shop_money": { "amount": "984.63", "currency_code": "USD" }, "presentment_money": { "amount": "547800.00", "currency_code": "CRC" } }, "total_outstanding": "0.00", "total_price": "1169.56", "total_price_set": { "shop_money": { "amount": "1169.56", "currency_code": "USD" }, "presentment_money": { "amount": "650685.00", "currency_code": "CRC" } }, "total_shipping_price_set": { "shop_money": { "amount": "10.00", "currency_code": "USD" }, "presentment_money": { "amount": "5564.00", "currency_code": "CRC" } }, "total_tax": "144.85", "total_tax_set": { "shop_money": { "amount": "144.85", "currency_code": "USD" }, "presentment_money": { "amount": "80587.00", "currency_code": "CRC" } }, "total_tip_received": "0.00", "total_weight": 0, "updated_at": "2023-03-31T03:47:56-04:00", "user_id": null, "billing_address": { "first_name": "Pura", "address1": "7 calle 40", "phone": "0000000000", "city": "San Jose", "zip": "10108", "province": "San José", "country": "Costa Rica", "last_name": "Vida", "address2": "", "company": null, "latitude": null, "longitude": null, "name": "Pura Vida", "country_code": "CR", "province_code": "CR-SJ" }, "customer": { "id": 6879453479231, "email": "[email protected]", "accepts_marketing": false, "created_at": "2023-03-31T03:41:33-04:00", "updated_at": "2023-03-31T03:46:56-04:00", "first_name": "Pura", "last_name": "Vida", "state": "disabled", "note": null, "verified_email": true, "multipass_identifier": null, "tax_exempt": false, "phone": null, "email_marketing_consent": { "state": "not_subscribed", "opt_in_level": "single_opt_in", "consent_updated_at": null }, "sms_marketing_consent": null, "tags": "", "currency": "CRC", "accepts_marketing_updated_at": "2023-03-31T03:41:33-04:00", "marketing_opt_in_level": null, "tax_exemptions": [], "admin_graphql_api_id": "gid://shopify/Customer/6879453479231", "default_address": { "id": 9118520377663, "customer_id": 6879453479231, "first_name": "Pura", "last_name": "Vida", "company": null, "address1": "7 calle 40", "address2": "", "city": "San Jose", "province": "San José", "country": "Costa Rica", "zip": "10108", "phone": "0000000000", "name": "Pura Vida", "province_code": "CR-SJ", "country_code": "CR", "country_name": "Costa Rica", "default": true } }, "discount_applications": [{ "target_type": "line_item", "type": "discount_code", "value": "10.0", "value_type": "percentage", "allocation_method": "across", "target_selection": "all", "code": "STGDISCOUNTTEST" } ], "fulfillments": [], "line_items": [{ "id": 13786226262335, "admin_graphql_api_id": "gid://shopify/LineItem/13786226262335", "fulfillable_quantity": 1, "fulfillment_service": "manual", "fulfillment_status": null, "gift_card": false, "grams": 0, "name": "Top - Jacket / S / Cotton Knit", "pre_tax_price": "886.17", "pre_tax_price_set": { "shop_money": { "amount": "886.17", "currency_code": "USD" }, "presentment_money": { "amount": "493020.00", "currency_code": "CRC" } }, "price": "984.63", "price_set": { "shop_money": { "amount": "984.63", "currency_code": "USD" }, "presentment_money": { "amount": "547800.00", "currency_code": "CRC" } }, "product_exists": true, "product_id": 8090466287935, "properties": [], "quantity": 1, "requires_shipping": true, "sku": "132522", "taxable": true, "title": "Albion Top", "total_discount": "0.00", "total_discount_set": { "shop_money": { "amount": "0.00", "currency_code": "USD" }, "presentment_money": { "amount": "0.00", "currency_code": "CRC" } }, "variant_id": 44134508134719, "variant_inventory_management": "shopify", "variant_title": "Jacket / S / Cotton Knit", "vendor": "Demo Site", "tax_lines": [{ "channel_liable": false, "price": "144.85", "price_set": { "shop_money": { "amount": "144.85", "currency_code": "USD" }, "presentment_money": { "amount": "80587.00", "currency_code": "CRC" } }, "rate": 0.1611, "title": "GST" } ], "duties": [{ "id": 94738514239, "admin_graphql_api_id": "gid://shopify/Duty/94738514239", "country_code_of_origin": "US", "harmonized_system_code": "620469", "price_set": { "shop_money": { "amount": "125.84", "currency_code": "USD" }, "presentment_money": { "amount": "70012.00", "currency_code": "CRC" } }, "tax_lines": [] } ], "discount_allocations": [{ "amount": "98.46", "amount_set": { "shop_money": { "amount": "98.46", "currency_code": "USD" }, "presentment_money": { "amount": "54780.00", "currency_code": "CRC" } }, "discount_application_index": 0 } ] } ], "payment_terms": null, "refunds": [], "shipping_address": { "first_name": "Pura", "address1": "7 calle 40", "phone": "0000000000", "city": "San Jose", "zip": "10108", "province": "San José", "country": "Costa Rica", "last_name": "Vida", "address2": "", "company": null, "latitude": null, "longitude": null, "name": "Pura Vida", "country_code": "CR", "province_code": "CR-SJ" }, "shipping_lines": [{ "id": 4328148566335, "carrier_identifier": "ddee56dd66ac115cce1900b8a4549ffb", "code": "EXPRESS_GLOBALE_OPT_DDP", "delivery_category": null, "discounted_price": "10.00", "discounted_price_set": { "shop_money": { "amount": "10.00", "currency_code": "USD" }, "presentment_money": { "amount": "5564.00", "currency_code": "CRC" } }, "phone": null, "price": "10.00", "price_set": { "shop_money": { "amount": "10.00", "currency_code": "USD" }, "presentment_money": { "amount": "5564.00", "currency_code": "CRC" } }, "requested_fulfillment_service_id": null, "source": "Global‑e Carrier Service", "title": "Express Courier (Air)", "tax_lines": [], "discount_allocations": [] } ] } ] }
End-to-End Order Flow Interfaces
The following figure presents a general illustration of an order flow with Shopify to OMS to WMS and Global-e.
Outbound
Order creation: created in Shopify with the initial payment status '
PENDING
’ and order tagGlobale::Pending
.Fraud check: upon successful fraud check (asynchronous process), the payment status is set to ‘
PAID
’ and the order tag is replaced withGlobale::Approved
.Export to OMS/WMS qualified orders: with
PAID
status or tagged withGlobale::Approved
.Pick and pack: the warehouse identifies orders via the Shopify order name/number and SKU/UPC.
Label generation: Global-e interface provides the final mile carrier label + tracking #
End-of-day manifest: signals to Global-e that the order is ready to be dispatched and generates an end-of-day document.
*Fulfilment update to Shopify: in most scenarios, this event or the tracking # itself is provided by Global-e. It is also expected for Shopify to send the shipment confirmation email when its fulfilment is created.
Preparation
Shopify Store Settings
To configure your Shopify store:
Set the Customer contact method to Email (only).
From your Shopify admin, go to Settings > Checkout and accounts.
The phone number field must appear on the checkout page. We recommend that you set that field to required.
To complete the checkout, the Global-e CrossBorder solution requires that customers enter their phone number as part of the shipping address on the Shopify checkout page.
Disable Review order:
From your Shopify admin, go to Settings > Checkout > Order processing.
Clear the box next to Require a confirmation step (or make sure it is not selected).
Set customer information:
From your Shopify Admin, go to Settings > Checkout > Customer Information > Full Name.
Adjust the setting to Require first and last name.
Checkout Page: Customer Phone Number Settings
Global-e requires that customers enter their shipping address phone number in the checkout form to complete the checkout.
If the shipping address phone number is already set to mandatory (required), no changes are needed.
Otherwise, set the phone to mandatory (required), as detailed in the Shopify Help Center > Topics > Shopify checkout > Checkout form options