diff --git a/scripts/mongodb-copy-prod.sh b/scripts/mongodb-copy-prod.sh
new file mode 100755
index 0000000000000000000000000000000000000000..04b6b1c666c56d3b7060f2174bacbb28ec1b12b5
--- /dev/null
+++ b/scripts/mongodb-copy-prod.sh
@@ -0,0 +1,80 @@
+set -e # Exit shell when an error is encountered
+
+if [ "$2" = "" ] || [ "$1" = "-h" ]; then
+  echo "Usage: `basename $0` SRC_URL TARGET_CONTAINER_NAME [DB_NAME (default=ram)]"
+  exit 0
+fi
+
+# Config
+SRC_URL=$1
+TARGET_CONTAINER_NAME=$2
+DB_NAME=${3:-"ram"}
+
+echo "SRC_URL=$SRC_URL"
+echo "TARGET_CONTAINER_NAME=$TARGET_CONTAINER_NAME"
+echo "DB_NAME=$DB_NAME"
+
+# Local variables
+CWD=$PWD
+TIMESTAMP=$(date +%Y%m%d%H%M%S)
+BACKUP_DIR="backups/${TARGET_CONTAINER_NAME}_${DB_NAME}_${TIMESTAMP}"
+DUMP_DIR="dump/$(echo $SRC_URL | sed -E 's/^\s*.*:\/\///g' | cut -f1 -d"/")_${TIMESTAMP}" # remove https:// and path from SRC_URL
+
+if ! test -f .migrate; then
+  echo "ERROR: .migrate file not found, check if you are in the right directory"
+  exit 1
+fi
+
+
+# Backup of the target db
+mkdir -p $BACKUP_DIR
+docker exec $TARGET_CONTAINER_NAME mkdir -p /dump/$DB_NAME
+docker exec $TARGET_CONTAINER_NAME bash -c "mongodump --authenticationDatabase admin --username root -d $DB_NAME --password \$MONGODB_ROOT_PASSWORD -h localhost"
+docker cp $TARGET_CONTAINER_NAME:/dump/$DB_NAME $BACKUP_DIR
+cp .migrate $BACKUP_DIR
+echo "***** Db $TARGET_CONTAINER_NAME/$DB_NAME backed up in $BACKUP_DIR (with .migrate file)"
+
+
+# Restore of the source backup
+mkdir -p $DUMP_DIR
+cd $DUMP_DIR
+wget $SRC_URL/latest.tar.gz
+wget $SRC_URL/.migrate
+gunzip latest.tar.gz
+tar -xvf latest.tar
+docker exec $TARGET_CONTAINER_NAME rm -rf /dump/temp/
+docker exec $TARGET_CONTAINER_NAME mkdir /dump/temp/
+docker cp ./mongo__*/ram/ $TARGET_CONTAINER_NAME:/dump/temp/$DB_NAME
+docker exec $TARGET_CONTAINER_NAME bash -c "mongo --authenticationDatabase admin --username root --password \$MONGODB_ROOT_PASSWORD $DB_NAME --eval 'db.dropDatabase()'"
+docker exec $TARGET_CONTAINER_NAME bash -c "mongorestore --authenticationDatabase admin --username root --password \$MONGODB_ROOT_PASSWORD -d $DB_NAME /dump/temp/$DB_NAME/"
+echo "***** Latest dump $SRC_URL restored in $TARGET_CONTAINER_NAME/$DB_NAME (and stored in $DUMP_DIR)"
+
+# Cleanup user email and password change (not for admin users)
+cat > mongo_clean_users.js <<EOL
+db.users.aggregate([{ \$addFields: { emailTemp: { \$concat: [ {\$toLower: "\$name"}, ".", {\$toLower: "\$surname"}, "@nowhere69.com" ] } }}, { \$out: "users" }])
+db.users.updateMany({role: {\$ne: 1}}, [{ \$set: {email: "\$emailTemp", password: "\$2a\$12\$vLQjJ9zAWyUwiXLeQDa6w.XzrlgPBhw.2GWrjog/yuEjIaZnQwmZu"} }])
+db.users.updateMany({}, [{ \$unset: "emailTemp" }])
+db.tempusers.deleteMany({})
+db.newslettersubscriptions.deleteMany({})
+EOL
+docker cp ./mongo_clean_users.js $TARGET_CONTAINER_NAME:/dump/temp/
+docker exec $TARGET_CONTAINER_NAME bash -c "mongo --authenticationDatabase admin --username root --password \$MONGODB_ROOT_PASSWORD $DB_NAME < /dump/temp/mongo_clean_users.js"
+rm mongo_clean_users.js
+
+# .migrate file copy
+cd $CWD
+if [ "$DB_NAME" = "ram" ]; then 
+  cp $DUMP_DIR/.migrate .migrate
+  npm run migrate:up
+fi
+docker exec $TARGET_CONTAINER_NAME rm -rf /dump/temp/
+
+
+echo ""
+echo "*************************************************************************** Summary *********************************************************************"
+echo "Db $TARGET_CONTAINER_NAME/$DB_NAME backed up in $BACKUP_DIR (with .migrate file)"
+echo "Latest dump $SRC_URL stored in $DUMP_DIR and restored in $TARGET_CONTAINER_NAME/$DB_NAME (and prod emails cleaned up)"
+if [ "$DB_NAME" = "ram" ]; then echo "The local .migrate file has been copied from $SRC_URL for db $DB_NAME and migration:up runned"; fi
+echo "*********************************************************************************************************************************************************"
+
+exit 0