When a Shopify theme isn’t enough: signs you need a custom app

Some requirements can't be met in a theme however clever the Liquid. The signs to look for, and why a custom app is often smaller than you'd expect.

Shopify themes can do a lot. Between Liquid, metafields, theme blocks and the App Store, most stores never need custom back-end code. But some requirements can’t be met in a theme, however clever the Liquid, and spotting them early saves a lot of wasted work.

Here are the signs I look for when deciding whether a store needs a custom app, and what “custom app” actually means in practice. It’s often much smaller than people expect.

What a theme can’t do

A theme is templates plus front-end JavaScript. It runs in the customer’s browser, or is rendered by Shopify from Liquid. That rules out a few things completely:

  • Keeping a secret. Anything in the theme, including JavaScript and settings, can be read by anyone who views the page source. An API key for a payment provider, a courier or a CRM can’t live there.
  • Writing data Shopify doesn’t model. A theme can read metafields, but can’t create records of its own. A quote, a booking or an application form has nowhere to be stored.
  • Trusting a calculation. If the browser works something out, the browser can be told a different answer. Prices, discounts and eligibility checks that matter need to happen on a server.
  • Doing things later. A theme only runs when someone loads a page. Sending a reminder in seven days, polling a courier’s tracking or expiring an offer needs something that runs on a schedule.

If a requirement involves any of these, no amount of theme work will deliver it properly.

Signs you’ve outgrown the theme

In practice, it usually shows up as one of these:

  1. “Customers fill in a form, and then we email them back and forth.” The form collects data the store can’t act on, so a person bridges the gap by hand.
  2. “We use three apps that almost do it.” Each covers part of the workflow, data gets copied between them, and nobody is quite sure which one is right.
  3. “The price depends on…” Anything worked out per customer from their answers, beyond what Shopify’s discount and pricing tools cover, needs to be checked on a server.
  4. “Staff need a screen for it.” Approving submissions, replying to customers or working through a queue is better done inside the Shopify admin than in a spreadsheet.
  5. “It needs to talk to our other system.” An ERP, a warehouse, a payments provider or a messaging service with its own API and its own credentials.

“Custom app” doesn’t have to mean a big build

A custom app is just an app installed on one store. Depending on the job, it might be one or more of:

  • An App Proxy back end. A small server, such as a Cloudflare Worker, that the theme calls on a path on the shop’s own domain. It’s good for form submissions, server-side calculations and anything that needs a secret.
  • An admin extension. A screen inside the Shopify admin for staff, built with Shopify’s own UI components, so it looks like part of Shopify.
  • A customer account extension. Pages in the customer’s account area, such as “your submissions” or “your bookings”.
  • Webhooks and scheduled jobs. Reacting to orders, or running every few hours to chase things that haven’t happened yet.
  • Theme app extensions. Blocks that merchants add to their theme in the editor, so the app’s front end isn’t hard-coded into one theme.

Many custom apps are one or two of these, not all five. The theme still does what themes are good at, and the app only takes on the parts that need a server.

Don’t build what an app already does well

The opposite mistake is just as expensive. Reviews, subscriptions, loyalty, search and email marketing are all well served by established apps that are maintained, supported and cheaper than a custom build. I’d build custom only when:

  • The workflow is specific to how this business operates, and no app fits without workarounds.
  • Existing apps would need to be chained together with fragile automations.
  • The data or calculation is commercially sensitive and shouldn’t depend on a third party.

Plan for the boring parts

A custom app needs more than features. Before building one, I make sure the plan covers:

  • Verification of every request: App Proxy signatures, webhook HMACs, session tokens for admin screens.
  • Where the data lives, and who in the business needs to see it.
  • Tests that run before every deploy, especially around anything involving money.
  • What happens when a third party is down. Retry, queue, or tell the customer plainly.
  • Who maintains it after launch, and how they’ll know when something breaks.

A quick test

If you can describe the requirement without the words “save”, “secret”, “check”, “later” or “staff”, a theme or an off-the-shelf app can probably do it. If you can’t, it’s worth talking about a custom app.

That’s the Shopify custom app work I do. If you’re not sure which side of the line your requirement falls on, get in touch and I’ll tell you honestly.

Written by

James Knowles

Started in 2021 as an apprentice on a support desk, answering clients directly, then worked through agency teams on WordPress, WooCommerce and Shopify builds. Now leads Ramosa and every project.

More from James

Planning a new shop?