diff --git a/lib/modules/manager/types.ts b/lib/modules/manager/types.ts
index a1e8ba2824d9df910bb8c82066853d487c169a4d..2ce51aa306a0d93b43f764686a3913adf39bd834 100644
--- a/lib/modules/manager/types.ts
+++ b/lib/modules/manager/types.ts
@@ -6,7 +6,12 @@ import type {
   ValidationMessage,
 } from '../../config/types';
 import type { Category } from '../../constants';
-import type { ModuleApi, RangeStrategy, SkipReason } from '../../types';
+import type {
+  ModuleApi,
+  RangeStrategy,
+  SkipReason,
+  StageName,
+} from '../../types';
 import type { FileChange } from '../../util/git/types';
 import type { MergeConfidence } from '../../util/merge-confidence/types';
 import type { CustomExtractConfig } from './custom/types';
@@ -144,6 +149,7 @@ export interface PackageDependency<T = Record<string, any>>
   registryUrls?: string[] | null;
   rangeStrategy?: RangeStrategy;
   skipReason?: SkipReason;
+  skipStage?: StageName;
   sourceLine?: number;
   newVersion?: string;
   updates?: LookupUpdate[];
diff --git a/lib/types/index.ts b/lib/types/index.ts
index a111c9ade7ea7d1210fa02c020bac4bb3d642ec5..4b6a9036088268b4dd1e0442ca8a9c5edf4bde07 100644
--- a/lib/types/index.ts
+++ b/lib/types/index.ts
@@ -1,6 +1,6 @@
 export type { CommitMessageJSON } from './commit-message-json';
 export type { HostRule, CombinedHostRule } from './host-rules';
-export type { SkipReason } from './skip-reason';
+export type { SkipReason, StageName } from './skip-reason';
 export type { RangeStrategy } from './versioning';
 export type { BranchStatus } from './branch-status';
 export type {
diff --git a/lib/types/skip-reason.ts b/lib/types/skip-reason.ts
index 534d37b445b9341081c53877b0d251617864cafc..8ebf4568e4363fa9608fbfea19f4c6ce429d728b 100644
--- a/lib/types/skip-reason.ts
+++ b/lib/types/skip-reason.ts
@@ -50,8 +50,10 @@ export type SkipReason =
 export type StageName =
   | 'current-timestamp'
   | 'datasource-merge'
+  | 'extract'
   | 'lock-file-maintenance-merge'
   | 'lock-file-maintenance-merge-2'
+  | 'lookup'
   | 'pre-lookup'
   | 'source-url'
   | 'update-type'
diff --git a/lib/workers/repository/process/extract-update.ts b/lib/workers/repository/process/extract-update.ts
index e31b055a9e78e08f119801b8b7c71bf7cbe86185..75aecabd65a131a3a0cf946d6633c2808646f625 100644
--- a/lib/workers/repository/process/extract-update.ts
+++ b/lib/workers/repository/process/extract-update.ts
@@ -128,6 +128,10 @@ export async function extract(
         for (const file of files) {
           for (const dep of file.deps) {
             delete dep.updates;
+            if (dep.skipStage && dep.skipStage !== 'extract') {
+              delete dep.skipReason;
+              delete dep.skipStage;
+            }
           }
         }
       }
diff --git a/lib/workers/repository/process/fetch.spec.ts b/lib/workers/repository/process/fetch.spec.ts
index f891c6e81e6fd868e7c181f5e2fe7f70a05322c0..e68a4ce76f1647e7f7d5d283019dbfa7571821e6 100644
--- a/lib/workers/repository/process/fetch.spec.ts
+++ b/lib/workers/repository/process/fetch.spec.ts
@@ -59,18 +59,21 @@ describe('workers/repository/process/fetch', () => {
                 depName: 'abcd',
                 packageName: 'abcd',
                 skipReason: 'ignored',
+                skipStage: 'lookup',
                 updates: [],
               },
               {
                 depName: 'foo',
                 packageName: 'foo',
                 skipReason: 'disabled',
+                skipStage: 'lookup',
                 updates: [],
               },
               {
                 depName: 'skipped',
                 packageName: 'skipped',
                 skipReason: 'some-reason',
+                skipStage: 'lookup',
                 updates: [],
               },
             ],
diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts
index e9b17a4470f6bc91562c1a52b722af162cf6f711..36fd712277c32d6d31b568e8e493498dffcb12bb 100644
--- a/lib/workers/repository/process/fetch.ts
+++ b/lib/workers/repository/process/fetch.ts
@@ -172,6 +172,9 @@ export async function fetchUpdates(
         deps = [];
         packageDeps.set(packageFile, deps);
       }
+      if (dep.skipReason && !dep.skipStage) {
+        dep.skipStage = 'lookup';
+      }
       deps.push(dep);
     } else {
       errors.push(err);