diff --git a/docs/usage/configuration-options.md b/docs/usage/configuration-options.md
index 563c043e92d6dd61a912ffee123a973e0e510dee..8c2cf43b7a9781c223b8f7d456c6b6738fcf25b3 100644
--- a/docs/usage/configuration-options.md
+++ b/docs/usage/configuration-options.md
@@ -300,6 +300,14 @@ With a negation, all branches except those matching the regex will be added to t
 }
 ```
 
+You can also use the special `"$default"` string to denote the repository's default branch, which is useful if you have it in an org preset, e.g.:
+
+```json
+{
+  "baseBranches": ["$default", "/^release\\/.*/"]
+}
+```
+
 <!-- prettier-ignore -->
 !!! note
     Do _not_ use the `baseBranches` config option when you've set a `forkToken`.
diff --git a/lib/workers/repository/process/index.spec.ts b/lib/workers/repository/process/index.spec.ts
index 0a7a53999f382e7ec005106fefe497ff7d36e909..1d9c3546a446cec2a9e0ad07e73c300154f8f066 100644
--- a/lib/workers/repository/process/index.spec.ts
+++ b/lib/workers/repository/process/index.spec.ts
@@ -150,5 +150,20 @@ describe('workers/repository/process/index', () => {
       expect(addMeta).toHaveBeenCalledWith({ baseBranch: 'dev' });
       expect(addMeta).toHaveBeenCalledWith({ baseBranch: 'some-other' });
     });
+
+    it('maps $default to defaultBranch', async () => {
+      extract.mockResolvedValue({} as never);
+      config.baseBranches = ['$default'];
+      config.defaultBranch = 'master';
+      git.getBranchList.mockReturnValue(['dev', 'master']);
+      scm.branchExists.mockResolvedValue(true);
+      const res = await extractDependencies(config);
+      expect(res).toStrictEqual({
+        branchList: [undefined],
+        branches: [undefined],
+        packageFiles: undefined,
+      });
+      expect(addMeta).toHaveBeenCalledWith({ baseBranch: 'master' });
+    });
   });
 });
diff --git a/lib/workers/repository/process/index.ts b/lib/workers/repository/process/index.ts
index cced4e1702d9211307c565dbd2c5a45fae6534a4..d9cce0b7762a53c523425210688eb4c65a4f1875 100644
--- a/lib/workers/repository/process/index.ts
+++ b/lib/workers/repository/process/index.ts
@@ -82,7 +82,10 @@ async function getBaseBranchConfig(
   return baseBranchConfig;
 }
 
-function unfoldBaseBranches(baseBranches: string[]): string[] {
+function unfoldBaseBranches(
+  defaultBranch: string,
+  baseBranches: string[]
+): string[] {
   const unfoldedList: string[] = [];
 
   const allBranches = getBranchList();
@@ -90,7 +93,13 @@ function unfoldBaseBranches(baseBranches: string[]): string[] {
     const isAllowedPred = configRegexPredicate(baseBranch);
     if (isAllowedPred) {
       const matchingBranches = allBranches.filter(isAllowedPred);
+      logger.debug(
+        `baseBranches regex "${baseBranch}" matches [${matchingBranches.join()}]`
+      );
       unfoldedList.push(...matchingBranches);
+    } else if (baseBranch === '$default') {
+      logger.debug(`baseBranches "$default" matches "${defaultBranch}"`);
+      unfoldedList.push(defaultBranch);
     } else {
       unfoldedList.push(baseBranch);
     }
@@ -109,7 +118,10 @@ export async function extractDependencies(
     packageFiles: null!,
   };
   if (GlobalConfig.get('platform') !== 'local' && config.baseBranches?.length) {
-    config.baseBranches = unfoldBaseBranches(config.baseBranches);
+    config.baseBranches = unfoldBaseBranches(
+      config.defaultBranch!,
+      config.baseBranches
+    );
     logger.debug({ baseBranches: config.baseBranches }, 'baseBranches');
     const extracted: Record<string, Record<string, PackageFile[]>> = {};
     for (const baseBranch of config.baseBranches) {