diff --git a/lib/modules/manager/helm-values/__fixtures__/single_file_with_multiple_documents.yaml b/lib/modules/manager/helm-values/__fixtures__/single_file_with_multiple_documents.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e7ec683ced19753391a72715aba07dafa1a88c77
--- /dev/null
+++ b/lib/modules/manager/helm-values/__fixtures__/single_file_with_multiple_documents.yaml
@@ -0,0 +1,38 @@
+apiVersion: source.toolkit.fluxcd.io/v1beta2
+kind: HelmRepository
+metadata:
+  name: metallb
+  namespace: flux-system
+spec:
+  interval: 30m
+  url: https://metallb.github.io/metallb
+---
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: metallb
+  namespace: flux-system
+spec:
+  interval: 5m
+  install:
+    createNamespace: true
+  targetNamespace: metallb-system
+  chart:
+    spec:
+      chart: metallb
+      version: 0.13.10
+      sourceRef:
+        kind: HelmRepository
+        name: metallb
+        namespace: flux-system
+  values:
+    controller:
+      image:
+        repository: quay.io/metallb/controller
+        tag: v0.13.10
+    speaker:
+      image:
+        repository: quay.io/metallb/speaker
+        tag: v0.13.10
+      frr:
+        enabled: false
diff --git a/lib/modules/manager/helm-values/extract.spec.ts b/lib/modules/manager/helm-values/extract.spec.ts
index 933954c235c9f400afb84344a54f92eb0dd3164b..9798984a8816618c30106893a3d71e3ea0e08a4f 100644
--- a/lib/modules/manager/helm-values/extract.spec.ts
+++ b/lib/modules/manager/helm-values/extract.spec.ts
@@ -42,5 +42,28 @@ describe('modules/manager/helm-values/extract', () => {
       expect(result).toMatchSnapshot();
       expect(result?.deps).toHaveLength(5);
     });
+
+    it('extract data from file with multiple documents', () => {
+      const multiDocumentFile = Fixtures.get(
+        'single_file_with_multiple_documents.yaml'
+      );
+      const result = extractPackageFile(multiDocumentFile);
+      expect(result).toMatchObject({
+        deps: [
+          {
+            currentValue: 'v0.13.10',
+            depName: 'quay.io/metallb/controller',
+            datasource: 'docker',
+            versioning: 'docker',
+          },
+          {
+            currentValue: 'v0.13.10',
+            depName: 'quay.io/metallb/speaker',
+            datasource: 'docker',
+            versioning: 'docker',
+          },
+        ],
+      });
+    });
   });
 });
diff --git a/lib/modules/manager/helm-values/extract.ts b/lib/modules/manager/helm-values/extract.ts
index 719f47b564d2df681ffbd15aaf8e76e10c06d02d..ce0f929000a082d8f94b55ff8192d43f8c2ca15d 100644
--- a/lib/modules/manager/helm-values/extract.ts
+++ b/lib/modules/manager/helm-values/extract.ts
@@ -1,4 +1,4 @@
-import { load } from 'js-yaml';
+import { loadAll } from 'js-yaml';
 import { logger } from '../../../logger';
 import { id as dockerVersioning } from '../../versioning/docker';
 import { getDep } from '../dockerfile/extract';
@@ -61,18 +61,23 @@ export function extractPackageFile(
   content: string,
   packageFile?: string
 ): PackageFileContent | null {
-  let parsedContent: Record<string, unknown> | HelmDockerImageDependency;
+  let parsedContent: Record<string, unknown>[] | HelmDockerImageDependency[];
   try {
     // a parser that allows extracting line numbers would be preferable, with
     // the current approach we need to match anything we find again during the update
     // TODO: fix me (#9610)
-    parsedContent = load(content, { json: true }) as any;
+    parsedContent = loadAll(content, null, { json: true }) as any;
   } catch (err) {
     logger.debug({ err, packageFile }, 'Failed to parse helm-values YAML');
     return null;
   }
   try {
-    const deps = findDependencies(parsedContent, []);
+    const deps: PackageDependency<Record<string, any>>[] = [];
+
+    for (const con of parsedContent) {
+      deps.push(...findDependencies(con, []));
+    }
+
     if (deps.length) {
       return { deps };
     }