Skip to content

Margin for Web Design & Development.

You quoted the starter package. The discovery call hadn't happened yet. Now you're three weeks in and it's a custom build.

The web pricing problem

Web shops have the cleanest project shape of any service business — fixed-scope build, then maintenance. That cleanness is the trap. Every shop builds a "$15K starter / $35K mid / $75K enterprise" package and prices on assumed scope, not real cost. When the starter-site client wants 14 page templates and three integrations, the price is already quoted.

The hours don't lie even when the package does. A junior writes the code. A senior reviews it. A second sprint cleans up what the first sprint shipped. The estimate assumed one of those layers, not all three.

Common pricing challenges

  • Pre-discovery pricing. Packages get quoted off a 30-minute call. Real scope shows up in week 2 of design — and the price is already locked.
  • Maintenance retainers priced on the relationship. $1K/mo retainers get sold as goodwill, then eat senior-developer hours on every content-system update or platform migration.
  • Platform-choice cost blindness. Webflow vs. WordPress vs. custom-built changes the labor by 3–5x. Most shops price on the deliverable, not the build.
  • Junior-built, senior-rebuilt. Estimating at senior rates and delivering with juniors works until the senior has to redo the work. Role-level cost makes the second pass visible.

When a build crosses into the red, you see it in the project view long before the close-out invoice. Every web project carries a live margin score that flips to "at risk" the moment the cost trajectory pulls away from the package price.

At-risk web build in Margin showing margin erosion against a fixed-price package
1,900/mo
searches for 'website design cost' at $17.54 cost-per-click — the highest commercial intent in the dataset.
DataForSEO
$27.46
cost-per-click for 'web developer hourly rate' — the contractor rate that anchors every build estimate.
DataForSEO
52%
of projects see scope creep. Web builds sit at the high end of that range.
PMI

Price builds on real costs, not on packages.

Sprint-level estimates with role-level cost

Build the estimate around the sprints you'll actually run — discovery, design, build, quality assurance, launch. Each sprint shows the role mix and the fully loaded cost: senior developer, junior developer, designer, project manager, quality-assurance lead. When a sprint runs hot, you see the margin move in real time — not at project close.

Version history for scope changes

"Can we add a blog?" "Can we integrate Stripe?" "Can we move from Webflow to custom?" Each request is a new version of the estimate. You see the cost — extra hours, contractor rates, migration time — before you say yes. Scope creep stops being free.

Edit the estimate live and the role mix, hours, and margin update in front of you. The answer to "can we add this?" is a number, not a hunch.

Editing a versioned web project estimate in Margin to price a scope change

Maintenance retainers priced on the work, not the relationship

Build maintenance retainers from real role costs: senior developer for security and platform updates, junior developer for content changes, project manager for client comms. When a content-system migration eats 40 hours of senior time, you see it on the retainer — not on the end-of-quarter profit-and-loss statement.

Margin project detail view showing margin health across sprints for a web design and development build

Price the build, not the package.

Sprint-level estimates with role-level cost — so the price covers what the build actually takes.

Try Margin free