diff --git a/tasks/install_ta_tools.yml b/tasks/install_ta_tools.yml
index 63bbce248a2a55c15d2df6a87d6847b519c7dd80..f156e941272666c62fe06301213b2ae64897a933 100644
--- a/tasks/install_ta_tools.yml
+++ b/tasks/install_ta_tools.yml
@@ -1,31 +1,53 @@
 ---
 - name: install Git (prerequisite for ansible.builtin.git)
   ansible.builtin.apt:
-    name: "git"
+    name: [
+      "git",
+      "libdist-zilla-perl",
+    ]
     state: latest
 
 - name: checkout ta-tools repo
   ansible.builtin.git:
     repo: "https://git.slub-dresden.de/digital-preservation/tools-for-technical-analysts.git"
     dest: "/tmp/tools-for-technical-analysts/"
+  register: ta_tools_git
 
-# https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html
-# 'If path is a directory, it is copied recursively. In this case, if path ends
-# with "/", only inside contents of that directory are copied to destination.'
+# Run `dzil listdeps` to get an updated list of dependencies.
+# Commented dependencies are not available as Debian packages and will be
+# installed when running `dzil install` in the next task.
+- name: install dependencies for ta-tools
+  ansible.builtin.apt:
+    name: [
+      # App::Cmd::Setup
+      "libdata-printer-perl",
+      "libdatetime-perl",
+      "libdatetime-format-dateparse-perl",
+      # ExtUtils::MakeMaker
+      # IO::Zlib
+      # LWP::UserAgent
+      "libpath-tiny-perl",
+      "libregexp-optimizer-perl",
+      "libsoap-lite-perl",
+      "libtext-csv-perl",
+      "libyaml-perl",
+    ]
+
+# This is THE main purpose of this task file, so we won't run this as a handler
+# but set "noqa: no-handler" instead.
 - name: install ta-tools
-  ansible.builtin.copy:
-    src: "/tmp/tools-for-technical-analysts/{{ item.src }}"
-    dest: "{{ item.dest }}"
-    mode: "{{ item.mode | default('0755') }}"
-    directory_mode: "0755"    # set this, or dirs below the dest directories may become untraversable!
-    remote_src: true
-  loop:
-    - src: "bin/"
-      dest: "/usr/local/bin/"
-    - src: "lib/"
-      dest: "/usr/local/perl/"
+  ansible.builtin.command:
+    cmd: "dzil install"
+    chdir: "/tmp/tools-for-technical-analysts/"
+  when: ta_tools_git.changed    # noqa: no-handler
 
-- name: set execution bit for ta-tools script
+- name: create directories needed by ta-tool
   ansible.builtin.file:
-    path: "/usr/local/bin/ta-tool.pl"
+    path: "/home/{{ vault_subapp_user }}/{{ item }}/"
+    state: directory
     mode: "0755"
+    owner: "{{ vault_subapp_user }}"
+    group: "{{ vault_subapp_group }}"
+  loop:
+    - ".cache"
+    - ".config"