PHPackages                             felixmuhoro/laravel-mpesa-analytics - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. felixmuhoro/laravel-mpesa-analytics

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

felixmuhoro/laravel-mpesa-analytics
===================================

Analytics, reporting and insights for M-Pesa transactions in Laravel

v1.0.0(1mo ago)00MITPHPPHP ^8.1

Since Jun 4Pushed 1mo agoCompare

[ Source](https://github.com/felixmuhoro/laravel-mpesa-analytics)[ Packagist](https://packagist.org/packages/felixmuhoro/laravel-mpesa-analytics)[ Docs](https://github.com/felixmuhoro/laravel-mpesa-analytics)[ RSS](/packages/felixmuhoro-laravel-mpesa-analytics/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (2)Versions (2)Used By (0)

felixmuhoro/laravel-mpesa-analytics
===================================

[](#felixmuhorolaravel-mpesa-analytics)

Analytics, reporting, and insights for M-Pesa transactions in Laravel.

Requirements
------------

[](#requirements)

- PHP 8.1+
- Laravel 10 / 11 / 12 / 13
- `felixmuhoro/laravel-mpesa: ^1.2`

Installation
------------

[](#installation)

```
composer require felixmuhoro/laravel-mpesa-analytics
```

Publish the config and run migrations:

```
php artisan vendor:publish --tag=mpesa-analytics-config
php artisan vendor:publish --tag=mpesa-analytics-migrations
php artisan migrate
```

Dashboard
---------

[](#dashboard)

Navigate to `/mpesa-analytics` in your browser. The dashboard shows:

- KPI cards: total revenue, average/median transaction, success rate, failed count, revenue growth
- Revenue over time (line chart)
- Success rate gauge (doughnut)
- Transaction volume — successful vs failed (stacked bar)
- Hourly pattern (bar chart, 0-23)
- Top 10 payers table
- Failure reasons pie chart

Date range picker supports: Today, Yesterday, Last 7/30/90 days, This/Last week, This/Last month, This year, and fully custom date ranges.

Programmatic Usage
------------------

[](#programmatic-usage)

```
use FelixMuhoro\MpesaAnalytics\Facades\Analytics;
use FelixMuhoro\MpesaAnalytics\Period;

$period = Period::last30Days();

// Revenue
$revenue = Analytics::revenue($period);
// => ['total' => 1250000.00, 'average' => 1500.00, 'median' => 1200.00,
//    'growth_percent' => 12.5, 'growth_direction' => 'up', ...]

// Transactions
$txns = Analytics::transactions($period);
// => ['total' => 833, 'successful' => 791, 'failed' => 42, 'success_rate' => 94.96, ...]

// Success rate
$rate = Analytics::successRate($period);   // float: 94.96

// Revenue over time (for charting)
$daily = Analytics::dailyRevenue($period);
// => [['date' => '2024-01-01', 'total' => 45000.0, 'count' => 30], ...]

// Hourly pattern
$hourly = Analytics::hourlyPattern($period);
// => [['hour' => 0, 'label' => '00:00', 'total' => 0, 'count' => 0], ...] (24 items)

// Top payers
$byAmount = Analytics::topPayersByAmount($period, limit: 10);
$byCount  = Analytics::topPayersByCount($period, limit: 10);

// Failure reasons (by M-Pesa result code)
$failures = Analytics::failureReasons($period);
// => [['code' => 1, 'description' => 'Insufficient funds', 'count' => 28], ...]

// New vs returning customers
$split = Analytics::newVsReturning($period);
// => ['new' => 120, 'returning' => 671, 'new_percent' => 15.2, ...]

// Full summary (all metrics in one call)
$summary = Analytics::summary($period);

// Custom period
$custom = Period::custom('2024-01-01', '2024-01-31');
$revenue = Analytics::revenue($custom);
```

Period Helper
-------------

[](#period-helper)

```
Period::today()
Period::yesterday()
Period::thisWeek()
Period::lastWeek()
Period::thisMonth()
Period::lastMonth()
Period::last7Days()
Period::last30Days()
Period::last90Days()
Period::thisYear()
Period::custom('2024-01-01', '2024-03-31')
```

Listening to Events
-------------------

[](#listening-to-events)

The package auto-discovers events from `felixmuhoro/laravel-mpesa`. You can also wire your own events in `config/mpesa-analytics.php`:

```
'listen' => [
    'App\Events\PaymentSuccessful' => true,
    'App\Events\PaymentFailed'     => true,
],
```

Each event must carry a `transaction` property (array or object) with fields matching M-Pesa callback payload keys.

CSV Export
----------

[](#csv-export)

```
GET /mpesa-analytics/export/csv?range=last_30_days
GET /mpesa-analytics/export/summary?range=this_month
GET /mpesa-analytics/export/csv?from=2024-01-01&to=2024-01-31

```

Configuration
-------------

[](#configuration)

See `config/mpesa-analytics.php`:

KeyDefaultDescription`route_prefix``mpesa-analytics`URL prefix`route_middleware``['web']`Middleware stack`default_range``last_30_days`Default dashboard period`currency_symbol``KSh`Symbol shown in UI`mask_phones``true`Mask phone numbers on dashboard`cache_ttl``300`Seconds to cache aggregated metrics`auto_discover_events``true`Auto-wire laravel-mpesa eventsRoutes
------

[](#routes)

MethodURINameDescriptionGET`/mpesa-analytics``mpesa-analytics.dashboard`Dashboard HTMLGET`/mpesa-analytics/data``mpesa-analytics.data`JSON chart dataGET`/mpesa-analytics/export/csv``mpesa-analytics.export.csv`Transaction CSVGET`/mpesa-analytics/export/summary``mpesa-analytics.export.summary`Summary CSVTesting
-------

[](#testing)

```
composer test
```

License
-------

[](#license)

MIT — Felix Muhoro

###  Health Score

35

—

LowBetter than 77% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

50d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f4e43995a8ec026a33d25263c30f437674d6d8481092cb3acd64e96e4ba3f4e4?d=identicon)[felixmuhoro](/maintainers/felixmuhoro)

---

Tags

laravelmpesakenyasafaricom

### Embed Badge

![Health badge](/badges/felixmuhoro-laravel-mpesa-analytics/health.svg)

```
[![Health](https://phpackages.com/badges/felixmuhoro-laravel-mpesa-analytics/health.svg)](https://phpackages.com/packages/felixmuhoro-laravel-mpesa-analytics)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.3M347](/packages/psalm-plugin-laravel)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
