diff --git a/packages/server/src/constants/event-tracker.ts b/packages/server/src/constants/event-tracker.ts
index 26e038e4e5..dbca8017e5 100644
--- a/packages/server/src/constants/event-tracker.ts
+++ b/packages/server/src/constants/event-tracker.ts
@@ -9,6 +9,7 @@ export const SALE_ESTIMATE_CREATED = 'Sale estimate created';
 export const SALE_ESTIMATE_EDITED = 'Sale estimate edited';
 export const SALE_ESTIMATE_DELETED = 'Sale estimate deleted';
 export const SALE_ESTIMATE_PDF_VIEWED = 'Sale estimate PDF viewed';
+export const SALE_ESTIMATE_VIEWED = 'Sale estimate viewed';
 
 export const PAYMENT_RECEIVED_CREATED = 'Payment received created';
 export const PAYMENT_RECEIVED_EDITED = 'payment received edited';
@@ -47,6 +48,8 @@ export const AUTH_RESET_PASSWORD = 'Auth reset password';
 export const SUBSCRIPTION_CANCELLED = 'Subscription cancelled';
 export const SUBSCRIPTION_RESUMED = 'Subscription resumed';
 export const SUBSCRIPTION_PLAN_CHANGED = 'Subscription plan changed';
+export const SUBSCRIPTION_PAYMENT_SUCCEED = 'Subscription payment succeed';
+export const SUBSCRIPTION_PAYMENT_FAILED = 'Subscription payment failed';
 
 export const CUSTOMER_CREATED = 'Customer created';
 export const CUSTOMER_EDITED = 'Customer edited';
@@ -100,3 +103,21 @@ export const SALE_GROUP = 'Sale';
 export const PAYMENT_GROUP = 'Payment';
 export const BILL_GROUP = 'Bill';
 export const EXPENSE_GROUP = 'Expense';
+
+// # Reports
+export const BALANCE_SHEET_VIEWED = 'Balance sheet viewed';
+export const TRIAL_BALANCE_SHEET_VIEWED = 'Trial balance sheet viewed';
+export const PROFIT_LOSS_SHEET_VIEWED = 'Profit loss sheet viewed';
+export const CASHFLOW_STATEMENT_VIEWED = 'Cashflow statement viewed';
+export const GENERAL_LEDGER_VIEWED = 'General ledger viewed';
+export const JOURNAL_VIEWED = 'Journal viewed';
+export const RECEIVABLE_AGING_VIEWED = 'Receivable aging viewed';
+export const PAYABLE_AGING_VIEWED = 'Payable aging viewed';
+export const CUSTOMER_BALANCE_SUMMARY_VIEWED =
+  'Customer balance summary viewed';
+export const VENDOR_BALANCE_SUMMARY_VIEWED = 'Vendor balance summary viewed';
+export const INVENTORY_VALUATION_VIEWED = 'Inventory valuation viewed';
+export const CUSTOMER_TRANSACTIONS_VIEWED = 'Customer transactions viewed';
+export const VENDOR_TRANSACTIONS_VIEWED = 'Vendor transactions viewed';
+export const SALES_BY_ITEM_VIEWED = 'Sales by item viewed';
+export const PURCHASES_BY_ITEM_VIEWED = 'Purchases by item viewed';
diff --git a/packages/server/src/services/Accounts/GetAccount.ts b/packages/server/src/services/Accounts/GetAccount.ts
index 17752709f6..5ad0cc9179 100644
--- a/packages/server/src/services/Accounts/GetAccount.ts
+++ b/packages/server/src/services/Accounts/GetAccount.ts
@@ -1,5 +1,4 @@
 import { Service, Inject } from 'typedi';
-import I18nService from '@/services/I18n/I18nService';
 import HasTenancyService from '@/services/Tenancy/TenancyService';
 import { AccountTransformer } from './AccountTransform';
 import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
