The question «how much does an online store cost» sounds like a question about a figure. It is a question about scope, and the answer starts with your product export rather than with anyone's price list.
On 31 July 2026 we took technical readings from 24 live shops running OpenCart. One engine, the same single word on every home page. Here is the spread inside that sample.
| Metric | Lowest | Highest |
|---|---|---|
| Catalogue size | 76 product cards | 116,841 URLs in the sitemap |
| First server response | 126.3 ms | 1,544.5 ms |
| Weight of the HTML page | 103.2 KB | 751.2 KB |
The lightest shop in the sample holds 96 products in 21 categories — exactly 123 URLs in the sitemap and not a single duplicate. The largest catalogue we measured holds 115,456 product positions in a wholesale lingerie store. Both have a cart, a checkout and an admin panel. The work behind them differs by multiples, not by percentages.
What follows is the sum broken into parts. Five multipliers, and you can assess every one of them yourself before talking to any contractor.
Five multipliers of the price
Catalogue size
A hundred positions is one day of import. Several thousand means mapping the fields of your price file onto the fields of the engine, clearing duplicates and checking attributes across the whole catalogue. The distance between the bottom and the top of any range sits mostly here.
This is also where the most common estimation error hides. An owner names the number of models, while URLs in a shop are created at the level of size and colour. That is exactly how the measured lingerie catalogue ended up with 115,456 positions instead of a few thousand models.
Count your catalogue two ways and compare the results. In one wholesale shop from our sample the built-in search returned 5,830 products, while the sitemap returned 6,234 URLs for each of the two languages, 12,468 together. Both figures are correct; they count different things. How this grows into supplier work is on the page about supplier price file imports.
Size on its own does not make a shop slow. A measured catalogue of 54,302 products in 635 categories answers in 413.8 ms, and a heating equipment shop with 3,565 cards answers in 524.8 ms. What gets expensive is loading, not speed: tens of thousands of positions will not go through the admin panel, it times out, so you need a console import in batches with the database indexes revisited.
Number of integrations
A payment gateway and Nova Poshta in the checkout take roughly a day each. A feed for Rozetka takes around three working days. Two-way exchange with an accounting system takes about ten working days, because stock levels and statuses travel in both directions there.
Your own list converts into days almost linearly. Count it before the conversation: it is the fastest way to understand which order of magnitude you are in.
And that list is almost always longer than the owner thinks. In a shop selling irrigation systems, a real guest checkout on 1 August 2026 returned 6 delivery methods from two carriers and 3 payment methods — a «Delivery and payment» page proves none of that, it has to be verified with an order. In the heating equipment shop a single checkout carries monobank, cash on delivery, cash on receipt and a bank invoice for sole traders and VAT-registered companies. Nova Poshta itself we confirmed in 16 shops of the sample, either in the checkout or on the delivery page.
State of the content
Photos on a uniform background and attributes in separate fields save weeks. A catalogue where the specifications live as an image inside a PDF price list has to be taken apart by hand, and that is its own line in the estimate. It only becomes visible once someone opens your export, which is why any estimate made without the files comes out optimistic.
Design
A ready theme with colour and block settings holds the bottom of the range. Custom layouts for your brand add 5 to 10 working days of design and front-end work.
This is also the stage to fix a target page weight. Across our sample, on the same engine, HTML ranges from 103.2 to 751.2 KB — a sevenfold difference that sits in the theme and the number of modules switched on. What that costs after launch is in the breakdown about site speed.
Pace
A priority queue costs plus 25% and works under two conditions: the content is ready at the start, and approvals fit inside one working day. If those conditions do not hold, the surcharge speeds up nothing, and we say so before it is paid rather than after.
Modules that can move the whole estimate
By default we install OpenCart 4.x, the branch under active development. The event system was rewritten in version 4, and part of the Ukrainian modules — separate Nova Poshta builds, price aggregators, marketplace exports — still ships only for 3.x. In 13 of the 24 measured shops the core is pinned to 3.x for exactly this reason.
The practical conclusion: the integration list is walked through point by point before the work starts. If a critical module exists only for the old branch, the decision is made at the brief stage and written into the specification. What a build includes is on the page about an OpenCart store.
What the build price does not include
This is the part of the conversation after which people usually say «I thought that was included».
- Domain and hosting. Registered in the client's name on purpose, so the access stays with them.
- Payment acquiring. You sign the contract with the payment provider yourself: the money goes to your account.
- Product copywriting and manual catalogue filling beyond the agreed volume.
- Legal texts: offer, return conditions, privacy policy. A lawyer writes those.
- Advertising after launch. A separate budget with no relation to the cost of development.
There is one more item people rarely plan for: who will work with the shop after launch. Prices and products are updated by your manager, through the admin panel or by an automatic import from the price file. That is why handover here means walking the admin panel with your person on a live order, from adding a product to printing a waybill, plus a written instruction for your processes. If there is nobody in-house and nobody planned, filling and support become a recurring cost rather than a one-off.
Renting a platform versus your own store
Each model has something it is chosen for, and that deserves an honest description.
The strength of renting is a fast start and technical upkeep on somebody else's side: updates, security, backups, module compatibility. On a marketplace you also get somebody else's traffic, since people go there to search for a product rather than to your domain.
The strength of your own store is that the code, the files and the database are yours, and the monthly fee and the per-order percentage disappear as a cost line. Another line appears in their place: hosting, domain, changes and whoever administers it.
Renting wins if you are testing a niche and do not yet know whether demand exists; if the assortment is small and stable; if nobody is going to administer a site. That is a fair reason to stay on a subscription, and we say it to clients in plain words.
Your own store wins when prices are calculated in ways a hosted storefront cannot handle: wholesale tiers, contract discounts, price per packaging multiple, a separate checkout for a VAT-registered company. That logic lives in code, not in settings. The same applies once the catalogue has grown and a specification filter becomes necessary.
A move is priced by URLs, not by the catalogue. In a marketplace-platform storefront we measured from the outside, the sitemap returned 8,358 URLs for 4,000 products and 170 categories: every page exists in two languages. Each of those URLs needs a row in the mapping table and a check after launch. How that works is on the page about migrating from Prom.
Why we publish no price list
Because for online stores a public figure would almost always be untrue. The spread at the top of this article is the explanation: 24 shops on one engine, first server response from 126.3 ms to a second and a half, page weight differing sevenfold. A single «from» figure for a sample like that misleads both the client whose work will cost less and the client whose work will cost more.
Instead of a price list, the order is this:
- A free review of the task, 1 to 3 working days. We look at the price export, the integration list and the state of the content.
- An estimate broken down by stage. An OpenCart store is delivered in 25 to 45 working days from the approval of the specification, across seven stages: brief and specification, prototype, design, build, catalogue import, integrations, testing and handover.
- A contract with a fixed sum, an invoice and an acceptance act. A 50% prepayment, two rounds of revisions at the design stage, a 30 calendar day warranty from the day the act is signed. Rights to the code and the materials pass to you after full payment.
If the review shows that staying on a platform and doing nothing is the better move for you right now, we say so in the first email.
Honest limits
An estimate by stages does not make a project cheaper; it makes it predictable. A deadline quoted before anyone has seen the catalogue is a wish, not a deadline.
The technical part has limits too. Sitemap duplicates are fixable and measurable: in a garden tool shop with 8,690 URLs we counted 33,493 entries, in a natural cosmetics shop 271 entries pointing at 116 unique URLs, and in a wholesale catalogue an outdated sitemap of 7,782 entries lived alongside the canonical one with only 2,755 unique URLs in it. All of that can be measured and repaired. Sales also depend on assortment, prices and the work of your managers, and development does not touch that half — nor does anyone guarantee search positions.
If you are pricing a store right now, start with four numbers: how many positions are in your price file, how many integrations are on your list, in what shape the specifications are stored, and who will administer the site after launch. With those answers any estimate becomes meaningful. If you would rather we took those numbers, the first review is free, takes 1 to 3 working days and commits you to nothing. We reply within two hours.




