diff --git a/lib/workers/pr/index.js b/lib/workers/pr/index.js
index b1dc63afd57a32cc53b4516fa8c0ae207f8d5520..2a0922429297690414698840fcdcc4745389ed08 100644
--- a/lib/workers/pr/index.js
+++ b/lib/workers/pr/index.js
@@ -151,7 +151,14 @@ async function ensurePr(prConfig) {
       return existingPr;
     }
     logger.debug({ prTitle }, `Creating PR for branch ${branchName}`);
-    const pr = await config.api.createPr(branchName, prTitle, prBody);
+    let pr;
+    try {
+      pr = await config.api.createPr(branchName, prTitle, prBody);
+    } catch (err) {
+      logger.warn({ err }, `Failed to create PR - deleting branch`);
+      await config.api.deleteBranch(branchName);
+      return null;
+    }
     if (config.labels.length > 0) {
       await config.api.addLabels(pr.number, config.labels);
     }
diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js
index 07a0b758ec03c52d70b9b0886b9f73e6a9455f0b..0d6b9671fe8ac97c12ad95d3aca392a870de0909 100644
--- a/test/workers/pr/index.spec.js
+++ b/test/workers/pr/index.spec.js
@@ -137,6 +137,18 @@ describe('workers/pr', () => {
       const pr = await prWorker.ensurePr(config);
       expect(pr).toMatchObject({ displayNumber: 'New Pull Request' });
     });
+    it('should delete branch and return null if creating PR fails', async () => {
+      config.api.getBranchStatus = jest.fn(() => 'success');
+      config.api.getBranchPr = jest.fn();
+      config.api.createPr = jest.fn(() => {
+        throw new Error('failed to create PR');
+      });
+      config.api.deleteBranch = jest.fn();
+      config.prCreation = 'status-success';
+      const pr = await prWorker.ensurePr(config);
+      expect(config.api.deleteBranch.mock.calls).toHaveLength(1);
+      expect(pr).toBe(null);
+    });
     it('should return null if waiting for not pending', async () => {
       config.api.getBranchStatus = jest.fn(() => 'pending');
       config.api.getBranchLastCommitTime = jest.fn(() => new Date());