When a merchant says they need an app built, they almost always mean a custom app: something that solves their store's problem, installed only on their store. When an agency says app development, they sometimes mean a public app: a product listed on the Shopify App Store, sold to many merchants.
These are different projects with different economics, and the wrong assumption at the start is expensive.
What a custom app actually is
An app built and installed for one store. It is not listed, not reviewed by Shopify's app review process, and not subject to the requirements a listed app carries.
This is the right shape for the vast majority of merchant needs: syncing with an ERP or warehouse system, automating a fulfilment rule, generating documents, moving data between Shopify and something the business already runs.
Because it serves one store, it can make assumptions. It can be built against your actual catalogue size, your actual order volume, your actual integrations. A public app can assume none of that, and most of the cost difference lives in exactly that gap.
When you genuinely want a public app
When the app is the business. If you intend to sell it to other merchants, it is a product with a roadmap, a support burden, and a pricing model — and the store that prompted it is your first customer rather than the point.
Be honest about the commitment. A listed app has to handle merchants whose stores are nothing like yours, pass app review, meet performance and security requirements, keep up with API versions, and answer support. Agencies that quote a public app at custom-app prices have quoted the first release and none of the life after it.
Before building anything, check the boring alternatives
Shopify Flow handles a large share of what merchants describe as needing an app: conditional automation on orders, customers, inventory and fulfilment. If the requirement is "when X happens, do Y", try Flow before writing code.
Shopify Functions cover checkout logic — discount rules, delivery options, payment method visibility, cart validation. These are not apps in the everyday sense and they are the correct tool for that class of problem.
And an existing app may already do it. The install is reversible; a build is not.
What running a custom app actually costs
Hosting, because the app runs somewhere. Modest for most integrations, but not zero and not one-off.
API version maintenance. Shopify releases new API versions on a schedule and retires old ones. An app that is never touched will eventually stop working — this is the recurring cost merchants most often are not told about.
Failure handling. An integration that silently stops syncing is worse than one that never existed, because the business keeps trusting it. Alerting and a retry path are part of the build, not an extra.