diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc
index fcf84df..8831652 100644
--- a/quiche/quic/moqt/moqt_integration_test.cc
+++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 #include <cstddef>
+#include <cstdint>
 #include <memory>
 #include <optional>
 #include <string>
@@ -44,6 +45,7 @@
 using ::quiche::QuicheMemSlice;
 using ::testing::_;
 using ::testing::Assign;
+using ::testing::ElementsAre;
 using ::testing::Return;
 
 class MoqtIntegrationTest : public quiche::test::QuicheTest {
@@ -754,6 +756,15 @@
       .WillOnce([&] { done = true; });
   bool success = test_harness_.RunUntilWithDefaultTimeout([&] { return done; });
   EXPECT_TRUE(success);
+
+  const quic_trace::Trace& trace = *server_->trace_visitor()->trace();
+  std::vector<int64_t> ack_deltas;
+  for (const quic_trace::Event& event : trace.events()) {
+    if (event.event_type() == quic_trace::EventType::MOQT_OBJECT_ACKNOWLEDGED) {
+      ack_deltas.push_back(event.moq_object_ack_time_delta_us());
+    }
+  }
+  EXPECT_THAT(ack_deltas, ElementsAre(-123, 456));
 }
 
 TEST_F(MoqtIntegrationTest, DeliveryTimeout) {
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc
index 01b64be..6518125 100644
--- a/quiche/quic/moqt/moqt_session.cc
+++ b/quiche/quic/moqt/moqt_session.cc
@@ -2656,4 +2656,17 @@
       stream->GetStreamId());
 }
 
+void MoqtSession::PublishedSubscription::ProcessObjectAck(
+    const MoqtObjectAck& message) {
+  session_->trace_recorder_.RecordObjectAck(
+      track_alias_, Location(message.group_id, message.object_id),
+      message.delta_from_deadline);
+
+  if (monitoring_interface_ == nullptr) {
+    return;
+  }
+  monitoring_interface_->OnObjectAckReceived(
+      message.group_id, message.object_id, message.delta_from_deadline);
+}
+
 }  // namespace moqt
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h
index db35e5e..8b719ba 100644
--- a/quiche/quic/moqt/moqt_session.h
+++ b/quiche/quic/moqt/moqt_session.h
@@ -381,13 +381,7 @@
     void OnSubgroupAbandoned(uint64_t group, uint64_t subgroup,
                              webtransport::StreamErrorCode error_code) override;
     void OnGroupAbandoned(uint64_t group_id) override;
-    void ProcessObjectAck(const MoqtObjectAck& message) {
-      if (monitoring_interface_ == nullptr) {
-        return;
-      }
-      monitoring_interface_->OnObjectAckReceived(
-          message.group_id, message.object_id, message.delta_from_deadline);
-    }
+    void ProcessObjectAck(const MoqtObjectAck& message);
 
     // Updates the window and other properties of the subscription in question.
     void Update(Location start, std::optional<uint64_t> end,
diff --git a/quiche/quic/moqt/moqt_trace_recorder.cc b/quiche/quic/moqt/moqt_trace_recorder.cc
index 0a503ef..0f8eb6e 100644
--- a/quiche/quic/moqt/moqt_trace_recorder.cc
+++ b/quiche/quic/moqt/moqt_trace_recorder.cc
@@ -7,6 +7,7 @@
 #include <cstdint>
 #include <optional>
 
+#include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_object.h"
 #include "quiche/quic/moqt/moqt_priority.h"
@@ -101,4 +102,18 @@
   }
 }
 
+void MoqtTraceRecorder::RecordObjectAck(uint64_t track_alias, Location location,
+                                        quic::QuicTimeDelta ack_delta) {
+  if (parent_ == nullptr) {
+    return;
+  }
+  quic_trace::Event* event = AddEvent();
+  event->set_event_type(EventType::MOQT_OBJECT_ACKNOWLEDGED);
+  event->set_moq_object_ack_time_delta_us(ack_delta.ToMicroseconds());
+  event->mutable_moqt_object()->set_track_alias(track_alias);
+  event->mutable_moqt_object()->set_group_id(location.group);
+  event->mutable_moqt_object()->set_object_id(location.object);
+  parent_->PopulateTransportState(event->mutable_transport_state());
+}
+
 }  // namespace moqt
diff --git a/quiche/quic/moqt/moqt_trace_recorder.h b/quiche/quic/moqt/moqt_trace_recorder.h
index a40693a..81b5531 100644
--- a/quiche/quic/moqt/moqt_trace_recorder.h
+++ b/quiche/quic/moqt/moqt_trace_recorder.h
@@ -9,6 +9,7 @@
 #include <memory>
 
 #include "absl/base/nullability.h"
+#include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/core/quic_trace_visitor.h"
 #include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_priority.h"
@@ -55,6 +56,10 @@
                                 Location location, uint64_t subgroup,
                                 MoqtPriority publisher_priority);
 
+  // Records an incoming MOQT Object ACK message.
+  void RecordObjectAck(uint64_t track_alias, Location location,
+                       quic::QuicTimeDelta ack_delta);
+
  private:
   // Adds a new event to the trace, and populates the timestamp.
   quic_trace::Event* AddEvent();
