diff --git a/lib/datasource/galaxy/__snapshots__/index.spec.ts.snap b/lib/datasource/galaxy/__snapshots__/index.spec.ts.snap
index 353f92b6b228b728cb2996ba3a5460847ea2476b..c4afc6a3cd8360932e3b699f94edfc41ac6356d5 100644
--- a/lib/datasource/galaxy/__snapshots__/index.spec.ts.snap
+++ b/lib/datasource/galaxy/__snapshots__/index.spec.ts.snap
@@ -20,3 +20,5 @@ Object {
   "sourceUrl": "https://github.com/yatesr/ansible-timezone",
 }
 `;
+
+exports[`datasource/galaxy getPkgReleases throws for 5xx 1`] = `[Error: registry-failure]`;
diff --git a/lib/datasource/galaxy/index.spec.ts b/lib/datasource/galaxy/index.spec.ts
index 35b4c0892f4c30307e58daa38e2ba3d440580e92..20917e18adf5c5543b89931d5c551dd082532c4f 100644
--- a/lib/datasource/galaxy/index.spec.ts
+++ b/lib/datasource/galaxy/index.spec.ts
@@ -51,5 +51,28 @@ describe('datasource/galaxy', () => {
       const res = await getPkgReleases({ lookupName: 'foo.bar' });
       expect(res).toBeNull();
     });
+    it('throws for 5xx', async () => {
+      got.mockImplementationOnce(() =>
+        Promise.reject({
+          statusCode: 502,
+        })
+      );
+      let e;
+      try {
+        await getPkgReleases({ lookupName: 'some_crate' });
+      } catch (err) {
+        e = err;
+      }
+      expect(e).toBeDefined();
+      expect(e).toMatchSnapshot();
+    });
+    it('throws for 404', async () => {
+      const err = new Error();
+      err.statusCode = 404;
+      got.mockImplementationOnce(() => {
+        throw err;
+      });
+      await expect(getPkgReleases({ lookupName: 'foo.bar' })).rejects.toThrow();
+    });
   });
 });
diff --git a/lib/datasource/galaxy/index.ts b/lib/datasource/galaxy/index.ts
index 95961c90760f5020624263e497b2766b056aae32..5b7d7b2664b3635d5db094d788dc64771c0084ac 100644
--- a/lib/datasource/galaxy/index.ts
+++ b/lib/datasource/galaxy/index.ts
@@ -1,6 +1,11 @@
 import { logger } from '../../logger';
 import got from '../../util/got';
-import { GetReleasesConfig, ReleaseResult, Release } from '../common';
+import {
+  DatasourceError,
+  GetReleasesConfig,
+  ReleaseResult,
+  Release,
+} from '../common';
 
 export const id = 'galaxy';
 
@@ -30,65 +35,73 @@ export async function getPkgReleases({
     '&name=' +
     projectName;
   const galaxyProjectUrl = baseUrl + userName + '/' + projectName;
+  try {
+    let res: any = await got(galaxyAPIUrl, {
+      hostType: id,
+    });
+    if (!res || !res.body) {
+      logger.warn(
+        { dependency: lookupName },
+        `Received invalid crate data from ${galaxyAPIUrl}`
+      );
+      return null;
+    }
 
-  let res: any = await got(galaxyAPIUrl, {
-    hostType: id,
-  });
-  if (!res || !res.body) {
-    logger.warn(
-      { dependency: lookupName },
-      `Received invalid crate data from ${galaxyAPIUrl}`
-    );
-    return null;
-  }
-
-  res = res.body;
-  const response = JSON.parse(res);
+    res = res.body;
+    const response = JSON.parse(res);
 
-  // istanbul ignore if
-  if (response.results.length > 1) {
-    logger.warn(
-      { dependency: lookupName },
-      `Received multiple results from ${galaxyAPIUrl}`
-    );
-    return null;
-  }
-  if (response.results.length === 0) {
-    logger.warn(
-      { dependency: lookupName },
-      `Received no results from ${galaxyAPIUrl}`
-    );
-    return null;
-  }
+    // istanbul ignore if
+    if (response.results.length > 1) {
+      logger.warn(
+        { dependency: lookupName },
+        `Received multiple results from ${galaxyAPIUrl}`
+      );
+      return null;
+    }
+    if (response.results.length === 0) {
+      logger.warn(
+        { dependency: lookupName },
+        `Received no results from ${galaxyAPIUrl}`
+      );
+      return null;
+    }
 
-  const resultObject = response.results[0];
-  const versions = resultObject.summary_fields.versions;
+    const resultObject = response.results[0];
+    const versions = resultObject.summary_fields.versions;
 
-  const result: ReleaseResult = {
-    releases: [],
-  };
+    const result: ReleaseResult = {
+      releases: [],
+    };
 
-  result.dependencyUrl = galaxyProjectUrl;
-  if (resultObject.github_user && resultObject.github_repo) {
-    result.sourceUrl =
-      'https://github.com/' +
-      resultObject.github_user +
-      '/' +
-      resultObject.github_repo;
-  }
+    result.dependencyUrl = galaxyProjectUrl;
+    if (resultObject.github_user && resultObject.github_repo) {
+      result.sourceUrl =
+        'https://github.com/' +
+        resultObject.github_user +
+        '/' +
+        resultObject.github_repo;
+    }
 
-  result.releases = versions.map(
-    (version: { name: string; release_date: string }) => {
-      const release: Release = {
-        version: version.name,
-        releaseTimestamp: version.release_date,
-      };
+    result.releases = versions.map(
+      (version: { name: string; release_date: string }) => {
+        const release: Release = {
+          version: version.name,
+          releaseTimestamp: version.release_date,
+        };
 
-      return release;
+        return release;
+      }
+    );
+    const cacheMinutes = 10;
+    await renovateCache.set(cacheNamespace, cacheKey, result, cacheMinutes);
+    return result;
+  } catch (err) {
+    if (
+      err.statusCode === 429 ||
+      (err.statusCode >= 500 && err.statusCode < 600)
+    ) {
+      throw new DatasourceError(err);
     }
-  );
-
-  const cacheMinutes = 10;
-  await renovateCache.set(cacheNamespace, cacheKey, result, cacheMinutes);
-  return result;
+    throw err;
+  }
 }