diff --git a/common/dataStructures/ArchiveJob.hpp b/common/dataStructures/ArchiveJob.hpp
index 5073d6c975a5c480e394c2cc288c2b6e5ee952ec..637769507f4d457d72a1b50028631edd195ac467 100644
--- a/common/dataStructures/ArchiveJob.hpp
+++ b/common/dataStructures/ArchiveJob.hpp
@@ -45,6 +45,7 @@ struct ArchiveJob {
   std::string instanceName;
   uint32_t copyNumber;
   uint64_t archiveFileID;
+  std::string objectId; //!< Objectstore address, provided when reporting a failed job
   std::list<std::string> failurelogs;
 
 }; // struct ArchiveJob
diff --git a/common/dataStructures/RetrieveJob.hpp b/common/dataStructures/RetrieveJob.hpp
index c1958bc656ce7d5f71b4e6a108ceefb3e93b9371..b0c37de28bfc00d1f8bf5cb07a64339bc5dca54d 100644
--- a/common/dataStructures/RetrieveJob.hpp
+++ b/common/dataStructures/RetrieveJob.hpp
@@ -44,6 +44,7 @@ struct RetrieveJob {
   RetrieveRequest request;
   uint64_t fileSize;
   std::map<std::string,std::pair<uint32_t,TapeFile>> tapeCopies;
+  std::string objectId; //!< Objectstore address, provided when reporting a failed job
   std::list<std::string> failurelogs;
 
 }; // struct RetrieveJob
diff --git a/scheduler/OStoreDB/QueueItor.cpp b/scheduler/OStoreDB/QueueItor.cpp
index 457c93abcc4838618a6f84894c3ffed7077041ee..2173d35d79d9e3193ee9c77d305ea4f1cf034260 100644
--- a/scheduler/OStoreDB/QueueItor.cpp
+++ b/scheduler/OStoreDB/QueueItor.cpp
@@ -118,6 +118,7 @@ getQueueJobs(const jobQueue_t &jobQueueChunk)
         job.request.srcURL           = osar.first.getSrcURL();
         job.request.archiveReportURL = osar.first.getArchiveReportURL();
         job.request.storageClass     = osar.first.getArchiveFile().storageClass;
+        job.objectId                 = osar.first.getAddressIfSet();
         job.failurelogs              = osar.first.getFailures();
 
         m_jobCache.push_back(job);
@@ -209,6 +210,7 @@ getQueueJobs(const jobQueue_t &jobQueueChunk)
         job.request            = osrr.first.getSchedulerRequest();
         job.fileSize           = osrr.first.getArchiveFile().fileSize;
         job.tapeCopies[tf.vid] = std::make_pair(tf.copyNb, tf);
+        job.objectId           = osrr.first.getAddressIfSet();
         job.failurelogs        = osrr.first.getFailures();
 
         m_jobCache.push_back(job);
diff --git a/xroot_plugins/XrdCtaFailedRequestLs.hpp b/xroot_plugins/XrdCtaFailedRequestLs.hpp
index 376cd776a95e2e792d9af50da06ff9322c3a5636..c3e844068e9578a2bc3a2d7637b49db56bf3adf5 100644
--- a/xroot_plugins/XrdCtaFailedRequestLs.hpp
+++ b/xroot_plugins/XrdCtaFailedRequestLs.hpp
@@ -137,7 +137,7 @@ pushRecord(XrdSsiPb::OStreamBuffer<Data> *streambuf, const common::dataStructure
   auto &tapepool = m_archiveQueueItorPtr->qid();
   Data record;
 
-  record.mutable_frls_item()->set_object_id("PLACEHOLDER");
+  record.mutable_frls_item()->set_object_id(item.objectId);
   record.mutable_frls_item()->set_request_type(admin::RequestType::ARCHIVE_REQUEST);
   record.mutable_frls_item()->set_tapepool(tapepool);
   record.mutable_frls_item()->set_copy_nb(item.copyNumber);
@@ -166,7 +166,7 @@ pushRecord(XrdSsiPb::OStreamBuffer<Data> *streambuf, const common::dataStructure
 
   Data record;
 
-  record.mutable_frls_item()->set_object_id("PLACEHOLDER");
+  record.mutable_frls_item()->set_object_id(item.objectId);
   record.mutable_frls_item()->set_request_type(admin::RequestType::RETRIEVE_REQUEST);
   record.mutable_frls_item()->set_copy_nb(item.tapeCopies.at(vid).first);
   record.mutable_frls_item()->mutable_requester()->set_username(item.request.requester.name);