@@ -11,9 +10,6 @@ export class GetAccount {
   @Inject()
   private tenancy: HasTenancyService;
 
-  @Inject()
-  private i18nService: I18nService;
-
   @Inject()
   private transformer: TransformerInjectable;
 
@@ -44,10 +40,8 @@ export class GetAccount {
       new AccountTransformer(),
       { accountsGraph }
     );
-    const eventPayload = {
-      tenantId,
-      accountId,
-    };
+    const eventPayload = { tenantId, accountId };
+
     // Triggers `onAccountViewed` event.
     await this.eventPublisher.emitAsync(events.accounts.onViewed, eventPayload);
 
diff --git a/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts b/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts
index 8a5b15be04..43a8a692f8 100644
--- a/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts
+++ b/packages/server/src/services/Cashflow/NewCashflowTransactionService.ts
@@ -122,6 +122,7 @@ export default class NewCashflowTransactionService {
    * @param {number} tenantId -
    * @param {ICashflowOwnerContributionDTO} ownerContributionDTO
    * @param {number} userId - User id.
+   * @returns {Promise<ICashflowTransaction>}
    */
   public newCashflowTransaction = async (
     tenantId: number,
diff --git a/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts b/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts
index 9414b33b65..17f21209fb 100644
--- a/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts
+++ b/packages/server/src/services/CreditNotes/RefundSyncCreditNoteBalance.ts
@@ -1,7 +1,6 @@
-import Knex from 'knex';
-import { IRefundCreditNote } from '@/interfaces';
-import HasTenancyService from '@/services/Tenancy/TenancyService';
+import { Knex } from 'knex';
 import { Inject, Service } from 'typedi';
+import HasTenancyService from '@/services/Tenancy/TenancyService';
 
 @Service()
 export default class RefundSyncCreditNoteBalance {
diff --git a/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts b/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts
new file mode 100644
index 0000000000..4a3b857d11
--- /dev/null
+++ b/packages/server/src/services/EventsTracker/events/ReportsEventsTracker.ts
@@ -0,0 +1,240 @@
+import { Inject, Service } from 'typedi';
+import { EventSubscriber } from '@/lib/EventPublisher/EventPublisher';
+import { ReportsEvents } from '@/constants/event-tracker';
+import { PosthogService } from '../PostHog';
+import events from '@/subscribers/events';
+import {
+  BALANCE_SHEET_VIEWED,
+  TRIAL_BALANCE_SHEET_VIEWED,
+  PROFIT_LOSS_SHEET_VIEWED,
+  CASHFLOW_STATEMENT_VIEWED,
+  GENERAL_LEDGER_VIEWED,
+  JOURNAL_VIEWED,
+  RECEIVABLE_AGING_VIEWED,
+  PAYABLE_AGING_VIEWED,
+  CUSTOMER_BALANCE_SUMMARY_VIEWED,
+  VENDOR_BALANCE_SUMMARY_VIEWED,
+  INVENTORY_VALUATION_VIEWED,
+  CUSTOMER_TRANSACTIONS_VIEWED,
+  VENDOR_TRANSACTIONS_VIEWED,
+  SALES_BY_ITEM_VIEWED,
+  PURCHASES_BY_ITEM_VIEWED,
+} from '@/constants/event-tracker';
+
+@Service()
+export class ReportsEventsTracker extends EventSubscriber {
+  @Inject()
+  private posthog: PosthogService;
+
+  /**
+   * Constructor method.
+   */
+  public attach(bus) {
+    bus.subscribe(
+      events.reports.onBalanceSheetViewed,
+      this.handleTrackBalanceSheetViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onTrialBalanceSheetView,
+      this.handleTrackTrialBalanceSheetViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onProfitLossSheetViewed,
+      this.handleTrackProfitLossSheetViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onCashflowStatementViewed,
+      this.handleTrackCashflowStatementViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onGeneralLedgerViewed,
+      this.handleTrackGeneralLedgerViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onJournalViewed,
+      this.handleTrackJournalViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onReceivableAgingViewed,
+      this.handleTrackReceivableAgingViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onPayableAgingViewed,
+      this.handleTrackPayableAgingViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onCustomerBalanceSummaryViewed,
+      this.handleTrackCustomerBalanceSummaryViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onVendorBalanceSummaryViewed,
+      this.handleTrackVendorBalanceSummaryViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onInventoryValuationViewed,
+      this.handleTrackInventoryValuationViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onCustomerTransactionsViewed,
+      this.handleTrackCustomerTransactionsViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onVendorTransactionsViewed,
+      this.handleTrackVendorTransactionsViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onSalesByItemViewed,
+      this.handleTrackSalesByItemViewedEvent
+    );
+    bus.subscribe(
+      events.reports.onPurchasesByItemViewed,
+      this.handleTrackPurchasesByItemViewedEvent
+    );
+  }
+
+  private handleTrackBalanceSheetViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: BALANCE_SHEET_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackTrialBalanceSheetViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: TRIAL_BALANCE_SHEET_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackProfitLossSheetViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: PROFIT_LOSS_SHEET_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackCashflowStatementViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: CASHFLOW_STATEMENT_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackGeneralLedgerViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: GENERAL_LEDGER_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackJournalViewedEvent = ({ tenantId }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: JOURNAL_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackReceivableAgingViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: RECEIVABLE_AGING_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackPayableAgingViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: PAYABLE_AGING_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackCustomerBalanceSummaryViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: CUSTOMER_BALANCE_SUMMARY_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackVendorBalanceSummaryViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: VENDOR_BALANCE_SUMMARY_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackInventoryValuationViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: INVENTORY_VALUATION_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackCustomerTransactionsViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: CUSTOMER_TRANSACTIONS_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackVendorTransactionsViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: VENDOR_TRANSACTIONS_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackSalesByItemViewedEvent = ({ tenantId }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: SALES_BY_ITEM_VIEWED,
+      properties: {},
+    });
+  };
+
+  private handleTrackPurchasesByItemViewedEvent = ({
+    tenantId,
+  }: ReportsEvents) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: PURCHASES_BY_ITEM_VIEWED,
+      properties: {},
+    });
+  };
+}
diff --git a/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts b/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts
index 643562248b..263044bff9 100644
--- a/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts
+++ b/packages/server/src/services/EventsTracker/events/SaleEstimateEventsTracker.ts
@@ -12,6 +12,7 @@ import {
   SALE_ESTIMATE_EDITED,
   SALE_ESTIMATE_DELETED,
   SALE_ESTIMATE_PDF_VIEWED,
+  SALE_ESTIMATE_VIEWED,
 } from '@/constants/event-tracker';
 
 @Service()
