diff --git a/.github/badges/trustabl-action.json b/.github/badges/trustabl-action.json
new file mode 100644
index 0000000..deae2d6
--- /dev/null
+++ b/.github/badges/trustabl-action.json
@@ -0,0 +1,6 @@
+{
+ "schemaVersion": 1,
+ "label": "used by",
+ "message": "0",
+ "color": "blue"
+}
diff --git a/.github/workflows/count-action-users.yml b/.github/workflows/count-action-users.yml
new file mode 100644
index 0000000..52475dc
--- /dev/null
+++ b/.github/workflows/count-action-users.yml
@@ -0,0 +1,28 @@
+name: Count action users
+
+# Counts public repos whose workflow files reference this action (GitHub
+# code search) and writes a shields.io endpoint JSON that the README
+# "used by" badge renders. Public workflow files only; a proxy for adoption.
+
+on:
+ schedule:
+ - cron: '0 4 * * 1' # weekly, Mondays 04:00 UTC
+ workflow_dispatch: # run on demand to populate the badge immediately
+
+permissions:
+ contents: write # the action commits the generated badge JSON
+
+jobs:
+ count:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Generate "used by" badge endpoint
+ uses: cicirello/count-action-users@v1
+ with:
+ action-list: trustabl/trustabl-action
+ target-directory: .github/badges
+ commit-and-push: true
+ color: blue
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/README.md b/README.md
index d3de82a..fc7a6da 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,12 @@