Migrate a WordPress site
over FTP, hassle-free
WP Migrate Toolkit moves files + database from one host to another using only FTP access — ideal for shared hosting where you have neither SSH nor a remotely reachable database.
$ python3 wpmig.py migrate -c monsite.yml [1/2] SOURCE — export ✓ base exportée : 77 tables ✓ fichiers archivés (zip) : 12 776 fichiers [2/2] DESTINATION — import ✓ extraction : 12 776 fichiers, 0 erreur ✓ base importée : 77 tables ✓ search-replace : 282 lignes ✓ Terminé en 92 s.
Migrations on shared hosting are a nightmare
No SSH, a MySQL database on localhost, server-to-server FTP blocked, an invalid FTPS certificate. WP Migrate Toolkit works around all of it.
Without the tool
Blocked server-to-server transfers, a database unreachable from outside, fragile manual scripts, and serialized URLs corrupted at the slightest domain change.
With WP Migrate Toolkit
Your machine acts as the FTP go-between; the PHP agent exports/imports in place; the URL is replaced cleanly. All automated and cleaned up.
Everything for a reliable migration
From shared hosting to VPS, no surprises.
FTP only, no SSH
Built for shared hosting: no shell access required. The localhost MySQL database is exported and imported by a PHP agent running in place.
CLI + Plugin
A config-driven command-line tool AND a click-button WordPress plugin. The same shared engine on both sides.
Safe search-replace
Serialization-safe URL replacement: never breaks WordPress serialized data, even when the URL length changes.
ZIP / TAR fallback
Auto-detects ZipArchive; falls back to a .tar (PharData) if the zip extension is missing on the source host.
Shared FTPS handled
Invalid certificates ignored and Pure-FTPd/LWS TLS session resumption supported out of the box.
Automatic cleanup
The agent, token and artifacts are removed after each phase. Nothing left behind in production.
Three steps, one clear flow
Driven by a config file or from the WordPress admin.
Source (FTP)
Agent PHP : export base + archive fichiers
Intermédiaire
Votre machine ou un VPS relaie le transfert
Destination (FTP)
Extraction, import base, search-replace
Source
The agent exports the database (.sql) and archives the files (.zip or .tar), then the tool downloads them.
Destination
Upload + extraction, patching of wp-config.php, then database import.
Finalization
Serialization-safe URL search-replace, then a full cleanup of temporary files.
Illustrated tutorials & guides
Step-by-step explanations to get to grips with the tool.
Migrate a WordPress site over FTP with the CLI
Step by step: YAML config, the migrate command, and what happens under the hood.
Read the tutorial →Export / import with the WordPress plugin
Create a package and restore it from the admin, without touching FTP.
Read the tutorial →Why serialization-safe search-replace
How to change a site's URL without corrupting serialized data.
Read the tutorial →Free and open source
The WordPress plugin, the CLI, or both.
WordPress plugin
To export/import from the admin.
- Interface under Tools → WP Migrate
- Export / import a package
- Built-in search-replace
FTP CLI
To migrate A → B in one command.
- Automated migration
- Driven by a YAML file
- No WordPress admin required
Frequently asked questions
Direct answers, also written for search engines and AI.
Can I migrate without SSH access?
Yes. WP Migrate Toolkit only needs FTP access on both sides. A small PHP agent is dropped on the server, run over HTTP, then deleted: it exports/imports the database (reachable only on localhost) from inside the server.
Why not Softaculous or Duplicator?
On shared hosting, Softaculous remote FTP import often fails (Connection refused: server-to-server FTP is blocked). Here, your machine or a VPS acts as the go-between and the heavy extraction runs in place. Duplicator requires access to each site’s WordPress admin.
Does URL replacement break serialized data?
No. The tool applies a recursive serialization-safe search-replace that correctly re-encodes the lengths of WordPress serialized strings.
What if the source server lacks the ZipArchive extension?
The tool automatically falls back to a .tar archive via PharData, available even without the zip extension. Extraction on the destination detects the format.
Are my passwords sent anywhere?
No. The agent is protected by a random token, compared in constant time. Optional telemetry only sends counters (tables/files, duration, success/failure), never any credential.
Ready to migrate painlessly?
Download the plugin or the CLI, or browse the code on GitHub.