diff --git a/.circleci/config.yml b/.circleci/config.yml
index d33849e40ed5093b194e471b335020955ffee8b6..f0a4bc18189e0001131f825dd902bb03540fc2bc 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -127,16 +127,6 @@ jobs:
             # constraints on CircleCI. :/
             nix-build --cores 1 --max-jobs 1 --argstr hypothesisProfile ci --arg collectCoverage true --attr doc
 
-      - run:
-          name: "Cache codecov"
-          command: |
-            # Build codecov and any dependencies here, before we save the
-            # cache, so that they make it in to the cache too.  Turns out
-            # there is a python-cryptography dependency here that is expensive
-            # to build that doesn't get built earlier.  This saves us a couple
-            # minutes.
-            nix-build --expr '(import <nixpkgs> { }).python.withPackages (ps: [ ps.codecov ])'
-
       - save_cache:
           name: "Cache Nix Store Paths"
           key: zkapauthorizer-nix-store-v4-{{ checksum "nixpkgs.rev" }}
diff --git a/.circleci/report-coverage.sh b/.circleci/report-coverage.sh
index 3f15868363d5f8b3c1db8f1b6d591e5862efe971..9f6cb79a78f0335f08f44b2f9c51a18ddbf95703 100755
--- a/.circleci/report-coverage.sh
+++ b/.circleci/report-coverage.sh
@@ -1,9 +1,11 @@
-#! /usr/bin/env nix-shell
-#! nix-shell -i bash -p "python.withPackages (ps: [ ps.codecov ])"
+#! /usr/bin/env bash
 set -x
 find ./result-doc/share/doc
 cp ./result-doc/share/doc/*/.coverage.* ./
 python -m coverage combine
 python -m coverage report
 python -m coverage xml
-codecov --file coverage.xml
+
+# Unfortunately, this is the recommended uploader.
+# https://docs.codecov.io/docs/about-the-codecov-bash-uploader
+bash <(curl -s https://codecov.io/bash)