Skip to content
Now accepting Q2 projects — limited slots available. Get started →
For the engineer your CMO is going to forward this to

How we calculate WordPress migration cost.

Every constant in the calculator is documented and dated. This page renders the values live from src/lib/wp-migration/formulas.ts, so when constants change, this page updates with the next deploy. Read it, argue with it, send us the diff if we got something wrong.

Snapshot date: 2026-05-06 · 51 plugins tracked · 184 CVEs

The 5-year TCO formula

The headline number on the calculator is the cumulative WordPress cost over 60 months, summed monthly with plugin licence inflation applied annually:

wpYearlyCost(year) = (hosting * 12)
  + (pluginLicences * (1 + LICENCE_INFLATION_RATE)^year)
  + (devHoursPerMonth * 12 * BLENDED_DEV_RATE)
  + (plugins * PLUGIN_OVERHEAD_HOURS_YEAR * BLENDED_DEV_RATE)
  + (siteAge + year >= 5 ? TECH_DEBT_TAX : 0)

wp5YearTCO = sum of wpYearlyCost(0..4)
  • BLENDED_DEV_RATE = $75/hour. Blended UK/US/EU senior WordPress contractor rate, 2026 H1 average.
  • PLUGIN_OVERHEAD_HOURS_YEAR = 2. Hours per plugin per year for compatibility testing, security patches, and version churn.
  • LICENCE_INFLATION_RATE = 8%. Trailing 5-year average across the top 50 commercial plugins (Yoast, Rank Math, WPML, WP Rocket, etc.).
  • TECH_DEBT_TAX = $1200/year. Applied to sites 5 years or older. Accounts for unplanned breakage, dependency churn, PHP version migrations, and broken plugin updates.

The Modern Jamstack baseline

The comparison line on the chart is a generic modern static-first stack (Next.js or Astro on a Tier-1 CDN, Postgres for data, Stripe for commerce, an auth provider for membership). We do not assume our specific stack — these are commodity numbers any senior product team should hit:

jamstackYearlyCost = JAMSTACK_HOSTING(traffic)
  + (JAMSTACK_DEV_HOURS_YEAR * BLENDED_DEV_RATE)
  + (hasMembership ? AUTH_PROVIDER_COST : 0)
  + (hasWoo ? COMMERCE_PROVIDER_COST : 0)

jamstack5YearTCO = migrationCost.median + (jamstackYearlyCost * 5)
  • JAMSTACK_HOSTING_BASE = $540/year. Vercel Pro / Netlify Pro tier for under 1M monthly visits.
  • JAMSTACK_HOSTING_HIGH = $2400/year. Same tier at 1M-10M monthly visits.
  • JAMSTACK_DEV_HOURS_YEAR = 12. Roughly 1 hour per month of dependency updates and config drift. There is no plugin update treadmill.
  • AUTH_PROVIDER_COST = $240/year. Supabase Auth Pro, Clerk, or Auth0 Essentials at ~10k MAU.
  • COMMERCE_PROVIDER_COST = $1200/year. Shopify Lite + Stripe processing fees on a small-to-mid catalog.

Migration cost band

The "5-week sprint" to "12-week full rebuild" range is calibrated against our own quoted projects, not industry averages:

migrationCost(pages, plugins, has_woo, has_wpml, has_membership) =
  MIGRATION_BASE
  + (log10(pages) * MIGRATION_PAGE_FACTOR)
  + (plugins * MIGRATION_PLUGIN_FACTOR)
  + (has_woo ? MIGRATION_WOO : 0)
  + (has_wpml ? MIGRATION_WPML : 0)
  + (has_membership ? MIGRATION_MEMBERSHIP : 0)

