diff --git a/cumulus/scripts/ci/create-benchmark-pr.sh b/cumulus/scripts/ci/create-benchmark-pr.sh
new file mode 100755
index 0000000000000000000000000000000000000000..46927f24b8089b2863253240f6f7a83e9f9cab7d
--- /dev/null
+++ b/cumulus/scripts/ci/create-benchmark-pr.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+
+set -Eeu -o pipefail
+shopt -s inherit_errexit
+
+PR_TITLE="$1"
+HEAD_REF="$2"
+
+ORG="paritytech"
+REPO="$CI_PROJECT_NAME"
+BASE_REF="$CI_COMMIT_BRANCH"
+# Change threshold in %. Bigger values excludes the small changes.
+THRESHOLD=${THRESHOLD:-30}
+
+WEIGHTS_COMPARISON_URL_PARTS=(
+  "https://weights.tasty.limo/compare?"
+  "repo=$REPO&"
+  "threshold=$THRESHOLD&"
+  "path_pattern=**%2Fweights%2F*.rs&"
+  "method=guess-worst&"
+  "ignore_errors=true&"
+  "unit=time&"
+  "old=$BASE_REF&"
+  "new=$HEAD_REF"
+)
+printf -v WEIGHTS_COMPARISON_URL %s "${WEIGHTS_COMPARISON_URL_PARTS[@]}"
+
+PAYLOAD="$(jq -n \
+  --arg title "$PR_TITLE" \
+  --arg body "
+This PR is generated automatically by CI.
+
+Compare the weights with \`$BASE_REF\`: $WEIGHTS_COMPARISON_URL
+
+- [ ] Backport to master and node release branch once merged
+" \
+  --arg base "$BASE_REF" \
+  --arg head "$HEAD_REF" \
+  '{
+      title: $title,
+      body: $body,
+      head: $head,
+      base: $base
+   }'
+)"
+
+echo "PAYLOAD: $PAYLOAD"
+
+curl \
+  -H "Authorization: token $GITHUB_TOKEN" \
+  -X POST \
+  -d "$PAYLOAD" \
+  "https://api.github.com/repos/$ORG/$REPO/pulls"
diff --git a/cumulus/scripts/ci/gitlab/pipeline/benchmarks.yml b/cumulus/scripts/ci/gitlab/pipeline/benchmarks.yml
index 03aedd039600e6b9c9c5c941290128b96a536617..09a0d7d215236dd3972e4de86bb08e85d2022537 100644
--- a/cumulus/scripts/ci/gitlab/pipeline/benchmarks.yml
+++ b/cumulus/scripts/ci/gitlab/pipeline/benchmarks.yml
@@ -28,10 +28,7 @@ benchmarks-assets:
     - export CURRENT_TIME=$(date '+%s')
     - export BRANCHNAME="weights-statemint-${CI_COMMIT_BRANCH}-${CURRENT_TIME}"
     - !reference [.git-commit-push, script]
-    # create PR to release-parachains-v* branch
-    - curl -u ${GITHUB_USER}:${GITHUB_TOKEN}
-      -d '{"title":"[benchmarks] Update weights for statemine/t","body":"This PR is generated automatically by CI. (Once merged please backport to master and node release branch.)","head":"'${BRANCHNAME}'","base":"'${CI_COMMIT_BRANCH}'"}'
-      -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls
+    - ./scripts/ci/create-benchmark-pr.sh "[benchmarks] Update weights for statemine/t" "$BRANCHNAME"
   after_script:
     - rm -rf .git/config
   tags:
@@ -50,10 +47,7 @@ benchmarks-collectives:
     - export CURRENT_TIME=$(date '+%s')
     - export BRANCHNAME="weights-collectives-${CI_COMMIT_BRANCH}-${CURRENT_TIME}"
     - !reference [.git-commit-push, script]
-    # create PR
-    - curl -u ${GITHUB_USER}:${GITHUB_TOKEN}
-      -d '{"title":"[benchmarks] Update weights for collectives","body":"This PR is generated automatically by CI.","head":"'$BRANCHNAME'","base":"'${CI_COMMIT_BRANCH}'"}'
-      -X POST https://api.github.com/repos/paritytech/${CI_PROJECT_NAME}/pulls
+    - ./scripts/ci/create-benchmark-pr.sh "[benchmarks] Update weights for collectives" "$BRANCHNAME"
   after_script:
     - rm -rf .git/config
   tags: