diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts
index 284a06c42d15e0c9f7e54f8999529eabb795c85a..f641ea1a4f2d41356028fb0070c7a9e64cffac63 100644
--- a/lib/workers/repository/process/fetch.spec.ts
+++ b/lib/workers/repository/process/fetch.spec.ts
@@ -1,6 +1,7 @@
 import { RenovateConfig, getConfig, mocked } from '../../../../test/util';
 import { MavenDatasource } from '../../../modules/datasource/maven';
 import type { PackageFile } from '../../../modules/manager/types';
+import { ExternalHostError } from '../../../types/errors/external-host-error';
 import { fetchUpdates } from './fetch';
 import * as lookup from './lookup';
 
@@ -141,5 +142,70 @@ describe('workers/repository/process/fetch', () => {
       await fetchUpdates(config, packageFiles);
       expect(packageFiles.maven[0].deps[0].updates).toHaveLength(2);
     });
+
+    it('throws lookup errors for onboarded repos', async () => {
+      config.rangeStrategy = 'auto';
+      const packageFiles: any = {
+        maven: [
+          {
+            packageFile: 'pom.xml',
+            deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }],
+          },
+        ],
+      };
+      lookupUpdates.mockRejectedValueOnce(new Error('some error'));
+
+      await expect(
+        fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles)
+      ).rejects.toThrow();
+    });
+
+    it('throws lookup errors for not onboarded repos', async () => {
+      config.rangeStrategy = 'auto';
+      const packageFiles: any = {
+        maven: [
+          {
+            packageFile: 'pom.xml',
+            deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }],
+          },
+        ],
+      };
+      lookupUpdates.mockRejectedValueOnce(new Error('some error'));
+
+      await expect(
+        fetchUpdates({ ...config, repoIsOnboarded: true }, packageFiles)
+      ).rejects.toThrow();
+    });
+
+    it('produces external host warnings for not onboarded repos', async () => {
+      config.rangeStrategy = 'auto';
+      const packageFiles: any = {
+        maven: [
+          {
+            packageFile: 'pom.xml',
+            deps: [{ datasource: MavenDatasource.id, depName: 'bbb' }],
+          },
+        ],
+      };
+      const err = new ExternalHostError(new Error('some error'));
+      lookupUpdates.mockRejectedValueOnce(err);
+
+      await fetchUpdates({ ...config, repoIsOnboarded: false }, packageFiles);
+
+      expect(packageFiles).toMatchObject({
+        maven: [
+          {
+            deps: [
+              {
+                depName: 'bbb',
+                warnings: [
+                  { topic: 'Lookup Error', message: 'bbb: some error' },
+                ],
+              },
+            ],
+          },
+        ],
+      });
+    });
   });
 });
diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts
index 38e690b12ce69df70200e9afb3c1e411f633c19b..2bb90311aa87b099c512e6fd0d83f381c8b35580 100644
--- a/lib/workers/repository/process/fetch.ts
+++ b/lib/workers/repository/process/fetch.ts
@@ -9,6 +9,7 @@ import type {
   PackageDependency,
   PackageFile,
 } from '../../../modules/manager/types';
+import { ExternalHostError } from '../../../types/errors/external-host-error';
 import { clone } from '../../../util/clone';
 import { applyPackageRules } from '../../../util/package-rules';
 import { PackageFiles } from '../package-files';
@@ -47,10 +48,26 @@ async function fetchDepUpdates(
     dep.skipReason = 'disabled';
   } else {
     if (depConfig.datasource) {
-      dep = {
-        ...dep,
-        ...(await lookupUpdates(depConfig as LookupUpdateConfig)),
-      };
+      try {
+        dep = {
+          ...dep,
+          ...(await lookupUpdates(depConfig as LookupUpdateConfig)),
+        };
+      } catch (err) {
+        if (
+          packageFileConfig.repoIsOnboarded ||
+          !(err instanceof ExternalHostError)
+        ) {
+          throw err;
+        }
+
+        const cause = err.err;
+        dep.warnings ??= [];
+        dep.warnings.push({
+          topic: 'Lookup Error',
+          message: `${depName}: ${cause.message}`,
+        });
+      }
     }
     dep.updates = dep.updates ?? [];
   }