diff --git a/lib/config/types.ts b/lib/config/types.ts
index d7815f369093ad0edda8bac795be1d4ec4b20484..89718fdf47969592cfe3aa6793813fd5f9d10244 100644
--- a/lib/config/types.ts
+++ b/lib/config/types.ts
@@ -84,7 +84,7 @@ export interface RenovateSharedConfig {
 // The below should contain config options where stage=global
 export interface GlobalOnlyConfig {
   autodiscover?: boolean;
-  autodiscoverFilter?: string[];
+  autodiscoverFilter?: string[] | string;
   baseDir?: string;
   cacheDir?: string;
   containerbaseDir?: string;
diff --git a/lib/workers/global/autodiscover.spec.ts b/lib/workers/global/autodiscover.spec.ts
index c2409d94087d929d3bdd89b4e7777bf557bac688..a9e30c327b91ab39d30f347bd7ab35b14a9e74ad 100644
--- a/lib/workers/global/autodiscover.spec.ts
+++ b/lib/workers/global/autodiscover.spec.ts
@@ -107,6 +107,20 @@ describe('workers/global/autodiscover', () => {
     expect(res.repositories).toEqual(['project/another-repo']);
   });
 
+  it('filters autodiscovered github repos with minimatch negation', async () => {
+    config.autodiscover = true;
+    config.autodiscoverFilter = '!project/re*';
+    config.platform = PlatformId.Github;
+    hostRules.find = jest.fn(() => ({
+      token: 'abc',
+    }));
+    ghApi.getRepos = jest.fn(() =>
+      Promise.resolve(['project/repo', 'project/another-repo'])
+    );
+    const res = await autodiscoverRepositories(config);
+    expect(res.repositories).toEqual(['project/another-repo']);
+  });
+
   it('fail if regex pattern is not valid', async () => {
     config.autodiscover = true;
     config.autodiscoverFilter = ['/project/re**./'];
diff --git a/lib/workers/global/autodiscover.ts b/lib/workers/global/autodiscover.ts
index daad41efe2d9b5ff5b8dbbe52570f52037ab240c..99d1bc87925b41918d1416f24106d204224e8795 100644
--- a/lib/workers/global/autodiscover.ts
+++ b/lib/workers/global/autodiscover.ts
@@ -32,7 +32,12 @@ export async function autodiscoverRepositories(
   }
 
   if (config.autodiscoverFilter) {
-    discovered = applyFilters(discovered, config.autodiscoverFilter);
+    discovered = applyFilters(
+      discovered,
+      is.string(config.autodiscoverFilter)
+        ? [config.autodiscoverFilter]
+        : config.autodiscoverFilter
+    );
 
     if (!discovered.length) {
       // Soft fail (no error thrown) if no accessible repositories match the filter
@@ -40,6 +45,7 @@ export async function autodiscoverRepositories(
       return config;
     }
   }
+
   logger.info(
     { length: discovered.length, repositories: discovered },
     `Autodiscovered repositories`