When a theme beats a rebuild
If customizing your existing theme gets you most of the value, we will say so. It is a smaller engagement and usually the right call.
QUOTED TO SCOPE, IN WRITING
Every engagement is quoted after a scoping call, so you pay for the work your store needs. No enterprise minimum, no long lock-in, and a fixed scope in writing before any contract is signed.
IN SHORT
We could publish a table with three tiers and a number in each. Most agencies do. It would be the most visited page on this site and the least useful, because the number would be wrong for almost everyone who read it.
Two migrations that look identical from outside (same platform, similar catalog, same category) can differ by a factor of three once you count what is being rebuilt. One has four integrations and a clean data model. The other has eleven, three of which nobody can explain, and eight years of attribute drift.
So instead of a number that would need caveating into meaninglessness, we publish exactly what we ask and how the quote gets built. Four questions, a written scope, and a fixed price against it.
Catalog size and complexity. Not just SKU count. Variant structure, how much product data lives in places it should not, and whether the catalog has been migrated before.
Integrations. The single biggest variable. ERP, PIM, 3PL, subscriptions, tax, loyalty: each one is a piece of engineering with its own failure modes. This is where identical-looking projects diverge most.
Storefronts. One store, or one per region. Multi-storefront work is not linear: the second is cheaper than the first, but it is not free.
How much design exists. Finished Figma files quote differently from a brand guide, which quotes differently from nothing at all.
| Fixed-scope project | Monthly retainer | |
|---|---|---|
| Shape | A defined piece of work with an end | A block of senior hours each month |
| Typical length | 8 to 20 weeks | Month to month, ongoing |
| Priced | Fixed against a written scope | Fixed monthly, sized to the roadmap |
| Scope change | Quoted as it arises | Absorbed or re-planned in the next cycle |
| Commitment | The project | No notice period |
| Right for | Migrations, new builds, defined projects | Stores that keep evolving |
Either one usually starts with the free store audit, which is how most engagements start. It costs nothing, carries no obligation, and is written so you can act on it without us.
Five stages. You see a fixed number before you commit to anything.
Most brands start with the free audit: a senior engineer reviews your storefront, theme performance and checkout and sends a prioritized list within three business days. If you already know what you want built, skip to the scoping call.
Catalog size, integrations, storefront count, and how much design already exists. These are what move a number, and we would rather ask them than guess and revise later.
A written scope listing what is included, what is explicitly not, and where the assumptions are. For migrations this includes the extension-by-extension replacement plan, which is what makes an otherwise open-ended job quotable.
A price against that scope, in writing, before any contract. If we have missed something, that is on us, not a change request.
Scope changes get quoted as they arise. You approve them or you do not. Nothing appears on an invoice that you have not seen first.
If customizing your existing theme gets you most of the value, we will say so. It is a smaller engagement and usually the right call.
Under roughly 10,000 sessions per variant per month, split testing produces noise. We will run a research-led program instead, which costs less.
If the market has solved your problem well and maintains it, buying is cheaper than anything we could build.
If hours keep rolling over, we reduce the block rather than bill for capacity you are not using.
Because a number without your catalog size, integration count and storefront count would be fiction, and you would quite reasonably hold us to it. Two migrations that look identical from outside can differ by a factor of three once you count the integrations. We publish the model instead, and give you a fixed number once we have asked four questions.
It is quoted after a scoping call. The drivers are catalog size, how many integrations need rebuilding, and how many storefronts you run: not the source platform on its own. A typical migration runs 10 to 16 weeks from discovery to launch, and you get a fixed-scope quote in writing before committing.
Also quoted to scope. Most builds run 10 to 16 weeks, and the largest cost variables are template count, catalog complexity and integrations. If you already have designs, a Figma to Shopify build is quoted directly from the files.
Retainers are fixed monthly blocks of senior development hours, sized against your roadmap rather than a standard package. They run month to month with no long lock-in, and unused hours roll into the next cycle. If hours keep rolling over, we reduce the block.
No enterprise minimum. We work with mid-market DTC and B2B brands that have outgrown a small dev shop but do not need an agency with a six-figure floor. If a piece of work is too small to be worth a project, it usually belongs in a retainer.
Yes, and there is no obligation. It takes a senior engineer a few hours and it is written so any competent Shopify developer can execute it, including your own team.
NEXT STEP
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritized list of fixes within three business days. No pitch deck, no obligation, no cost.