diff --git a/swh/loader/mercurial/loader.py b/swh/loader/mercurial/loader.py
--- a/swh/loader/mercurial/loader.py
+++ b/swh/loader/mercurial/loader.py
@@ -32,7 +32,7 @@
 
 from swh.model import identifiers
 from swh.model.hashutil import (
-    MultiHash, hash_to_hex, hash_to_bytes,
+    MultiHash, hash_to_hex, hash_to_bytehex, hash_to_bytes,
     DEFAULT_ALGORITHMS
 )
 from swh.loader.core.loader import UnbufferedLoader
@@ -432,7 +432,7 @@
                     # transplant_source stores binary reference to a changeset
                     # prefer to dump hexadecimal one in the revision metadata
                     if k == 'transplant_source':
-                        v = hash_to_hex(v)
+                        v = hash_to_bytehex(v)
                     extra_meta.append([k, v])
 
             revision = {
diff --git a/swh/loader/mercurial/tests/test_loader.py b/swh/loader/mercurial/tests/test_loader.py
--- a/swh/loader/mercurial/tests/test_loader.py
+++ b/swh/loader/mercurial/tests/test_loader.py
@@ -311,7 +311,7 @@
             hg_changesets.add(rev['metadata']['node'])
             for k, v in rev['metadata']['extra_headers']:
                 if k == 'transplant_source':
-                    transplant_sources.add(v)
+                    transplant_sources.add(v.decode('ascii'))
 
         # check extracted data are valid
         self.assertTrue(len(hg_changesets) > 0)