returns { low: median * 0.85, median, high: median * 1.25 }
  • MIGRATION_BASE = £8,000. Discovery, content audit, IA, design tokens, deployment infra setup.
  • MIGRATION_PAGE_FACTOR = £600. Per order-of-magnitude page count (so going from 100 to 1,000 pages adds £600, not £540 per page).
  • MIGRATION_PLUGIN_FACTOR = £150/plugin. Each plugin needs to be either replaced with a Jamstack equivalent or removed.
  • MIGRATION_WOO = £4,500. WooCommerce data export, payment gateway re-integration, order history migration.
  • MIGRATION_WPML = £3,500. Per-locale URL structure, hreflang automation, translation database export.
  • MIGRATION_MEMBERSHIP = £4,000. User database migration, password reset flow, subscription state preservation.

CVE exposure count

CVE counts come from a snapshot of the Patchstack public WordPress vulnerability database dated 2026-05-06. We track the top 51 plugins by install share. The calculator matches your detected plugin count (or scanned slugs) against the catalog and sums their published CVEs over the last 24 months. Plugins beyond the top 50 use a per-plugin estimate of 0.45 CVEs over 24 months (median across the catalog).

We refresh this snapshot quarterly until Phase 3 of the calculator wires a live weekly cron from Patchstack. Numbers you see today reflect the 2026-05-06 snapshot.

Lighthouse delta

The "estimated LCP today" number on the results panel is modelled, not measured. We do not run a live Lighthouse for two reasons: it would slow the scan from sub-3-seconds to 30-plus seconds, and Lighthouse single-runs have high variance. The model is calibrated against ~200 WordPress sites we crawled in 2026 H1:

wpLcp = LCP_BASE
  + (plugins * LCP_PER_PLUGIN)
  + hostingTierPenalty

hostingTierPenalty:
  hosting under $15/mo: LCP_HOSTING_PENALTY_LOW
  hosting under $35/mo: LCP_HOSTING_PENALTY_MID
  hosting over $35/mo:  LCP_HOSTING_PENALTY_HIGH

jamstackLcp = LCP_JAMSTACK_TARGET (flat)
  • LCP_BASE = 1.2s. Bare WordPress with default theme, no plugins.
  • LCP_PER_PLUGIN = 0.08s. Average overhead per active plugin (page-builder plugins skew this up, simple admin plugins skew it down).
  • LCP_HOSTING_PENALTY_LOW = 0.6s. Shared hosting under $15/month (Bluehost, HostGator, GoDaddy basic).
  • LCP_HOSTING_PENALTY_MID = 0.3s. Mid-tier managed (SiteGround, Cloudways).
  • LCP_HOSTING_PENALTY_HIGH = 0s. WP Engine, Kinsta, Pantheon (zero penalty).
  • LCP_JAMSTACK_TARGET = 0.9s. What we ship on Vercel with next/image, edge cache, and font subsetting.

Break-even month

monthlySavings = (wpYearlyCost - jamstackYearlyCost) / 12
breakEvenMonth = ceil(migrationCost.median / monthlySavings)

Returns Infinity when monthly savings are zero or negative — which happens for tiny WordPress sites on free hosting with zero plugin licences. Migration is the wrong call there; the calculator says so.

What this calculator does NOT do

  • It does not run a live Lighthouse scan against your URL. The LCP figure is modelled.
  • It does not check your specific plugin versions for unpatched CVEs. That requires the WPScan paid API ($99-500/month) — not yet wired in.
  • It does not charge anything, store your URL, or email you. Phase 1 is fully anonymous client-side math; Phase 2 logs scan results to our own analytics table for the public moat dataset.
  • It does not compare against Webflow, Shopify, or WP-VIP. Those are valid alternatives at different price points and are on the roadmap.

Source code

The calculator is built with Astro 5, Supabase, and Vercel. The math lives in src/lib/wp-migration/formulas.ts and is covered by 32 unit tests in formulas.test.ts. Every constant on this page corresponds to a frozen export in that file. If you spot something wrong, email hi@socialanimal.dev — we will fix it and update this page in the same deploy.

Ready to run the math on your site?

Open the calculator Book a 30-min migration call
Get in touch

Let's build
something together.

Whether it's a migration, a new build, or an SEO challenge — the Social Animal team would love to hear from you.

Get in touch →