@@ -39,6 +40,10 @@ export class SaleEstimateEventsTracker extends EventSubscriber {
       events.saleEstimate.onPdfViewed,
       this.handleTrackPdfViewedEstimateEvent
     );
+    bus.subscribe(
+      events.saleEstimate.onViewed,
+      this.handleTrackViewedEstimateEvent
+    );
   }
 
   private handleTrackEstimateCreatedEvent = ({
@@ -80,4 +85,12 @@ export class SaleEstimateEventsTracker extends EventSubscriber {
       properties: {},
     });
   };
+
+  private handleTrackViewedEstimateEvent = ({ tenantId }) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: SALE_ESTIMATE_VIEWED,
+      properties: {},
+    });
+  };
 }
diff --git a/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts b/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts
index 1c1cfc81b9..47d3069afc 100644
--- a/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts
+++ b/packages/server/src/services/EventsTracker/events/TransactionsLockingEventsTracker.ts
@@ -4,6 +4,8 @@ import { ITransactionsLockingPartialUnlocked } from '@/interfaces';
 import { PosthogService } from '../PostHog';
 import {
   SUBSCRIPTION_CANCELLED,
+  SUBSCRIPTION_PAYMENT_FAILED,
+  SUBSCRIPTION_PAYMENT_SUCCEED,
   SUBSCRIPTION_PLAN_CHANGED,
   SUBSCRIPTION_RESUMED,
 } from '@/constants/event-tracker';
@@ -27,6 +29,14 @@ export class TransactionsLockingEventsTracker extends EventSubscriber {
       events.subscription.onSubscriptionPlanChanged,
       this.handleSubscriptionPlanChangedEvent
     );
+    bus.subscribe(
+      events.subscription.onSubscriptionPaymentSucceed,
+      this.handleSubscriptionPaymentFailedEvent
+    );
+    bus.subscribe(
+      events.subscription.onSubscriptionPaymentFailed,
+      this.handleSubscriptionPaymentSucceed
+    );
   }
 
   private handleSubscriptionResumedEvent = ({ tenantId }) => {
@@ -52,4 +62,20 @@ export class TransactionsLockingEventsTracker extends EventSubscriber {
       properties: {},
     });
   };
+
+  private handleSubscriptionPaymentFailedEvent = ({ tenantId }) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: SUBSCRIPTION_PAYMENT_FAILED,
+      properties: {},
+    });
+  };
+
+  private handleSubscriptionPaymentSucceed = ({ tenantId }) => {
+    this.posthog.trackEvent({
+      distinctId: `tenant-${tenantId}`,
+      event: SUBSCRIPTION_PAYMENT_SUCCEED,
+      properties: {},
+    });
+  };
 }
