diff --git a/include/caosdb/transaction.h b/include/caosdb/transaction.h
index ddf7133492f182d53de372e80420799cbf285ccf..c04e38b06d17af2265584d6a4482b58d77b034c3 100644
--- a/include/caosdb/transaction.h
+++ b/include/caosdb/transaction.h
@@ -368,6 +368,17 @@ public:
     return *result_set;
   }
 
+  /**
+   * Return the result of a count query
+   *
+   * Only meaningful if there was exactly one COUNT query executed in
+   * this transaction. In all other cases, the return value will be
+   * -1.
+   */
+  [[nodiscard]] inline auto GetCountResult() const -> int {
+    return query_count;
+  }
+
   /**
    * Return the number of sub-requests in this transaction.
    *
@@ -394,6 +405,7 @@ private:
   MultiTransactionRequest *request;
   mutable MultiTransactionResponse *response;
   std::string error_message;
+  int query_count;
 };
 
 template <class InputIterator>
diff --git a/src/caosdb/transaction.cpp b/src/caosdb/transaction.cpp
index 334d8f77ad88f3d4cf39e22fd048a534e7524087..1b19925341fa498f91e0ed309f32d674574245b0 100644
--- a/src/caosdb/transaction.cpp
+++ b/src/caosdb/transaction.cpp
@@ -166,6 +166,7 @@ Transaction::Transaction(
     response(google::protobuf::Arena::CreateMessage<MultiTransactionResponse>(
       get_arena())) {
   this->service_stub = std::move(service_stub);
+  this->query_count = -1;
 }
 
 auto Transaction::RetrieveById(const std::string &id) noexcept -> StatusCode {