diff --git a/src/lib/project-fetcher-hoc.jsx b/src/lib/project-fetcher-hoc.jsx
index 1879d69e582468e3af8ffa5377f7a80c1e5e544a..8a7128aaf3c8062de90b8308fe49e1c74c9f1823 100644
--- a/src/lib/project-fetcher-hoc.jsx
+++ b/src/lib/project-fetcher-hoc.jsx
@@ -66,6 +66,10 @@ const ProjectFetcherHOC = function (WrappedComponent) {
                 .then(projectAsset => {
                     if (projectAsset) {
                         this.props.onFetchedProjectData(projectAsset.data, loadingState);
+                    } else {
+                        // Treat failure to load as an error
+                        // Throw to be caught by catch later on
+                        throw new Error('Could not find project');
                     }
                 })
                 .then(() => {
diff --git a/test/integration/project-loading.test.js b/test/integration/project-loading.test.js
index 09023632e8a1ac61b8c1598d7c3824c1e9a7ebed..447e2c05b10b42cfbd09633a4a9163407e23a963 100644
--- a/test/integration/project-loading.test.js
+++ b/test/integration/project-loading.test.js
@@ -47,6 +47,11 @@ describe('Loading scratch gui', () => {
             await expect(logs).toEqual([]);
         });
 
+        test('Nonexistent projects show error screen', async () => {
+            await loadUri(`${uri}#999999999999999999999`);
+            await clickText('Oops! Something went wrong.');
+        });
+
         test('Invalid url when loading project through modal lets you try again', async () => {
             await loadUri(uri);
             await clickText('View 2.0 Project');