PLATFORM · RETENTION · TECHNICAL · 29 APRIL 2025 · 6 MIN READ
Customer account extensions and the logged-in experience
Shopify customer accounts are extensible now — blocks, order actions and whole custom pages. Whether yours deserves the work is a different question.
Quite a lot. Customer account UI extensions let an app add content blocks to the order status and profile pages, add order actions such as requesting a return, and create entirely new full-page routes inside the account — a subscription manager, a loyalty dashboard, a reorder screen. They only work on the new customer accounts version, they are built and shipped as app extensions rather than theme code, and Shopify’s documentation caps the compiled bundle at 64 KB, or 128 KB for a full-page extension. The harder question is whether your customers log in often enough for any of it to matter.
IN SHORT
- Customer account UI extensions come in three shapes: block targets placed by the merchant, static targets tied to a page feature such as an order action, and full-page targets with their own route.
- Extensions are app extensions, not theme code — they ship inside an app and the merchant places them in the checkout and accounts editor.
- They only run on the new customer accounts version; classic accounts do not support them at all.
- Shopify’s documented bundle limit is 64 KB compiled, or 128 KB for full-page extensions, and extensions run in an isolated sandbox with limited access to browser APIs.
- Reading customer data requires approved access to protected customer data, and pre-authenticated order status links require level 2 protected customer data permission.
- The logged-in experience earns investment in subscription, B2B and high-repeat businesses; for a one-purchase-a-year brand it is the least valuable page you could rebuild.
What changed, in one paragraph
For years the account area was the part of Shopify you could not really touch. You got an order list, an address book, and a page nobody designed. New customer accounts changed the model: instead of templates you override, there are defined integration points on the order index, order status and profile pages, and apps extend them. Shopify’s own list of what merchants build there is wishlists, subscriptions, rewards, and self-serve order actions like requesting a return or leaving a review.
It also changed how customers get in. New customer accounts use passwordless authentication — the customer enters an email address and receives a one-time six-digit code — with additional sign-in options including Shop Pay, Google and Facebook. That removes the forgotten-password dead end, which is the single biggest reason account areas went unused.
The three kinds of extension, and what each is for
The distinction matters because it decides who controls placement — you or the merchant.
- Block targets render at merchant-defined locations on account pages, positioned in the checkout and accounts editor.
customer-account.order-status.block.renderandcustomer-account.profile.block.renderare the two to know. Up to three extensions can occupy the same block location, so yours may not be alone. Use these for independent content: a loyalty balance, a delivery window, a care-instructions panel. - Static targets render at fixed locations tied to a specific page feature — order action buttons, announcement banners — and only appear when that feature is present. This is where “request a return” or “leave a review” lives. You are adding an action to something Shopify already renders, not inventing a surface.
- Full page targets create a custom page with its own route.
customer-account.page.rendercan be added to the account navigation;customer-account.order.page.renderis scoped to an order and cannot be added to the menu. This is the one to reach for when the thing you are building is a tool rather than a panel — a subscription manager, a reorder flow, a claims form.
What an extension can actually see
Extensions get a shopify global rather than direct DOM access. shopify.order gives order data, shopify.authenticatedAccount gives customer identity, and shopify.navigation.navigate() moves between pages. Beyond that there are the Metafields API, the Customer Account API, the Storefront API and the Session Token API — the last of which is how you prove to your own back end who the caller is.
Metafield access covers customer, order, product, variant, cart, company, companyLocation and shop resources. That company pair is quietly the most interesting entry on the list, because it is what makes a B2B account area buildable: a buyer’s company, their location, and the data you have hung off both.
Two gates worth knowing before you scope anything. Extensions that access customer data need approved access to protected customer data, and Shopify states that directing customers to pre-authenticated order status pages requires level 2 permission for protected customer data. Neither is exotic, but both are approvals with a lead time, and neither belongs in the last sprint.
The constraints that shape the design
Extensions run in an isolated sandbox with limited access to global web APIs, and they build from Polaris components rather than your own CSS. That is a deliberate trade: you get an interface that matches the rest of the account area and keeps working when Shopify changes it, and you give up pixel control. Anyone expecting to reproduce a bespoke design system inside a customer account will be disappointed, and should be — an account page that looks like a different product than the checkout is not a win.
The bundle limit is the constraint that actually bites. Shopify documents a 64 KB maximum compiled bundle, or 128 KB for full-page extensions. That is generous for a panel and tight for an application. It rules out dragging in a chart library, a date library and a state manager, and it rewards fetching from your own API over shipping logic to the browser. If your design does not fit in 128 KB, the answer is usually that too much of the product is living in the extension.
When we would tell you not to bother
Most stores should leave the account area alone, and this is the section we would rather you read than the previous three.
Ask one question first: what proportion of your orders come from a customer who logged in, and how often does the same customer come back? For a brand where the typical customer buys once a year, the account page is the least-visited page on the site. Rebuilding it is work with a denominator near zero, and the same budget spent on the product page, the collection pages or delivery expectations will move revenue instead.
The businesses where it genuinely pays are the ones where the account is the product surface. Subscriptions, where the account page is where somebody skips, swaps or pauses instead of cancelling by email. B2B, where a buyer needs their company’s price list, their locations and their reorder history in one place. Consumables and high-frequency categories, where a one-tap reorder of the last order is the whole retention strategy. Service-shaped commerce, where an order has a status that changes — bookings, made-to-order, repairs.
There is also a cheap middle path people skip. Self-serve returns and reordering are features of new customer accounts, not things you have to build. Turning those on, tidying the notification emails, and making sure the login link in them actually lands somewhere useful costs a fraction of an extension and captures most of the support-ticket saving. Do that, measure whether anybody uses it, and only then build.
If you are building one
Scope it as an app project, because it is one. Extensions ship inside an app, which means an app to create, a CLI to work with, versioning and releases, and a merchant install step — even when the merchant is you. Teams that treat it as “a page on the site” discover the app scaffolding halfway through and lose a week to it.
Then build the smallest useful version. One block on the order status page that answers the question your support inbox gets most, or one full-page route that replaces one email thread. Ship it, look at whether anyone opens it, and let that decide whether the second one exists. An account area with one thing people use beats a dashboard with six they do not.
Questions this raises
Do customer account extensions require Shopify Plus?
Shopify’s developer documentation for customer account UI extensions does not state a Plus requirement. What it does require is the new customer accounts version — classic accounts cannot run extensions. Confirm plan entitlements for your specific store before committing to a build.
Can I customise customer accounts with theme code instead?
Not in the way you could with classic accounts. New customer accounts are extended through app extensions at defined integration points, placed by the merchant in the checkout and accounts editor. The upside is that it does not break when Shopify changes the account area; the downside is that you work inside their component set.
How big can a customer account extension be?
Shopify documents a compiled bundle limit of 64 KB, rising to 128 KB for full-page extensions. Practically, that means fetching data from your own API rather than shipping libraries to the browser, and treating a large dependency as a design problem rather than a bundling one.
Can several apps put content in the same place?
Yes. Shopify allows up to three extensions in the same block location. Design your block to be legible next to someone else’s rather than assuming it owns the region, and expect the merchant to reorder it in the editor.
Do I need approval to read customer data in an extension?
Yes — extensions that access customer data need approved access to protected customer data, and pre-authenticated order status links need level 2 protected customer data permission. Start those approvals early; they are a scheduling dependency, not a code change.
Is self-serve returns something we have to build?
No. Self-serve returns and reordering are features of new customer accounts. Enable and configure those before building anything custom — most of the support-ticket reduction people expect from an account project comes from the built-in behaviour working properly.
NEXT STEP
Free store audit
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.
