diff --git a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
index 226cfb3dd6c792c18ccf009d38b3e7cee55ed941..c138e0d9d0d82cdeca1ea260625fdd7cf2a0b8e7 100644
--- a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
+++ b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts
@@ -5,6 +5,7 @@ import { CacheableGithubReleases } from '../../../../../modules/datasource/githu
 import { clone } from '../../../../../util/clone';
 import * as _hostRules from '../../../../../util/host-rules';
 import { toBase64 } from '../../../../../util/string';
+import type { BranchUpgradeConfig } from '../../../../types';
 import {
   addReleaseNotes,
   getReleaseList,
@@ -94,9 +95,16 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
   describe('addReleaseNotes()', () => {
     it('returns input if invalid', async () => {
       const input = { a: 1 };
-      expect(await addReleaseNotes(input as never)).toEqual(input);
-      expect(await addReleaseNotes(null)).toBeNull();
-      expect(await addReleaseNotes({ versions: [] } as never)).toStrictEqual({
+      expect(
+        await addReleaseNotes(input as never, {} as BranchUpgradeConfig)
+      ).toEqual(input);
+      expect(await addReleaseNotes(null, {} as BranchUpgradeConfig)).toBeNull();
+      expect(
+        await addReleaseNotes(
+          { versions: [] } as never,
+          {} as BranchUpgradeConfig
+        )
+      ).toStrictEqual({
         versions: [],
       });
     });
@@ -110,7 +118,9 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         },
         versions: [{ version: '3.10.0', compare: { url: '' } }],
       };
-      expect(await addReleaseNotes(input as never)).toEqual({
+      expect(
+        await addReleaseNotes(input as never, {} as BranchUpgradeConfig)
+      ).toEqual({
         a: 1,
         hasReleaseNotes: false,
         project: {
@@ -140,7 +150,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
           { version: '20.26.0', compare: { url: '' } } as ChangeLogRelease,
         ],
       } as ChangeLogResult;
-      expect(await addReleaseNotes(input)).toEqual({
+      expect(await addReleaseNotes(input, {} as BranchUpgradeConfig)).toEqual({
         a: 1,
         hasReleaseNotes: false,
         project: {
@@ -280,7 +290,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.0',
           gitRef: '1.0.0',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toBeNull();
     });
@@ -303,7 +314,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body [#123](https://github.com/some/other-repository/issues/123), [#124](https://github.com/some/yet-other-repository/issues/124)\n',
@@ -334,7 +346,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body [#123](https://github.com/some/other-repository/issues/123), [#124](https://github.com/some/yet-other-repository/issues/124)\n',
@@ -366,7 +379,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body [#123](https://github.com/some/other-repository/issues/123), [#124](https://github.com/some/yet-other-repository/issues/124)\n',
@@ -398,7 +412,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body [#123](https://github.com/some/other-repository/issues/123), [#124](https://github.com/some/yet-other-repository/issues/124)\n',
@@ -429,7 +444,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body [#123](https://github.com/some/other-repository/issues/123), [#124](https://github.com/some/yet-other-repository/issues/124)\n',
@@ -466,7 +482,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)',
@@ -502,7 +519,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)',
@@ -538,7 +556,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         body: 'some body #123, [#124](https://gitlab.com/some/yet-other-repository/issues/124)',
@@ -561,7 +580,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.1',
           gitRef: '1.0.1',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toBeNull();
     });
@@ -588,7 +608,8 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         {
           version: '1.0.0',
           gitRef: '1.0.0',
-        } as ChangeLogRelease
+        } as ChangeLogRelease,
+        {} as BranchUpgradeConfig
       );
       expect(res).toEqual({
         url: 'correct/url/tag.com',
@@ -600,6 +621,37 @@ describe('workers/repository/update/pr/changelog/release-notes', () => {
         body: 'some body\n',
       });
     });
+
+    it('fallback to extractVersion', async () => {
+      githubReleasesMock.mockResolvedValueOnce([
+        {
+          version: `app-1.0.0`,
+          url: 'correct/url/tag.com',
+          description: 'some body',
+        },
+      ] as never);
+      const res = await getReleaseNotes(
+        {
+          ...githubProject,
+          repository: 'some/other-repository',
+          depName: 'exampleDep',
+        },
+        {
+          version: '1.0.0',
+          gitRef: '1.0.0',
+        } as ChangeLogRelease,
+        { extractVersion: 'app-(?<version>[0-9.]*)' } as BranchUpgradeConfig
+      );
+      expect(res).toEqual({
+        url: 'correct/url/tag.com',
+        notesSourceUrl:
+          'https://api.github.com/repos/some/other-repository/releases',
+        id: undefined,
+        tag: 'app-1.0.0',
+        name: undefined,
+        body: 'some body\n',
+      });
+    });
   });
 
   describe('getReleaseNotesMd()', () => {
diff --git a/lib/workers/repository/update/pr/changelog/release-notes.ts b/lib/workers/repository/update/pr/changelog/release-notes.ts
index 616f4f63161b3d07b133d3b8775c7160bfdf22fa..561b841192365688ce1c11e3008f362149fab232 100644
--- a/lib/workers/repository/update/pr/changelog/release-notes.ts
+++ b/lib/workers/repository/update/pr/changelog/release-notes.ts
@@ -7,6 +7,7 @@ import * as memCache from '../../../../../util/cache/memory';
 import * as packageCache from '../../../../../util/cache/package';
 import { linkify } from '../../../../../util/markdown';
 import { newlineRegex, regEx } from '../../../../../util/regex';
+import type { BranchUpgradeConfig } from '../../../../types';
 import * as github from './github';
 import * as gitlab from './gitlab';
 import type {
@@ -96,7 +97,8 @@ export function massageBody(
 
 export async function getReleaseNotes(
   project: ChangeLogProject,
-  release: ChangeLogRelease
+  release: ChangeLogRelease,
+  config: BranchUpgradeConfig
 ): Promise<ChangeLogNotes | null> {
   const { depName, repository } = project;
   const { version, gitRef } = release;
@@ -116,6 +118,13 @@ export async function getReleaseNotes(
         r.tag === `v${gitRef}`
     );
   }
+  if (is.undefined(matchedRelease) && config.extractVersion) {
+    const extractVersionRegEx = regEx(config.extractVersion);
+    matchedRelease = releases.find((r) => {
+      const extractedVersion = extractVersionRegEx.exec(r.tag)?.groups?.version;
+      return version === extractedVersion;
+    });
+  }
   releaseNotes = await releaseNotesResult(matchedRelease, project);
   logger.trace({ releaseNotes });
   return releaseNotes;
@@ -360,7 +369,8 @@ export function releaseNotesCacheMinutes(releaseDate?: string | Date): number {
 }
 
 export async function addReleaseNotes(
-  input: ChangeLogResult
+  input: ChangeLogResult,
+  config: BranchUpgradeConfig
 ): Promise<ChangeLogResult> {
   if (!input?.versions || !input.project?.type) {
     logger.debug('Missing project or versions');
@@ -383,7 +393,7 @@ export async function addReleaseNotes(
       releaseNotes = await getReleaseNotesMd(input.project, v);
       // istanbul ignore else: should be tested
       if (!releaseNotes) {
-        releaseNotes = await getReleaseNotes(input.project, v);
+        releaseNotes = await getReleaseNotes(input.project, v, config);
       }
       // Small hack to force display of release notes when there is a compare url
       if (!releaseNotes && v.compare.url) {
diff --git a/lib/workers/repository/update/pr/changelog/source-github.ts b/lib/workers/repository/update/pr/changelog/source-github.ts
index 474ae3a46804c4ac56bde3689e03c3e4e157fd15..2dbd02457d722c5937a745befc0345fa0b1f3571 100644
--- a/lib/workers/repository/update/pr/changelog/source-github.ts
+++ b/lib/workers/repository/update/pr/changelog/source-github.ts
@@ -177,7 +177,7 @@ export async function getChangeLogJSON(
     versions: changelogReleases,
   };
 
-  res = await addReleaseNotes(res);
+  res = await addReleaseNotes(res, config);
 
   return res;
 }
diff --git a/lib/workers/repository/update/pr/changelog/source-gitlab.ts b/lib/workers/repository/update/pr/changelog/source-gitlab.ts
index 679d7836a7eb1c046607cd8afdf8b2b1573fd66e..1775f8e91ac79cb6b551b2df227806f88a1ae02b 100644
--- a/lib/workers/repository/update/pr/changelog/source-gitlab.ts
+++ b/lib/workers/repository/update/pr/changelog/source-gitlab.ts
@@ -145,7 +145,7 @@ export async function getChangeLogJSON(
     versions: changelogReleases,
   };
 
-  res = await addReleaseNotes(res);
+  res = await addReleaseNotes(res, config);
 
   return res;
 }