diff --git a/lib/manager/index.js b/lib/manager/index.js
index 517032dcc85fa5d60e3c5563e92ca933087e6865..d4b38352cdd709b515b6dc54fbf7687f10ac8231 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -44,3 +44,16 @@ for (const f of managerFunctions) {
     return null;
   };
 }
+
+module.exports.getRangeStrategy = config => {
+  const { manager, rangeStrategy } = config;
+  if (managers[manager].getRangeStrategy) {
+    // Use manager's own function if it exists
+    return managers[manager].getRangeStrategy(config);
+  }
+  if (rangeStrategy === 'auto') {
+    // default to 'replace' for auto
+    return 'replace';
+  }
+  return config.rangeStrategy;
+};
diff --git a/lib/manager/npm/index.js b/lib/manager/npm/index.js
index 7e2a63ab1926e516feda4e27b55b2f701207f7a9..79e23f9fdcc3550d66880369d8622a7f13a52232 100644
--- a/lib/manager/npm/index.js
+++ b/lib/manager/npm/index.js
@@ -1,9 +1,11 @@
 const { extractDependencies, postExtract } = require('./extract');
 const { updateDependency } = require('./update');
+const { getRangeStrategy } = require('./range');
 
 module.exports = {
   extractDependencies,
   postExtract,
+  getRangeStrategy,
   updateDependency,
   supportsLockFileMaintenance: true,
 };
diff --git a/lib/workers/repository/process/lookup/range.js b/lib/manager/npm/range.js
similarity index 100%
rename from lib/workers/repository/process/lookup/range.js
rename to lib/manager/npm/range.js
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 408f9dca0e1f03092c962d16526fdbfbf2028135..2e42480f44cdec81a1cf7bca2b24e692fec16abb 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -1,7 +1,7 @@
 const versioning = require('../../../../versioning/semver');
 const moment = require('moment');
 const { getRollbackUpdate } = require('./rollback');
-const { getRangeStrategy } = require('./range');
+const { getRangeStrategy } = require('../../../../manager');
 const { filterVersions } = require('./filter');
 const npmApi = require('../../../../datasource/npm');
 const github = require('../../../../datasource/github');
diff --git a/test/workers/repository/process/lookup/range.spec.js b/test/manager/npm/range.spec.js
similarity index 93%
rename from test/workers/repository/process/lookup/range.spec.js
rename to test/manager/npm/range.spec.js
index f7e3622095f0905c4c06cdc815c4c8c29b781793..93e4235da5f49b2b3531b5850b7139d95c53ab78 100644
--- a/test/workers/repository/process/lookup/range.spec.js
+++ b/test/manager/npm/range.spec.js
@@ -1,6 +1,4 @@
-const {
-  getRangeStrategy,
-} = require('../../../../../lib/workers/repository/process/lookup/range');
+const { getRangeStrategy } = require('../../../lib/manager/npm');
 
 describe('getRangeStrategy', () => {
   it('returns same if not auto', () => {
diff --git a/test/manager/range.spec.js b/test/manager/range.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f45419e2f4144c2700c75684a760d1b114d37e4
--- /dev/null
+++ b/test/manager/range.spec.js
@@ -0,0 +1,25 @@
+const { getRangeStrategy } = require('../../lib/manager');
+
+describe('getRangeStrategy', () => {
+  it('returns same if not auto', () => {
+    const config = { manager: 'npm', rangeStrategy: 'widen' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('returns manager strategy', () => {
+    const config = {
+      manager: 'npm',
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      packageJsonType: 'app',
+    };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('defaults to replace', () => {
+    const config = { manager: 'circleci', rangeStrategy: 'auto' };
+    expect(getRangeStrategy(config)).toEqual('replace');
+  });
+  it('returns rangeStrategy if not auto', () => {
+    const config = { manager: 'circleci', rangeStrategy: 'future' };
+    expect(getRangeStrategy(config)).toEqual('future');
+  });
+});
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index 11ecaee6379e772d7ea5351d65be83d54ea6d7a7..4083507580819a8351ea9f66c1678cb9cf053d32 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -15,6 +15,7 @@ let config;
 describe('manager/npm/lookup', () => {
   beforeEach(() => {
     config = { ...require('../../../../../lib/config/defaults').getConfig() };
+    config.manager = 'npm';
     config.rangeStrategy = 'replace';
     jest.resetAllMocks();
   });