Leaving WP Engine is mostly a matter of order. Do these six things, in this order:
- Find your renewal date and give notice in time. WP Engine's terms need notice of non-renewal at least 30 days before the end of your term, and only the account Owner can cancel. Leaving mid-term does not end the bill.
- List everything WP Engine does for you beyond WordPress: DNS on its Advanced Network or Global Edge Security, LargeFS media in your own S3 bucket, must-use plugins, redirect rules in the User Portal, and any add-ons.
- Take your own complete copy: a full backup ZIP (the download link lasts 7 days), or files and database over the SSH Gateway.
- Build and test every site on the new host before you touch DNS.
- Switch over with a short DNS TTL, and on a shop, pause orders during the final sync.
- Only then let the WP Engine plan end, with offline backups kept. After termination you lose access to the User Portal and WP Engine won't help with the move.
The rest of this guide explains each step, with the commands.
Why people review their WP Engine plan
Reasons vary: plan changes, renewal prices, support, or the wider WordPress dispute. On 7 November 2026, WP Engine sold one plan online, Essential, with first-year pricing for new customers and "Product renewal pricing subject to change"; Business and Enterprise go through its sales team (WP Engine plans). WP Engine's lawsuit against Automattic is still running in a US federal court, with a jury trial listed from 19 October 2027 (docket). Whatever your reason, the steps below are the same.
How WP Engine's contract ends
Everything in this section comes from WP Engine's Terms of Service (updated 1 January 2026) and its cancellation guide (updated 7 October 2026). If you signed a custom order form, check it first: WP Engine says "Custom term plans can override standard terms".
| Question | What WP Engine's terms say |
|---|---|
| Does my plan renew automatically? | Yes. It renews "for successive Renewal Terms each equal to the immediately preceding term" unless notice is given "no later than 30 days prior to the expiration of the active term" (§7(a)). Monthly charges "will automatically renew each month unless canceled" (cancellation guide) |
| Who can cancel, and where? | "Only Owner level users can cancel a WP Engine hosting plan"; support staff "cannot initiate the process". In the User Portal: Billing, then the Support section, then the link under Modify plan ("Request cancellation" on premium accounts, "Cancel plan" on shared plans), then the cancellation form |
| How much notice? | "plan cancellations require a 30 day notice via our cancellation form" |
| Can I leave mid-term? | Only if WP Engine materially breaches the agreement. Otherwise "all remaining fees payable under the Agreement will immediately become due" (§7(b)) |
| Will I get a refund? | Fees "are not refundable except as expressly stated herein" (§6(a)). A prorated refund of fees paid annually in advance applies only when WP Engine ends the agreement for its own convenience (§7(c)) |
| What happens afterwards? | You "will no longer be able to access those Services or the User Portal", and WP Engine "will not be able to assist you with any site migration tasks". Keeping offline backups is your responsibility (§7(d), §11(e)). After the notice period, "all content will be deleted" (cancellation guide) |
| Who is the contract with? | "WPEngine, Inc., a Delaware corporation" in Austin, Texas, under Texas law, with disputes in Travis County courts (§14(c), §15), including on the UK version of the page. If your order form names another WP Engine company, its terms apply |
What this means in practice:
- On an annual plan, the date that matters is 30 days before your term ends. Give notice before then even if the move isn't finished: access continues to the end of the term, and missing the date commits you to another full term.
- On a monthly plan, give the 30 days' notice through the form, and finish the move inside that notice period.
- Download your backups before you request cancellation. WP Engine advises the same.
- In the EU, the EU Data Act's cloud-switching rules apply to some hosting contracts. Whether they change your notice or exit costs is a question for your legal adviser.
Step 1: list everything WP Engine does for you
Most failed moves miss something that lived outside WordPress. Go through each environment (production, staging and development) and note the following.
| Item | Where to look | Why it matters when you leave |
|---|---|---|
| Environments and install names | User Portal, Sites | Each environment has its own SFTP users and SSH address |
| Domains and which network they use | User Portal, Domains | Since March 2025, Agency plan accounts have had to use the Advanced Network or Global Edge Security (GES) for DNS. Advanced Network domains point at wp.wpenginepowered.com; GES domains at a per-environment host on wpeproxy.com |
| Who holds your DNS zone | Your registrar or DNS provider | You change records there at switchover, so make sure you can log in |
| SSL, CDN and firewall | Domains page; GES if you bought it | On the Advanced Network, SSL and CDN are applied at Cloudflare's edge. GES adds a managed web application firewall and DDoS mitigation. All of it stops when DNS moves, so plan the replacement |
| LargeFS | User Portal, LargeFS | Offloaded media sits in your own S3 bucket; "those files no longer exist on WP Engine servers" |
| Must-use plugins and drop-ins | wp-content/mu-plugins |
WP Engine adds mu-plugin.php (which loads wpengine-common, shown as "WP Engine System"), wpe-wp-sign-on-plugin, wpengine-security-auditor and force-strong-passwords. They are tied to WP Engine's platform |
| Redirect rules | User Portal | Rules set in the Portal live outside WordPress and outside your backup |
| Scheduled tasks | wp cron event list |
WP-Cron events travel with the database; anything WP Engine runs for you on a schedule does not |
| Outgoing email | Your SMTP or transactional-email plugin | Check which service sends your site's mail, and that its DNS records (SPF, DKIM) are in your own zone |
| Portal services and add-ons | User Portal | Smart Plugin Manager, Site Monitoring and Site Reports settings and history stay behind; NitroPack (WP Engine's version) and Smart Search AI are WP Engine-licensed; a Headless Platform front end must be rehosted; Genesis and StudioPress themes come under a revocable licence in the terms |
| Git and SSH keys | User Portal, Profile | Repoint your deploy pipeline and remove keys you no longer need |
Sources: WP Engine's SSH Gateway, Advanced Network, Global Edge Security, LargeFS (WP Engine's support article on configuring LargeFS), platform settings, Smart Plugin Manager, NitroPack and Smart Search pages, and its Terms of Service (§3).
If you manage many installs, you can collect versions and sizes in one pass from your own machine. WP Engine documents this loop pattern for running commands on several environments, and loops must run from your local machine:
for env in <env1> <env2> <env3>; do
echo "== $env"
ssh "$env@$env.ssh.wpengine.net" "cd /sites/$env && wp core version && wp db size --human-readable && du -sh wp-content/uploads"
done
Step 2: take your own copy
Use at least one of these routes for every environment you want to keep. Many teams use the ZIP as the safety copy and the SSH Gateway for the working move.
Option A: the backup ZIP
In the User Portal, open the environment's backups, choose a backup point and select Prepare ZIP (WP Engine backups).
- Full Backup is "All files and the database". Partial ZIPs (database, themes, plugins including must-use plugins, uploads, other files) help with large sites.
- The database is in the ZIP at
wp-content/mysql.sql. - A prepared ZIP "can be downloaded from this page for up to 7 days", so download it straight away and store it off WP Engine.
- WP Engine keeps 30 days of backups in the Portal. There is no automatic export to S3 or another service, and you can't export single tables.
- LargeFS media is not on WP Engine's servers, so don't expect it in the ZIP. Your S3 bucket is your copy.
Option B: the SSH Gateway (rsync and WP-CLI)
The SSH Gateway gives you WP-CLI, the MySQL client, bash and Composer, and supports rsync and scp. Points to know:
- Add an ed25519 public key in the User Portal (your profile, then SSH Keys). It works on every environment your user can access.
- You connect as
<env>@<env>.ssh.wpengine.net. Only/sites/<env>/persists between sessions. - The gateway has a 10-minute timeout and allows 5 connections per user. Split big transfers, and use rsync, which resumes where it stopped.
- From OpenSSH 9.0,
scpneeds-Oto work with the gateway (check your version withssh -V).
Export the database into the persistent private folder, copy it down, then delete it:
ssh <env>@<env>.ssh.wpengine.net "cd /sites/<env> && wp db export _wpeprivate/<env>.sql"
scp -O <env>@<env>.ssh.wpengine.net:/sites/<env>/_wpeprivate/<env>.sql ./<env>.sql
ssh <env>@<env>.ssh.wpengine.net "rm /sites/<env>/_wpeprivate/<env>.sql"
WP Engine describes _wpeprivate as "secure, hidden and persistent". wp db export passes extra flags to mysqldump
and can also write to STDOUT with - (WP-CLI). Writing to a
file first means a dropped connection costs you only the copy, not the export.
Copy the files with rsync. Re-run the same command until it finishes cleanly: -P keeps partial files and shows
progress, and later runs transfer only what changed.
rsync -rltzvP \
--exclude '_wpeprivate/' \
<env>@<env>.ssh.wpengine.net:/sites/<env>/ ./<env>/
Leave WP Engine's must-use plugins in the copy for now and remove them on the new host once you have checked the folder (Step 3). That way you never delete one of your own must-use plugins by mistake.
Option C: the WP Engine API
For agencies with many installs, the Hosting Platform API can list installs and create backups (enabling the API, API reference).
- An account Owner turns API access on (User Portal, Users, then API Access); credentials are generated per user.
- The base URL is
https://api.wpengineapi.com/v1, with HTTP Basic authentication. Every state-changing call (POST, PUT, PATCH, DELETE) is recorded in the Account Activity Log. - Keep the credentials out of your shell history, for example in a
.netrcfile:
# ~/.wpe-netrc (chmod 600): machine api.wpengineapi.com login <api-username> password <api-password>
curl --netrc-file ~/.wpe-netrc https://api.wpengineapi.com/v1/installs
Creating a backup is a POST to /installs/<install_id>/backups; take the request body from the "Create a backup"
entry in WP Engine's API reference. Turn API access off again, or delete the credentials, once you no longer need them.
Step 3: prepare the new host
Before you import anything:
- Match the PHP version, or test on a newer supported one. The User Portal shows each environment's PHP version. If you are still on PHP 8.2 or older, read our guide to PHP 8.2's end of life first.
- Write a fresh
wp-config.phpwith the new database details. Keep your$table_prefix(check it withwp config get table_prefix) and your keys and salts. Leave out WP Engine's own settings (constants startingWPE_). - Remove WP Engine's must-use plugins and cache drop-ins on the new host: the four named in Step 1, plus any
object-cache.phporadvanced-cache.phpdrop-in, unless your new host tells you to keep a drop-in of its own. - Recreate redirects from the User Portal in the new host's format.
- Set up outgoing email (an SMTP or transactional-email service), so contact forms and order emails keep sending after the move.
- Plan LargeFS media: either keep the S3 bucket and connect it with an offload plugin, or copy the files into
wp-content/uploadson the new host.
Step 4: import and test before you touch DNS
On the new host, import the database and confirm the site addresses:
wp db import <env>.sql
wp option get home
wp option get siteurl
wp cache flush && wp rewrite flush
If you keep the same domain, you don't need a search-replace. Do check for old WP Engine hostnames left in content
(<env>.wpengine.com and <env>.wpenginepowered.com):
wp search-replace '<env>.wpenginepowered.com' 'www.example.com' --all-tables-with-prefix --skip-columns=guid --dry-run --report-changed-only
wp search-replace handles PHP-serialised data safely, which a plain SQL replace does not
(WP-CLI). Read the dry-run report, then run it again
without --dry-run. Repeat for any other old hostname it finds.
Test on the real domain without changing DNS. Point the domain at the new server on your own computer only, by
adding a line to /etc/hosts (macOS, Linux) or C:\Windows\System32\drivers\etc\hosts (Windows):
203.0.113.10 www.example.com example.com
Or test from the command line (-k because the new certificate may not exist until DNS moves):
curl -k -I --resolve www.example.com:443:203.0.113.10 https://www.example.com/
Then check, page by page: the home page and key templates, log-in, forms, search, images (LargeFS media above all),
wp core verify-checksums, wp plugin list --status=active, wp cron event list, and on a shop the basket, checkout
(in test mode), account pages and any payment or stock webhooks.
Step 5: switch over
- Lower the DNS TTL on the records you will change, and wait for the old TTL to pass before switching. See the
current TTL (the second column) with
dig +noall +answer www.example.comanddig +noall +answer example.com. - On a shop, pause orders so none are lost in the gap: for example
ssh <env>@<env>.ssh.wpengine.net "cd /sites/<env> && wp maintenance-mode activate", then purge WP Engine's cache in the User Portal so visitors see the notice. - Run a final sync: export the database again and re-run the same rsync (only changed files transfer), then import on the new host.
- Change the records at your DNS provider. Replace the Advanced Network CNAME (
wp.wpenginepowered.com), the GES CNAME (<n>.wpeproxy.com) or WP Engine's A records with your new host's records. If you use CNAME flattening at the root domain, update that record too. - Check the certificate. WP Engine's edge certificate stops applying once DNS moves. Many hosts can only issue a new Let's Encrypt certificate after DNS points at them, so check HTTPS straight after the change.
- Confirm and reopen:
dig +short www.example.comreturns the new address, the site loads over HTTPS, test orders work, and maintenance mode is off on the new host.
Step 6: after the move
- Watch the new host's error logs, scheduled tasks and email delivery, and resubmit your sitemap in Search Console.
- If you copied LargeFS media into
uploads, check that image URLs no longer point at the bucket or WP Engine. - Remove WP Engine access you no longer need: SSH keys, API credentials and SFTP users.
- Download a final full backup ZIP of every environment and keep it offline before the plan ends.
- Let the plan end on its date. Don't delete installs early if you may still need the Portal for a backup.
What stays behind, and what to do
| WP Engine feature | What happens when you leave | What to do |
|---|---|---|
Must-use plugins (wpengine-common and others) |
Tied to WP Engine's platform | Remove them on the new host |
| Page cache and object cache | Provided by WP Engine's platform | Use the new host's caching; remove WP Engine's drop-ins |
| Advanced Network or GES (CDN, SSL at the edge, and on GES a web application firewall with attack mitigation) | Stops when DNS moves | Set up your own CDN and firewall (for example your own Cloudflare account) or your new host's |
| LargeFS | Media stays in your S3 bucket, not on WP Engine | Reconnect the bucket with an offload plugin, or copy the media into uploads |
| Redirect rules in the User Portal | Not part of your WordPress files | Recreate them on the new host |
| Smart Plugin Manager, Site Monitoring, Site Reports | Settings and history stay behind | Export what you need first; replace the service |
| NitroPack (WP Engine's version), Smart Search AI | WP Engine-licensed | Buy direct from the vendor or replace |
| Headless Platform front end | Hosted by WP Engine | Rehost the Node.js front end elsewhere |
| Genesis and StudioPress themes | Licence through your plan | Check the licence terms before you keep using them |
| Backups in the Portal | Gone after termination | Keep your own offline copies |
Moving to Corefinity
We'll move your sites for free. Free migration is included on every plan, done by our engineers.
Whoever moves your sites, a few things stay with you: giving WP Engine notice, changing the records at your DNS provider, and cancelling WP Engine once you're happy.
Where your sites go: a CoreCluster, your own managed cluster for many sites, priced by capacity, not by visits or sites. It starts from £300 + VAT, €330 + VAT or $350 a month, billed monthly on a rolling contract with no minimum term and no setup fee. Each site runs in its own container, with staging and production environments and backups (snapshots) every 6 hours, kept 30 days. It is hosted on Google Cloud in London, Northern Virginia (Ashburn), the Netherlands or Sydney, with 24/7 engineer support.
In place of GES's firewall: a web application firewall. The control panel's firewall has several layers (per-site IP and country rules, HTTP authentication and SSH access control), and Cloudflare's WAF is fully supported if you use your own Cloudflare account.
Moving one site? CoreStack is one fully managed site with its own staging environment, ordered online, from £150 + VAT, €165 + VAT or $175 a month.
More on WordPress hosting at Corefinity, and on how our support works.
Sources
All checked on 7 November 2026 unless stated.
- WP Engine, Terms of Service (updated 1 January 2026; §3, §6(a), §7(a)-(d), §11(e), §14(c), §15)
- WP Engine, Cancel or change a plan (updated 7 October 2026)
- WP Engine, Plans
- WP Engine, SSH Gateway (updated 8 September 2026)
- WP Engine, Advanced Network (updated 12 July 2026)
- WP Engine, Global Edge Security (updated 4 November 2026)
- WP Engine, "Configuring LargeFS", support article (updated 28 July 2025); search "LargeFS" at wpengine.com/support
- WP Engine, Platform settings (updated 8 July 2026)
- WP Engine, Backups and restore (updated 8 June 2026)
- WP Engine, Enabling the API (updated 29 June 2026) and Hosting Platform API reference
- WP Engine, Smart Plugin Manager, NitroPack and Smart Search (accessed 6 November 2026)
- WPEngine, Inc. v. Automattic Inc., N.D. Cal. 4:24-cv-06917, docket (trial date as reported on 7 November 2026)
- WP-CLI,
wp db exportandwp search-replace