diff --git a/lib/datasource/nuget/v3.js b/lib/datasource/nuget/v3.js
index dee96f9cfab4bb57aa5859754817474879f1d510..ec1bba090117bfac363dfe4ae80bfc33e84e6fab 100644
--- a/lib/datasource/nuget/v3.js
+++ b/lib/datasource/nuget/v3.js
@@ -10,6 +10,7 @@ module.exports = {
 
 // https://api.nuget.org/v3/index.json is a default official nuget feed
 const defaultNugetFeed = 'https://api.nuget.org/v3/index.json';
+const cacheNamespace = 'datasource-nuget';
 
 function getDefaultFeed() {
   return defaultNugetFeed;
@@ -17,6 +18,15 @@ function getDefaultFeed() {
 
 async function getQueryUrl(url) {
   // https://docs.microsoft.com/en-us/nuget/api/search-query-service-resource
+  const resourceType = 'SearchQueryService';
+  const cacheKey = `${url}:${resourceType}`;
+  const cachedResult = await renovateCache.get(cacheNamespace, cacheKey);
+
+  // istanbul ignore if
+  if (cachedResult) {
+    return cachedResult;
+  }
+
   try {
     const servicesIndexRaw = await got(url, { json: true, platform: 'nuget' });
     if (servicesIndexRaw.statusCode !== 200) {
@@ -27,9 +37,18 @@ async function getQueryUrl(url) {
       return null;
     }
     const searchQueryService = servicesIndexRaw.body.resources.find(
-      resource => resource['@type'] === 'SearchQueryService'
+      resource => resource['@type'] === resourceType
+    );
+    const searchQueryServiceId = searchQueryService['@id'];
+
+    const cacheMinutes = 60;
+    await renovateCache.set(
+      cacheNamespace,
+      cacheKey,
+      searchQueryServiceId,
+      cacheMinutes
     );
-    return searchQueryService['@id'];
+    return searchQueryServiceId;
   } catch (e) {
     logger.debug(
       { e },
diff --git a/test/datasource/nuget.spec.js b/test/datasource/nuget.spec.js
index 918e30907d38c6d6437219c8b7c7b99bd7a64e42..e1cc3abee454a59204838159c25b18f16d64e154 100644
--- a/test/datasource/nuget.spec.js
+++ b/test/datasource/nuget.spec.js
@@ -65,6 +65,7 @@ const configV3NotNugetOrg = {
 };
 
 describe('datasource/nuget', () => {
+  beforeEach(() => global.renovateCache.rmAll());
   describe('getPkgReleases', () => {
     beforeEach(() => {
       jest.resetAllMocks();