diff --git a/lib/api/npm.js b/lib/api/npm.js
index 9e2e8e4d2397d4793c2746b7e6a6ada0b1004d79..0f3d3c23181631cc629cefb45e67f9b17c479a4e 100644
--- a/lib/api/npm.js
+++ b/lib/api/npm.js
@@ -7,25 +7,31 @@ const registryAuthToken = require('registry-auth-token');
 const logger = require('winston');
 
 module.exports = {
+  setNpmrc,
   getDependency,
   resetCache,
 };
 
 let npmCache = {};
+let npmrc = null;
 
 function resetCache() {
   npmCache = {};
 }
 
+async function setNpmrc(input) {
+  npmrc = input;
+}
+
 async function getDependency(name) {
   logger.debug(`getDependency(${name})`);
   const scope = name.split('/')[0];
-  const regUrl = registryUrl(scope);
+  const regUrl = registryUrl(scope, { npmrc });
   const pkgUrl = url.resolve(
     regUrl,
     encodeURIComponent(name).replace(/^%40/, '@')
   );
-  const authInfo = registryAuthToken(regUrl);
+  const authInfo = registryAuthToken(regUrl, { npmrc });
   const headers = {};
 
   // Reduce metadata https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md
diff --git a/lib/index.js b/lib/index.js
index 612d478fbbac1175b55f25880c75fd3ef86e3478..5ff6f4899a2ca5fe6596ac84ccd7e528abf661c4 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -3,7 +3,9 @@ const logger = require('./logger');
 const configParser = require('./config');
 const githubApi = require('./api/github');
 const gitlabApi = require('./api/gitlab');
+const npmApi = require('./api/npm');
 const defaultsParser = require('./config/defaults');
+const ini = require('ini');
 
 // Require main source
 const worker = require('./worker');
@@ -11,6 +13,7 @@ const worker = require('./worker');
 module.exports = {
   start,
   processRepo,
+  setNpmrc,
 };
 
 // This will be github or others
@@ -53,6 +56,7 @@ async function processRepo(repo) {
     if (isConfigured === false) {
       return;
     }
+    await setNpmrc();
     await findPackageFiles(config);
     const upgrades = await getAllRepoUpgrades(config);
     await worker.processUpgrades(upgrades);
@@ -61,6 +65,21 @@ async function processRepo(repo) {
   }
 }
 
+// Check for config in `renovate.json`
+async function setNpmrc() {
+  try {
+    let npmrc = null;
+    const npmrcContent = await api.getFileContent('.npmrc');
+    if (npmrcContent) {
+      logger.debug('Found .npmrc file in repository');
+      npmrc = ini.parse(npmrcContent);
+    }
+    npmApi.setNpmrc(npmrc);
+  } catch (err) {
+    logger.error('Failed to set .npmrc');
+  }
+}
+
 // Check for config in `renovate.json`
 async function mergeRenovateJson(config) {
   const renovateJson = await api.getFileJson('renovate.json');
diff --git a/package.json b/package.json
index b5652ab43a9102a146b78cdffe90f0f0468e4af8..d83f9cbd39b8410f771c8f41da3e0d3548cae393 100644
--- a/package.json
+++ b/package.json
@@ -48,6 +48,7 @@
     "gl-got": "6.0.2",
     "got": "7.0.0",
     "handlebars": "4.0.10",
+    "ini": "1.3.4",
     "json-stringify-pretty-compact": "1.0.4",
     "jsonwebtoken": "7.4.1",
     "lodash": "4.17.4",
diff --git a/yarn.lock b/yarn.lock
index 3e7e1aef8fe3b8eedb36d997ff3db4974fa4b3cc..4bfa0e38b84bb4f09f8ada6ad6a64434bc387875 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1586,7 +1586,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
   version "2.0.3"
   resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
 
-ini@~1.3.0:
+ini@1.3.4, ini@~1.3.0:
   version "1.3.4"
   resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"