diff --git a/Ansible/roles/debian_server/files/offsite-backup b/Ansible/roles/debian_server/files/offsite-backup
new file mode 100755
index 0000000000000000000000000000000000000000..1534ed5a20d0907f63e547e8a5f458f83da097b8
--- /dev/null
+++ b/Ansible/roles/debian_server/files/offsite-backup
@@ -0,0 +1,62 @@
+#!/bin/sh
+set -eu
+
+is_btrfs() {
+    [ "$(df --output=fstype "$1" | tail +2)" = 'btrfs' ]
+}
+
+is_subvolume() {
+    btrfs subvolume show "$1" >/dev/null 2>&1
+}
+
+root_subvolume() {
+    path="$1"
+    until is_subvolume "$path" || [ "$path" = '/' ]
+    do
+        path="$(dirname "$path")"
+    done
+    echo "$path"
+}
+
+cleanup() {
+    exit_code="$?"
+    if [ -n "${snapshot:-}" ]
+    then
+        btrfs subvolume delete "$snapshot"
+    fi
+    sync --file-system "$destination"
+    if [ "$exit_code" -eq 0 ]
+    then
+        curl -so /dev/null "https://notify.shore.co.il/send?message=Backup%20finished%20successfully%20on%20$(hostname -s)."
+    else
+        curl -so /dev/null  "https://notify.shore.co.il/send?message=Backup%20failed%20on%20$(hostname -s)."
+    fi
+}
+
+if [ "$#" -ne 1 ]
+then
+    echo "Usage: $0 destination" >&2
+    exit 1
+fi
+
+if ! is_btrfs /var/backups
+then
+    echo '/var/backups is not on btrfs filesystem. Exiting.' >&2
+    exit 1
+fi
+
+trap 'cleanup' INT QUIT EXIT TERM
+
+destination="$1"
+volume="$(root_subvolume /var/backups)"
+snapshot="$(mktemp --dry-run "--tmpdir=$volume")"
+btrfs subvolume snapshot -r "$volume" "$snapshot"
+source="/var/backups"
+source="${snapshot}${source#$volume}/"
+
+sync --file-system /var/backups
+rsync --archive \
+      --delete \
+      --info=progress2 \
+      "$source" \
+      "$destination"
diff --git a/Ansible/roles/debian_server/tasks/btrfs.yml b/Ansible/roles/debian_server/tasks/btrfs.yml
index 709106985155e8f0ad2f90f6229238fcbf1e4700..b0f37acac6ee1878ef054839ae0e4853d9c64955 100644
--- a/Ansible/roles/debian_server/tasks/btrfs.yml
+++ b/Ansible/roles/debian_server/tasks/btrfs.yml
@@ -9,11 +9,11 @@
 
 - name: Copy btrfs backup script
   ansible.builtin.copy:
-    dest: /usr/local/sbin/btrfs-backup
+    dest: /usr/local/sbin/offsite-backup
     group: root
     mode: preserve
     owner: root
-    src: btrfs-backup
+    src: offsite-backup
 
 - name: Install btrfs scrub services and timers
   loop: &loop