diff --git a/packages/server/src/services/EventsTracker/events/events.ts b/packages/server/src/services/EventsTracker/events/events.ts
index 89714f02d4..9e23d18a78 100644
--- a/packages/server/src/services/EventsTracker/events/events.ts
+++ b/packages/server/src/services/EventsTracker/events/events.ts
@@ -16,6 +16,7 @@ import { PdfTemplateEventsTracker } from './PdfTemplateEventsTracker';
 import { PaymentMethodEventsTracker } from './PaymentMethodEventsTracker';
 import { PaymentLinkEventsTracker } from './PaymentLinkEventsTracker';
 import { StripeIntegrationEventsTracker } from './StripeIntegrationEventsTracker';
+import { ReportsEventsTracker } from './ReportsEventsTracker';
 
 export const EventsTrackerListeners = [
   SaleInvoiceEventsTracker,
@@ -36,4 +37,5 @@ export const EventsTrackerListeners = [
   PaymentMethodEventsTracker,
   PaymentLinkEventsTracker,
   StripeIntegrationEventsTracker,
+  ReportsEventsTracker,
 ];
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
index 49ee464484..17f60c59b1 100644
--- a/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/APAgingSummaryService.ts
@@ -6,6 +6,8 @@ import TenancyService from '@/services/Tenancy/TenancyService';
 import APAgingSummarySheet from './APAgingSummarySheet';
 import { Tenant } from '@/system/models';
 import { APAgingSummaryMeta } from './APAgingSummaryMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class APAgingSummaryService {
@@ -15,6 +17,9 @@ export class APAgingSummaryService {
   @Inject()
   private APAgingSummaryMeta: APAgingSummaryMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Default report query.
    */
@@ -96,6 +101,12 @@ export class APAgingSummaryService {
     // Retrieve the aging summary report meta.
     const meta = await this.APAgingSummaryMeta.meta(tenantId, filter);
 
+    // Triggers `onPayableAgingViewed` event.
+    await this.eventPublisher.emitAsync(events.reports.onPayableAgingViewed, {
+      tenantId,
+      query,
+    });
+
     return {
       data,
       columns,
diff --git a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
index d52709027c..aa9a3cd9a1 100644
--- a/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/AgingSummary/ARAgingSummaryService.ts
@@ -6,6 +6,8 @@ import TenancyService from '@/services/Tenancy/TenancyService';
 import ARAgingSummarySheet from './ARAgingSummarySheet';
 import { Tenant } from '@/system/models';
 import { ARAgingSummaryMeta } from './ARAgingSummaryMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export default class ARAgingSummaryService {
@@ -15,6 +17,9 @@ export default class ARAgingSummaryService {
   @Inject()
   private ARAgingSummaryMeta: ARAgingSummaryMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Default report query.
    */
@@ -91,6 +96,15 @@ export default class ARAgingSummaryService {
     // Retrieve the aging summary report meta.
     const meta = await this.ARAgingSummaryMeta.meta(tenantId, filter);
 
+    // Triggers `onReceivableAgingViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onReceivableAgingViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data,
       columns,
diff --git a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
index 5e171110bb..1e5b845d64 100644
--- a/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
+++ b/packages/server/src/services/FinancialStatements/BalanceSheet/BalanceSheetInjectable.ts
@@ -10,6 +10,8 @@ import BalanceSheetStatement from './BalanceSheet';
 import { Tenant } from '@/system/models';
 import BalanceSheetRepository from './BalanceSheetRepository';
 import { BalanceSheetMetaInjectable } from './BalanceSheetMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export default class BalanceSheetStatementService
@@ -21,6 +23,9 @@ export default class BalanceSheetStatementService
   @Inject()
   private balanceSheetMeta: BalanceSheetMetaInjectable;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {IBalanceSheetQuery}
@@ -98,6 +103,10 @@ export default class BalanceSheetStatementService
     // Balance sheet meta.
     const meta = await this.balanceSheetMeta.meta(tenantId, filter);
 
+    // Triggers `onBalanceSheetViewed` event.
+    await this.eventPublisher.emitAsync(events.reports.onBalanceSheetViewed, {
+      query,
+    });
     return {
       query: filter,
       data,
diff --git a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
index 38edc5174a..a5636594b6 100644
--- a/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/CustomerBalanceSummary/CustomerBalanceSummaryService.ts
@@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger';
 import CustomerBalanceSummaryRepository from './CustomerBalanceSummaryRepository';
 import { Tenant } from '@/system/models';
 import { CustomerBalanceSummaryMeta } from './CustomerBalanceSummaryMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class CustomerBalanceSummaryService
@@ -24,6 +26,9 @@ export class CustomerBalanceSummaryService
   @Inject()
   private customerBalanceSummaryMeta: CustomerBalanceSummaryMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {ICustomerBalanceSummaryQuery}
@@ -104,6 +109,15 @@ export class CustomerBalanceSummaryService
     // Retrieve the customer balance summary meta.
     const meta = await this.customerBalanceSummaryMeta.meta(tenantId, filter);
 
+    // Triggers `onCustomerBalanceSummaryViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onCustomerBalanceSummaryViewed,
+      {
+        tenant,
+        query,
+      }
+    );
+
     return {
       data: report.reportData(),
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
index 54066b3454..a614c2cf57 100644
--- a/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
+++ b/packages/server/src/services/FinancialStatements/GeneralLedger/GeneralLedgerService.ts
@@ -5,6 +5,8 @@ import TenancyService from '@/services/Tenancy/TenancyService';
 import GeneralLedgerSheet from '@/services/FinancialStatements/GeneralLedger/GeneralLedger';
 import { GeneralLedgerMeta } from './GeneralLedgerMeta';
 import { GeneralLedgerRepository } from './GeneralLedgerRepository';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class GeneralLedgerService {
@@ -14,6 +16,9 @@ export class GeneralLedgerService {
   @Inject()
   private generalLedgerMeta: GeneralLedgerMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults general ledger report filter query.
    * @return {IBalanceSheetQuery}
@@ -72,6 +77,11 @@ export class GeneralLedgerService {
     // Retrieve general ledger report metadata.
     const meta = await this.generalLedgerMeta.meta(tenantId, filter);
 
+    // Triggers `onGeneralLedgerViewed` event.
+    await this.eventPublisher.emitAsync(events.reports.onGeneralLedgerViewed, {
+      tenantId,
+    });
+
     return {
       data: reportData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts
index 4da85b21d8..89a38f49e3 100644
--- a/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/InventoryValuationSheet/InventoryValuationSheetService.ts
@@ -11,6 +11,8 @@ import { InventoryValuationSheet } from './InventoryValuationSheet';
 import InventoryService from '@/services/Inventory/Inventory';
 import { Tenant } from '@/system/models';
 import { InventoryValuationMetaInjectable } from './InventoryValuationSheetMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class InventoryValuationSheetService {
@@ -26,6 +28,9 @@ export class InventoryValuationSheetService {
   @Inject()
   private inventoryValuationMeta: InventoryValuationMetaInjectable;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {IBalanceSheetQuery}
@@ -116,6 +121,15 @@ export class InventoryValuationSheetService {
     // Retrieves the inventorty valuation meta.
     const meta = await this.inventoryValuationMeta.meta(tenantId, filter);
 
+    // Triggers `onInventoryValuationViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onInventoryValuationViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: inventoryValuationData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
index 90027c3a19..f9d23bba65 100644
--- a/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/JournalSheet/JournalSheetService.ts
@@ -7,6 +7,8 @@ import Journal from '@/services/Accounting/JournalPoster';
 import { Tenant } from '@/system/models';
 import { transformToMap } from 'utils';
 import { JournalSheetMeta } from './JournalSheetMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class JournalSheetService {
@@ -16,6 +18,9 @@ export class JournalSheetService {
   @Inject()
   private journalSheetMeta: JournalSheetMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Default journal sheet filter queyr.
    */
@@ -101,6 +106,12 @@ export class JournalSheetService {
     // Retrieve the journal sheet meta.
     const meta = await this.journalSheetMeta.meta(tenantId, filter);
 
+    // Triggers `onJournalViewed` event.
+    await this.eventPublisher.emitAsync(events.reports.onJournalViewed, {
+      tenantId,
+      query,
+    });
+
     return {
       data: journalSheetData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
index f3b24e7a6c..edfb627f68 100644
--- a/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
+++ b/packages/server/src/services/FinancialStatements/ProfitLossSheet/ProfitLossSheetService.ts
@@ -10,6 +10,8 @@ import { Tenant } from '@/system/models';
 import { mergeQueryWithDefaults } from './utils';
 import { ProfitLossSheetRepository } from './ProfitLossSheetRepository';
 import { ProfitLossSheetMeta } from './ProfitLossSheetMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 // Profit/Loss sheet service.
 @Service()
@@ -20,6 +22,9 @@ export default class ProfitLossSheetService {
   @Inject()
   private profitLossSheetMeta: ProfitLossSheetMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Retrieve profit/loss sheet statement.
    * @param {number} tenantId
@@ -62,6 +67,15 @@ export default class ProfitLossSheetService {
     // Retrieve the profit/loss sheet meta.
     const meta = await this.profitLossSheetMeta.meta(tenantId, filter);
 
+    // Triggers `onProfitLossSheetViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onProfitLossSheetViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       query: filter,
       data,
diff --git a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts
index a2d6240cbf..5def568cd7 100644
--- a/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts
+++ b/packages/server/src/services/FinancialStatements/PurchasesByItems/PurchasesByItemsService.ts
@@ -8,6 +8,8 @@ import {
   IPurchasesByItemsSheet,
 } from '@/interfaces/PurchasesByItemsSheet';
 import { PurchasesByItemsMeta } from './PurchasesByItemsMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class PurchasesByItemsService {
@@ -17,6 +19,9 @@ export class PurchasesByItemsService {
   @Inject()
   private purchasesByItemsMeta: PurchasesByItemsMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults purchases by items filter query.
    * @return {IPurchasesByItemsReportQuery}
@@ -92,6 +97,15 @@ export class PurchasesByItemsService {
     // Retrieve the purchases by items meta.
     const meta = await this.purchasesByItemsMeta.meta(tenantId, query);
 
+    // Triggers `onPurchasesByItemViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onPurchasesByItemViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: purchasesByItemsData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
index 1dc9b4f055..a4cb25e095 100644
--- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
+++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsService.ts
@@ -5,6 +5,8 @@ import TenancyService from '@/services/Tenancy/TenancyService';
 import SalesByItems from './SalesByItems';
 import { Tenant } from '@/system/models';
 import { SalesByItemsMeta } from './SalesByItemsMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class SalesByItemsReportService {
@@ -14,6 +16,9 @@ export class SalesByItemsReportService {
   @Inject()
   private salesByItemsMeta: SalesByItemsMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {IBalanceSheetQuery}
@@ -89,6 +94,12 @@ export class SalesByItemsReportService {
     // Retrieve the sales by items meta.
     const meta = await this.salesByItemsMeta.meta(tenantId, query);
 
+    // Triggers `onSalesByItemViewed` event.
+    await this.eventPublisher.emitAsync(events.reports.onSalesByItemViewed, {
+      tenantId,
+      query,
+    });
+
     return {
       data: salesByItemsData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
index a97a13afe8..e30c9bc18d 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByCustomer/TransactionsByCustomersService.ts
@@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger';
 import TransactionsByCustomersRepository from './TransactionsByCustomersRepository';
 import { Tenant } from '@/system/models';
 import { TransactionsByCustomersMeta } from './TransactionsByCustomersMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 export class TransactionsByCustomersSheet
   implements ITransactionsByCustomersService
@@ -26,6 +28,9 @@ export class TransactionsByCustomersSheet
   @Inject()
   private transactionsByCustomersMeta: TransactionsByCustomersMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {ICustomerBalanceSummaryQuery}
@@ -166,6 +171,15 @@ export class TransactionsByCustomersSheet
 
     const meta = await this.transactionsByCustomersMeta.meta(tenantId, filter);
 
+    // Triggers `onCustomerTransactionsViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onCustomerTransactionsViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: reportInstance.reportData(),
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
index 69b4249576..165ff4eddd 100644
--- a/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
+++ b/packages/server/src/services/FinancialStatements/TransactionsByVendor/TransactionsByVendorInjectable.ts
@@ -13,6 +13,8 @@ import Ledger from '@/services/Accounting/Ledger';
 import TransactionsByVendorRepository from './TransactionsByVendorRepository';
 import { Tenant } from '@/system/models';
 import { TransactionsByVendorMeta } from './TransactionsByVendorMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 export class TransactionsByVendorsInjectable
   implements ITransactionsByVendorsService
@@ -26,6 +28,9 @@ export class TransactionsByVendorsInjectable
   @Inject()
   private transactionsByVendorMeta: TransactionsByVendorMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {IVendorBalanceSummaryQuery}
@@ -171,6 +176,15 @@ export class TransactionsByVendorsInjectable
     );
     const meta = await this.transactionsByVendorMeta.meta(tenantId, filter);
 
+    // Triggers `onVendorTransactionsViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onVendorTransactionsViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: reportInstance.reportData(),
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
index df498241bc..c33e80fd4b 100644
--- a/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
+++ b/packages/server/src/services/FinancialStatements/TrialBalanceSheet/TrialBalanceSheetInjectable.ts
@@ -7,6 +7,8 @@ import FinancialSheet from '../FinancialSheet';
 import { Tenant } from '@/system/models';
 import { TrialBalanceSheetRepository } from './TrialBalanceSheetRepository';
 import { TrialBalanceSheetMeta } from './TrialBalanceSheetMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export default class TrialBalanceSheetService extends FinancialSheet {
@@ -16,6 +18,9 @@ export default class TrialBalanceSheetService extends FinancialSheet {
   @Inject()
   private trialBalanceSheetMetaService: TrialBalanceSheetMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults trial balance sheet filter query.
    * @return {IBalanceSheetQuery}
@@ -81,6 +86,15 @@ export default class TrialBalanceSheetService extends FinancialSheet {
     // Trial balance sheet meta.
     const meta = await this.trialBalanceSheetMetaService.meta(tenantId, filter);
 
+    // Triggers `onTrialBalanceSheetViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onTrialBalanceSheetView,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: trialBalanceSheetData,
       query: filter,
diff --git a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
index c64496b7bb..41b63749e2 100644
--- a/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
+++ b/packages/server/src/services/FinancialStatements/VendorBalanceSummary/VendorBalanceSummaryService.ts
@@ -15,6 +15,8 @@ import { Tenant } from '@/system/models';
 import { JournalSheetMeta } from '../JournalSheet/JournalSheetMeta';
 
 import { VendorBalanceSummaryMeta } from './VendorBalanceSummaryMeta';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 export class VendorBalanceSummaryService
   implements IVendorBalanceSummaryService
@@ -28,6 +30,9 @@ export class VendorBalanceSummaryService
   @Inject()
   private vendorBalanceSummaryMeta: VendorBalanceSummaryMeta;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Defaults balance sheet filter query.
    * @return {IVendorBalanceSummaryQuery}
@@ -49,7 +54,7 @@ export class VendorBalanceSummaryService
   }
 
   /**
-   * 
+   *
    * Retrieve the vendors ledger entrjes.
    * @param {number} tenantId -
    * @param {Date|string} date -
@@ -107,10 +112,19 @@ export class VendorBalanceSummaryService
     // Retrieve the vendor balance summary meta.
     const meta = await this.vendorBalanceSummaryMeta.meta(tenantId, filter);
 
+    // Triggers `onVendorBalanceSummaryViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.reports.onVendorBalanceSummaryViewed,
+      {
+        tenantId,
+        query,
+      }
+    );
+
     return {
       data: reportInstance.reportData(),
       query: filter,
-      meta
+      meta,
     };
   }
 }
diff --git a/packages/server/src/services/Items/ItemsApplication.ts b/packages/server/src/services/Items/ItemsApplication.ts
index a19a9db8fd..24b72ec390 100644
--- a/packages/server/src/services/Items/ItemsApplication.ts
+++ b/packages/server/src/services/Items/ItemsApplication.ts
@@ -39,8 +39,8 @@ export class ItemsApplication {
 
   /**
    * Creates a new item (service/product).
-   * @param   {number} tenantId
-   * @param   {IItemCreateDTO} itemDTO
+   * @param {number} tenantId
+   * @param {IItemCreateDTO} itemDTO
    * @returns {Promise<IItem>}
    */
   public async createItem(
@@ -52,8 +52,8 @@ export class ItemsApplication {
 
   /**
    * Retrieves the given item.
-   * @param   {number} tenantId
-   * @param   {number} itemId
+   * @param {number} tenantId
+   * @param {number} itemId
    * @returns {Promise<IItem>}
    */
   public getItem(tenantId: number, itemId: number): Promise<IItem> {
@@ -62,9 +62,9 @@ export class ItemsApplication {
 
   /**
    * Edits the given item (service/product).
-   * @param   {number} tenantId
-   * @param   {number} itemId
-   * @param   {IItemEditDTO} itemDTO
+   * @param {number} tenantId
+   * @param {number} itemId
+   * @param {IItemEditDTO} itemDTO
    * @returns {Promise<IItem>}
    */
   public editItem(tenantId: number, itemId: number, itemDTO: IItemEditDTO) {
@@ -73,8 +73,8 @@ export class ItemsApplication {
 
   /**
    * Deletes the given item (service/product).
-   * @param   {number} tenantId
-   * @param   {number} itemId
+   * @param {number} tenantId
+   * @param {number} itemId
    * @returns {Promise<void>}
    */
   public deleteItem(tenantId: number, itemId: number) {
diff --git a/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts b/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts
index c1a89c20d5..6449501885 100644
--- a/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts
+++ b/packages/server/src/services/Sales/Estimates/GetSaleEstimate.ts
@@ -3,6 +3,8 @@ import HasTenancyService from '@/services/Tenancy/TenancyService';
 import { TransformerInjectable } from '@/lib/Transformer/TransformerInjectable';
 import { SaleEstimateTransfromer } from './SaleEstimateTransformer';
 import { SaleEstimateValidators } from './SaleEstimateValidators';
+import { EventPublisher } from '@/lib/EventPublisher/EventPublisher';
+import events from '@/subscribers/events';
 
 @Service()
 export class GetSaleEstimate {
@@ -15,6 +17,9 @@ export class GetSaleEstimate {
   @Inject()
   private validators: SaleEstimateValidators;
 
+  @Inject()
+  private eventPublisher: EventPublisher;
+
   /**
    * Retrieve the estimate details with associated entries.
    * @async
@@ -35,10 +40,18 @@ export class GetSaleEstimate {
     this.validators.validateEstimateExistance(estimate);
 
     // Transformes sale estimate model to POJO.
-    return this.transformer.transform(
+    const transformed = await this.transformer.transform(
       tenantId,
       estimate,
       new SaleEstimateTransfromer()
     );
+    const eventPayload = { tenantId, saleEstimateId: estimateId };
+
+    // Triggers `onSaleEstimateViewed` event.
+    await this.eventPublisher.emitAsync(
+      events.saleEstimate.onViewed,
+      eventPayload
+    );
+    return transformed;
   }
 }
diff --git a/packages/server/src/subscribers/events.ts b/packages/server/src/subscribers/events.ts
index 7d7eb95d74..d735dd1a91 100644
--- a/packages/server/src/subscribers/events.ts
+++ b/packages/server/src/subscribers/events.ts
@@ -180,6 +180,7 @@ export default {
    * Sales estimates service.
    */
   saleEstimate: {
+    onViewed: 'onSaleEstimateViewed',
     onPdfViewed: 'onSaleEstimatePdfViewed',
 
     onCreating: 'onSaleEstimateCreating',
@@ -751,4 +752,23 @@ export default {
     onCheckoutSessionCompleted: 'onStripeCheckoutSessionCompleted',
     onAccountUpdated: 'onStripeAccountUpdated',
   },
+
+  // Reports
+  reports: {
+    onBalanceSheetViewed: 'onBalanceSheetViewed',
+    onTrialBalanceSheetView: 'onTrialBalanceSheetViewed',
+    onProfitLossSheetViewed: 'onProfitLossSheetViewed',
+    onCashflowStatementViewed: 'onCashflowStatementViewed',
+    onGeneralLedgerViewed: 'onGeneralLedgerViewed',
+    onJournalViewed: 'onJounralViewed',
+    onReceivableAgingViewed: 'onReceivableAgingViewed',
+    onPayableAgingViewed: 'onPayableAgingViewed',
+    onCustomerBalanceSummaryViewed: 'onInventoryValuationViewed',
+    onVendorBalanceSummaryViewed: 'onVendorBalanceSummaryViewed',
+    onInventoryValuationViewed: 'onCustomerBalanceSummaryViewed',
+    onCustomerTransactionsViewed: 'onCustomerTransactionsViewed',
+    onVendorTransactionsViewed: 'onVendorTransactionsViewed',
+    onSalesByItemViewed: 'onSalesByItemViewed',
+    onPurchasesByItemViewed: 'onPurchasesByItemViewed',
+  },
 };