Migrate to Qdrant
The Qdrant Migration Tool is a CLI that moves your vectors, metadata, and sparse embeddings from other vector databases into Qdrant. It streams data in batches and can resume interrupted migrations.
Installation
The tool is distributed as a container image and as a standalone binary.
Container Image
The container image runs with Docker, Podman, or any similar container runtime. It supports every source, and the examples in this documentation use it.
docker pull registry.cloud.qdrant.io/library/qdrant-migration
Binary
On macOS and Linux, install the binary with Homebrew:
brew install qdrant/tap/qdrant-migration
Alternatively, download the archive for your operating system and CPU architecture from GitHub Releases, extract it, and place the qdrant-migration binary in a directory on your PATH.
To run an example from this documentation with the binary, replace docker run --net=host --rm -it registry.cloud.qdrant.io/library/qdrant-migration, along with any -e or -v options, with qdrant-migration.
Migration Tool or Snapshots
Qdrant snapshots are low-level disk operations built for same-cluster recovery and local backups. They require snapshot consistency across nodes and can be hard to port across machines or cloud zones. The Migration Tool:
- Streams data in live batches.
- Resumes interrupted migrations.
- Works while data is still being inserted.
- Supports collection reconfiguration, such as changing replication settings or quantization.
- Reads from other vector databases, not only from Qdrant.
To choose between the two, see Migration and Recovery Options.
Supported Sources
| Source | CLI Subcommand | Auto-Creates Collection? |
|---|---|---|
| Pinecone | pinecone | Yes |
| Weaviate | weaviate | No (must pre-create) |
| Milvus | milvus | Yes |
| Elasticsearch | elasticsearch | Yes |
| OpenSearch | opensearch | Yes |
| Azure AI Search | azure | Yes |
| pgvector | pg | Yes |
| S3 Vectors | s3 | Yes |
| Amazon DynamoDB | dynamodb | Yes |
| Turbopuffer | turbopuffer | Yes |
| Chroma | chroma | Yes |
| Redis | redis | No (must pre-create) |
| MongoDB | mongodb | No (must pre-create) |
| FAISS | faiss | Yes |
| Apache Solr | solr | No (must pre-create) |
| Qdrant | qdrant | Yes |
Not seeing your current vector store? Open an issue on GitHub and let us know!
General Advice
Run the tool close to your databases. Direct connectivity between source and target is not required — the tool streams through the machine it runs on. For best performance, use a machine with low latency to both.
Use
--net=hostfor local instances. If either database runs on the host machine, the container needs host networking to reachlocalhost.The tool resumes by default. Migration progress is tracked in a
_migration_offsetscollection in Qdrant. If a migration is interrupted, re-running the same command picks up where it left off. Use--migration.restartto force a fresh start.Batch size is tunable. The default batch size is 50. For large migrations, increase it with
--migration.batch-size(e.g., 256 or 512) to improve throughput.
Universal CLI Options
These flags apply to all source types:
| Flag | Default | Description |
|---|---|---|
--migration.batch-size | 50 | Points per upsert batch |
--migration.restart | false | Ignore saved progress, start fresh |
--migration.create-collection | true | Auto-create target collection |
--migration.batch-delay | 0 | Milliseconds between batches |
--migration.offsets-collection | _migration_offsets | Collection used to track migration progress |
--debug / --trace | — | Verbose logging |
--skip-tls-verification | false | Skip TLS certificate verification |
After Migration
Once your data is in Qdrant, verify that everything arrived correctly:
- Migration Verification Guide — a structured framework covering data integrity checks and search quality validation.
- Keeping Postgres in Sync — if you’re running Postgres alongside Qdrant, learn how to keep them in sync.