diff --git a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap b/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
index 42481bc0f3856f786522d97fdfbdad55590180f7..2271e01caa04df516b211b7a6af80576408a3ca3 100644
--- a/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
+++ b/lib/workers/repository/init/__snapshots__/merge.spec.ts.snap
@@ -66,4 +66,11 @@ Object {
 }
 `;
 
+exports[`workers/repository/init/merge detectRepoFileConfig() uses package.json config if found 2`] = `
+Object {
+  "configFileName": "package.json",
+  "configFileParsed": undefined,
+}
+`;
+
 exports[`workers/repository/init/merge mergeRenovateConfig() throws error if misconfigured 1`] = `[Error: config-validation]`;
diff --git a/lib/workers/repository/init/merge.spec.ts b/lib/workers/repository/init/merge.spec.ts
index b5e620a136e78eac71e5c095bef34d0103ba6a10..cf508943c1f8a4e50b3302c94ad0a6b117013a34 100644
--- a/lib/workers/repository/init/merge.spec.ts
+++ b/lib/workers/repository/init/merge.spec.ts
@@ -53,6 +53,8 @@ describe(getName(), () => {
         },
       });
       fs.readLocalFile.mockResolvedValue(pJson);
+      platform.getJsonFile.mockResolvedValueOnce(pJson);
+      expect(await detectRepoFileConfig()).toMatchSnapshot();
       expect(await detectRepoFileConfig()).toMatchSnapshot();
     });
     it('returns error if cannot parse', async () => {
diff --git a/lib/workers/repository/init/merge.ts b/lib/workers/repository/init/merge.ts
index 79d029c8b17ef4acb1517ce1e968e553708647bd..aee5befe6b0a09c30de672abb5ea1fc82e257195 100644
--- a/lib/workers/repository/init/merge.ts
+++ b/lib/workers/repository/init/merge.ts
@@ -26,9 +26,11 @@ export async function detectRepoFileConfig(): Promise<RepoFileConfig> {
   const cache = getCache();
   let { configFileName } = cache;
   if (configFileName) {
-    const configFileParsed = await platform.getJsonFile(configFileName);
+    let configFileParsed = await platform.getJsonFile(configFileName);
     if (configFileParsed) {
-      logger.debug('Existing config file confirmed');
+      if (configFileName === 'package.json') {
+        configFileParsed = configFileParsed.renovate;
+      }
       return { configFileName, configFileParsed };
     }
     logger.debug('Existing config file no longer exists');
diff --git a/lib/workers/repository/onboarding/branch/check.ts b/lib/workers/repository/onboarding/branch/check.ts
index 475f1e9bc9ade876c1151d92ff6dcfe15afaa4b8..1c1e2062e1580b7257655020c9850fe923956ecf 100644
--- a/lib/workers/repository/onboarding/branch/check.ts
+++ b/lib/workers/repository/onboarding/branch/check.ts
@@ -66,8 +66,13 @@ export const isOnboarded = async (config: RenovateConfig): Promise<boolean> => {
         cache.configFileName
       );
       if (configFileContent) {
-        logger.debug('Existing config file confirmed');
-        return true;
+        if (
+          cache.configFileName !== 'package.json' ||
+          configFileContent.renovate
+        ) {
+          logger.debug('Existing config file confirmed');
+          return true;
+        }
       }
     } catch (err) {
       // probably file doesn't exist
diff --git a/lib/workers/repository/onboarding/branch/index.spec.ts b/lib/workers/repository/onboarding/branch/index.spec.ts
index b7faee9dd8420ab0213301bca680c1c4f649a393..43c2991cebd22c95945ae5f682c8e5b1ad1c19bc 100644
--- a/lib/workers/repository/onboarding/branch/index.spec.ts
+++ b/lib/workers/repository/onboarding/branch/index.spec.ts
@@ -131,6 +131,14 @@ describe(getName(), () => {
       expect(res.repoIsOnboarded).toBe(true);
     });
 
+    it('handles cached package.json', async () => {
+      cache.getCache.mockReturnValue({ configFileName: 'package.json' });
+      platform.getJsonFile.mockResolvedValueOnce({ renovate: {} });
+      fs.readLocalFile.mockResolvedValueOnce('{}');
+      const res = await checkOnboardingBranch(config);
+      expect(res.repoIsOnboarded).toBe(true);
+    });
+
     it('detects repo is onboarded via package.json config', async () => {
       git.getFileList.mockResolvedValueOnce(['package.json']);
       fs.readLocalFile.mockResolvedValueOnce('{"renovate":{}}');