diff --git a/lib/workers/branch/index.spec.ts b/lib/workers/branch/index.spec.ts
index 13f94011ed3ff4fa6f3ce7e4c0a70e2d6e5e1c26..43329a15d8666c850768e30467dcc124e25609e6 100644
--- a/lib/workers/branch/index.spec.ts
+++ b/lib/workers/branch/index.spec.ts
@@ -215,6 +215,22 @@ describe('workers/branch', () => {
         'pr-limit-reached'
       );
     });
+    it('returns if pr creation limit exceeded and branch exists', async () => {
+      getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
+        ...updatedPackageFiles,
+      });
+      npmPostExtract.getAdditionalFiles.mockResolvedValueOnce({
+        artifactErrors: [],
+        updatedArtifacts: [],
+      });
+      git.branchExists.mockResolvedValue(true);
+      prWorker.ensurePr.mockResolvedValueOnce({
+        prResult: PrResult.LimitReached,
+      });
+      expect(await branchWorker.processBranch(config, true)).toEqual(
+        'pr-limit-reached'
+      );
+    });
     it('returns if commit limit exceeded', async () => {
       getUpdated.getUpdatedPackageFiles.mockResolvedValueOnce({
         ...updatedPackageFiles,
diff --git a/lib/workers/branch/index.ts b/lib/workers/branch/index.ts
index f32c5887e9ce7f38da39c2b5d7d2bdd34badb12e..1a903e6e5558e6d4b650caa0f524cabcf87438e5 100644
--- a/lib/workers/branch/index.ts
+++ b/lib/workers/branch/index.ts
@@ -560,7 +560,11 @@ export async function processBranch(
     logger.debug(
       `There are ${config.errors.length} errors and ${config.warnings.length} warnings`
     );
-    const { prResult: result, pr } = await ensurePr(config);
+    const { prResult: result, pr } = await ensurePr(config, prLimitReached);
+    if (result === PrResult.LimitReached) {
+      logger.debug('Reached PR limit - skipping PR creation');
+      return 'pr-limit-reached';
+    }
     // TODO: ensurePr should check for automerge itself
     if (result === PrResult.AwaitingApproval) {
       return 'needs-pr-approval';
diff --git a/lib/workers/common.ts b/lib/workers/common.ts
index b0673050a363b2b42789e392bde2a876d2aa842e..5b65c79364c04dd990b43eddebb036926d8834a6 100644
--- a/lib/workers/common.ts
+++ b/lib/workers/common.ts
@@ -72,6 +72,7 @@ export enum PrResult {
   ErrorAlreadyExists = 'ErrorAlreadyExists',
   NotUpdated = 'NotUpdated',
   Updated = 'Updated',
+  LimitReached = 'LimitReached',
 }
 
 export type ProcessBranchResult =
diff --git a/lib/workers/pr/index.spec.ts b/lib/workers/pr/index.spec.ts
index 80244ccf655ae6ead7f6b3ef455a96b82a9bdce0..24cbecbc1a39afbdcaa567066451e0542f1bcdaa 100644
--- a/lib/workers/pr/index.spec.ts
+++ b/lib/workers/pr/index.spec.ts
@@ -261,6 +261,16 @@ describe('workers/pr', () => {
       expect(platform.createPr.mock.calls[0]).toMatchSnapshot();
       existingPr.body = platform.createPr.mock.calls[0][0].prBody;
     });
+    it('should not create PR if limit is reached', async () => {
+      platform.getBranchStatus.mockResolvedValueOnce(BranchStatus.green);
+      config.logJSON = await getChangeLogJSON(config);
+      config.prCreation = 'status-success';
+      config.automerge = true;
+      config.schedule = ['before 5am'];
+      const { prResult } = await prWorker.ensurePr(config, true);
+      expect(prResult).toEqual(PrResult.LimitReached);
+      expect(platform.createPr.mock.calls).toBeEmpty();
+    });
     it('should create group PR', async () => {
       config.upgrades = config.upgrades.concat([
         {
diff --git a/lib/workers/pr/index.ts b/lib/workers/pr/index.ts
index 4e42001f63a4ab6dd77ae301856749f280c6cb7a..fe7771f971a45dfff5aa6d793c479d311de5c137 100644
--- a/lib/workers/pr/index.ts
+++ b/lib/workers/pr/index.ts
@@ -96,7 +96,8 @@ export async function addAssigneesReviewers(
 
 // Ensures that PR exists with matching title/body
 export async function ensurePr(
-  prConfig: BranchConfig
+  prConfig: BranchConfig,
+  prLimitReached?: boolean
 ): Promise<{
   prResult: PrResult;
   pr?: Pr;
@@ -359,6 +360,9 @@ export async function ensurePr(
             config.automergeType === 'pr' &&
             config.gitLabAutomerge,
         };
+        if (prLimitReached) {
+          return { prResult: PrResult.LimitReached };
+        }
         pr = await platform.createPr({
           branchName,
           targetBranch: config.baseBranch,