diff --git a/gql/src/entities.rs b/gql/src/entities.rs
index b2c93db2b1329d6fd5091b44dc7eb8257d5f34a1..295700a9924fb7de6f01c59f23ec9c6e6644ef07 100644
--- a/gql/src/entities.rs
+++ b/gql/src/entities.rs
@@ -33,6 +33,31 @@ pub(crate) struct AmountWithBase {
     pub(crate) amount: i32,
     pub(crate) base: i32,
 }
+impl AmountWithBase {
+    fn increment_base(self) -> Self {
+        Self {
+            amount: self.amount / 10,
+            base: self.base + 1,
+        }
+    }
+}
+impl std::ops::Add for AmountWithBase {
+    type Output = Self;
+
+    fn add(self, rhs: Self) -> Self::Output {
+        #[allow(clippy::comparison_chain)]
+        if self.base == rhs.base {
+            Self {
+                amount: self.amount + rhs.amount,
+                base: self.base,
+            }
+        } else if self.base > rhs.base {
+            self.add(rhs.increment_base())
+        } else {
+            self.increment_base().add(rhs)
+        }
+    }
+}
 impl From<SourceAmount> for AmountWithBase {
     fn from(sa: SourceAmount) -> Self {
         Self {
@@ -41,6 +66,11 @@ impl From<SourceAmount> for AmountWithBase {
         }
     }
 }
+impl std::iter::Sum for AmountWithBase {
+    fn sum<I: Iterator<Item = Self>>(iter: I) -> Self {
+        iter.fold(AmountWithBase::default(), std::ops::Add::add)
+    }
+}
 
 #[derive(async_graphql::SimpleObject)]
 pub(crate) struct EdgeTx {
diff --git a/gql/src/queries/wallets.rs b/gql/src/queries/wallets.rs
index 699a085f4dcb4c0ea77585f59058d8571e330938..aa3636b84419f977de92cff4f243caabd13fda33 100644
--- a/gql/src/queries/wallets.rs
+++ b/gql/src/queries/wallets.rs
@@ -32,7 +32,7 @@ impl WalletsQuery {
         #[graphql(desc = "minimal balance")] min_balance: Option<i64>,
         #[graphql(desc = "pagination", default)] pagination: Pagination,
         #[graphql(desc = "Wallet type filter", default)] wallet_type_filter: WalletTypeFilter,
-    ) -> async_graphql::Result<Connection<String, Wallet, EmptyFields, EmptyFields>> {
+    ) -> async_graphql::Result<Connection<String, Wallet, AggregateSum, EmptyFields>> {
         let QueryContext { is_whitelisted } = ctx.data::<QueryContext>()?;
 
         let data = ctx.data::<GvaSchemaData>()?;
@@ -160,7 +160,19 @@ impl WalletsQuery {
             }
         };
 
-        let mut conn = Connection::new(has_previous_page, has_next_page);
+        let sum = if ctx.look_ahead().field("aggregate").field("sum").exists() {
+            data.iter().map(|wallet| wallet.balance).sum()
+        } else {
+            AmountWithBase::default()
+        };
+
+        let mut conn = Connection::with_additional_fields(
+            has_previous_page,
+            has_next_page,
+            AggregateSum {
+                aggregate: Sum { sum },
+            },
+        );
 
         conn.append(
             data.into_iter()