diff --git a/README.md b/README.md
index 3f07f15..82e78c3 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,7 @@ If you are using a `self-hosted` Windows runner, `GNU tar` and `zstd` are requir
 * `enableCrossOsArchive` - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: `false`
 * `fail-on-cache-miss` - Fail the workflow if cache entry is not found. Default: `false`
 * `lookup-only` - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: `false`
+* `save-on-success` - If true, then the cache is written in the post action on success, or (if false) the cache will only be restored if available.
 
 #### Environment Variables
 
diff --git a/action.yml b/action.yml
index 7af7458..2bc6e4b 100644
--- a/action.yml
+++ b/action.yml
@@ -26,13 +26,18 @@ inputs:
     description: 'Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache'
     default: 'false'
     required: false
+  save-on-success:
+    description: 'Whether the cache is written in the post action on success or (if false) is only restored'
+    default: 'true'
+    required: false
   save-always:
     description: 'Run the post step to save the cache even if another step before fails'
     default: 'false'
     required: false
     deprecationMessage: |
       save-always does not work as intended and will be removed in a future release.
-      A separate `actions/cache/restore` step should be used instead.
+      If you only want to control whether a new cache will be written use `save-always` instead.
+      Otherwise a separate `actions/cache/restore` step should be used instead.
       See https://github.com/actions/cache/tree/main/save#always-save-cache for more details.
 outputs:
   cache-hit:
@@ -41,7 +46,7 @@ runs:
   using: 'node20'
   main: 'dist/restore/index.js'
   post: 'dist/save/index.js'
-  post-if: "success()"
+  post-if: "success() && github.event.inputs.save-on-success"
 branding:
   icon: 'archive'
   color: 'gray-dark'