diff --git a/roles/fetch-python-sdist-output/README.rst b/roles/fetch-python-sdist-output/README.rst
new file mode 100644
index 000000000..357f327c3
--- /dev/null
+++ b/roles/fetch-python-sdist-output/README.rst
@@ -0,0 +1 @@
+Collect output from a python sdist build
diff --git a/roles/fetch-python-sdist-output/tasks/main.yaml b/roles/fetch-python-sdist-output/tasks/main.yaml
new file mode 100644
index 000000000..6eb37a283
--- /dev/null
+++ b/roles/fetch-python-sdist-output/tasks/main.yaml
@@ -0,0 +1,25 @@
+- name: Find tarballs and wheels in dist folder
+  find:
+    file_type: file
+    paths: "src/{{ zuul.project.canonical_name }}/dist"
+    patterns: "*.tar.gz,*.whl"
+  register: result
+
+- name: Display stat for tarballs and wheels
+  stat:
+    path: "{{ item.path }}"
+  with_items: "{{ result.files }}"
+
+- name: Ensure artifacts directory exists
+  file:
+    path: "{{ zuul.executor.work_root }}/artifacts"
+    state: directory
+  delegate_to: localhost
+
+- name: Collect artifacts
+  synchronize:
+    dest: "{{ zuul.executor.work_root }}/artifacts/"
+    mode: pull
+    src: "{{ item.path }}"
+    verify_host: true
+  with_items: "{{ result.files }}"