diff --git a/swh/loader/npm/client.py b/swh/loader/npm/client.py
index 49be475efa1d6db7c43725d7947ec374b8e71f90..5c52068e1a7c2fcb8bbc0720eab0f70c7a955372 100644
--- a/swh/loader/npm/client.py
+++ b/swh/loader/npm/client.py
@@ -56,7 +56,10 @@ class NpmClient:
         Returns:
             str: the last releases package version
         """
-        return self.package_metadata['dist-tags']['latest']
+        latest = ''
+        if 'latest' in self.package_metadata['dist-tags']:
+            latest = self.package_metadata['dist-tags']['latest']
+        return latest
 
     def package_versions(self, known_versions=None):
         """
diff --git a/swh/loader/npm/tests/common.py b/swh/loader/npm/tests/common.py
index 229628d63165063ae3159743ef0c814afc5cba3b..2edd9030c863fc28ad2c3ae8fa8b28296c20f552 100644
--- a/swh/loader/npm/tests/common.py
+++ b/swh/loader/npm/tests/common.py
@@ -9,10 +9,15 @@ import os.path
 
 RESOURCES_PATH = os.path.join(os.path.dirname(__file__), 'resources')
 
+empty_package = '22u-validators'
+empty_package_url = 'https://www.npmjs.com/package/%s' % empty_package
+empty_package_metadata_url = 'https://replicate.npmjs.com/%s/' % empty_package
+
 package = 'org'
 package_url = 'https://www.npmjs.com/package/%s' % package
 package_metadata_url = 'https://replicate.npmjs.com/%s/' % package
 
+EMPTY_PACKAGE_METADATA_JSON_FILENAME = '22u-validators.json'
 FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME = 'org_metadata_visit1.json'
 SECOND_VISIT_PACKAGE_METADATA_JSON_FILENAME = 'org_metadata_visit2.json'
 
@@ -27,12 +32,12 @@ class _MockedFileStream():
         return self.file_data
 
 
-def init_test_data(m, package_metadata_json_file):
+def init_test_data(m, package_metadata_json_file, package_metadata_url):
 
-    org_metadata_filepath = os.path.join(RESOURCES_PATH,
-                                         package_metadata_json_file)
+    package_metadata_filepath = os.path.join(RESOURCES_PATH,
+                                             package_metadata_json_file)
 
-    with open(org_metadata_filepath) as json_file:
+    with open(package_metadata_filepath) as json_file:
         package_metadata = json.load(json_file)
 
     m.register_uri('GET', package_metadata_url, json=package_metadata)
diff --git a/swh/loader/npm/tests/resources/22u-validators.json b/swh/loader/npm/tests/resources/22u-validators.json
new file mode 100644
index 0000000000000000000000000000000000000000..a6f112bd12eabc19133efac9f0e9807c6dfe2ccf
--- /dev/null
+++ b/swh/loader/npm/tests/resources/22u-validators.json
@@ -0,0 +1,20 @@
+{
+  "_id": "22u-validators",
+  "_rev": "1-4853f78ded9c4fbcfe4c097ee96a4589",
+  "name": "22u-validators",
+  "time": {
+    "modified": "2017-06-07T01:30:36.011Z",
+    "created": "2015-07-19T13:07:40.046Z",
+    "0.1.0": "2015-07-19T13:07:40.046Z"
+  },
+  "maintainers": [
+    {
+      "email": "nich.curtis@22u.io",
+      "name": "22u.io"
+    }
+  ],
+  "dist-tags": {},
+  "versions": {},
+  "readme": "",
+  "readmeFilename": ""
+}
\ No newline at end of file
diff --git a/swh/loader/npm/tests/test_client.py b/swh/loader/npm/tests/test_client.py
index 65fae4585c7a020b4947ee1779c431c5803202fd..cbae8f374f1e2f170870451a8e24d895e3907ccb 100644
--- a/swh/loader/npm/tests/test_client.py
+++ b/swh/loader/npm/tests/test_client.py
@@ -28,7 +28,8 @@ PACKAGE_METADATA_JSON_FILENAME = 'org_metadata_visit1.json'
 class TestNpmClient(unittest.TestCase):
 
     def test_fetch_package_metadata(self, m):
-        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME)
+        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME,
+                                          package_metadata_url)
         with tempfile.TemporaryDirectory() as tempdir:
             npm_client = NpmClient(tempdir)
             npm_client.fetch_package_metadata(package_metadata_url)
@@ -36,7 +37,8 @@ class TestNpmClient(unittest.TestCase):
             self.assertEqual(npm_client.package, package)
 
     def test_package_versions(self, m):
