Shopify
Overview
Ingrid's Shopify app is developed and maintained by Ingrid. Support is handled by Ingrid. For help, ask Iris, Ingrid's AI assistant, in the chat on the Ingrid Help Center. If you can't reach Iris, email [email protected].
Because Shopify restricts what can be rendered on its checkout page, Ingrid's checkout widget is not available. Instead, Ingrid creates shipping options via Shopify's CarrierService API, and Shopify renders them in its native shipping checkout.
Requirement: a Shopify Plus plan. If your Shopify plan can't carry third-party calculated rates, a banner appears in the app's admin UI. One known exception: shops on Basic or Grow billed annually will see this banner even though the app works correctly for them. No Shopify API exposes the billing interval, so the banner can't distinguish this case — if you're on an annual Basic/Grow plan and the app is working, the banner can be disregarded.
Features
Shipping option propagation via Shopify's CarrierService API
Propagation of:
Product item attributes
Weight
Dimensions
External ID (Shopify's order number)
Registration of tracking numbers towards Ingrid’s tracking product
A/B testing
Checkout delivery options folding — carrier options sharing the same price are bundled into a single option by default, if bundled in Ingrid merchant platform (configurable in App settings).
Custom category naming
Filter rules and post-filtering rules
Localized presentation - Delivery estimates are now rendered in the shopper's language.
Pricing rules
Product/cart availability check
Estimated delivery time presentation in:
Date and day format
Units
Days
Business days
Weeks
Hours
Minutes
Denominated days — when carriers provide slot data, shoppers can select a time slot in the UI. Selected timeslots are persisted on the Shopify order as note attributes. Specific dates can be blocked from display in checkout. Both relative and absolute dates are supported.
Delivery slots belong to the carrier the shopper selected rather than to the delivery category, so the times offered match the carrier that will actually deliver the order.Timespan-style estimates (e.g. ranges) are supported.
Custom text can be configured to fully override the computed estimate when required
Category labels and styling
Delivery categories support configurable labels (e.g. "Express", "Eco"), enabled by adding the "Ingrid delivery labels" block to the checkout. Each label supports:Label color, specified as a hex value which is matched to the closest color Shopify supports
Icons, selectable from a curated list of Phosphor Icons
Shipping date adjustments
1-button installs for the PDP widget, the upsell bar (checkout and mini cart), and the tracking widget
Full
session.completeresponse exposed innote_attributes[]Shopify's pickup point functionality, including a pickup point UI
Apple Pay support (see FAQ)
Split shipping (see FAQ)
DHL Packstation support
Multi-parcel tracking on same order, Ingrid can track orders on parcel and item level
B2B orders. B2B orders carry a
b2bcart attribute into the Ingrid session. This is available as an input to Ingrid-side delivery rules (for example price rules and filter rules).
Installing Ingrid Checkout
Detailed instructions are also provided in the app itself once installed. To get started:
Go to Ingrid on the Shopify App Store and click Add app.
Get your Private key (base64) from your Ingrid account:
Log in to the Ingrid Merchant Platform.
Click the information icon (i) in the header. The Your Ingrid credentials fold-out opens.
On the Checkout tab, find Private key (base64) and click the copy icon next to it. Make sure you copy the base64 version, not the Private key listed just above it.
In Shopify, open the Ingrid app and go to Settings. In the Ingrid credentials section, click Edit. There is one field for the Live key and one for the Test key: paste your key into the right one, then choose the environment under Enable app, choose environment at Ingrid. Check with Ingrid whether to use the Test or Live key. The Test environment is for testing only and can't be used in production.
In Shopify's Shipping and delivery settings, add a shipping rate. In the Add rate window:
In the first dropdown, select Use carrier or app to calculate rates.
In the second dropdown, select Ingrid (Rates provided by app).
Click Done.
In Shopify’s Checkout settings, under Customer contact method, select Email (not Phone number or email). Orders need an email address so they can be completed, booked and shipped.
Make sure the shipping location in Shopify matches the warehouse address configured in Ingrid. If they don't match, the integration will not work properly.
In the Ingrid Merchant Platform, select Warehouses in the left menu and open your warehouse. Note the fields under Address.
In Shopify, open your shipping location and check that each field matches: Address line 1 = Street and house number, Address line 2 = Apartment, suite, etc., Zip code = Postal code, City = City/town, and Country = Country/region.
In the Ingrid app Settings, go to Install the carrier service. If the status shows not installed, click Install carrier service. The carrier service is needed to use the app. Once installed, the status shows installed and the section offers Uninstall carrier service, which you can use if you want to pause or uninstall the app.
That's the basic setup done — you can now start using the app.
App settings
In the Ingrid app, go to Settings. The settings below are in the Additional Settings section, which lets you make additional configuration changes to the way the carrier service works. Each setting shows its current value (for example On or Off). To change them, click Edit at the bottom of the section.
Setting | Description |
Enable Advanced Checkout Integration | Opt in to functionality that enables Apple Pay and A/B testing (see FAQ). Should always be enabled unless told otherwise by Ingrid |
Use external method id as shipping code | Use external method id as shipping code instead of Ingrid's code containing the session ID. While this is on, a shipping code names a single carrier product, so bundling is not applied and checkout shows one option per carrier product. |
Toggle this setting to enable or disable the new Checkout UI functionality. | Opt in to the new checkout UI and pickup point functionality (see FAQ). Should always be enabled unless told otherwise by Ingrid |
Show delivery estimates with Delivery Details extension | Shows the delivery estimate, carrier logos and delivery labels of each shipping option in one row, drawn by the Delivery Details checkout extension instead of Shopify. Add Delivery Details to your checkout in the checkout editor before turning this on: without it, shipping options show no delivery estimate. Once on, the Carrier Logos and Delivery Labels extensions stop drawing and can be removed. Requires the new Checkout UI functionality above. |
Bundle shipping options from several carriers into one | On by default. Carrier options that share the same price are shown to the shopper as a single delivery option. Selecting it reveals the carrier, and the preselected carrier's estimate is shown on the bundled row. Turn this off to list each same-price carrier as its own option. Bundling is not applied while Use external method id as shipping code is on, and the app shows a warning about this. |
Maximum number of pickup options to show | Limits how many pickup points are offered per carrier option of type |
Setting | Description |
Ingrid Site ID | Required for parcel-level tracking. This is the same Site ID used by the tracking widget. You can find your site ID at Your Ingrid API keys |
Enable parcel-level tracking | Creates a parcel in Ingrid for every tracking number on a fulfilment, including the items in that parcel, so customers can see what is in each box. Orders shipped in several boxes are tracked as one multiparcel order. Requires a Site ID. |
Track third-party orders | Makes orders placed outside Ingrid — marketplace, POS or imported orders, which have no Ingrid session — trackable too. When such an order is fulfilled, it is registered in Ingrid first, then its tracking number is sent as usual. Requires a Site ID. |
Pickup point field name | The name of the field in an order's additional details holding the pickup point ID. The app that placed the order chooses this name, so it differs from app to app — copy it exactly. Leave it empty, or when an order has no value in it, and the order is tracked as a home delivery to its shipping address. |
Register tracking number to Ingrid | The older (legacy) tracking integration. If you see this setting and you enable parcel-level tracking, turn this off (see Enabling Ingrid Tracking). |
Setting | Description |
Change the shipping address on pickup orders | When a customer chooses a pickup point, the shipping address on the Shopify order is replaced after checkout, using the address chosen below. Turn this off to keep the address the customer entered in checkout. Either way, the pickup point is saved in the order's additional details, and home delivery orders always keep the customer's address. |
Merge address lines when line 1 has no number | When a shopper puts the house number on address line 2 and line 1 has no number of its own, send the two as one line to Ingrid. Line 2 only counts as a house number when it is digits, optionally followed by letters; apartment and c/o lines are left where they are. The address on the Shopify order is unchanged - only the address Ingrid receives is merged, including the copy stored with the completed session. |
Setting | Description |
Store Completed Session data on order | Writes the full Ingrid session as JSON to the order's additional details. Turn this off to keep orders free of it — the transport order ID, shipping method and pickup point are still stored either way. |
Add 'out_of_stock' to cart item attribute when item's available quantity is zero or negative | When an item's available quantity is zero or negative, |
Sync customer tags to Ingrid | Sends tags from customer profiles as |
Namespace for dimension metafield | Used for fetching and sending dimensions to Ingrid on variant level (see FAQ). |
Key for dimension metafield | Used for fetching and sending dimensions to Ingrid on variant level (see FAQ). |
Enabling Ingrid Tracking
In Shopify Admin, open the Ingrid Checkout app.
Go to Settings. Under Additional Settings, click Edit, turn on Enable parcel-level tracking and enter your Ingrid Site ID (found here). If you already use Ingrid tracking through the older integration and see the setting Register tracking number to Ingrid, turn it off. This removes the old integration.
Scroll down to Install the Tracking Widget and click Install Tracking Widget. A new tab opens in the Theme Editor, where the widget is automatically added to the page template. Select the page where you want the widget displayed (for example a dedicated "Track your order" page).
In the Theme Editor, under Template, expand Apps and select Tracking Widget.
In the Tracking Widget panel, enter your Site ID from the Ingrid Merchant Platform in the Site ID (required) field.
Once it's set up, the page shows a tracking form with the fields Enter order or tracking number and Enter e-mail, and a Search for order button.
Optional: To link to the tracking page for a specific order in order confirmations or other Shopify notifications, use the example below. The URL contains the shop URL, the tracking page, and two parameters: identifier (Shopify's order number) and contact (the customer's email).
<a href="{{ shop.url }}/pages/tracking?identifier={{ order_name | replace: "#", "" }}&contact={{ customer.email }}" class="button__text">Track your order</a>
Enabling carrier logos and delivery labels
In Shopify Admin, open the Ingrid Checkout app.
Go to Settings and confirm that the carrier service is installed: the carrier service status shows installed.
Enable the option "Toggle this setting to enable or disable the new Checkout UI functionality." and "Show delivery estimates with the Delivery Details extension"
Save the changes
Open the Theme Editor on the checkout editor.
In the Main section, remove the "Carrier logos" and "Delivery labels" blocks if they're in the list already
In the Main section, click Add block. In the block list, under Ingrid Checkout Production, select Delivery Details. The block appears under Delivery → Shipping method → Shipping option list.
In the top right collapse the Checkout behaviour menu and toggle the "Include block in Shop Pay" option, set "Hide carrier logos" to False and set Hide delivery labels to False
In the Main section, if you haven't already add the Pickup Points Location block and select it.
In the top right collapse the Checkout behaviour, toggle "Include block in Shop Pay", under Block settings set Hide carrier logos to True (This option will only work if there are more than one pickup point delivery method in the same delivery category)
Click Save in the top right corner
Important: The carrier logo functionality cannot curently be used with the option Use external method id as shipping code in the Ingrid app settings. Carrier logo matching relies on Ingrid's internal method identifiers, and overwriting the shipping code can prevent logos from matching. This is going to be improved in Q4 2026.
FAQ
How can shipping details be extracted from an order?
Additional order details are stored in the order's note attributes, accessible in the note_attributes[] field on the order object in Shopify's Admin API. Ingrid also stores Shopify's order number, so the customer can see which order the information relates to.
Example of Ingrid note attributes stored with an order:
Ingrid Transport Order ID: 01JHJG9VWDH4WA4192D4V3RP9N
Ingrid Shipping Method: pnl-mpc
Ingrid External Method ID: P19
Ingrid External ID (Pickup Point ID): 2234137
Ingrid Completed Session Data: { "id": "c5709906-...", "status": "COMPLETE", ... }
shipping_address: { "name": "Paketbox Vikingavägen 9", ... }
A split shipping order looks like a regular order, except there is one set of attributes per split created by Shopify. The transport order ID and session data differ between the splits. Example of an order with two splits:
Ingrid Transport Order ID: 01JHG24SYWZAA4ASHB81TGQSVT
Ingrid Shipping Method: pnl-mpc
Ingrid External Method ID: P19
Ingrid External ID (Pickup Point ID): 527470
Ingrid Completed Session Data: { ... }
(Split 2) Ingrid Transport Order ID: 01JHG24T09KC44Y1SY14NXGWT4
(Split 2) Ingrid Shipping Method: pnl-mph
(Split 2) Ingrid Completed Session Data: { ... }
Note — shipping rates have changed since the introduction of bundled options. Shipping rates may now arrive with different names, codes and counts. Carrier options that share the same price are bundled into a single option by default, and rates in categories that contain more than one product are named after their carrier product. If you have anything that keys on specific rate names, codes or titles — Shopify shipping rules, discounts, Shopify Flow automations, ERP mappings, or rate-title reporting — review it to make sure it still matches the new strings if bundled are enabled.
Is Ingrid's data visible on the order page in Shopify?
Yes. On the order page in Shopify Admin, the Ingrid note attributes are shown under Additional details on the right: Ingrid Transport Order ID, Ingrid Shipping Method, Ingrid External Method ID and Ingrid Completed Session Data. Line items can also show an _ingrid_session_id attribute.
What can I do if the shipping options load slowly?
Lower the app setting Maximum number of pickup options to show, which limits the number of pickup options created by the carrier service. If you have enabled the new checkout UI, slow loading shouldn't be an issue.
How can I provide dimensions on variant level to Ingrid?
In Shopify, create a variant metafield definition (if one for dimensions doesn't already exist) under Settings → Custom data → Variant. Give it a name (for example Dimensions), define a namespace and key — for example, namespace
codeand keydimensions, shown ascode.dimensions, but any names work — and select JSON as the type.On each variant, under Metafields, enter length, width, and height in JSON format in the dimensions field, for example
{"height":7,"length":14,"weight":50,"width":7}. Weight can be omitted, as it is taken from the product's native weight field.In the Ingrid app settings in Shopify, enter the namespace from step 1 in Namespace for dimension metafield and the key in Key for dimension metafield.
How can I link directly to the tracking widget for a specific order?
Copy (or adapt) the HTML tag below into, for example, an order or shipping confirmation email:
<a href="{{ shop.url }}/pages/tracking?identifier={{ order_name | replace: "#", "" }}&contact={{ customer.email }}" class="button__text">Track your order</a>
How does Ingrid's app handle sessions?
Ingrid requires an Ingrid checkout session to produce shipping options. There are two flows, depending on the Advanced checkout integration setting:
Disabled: the app creates a new session every time Shopify's CarrierService sends a callback. The session ID, and the additional data Ingrid needs to store data on a finalized order, is set on the shipping option's
service_code.Enabled: the app creates a session as soon as a product is added to the cart and stores Ingrid's session ID as a product attribute. The session is retained throughout the purchase journey, and the app sends updates to the existing session instead of creating a new one on each carrier service call.
How does split shipping work with Ingrid and Shopify?
Split shipping requires the Advanced checkout integration setting to be disabled. Shopify's CarrierService callbacks give no way to tell which split a callback belongs to, so if a session ID were retained on product item level it would always be re-used — making it impossible to create separate sessions per split.
Free shipping thresholds are calculated per split, not on the entire order value, because Shopify's carrier service has no functionality for tracking each split. Should this become available, Ingrid is committed to solving this.
How does Apple Pay work with Ingrid's app?
Apple Pay works on the checkout page and cart page. It is not possible to finalize a purchase directly on the product page unless the user has added something to the cart, because the app has no way to retain Ingrid's session ID without a product in the cart.
Also see: Apple Pay Express Checkout: Handling Partial Postal Codes for UK and Canada in Ingrid Shopify App
How do I enable Apple Pay and/or the pickup point UI?
In the app settings, under Additional Settings, click Edit and tick Enable Advanced Checkout Integration (required for Apple Pay and A/B testing).
Toggle on the new checkout UI (enables pickup point functionality).
Below the setting, the app asks you to make sure that the Advanced Checkout UI extension is enabled. Click the here button next to that message. A new tab opens in the Theme Editor.
For Apple Pay and A/B testing: add the advanced-checkout app block under Express checkout, above Wallets.
For pickup points: add the pickup-points-location app block under Delivery → Shipping → Shipping rate.
Note: Apple Pay is only displayed if it is enabled under Payment methods in Shopify.
Can the PDP widget be used with the stage environment?
No, it is only available for the production environment.
Why is the shipping options saying that the order will be shipped tomorrow and why is the estimated delivery date incorrect?
Shopify has a feature where estimated delivery dates are displayed, these estimates do not come from Ingrid and should therefore be disabled. When it's on, each shipping option shows an extra line from Shopify, such as "Ships next business day", above the Ingrid estimate, such as "Delivered within 1 business day".
To turn it off, go to Shopify Settings → Shipping and delivery, open the Estimated delivery dates section and set Estimated delivery dates to Off.
Ingrid will display the ETD based on your configuration under the shipping option when turned off.
Why is my delivery category split into multiple options in Shopfiy’s checkout even though my delivery category contains several options?
There is a limitation currently where apps are not able to change the shipping price based on selection in Shopify, if the options within the delivery category has different pricing the app deliberately separates the options in order to be able to meet the correct pricing set in the configuration.
























