diff --git a/swh/loader/package/cpan/loader.py b/swh/loader/package/cpan/loader.py
--- a/swh/loader/package/cpan/loader.py
+++ b/swh/loader/package/cpan/loader.py
@@ -5,6 +5,7 @@
 
 from datetime import datetime
 import logging
+import string
 from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple
 
 import attr
@@ -34,6 +35,13 @@
 @attr.s
 class CpanPackageInfo(BasePackageInfo):
 
+    EXTID_TYPE = "cpan-manifest-sha256"
+    EXTID_VERSION = 0
+
+    MANIFEST_FORMAT = string.Template(
+        "name $name\nversion $version\ndate $last_modified\nshasum $sha256sum"
+    )
+
     name = attr.ib(type=str)
     """Name of the package"""
 
@@ -46,6 +54,9 @@
     author = attr.ib(type=Person)
     """Author"""
 
+    sha256sum = attr.ib(type=str)
+    """sha256 checksum of package tarball"""
+
 
 class CpanLoader(PackageLoader[CpanPackageInfo]):
     visit_type = "cpan"
@@ -157,6 +168,7 @@
             author=author,
             checksums=artifact["checksums"],
             directory_extrinsic_metadata=directory_extrinsic_metadata,
+            sha256sum=artifact["checksums"]["sha256"],
         )
         yield release_name(version), p_info
 
diff --git a/swh/loader/package/cpan/tests/test_cpan.py b/swh/loader/package/cpan/tests/test_cpan.py
--- a/swh/loader/package/cpan/tests/test_cpan.py
+++ b/swh/loader/package/cpan/tests/test_cpan.py
@@ -11,7 +11,7 @@
 import pytest
 
 from swh.loader.package import __version__
-from swh.loader.package.cpan.loader import CpanLoader
+from swh.loader.package.cpan.loader import CpanLoader, CpanPackageInfo
 from swh.loader.tests import assert_last_visit_matches, check_snapshot, get_stats
 from swh.model.hashutil import hash_to_bytes
 from swh.model.model import (
@@ -207,3 +207,23 @@
         ).results
         == expected_metadata
     )
+
+    package_extids = [
+        package_info.extid()
+        for version in cpan_loader.get_versions()
+        for _, package_info in cpan_loader.get_package_info(version)
+    ]
+
+    extids = storage.extid_get_from_extid(
+        id_type=CpanPackageInfo.EXTID_TYPE,
+        ids=[extid for (_, _, extid) in package_extids],
+        version=CpanPackageInfo.EXTID_VERSION,
+    )
+
+    release_swhids = {
+        CoreSWHID(object_type=ObjectType.RELEASE, object_id=branch.target)
+        for branch in expected_snapshot.branches.values()
+        if branch.target_type == TargetType.RELEASE
+    }
+
+    assert {extid.target for extid in extids} == release_swhids