-        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME)
+        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME,
+                                          package_metadata_url)
         with tempfile.TemporaryDirectory() as tempdir:
             npm_client = NpmClient(tempdir)
             npm_client.fetch_package_metadata(package_metadata_url)
@@ -47,7 +49,8 @@ class TestNpmClient(unittest.TestCase):
                              get_package_versions_data(package_metadata))
 
     def test_prepare_package_versions(self, m):
-        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME)
+        package_metadata = init_test_data(m, PACKAGE_METADATA_JSON_FILENAME,
+                                          package_metadata_url)
         package_versions_data = get_package_versions_data(package_metadata)
         with tempfile.TemporaryDirectory() as tempdir:
             npm_client = NpmClient(tempdir)
diff --git a/swh/loader/npm/tests/test_loader.py b/swh/loader/npm/tests/test_loader.py
index 2ec7ed3f0b49bf4aff564a1bebd8c3eb06424912..bf58f5944bcf476bbd4f4f548fe1e577abcaa37e 100644
--- a/swh/loader/npm/tests/test_loader.py
+++ b/swh/loader/npm/tests/test_loader.py
@@ -10,9 +10,12 @@ import requests_mock
 
 from swh.loader.core.tests import BaseLoaderStorageTest
 from swh.loader.npm.loader import NpmLoader
+from swh.model.identifiers import snapshot_identifier
 
 from .common import (
+    empty_package, empty_package_url, empty_package_metadata_url,
     package, package_url, package_metadata_url, init_test_data,
+    EMPTY_PACKAGE_METADATA_JSON_FILENAME,
     FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME,
     SECOND_VISIT_PACKAGE_METADATA_JSON_FILENAME,
 )
@@ -199,6 +202,10 @@ class TestNpmLoader(unittest.TestCase, BaseLoaderStorageTest):
 
     @classmethod
     def setUpClass(cls):
+        cls.reset_loader()
+
+    @classmethod
+    def reset_loader(cls):
         cls.loader = NpmLoaderTest()
         cls.storage = cls.loader.storage
 
@@ -206,9 +213,35 @@ class TestNpmLoader(unittest.TestCase, BaseLoaderStorageTest):
         counters_reset = dict.fromkeys(self.loader.counters.keys(), 0)
         self.loader.counters.update(counters_reset)
 
+    def test_npm_loader_empty_package(self, m):
+
+        init_test_data(m, EMPTY_PACKAGE_METADATA_JSON_FILENAME,
+                       empty_package_metadata_url)
+        self.loader.load(empty_package, empty_package_url,
+                         empty_package_metadata_url)
+
+        self.assertCountContents(0)
+        self.assertCountDirectories(0)
+        self.assertCountRevisions(0)
+        self.assertCountReleases(0)
+        self.assertCountSnapshots(1)
+
+        expected_branches = {}
+
+        self.assertSnapshotEqual(
+            snapshot_identifier({'branches': expected_branches}),
+            expected_branches
+        )
+
+        self.assertEqual(self.loader.load_status(), {'status': 'uneventful'})
+        self.assertEqual(self.loader.visit_status(), 'full')
+        self.assertFalse(os.path.exists(self.loader.temp_directory))
+
     def test_npm_loader_first_visit(self, m):
 
-        init_test_data(m, FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME)
+        self.reset_loader()
+        init_test_data(m, FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME,
+                       package_metadata_url)
         self.loader.load(package, package_url, package_metadata_url)
 
         self.assertCountContents(len(_expected_new_contents_first_visit))
@@ -239,7 +272,8 @@ class TestNpmLoader(unittest.TestCase, BaseLoaderStorageTest):
 
         self.reset_loader_counters()
 
-        init_test_data(m, FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME)
+        init_test_data(m, FIRST_VISIT_PACKAGE_METADATA_JSON_FILENAME,
+                       package_metadata_url)
         self.loader.load(package, package_url, package_metadata_url)
 
         # previously loaded objects should still be here
@@ -263,7 +297,8 @@ class TestNpmLoader(unittest.TestCase, BaseLoaderStorageTest):
 
         self.reset_loader_counters()
 
-        init_test_data(m, SECOND_VISIT_PACKAGE_METADATA_JSON_FILENAME)
+        init_test_data(m, SECOND_VISIT_PACKAGE_METADATA_JSON_FILENAME,
+                       package_metadata_url)
         self.loader.load(package, package_url, package_metadata_url)
 
         expected_nb_contents = sum([len(_expected_new_contents_first_visit),