diff --git a/admin/create-payment-link.sh b/admin/create-payment-link.sh
new file mode 100644
index 0000000000000000000000000000000000000000..abd8f529d24a62d3d97b335fdd83c2c6d74a4794
--- /dev/null
+++ b/admin/create-payment-link.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env bash
+
+set -x
+set -euo pipefail
+
+KEY=$1
+shift
+
+PRODUCT_ID=$(
+    curl https://api.stripe.com/v1/products \
+	 -u "${KEY}:" \
+	 -d "name=30 GiB-months" \
+	 -d "description=30 GiB-months of Private.Storage storage × time" \
+	 -d "statement_descriptor=PRIVATE STORAGE" \
+	 -d "url=https://private.storage/" |
+	jp --unquoted id
+	  )
+
+echo "Product: $PRODUCT_ID"
+
+PRICE_ID=$(
+    curl https://api.stripe.com/v1/prices \
+	 -u "${KEY}:" \
+	 -d "currency=USD" \
+	 -d "unit_amount=650" \
+	 -d "tax_behavior=exclusive" \
+	 -d "product=${PRODUCT_ID}" |
+	jp --unquoted id
+	)
+
+echo "Price: $PRICE_ID"
+
+LINK_URL=$(
+    curl https://api.stripe.com/v1/payment_links \
+	 -u "${KEY}:" \
+	 -d "line_items[0][price]=${PRICE_ID}" \
+	 -d "line_items[0][quantity]=1" |
+	jp --unquoted url
+       )
+
+echo "Payment link: $LINK_URL"
diff --git a/admin/create-product.sh b/admin/create-product.sh
deleted file mode 100644
index 797e825d00e2d4f7be21ab5d4ba344ba03501400..0000000000000000000000000000000000000000
--- a/admin/create-product.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-set -euo pipefail
-
-KEY=$1
-shift
-
-curl https://api.stripe.com/v1/products \
-  -u "${KEY}:" \
-  -d "name=30 GiB-months" \
-  -d "description=30 GiB-months of Private.Storage storage × time" \
-  -d "default_price_data[currency]=USD" \
-  -d "default_price_data[unit_amount]=650" \
-  -d "default_price_data[tax_behavior]=exclusive" \
-  -d "statement_descriptor=PRIVATE STORAGE" \
-  -d "url=https://private.storage/"