PHPackages                             tallesairan/laravel-plausible - 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. [API Development](/categories/api)
4. /
5. tallesairan/laravel-plausible

ActiveLibrary[API Development](/categories/api)

tallesairan/laravel-plausible
=============================

A laravel package for interacting with plausible analytics api.

1.5(2y ago)012MITPHPPHP ^8.1 | ^8.2

Since Jun 7Pushed 2y ago1 watchersCompare

[ Source](https://github.com/tallesairan/laravel-plausible)[ Packagist](https://packagist.org/packages/tallesairan/laravel-plausible)[ Docs](https://github.com/tallesairan/laravel-plausible)[ RSS](/packages/tallesairan-laravel-plausible/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (3)Dependencies (16)Versions (7)Used By (0)

Plausible Analytics for Laravel 10+
===================================

[](#plausible-analytics-for-laravel-10)

This package was originally created by [@njoguamos](https://github.com/njoguamos/) - [njoguamos/laravel-plausible](https://github.com/njoguamos/laravel-plausible)

I had to make this adaptation because the original project only supports Plausible.io and not self-hosted analytics, I made a change so that the base address of the plausible can be manipulated both by configuration and by method, so we can manage several self-hosted Plausible in a single Apis system

[![Latest Version on Packagist](https://camo.githubusercontent.com/8b6b7031d9b0d28cc62883182c6f0bc7229b06a4018206d236bbfc16a29ff934/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f74616c6c6573616972616e2f6c61726176656c2d706c61757369626c652e7376673f7374796c653d666c61742d737175617265267633)](https://packagist.org/packages/tallesairan/laravel-plausible)[![Total Downloads](https://camo.githubusercontent.com/00bd2e7965e1c71629b55b74caa3df5b530360d5395d5a9a5553ba62279d2154/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f74616c6c6573616972616e2f6c61726176656c2d706c61757369626c652e7376673f7374796c653d666c61742d737175617265267632)](https://packagist.org/packages/tallesairan/laravel-plausible)

[Plausible](https://plausible.io/) is intuitive, lightweight and open source web analytics. Plausible has no cookies and fully compliant with GDPR, CCPA and PECR.

[Plausible Self Hosting Docs](https://plausible.io/docs/self-hosting) Plausible Analytics is designed to be self-hosted through Docker. You don't have to be a Docker expert to launch your own instance of Plausible Analytics. You should have a basic understanding of the command-line and networking to successfully set up your own instance of Plausible Analytics.

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

[](#installation)

You can install the package via composer:

```
   composer require tallesairan/laravel-plausible
```

You can initialise the package with:

```
  php artisan plausible:install
```

Install command will publish the [config file](/config/plausible.php).

Ensure that you have updated your application `.env` with credentials from [Plausible](https://plausible.io/docs/stats-api) i.e.

```
#.env file

BASE_URL=https://your-self-hosted-address.io
PLAUSIBLE_SITE_ID=
PLAUSIBLE_API_KEY=
```

Optional baseUrl or siteId over facade
--------------------------------------

[](#optional-baseurl-or-siteid-over-facade)

Develop these methods to help manage multiple plausible self-hosted remotely

default url base is "" to ensure the operation enter the url without the slash at the end

```
use Airan\Plausible\Facades\Plausible;

Plausible::setBaseUrl('https://your-self-hosted-address.io');
Plausible::setSiteId('newera.com');
Plausible::setApiKey('eg-nw88131238128jj9213u1h3h1hh13h2h31200x1h5hh5')
/**
* Practical example
*/
# Let's assume that the Site Model has a belongs to many relationship with a model called Plausible

$sites = Site:with('plausible')->get();

foreach ($sites as $site){
    Plausible::setBaseUrl($site->plausible->base_url); // eg https://stats.newera.com
    Plausible::setApiKey($site->plausible->api_key); // set default api key
    Plausible::setSiteId($site->plausible_slug); // eg newera.com

    $visitors = Plausible::realtime();
    $aggregates = Plausible::aggregates();
    ...

}
```

Usage
-----

[](#usage)

### 1. Getting Realtime Visitors

[](#1-getting-realtime-visitors)

To get the current visitors on your default site, run a request as follows.

```
use Airan\Plausible\Facades\Plausible;

$visitors = Plausible::realtime();
```

The response in a single digit number

```
12
```

If you prefer using facades, then you can do as follows.

```
use Airan\Plausible\Facades\Plausible;

$all = Plausible::aggregates();
```

### 2. Getting Aggregates

[](#2-getting-aggregates)

To get the aggregates, run a request as follows.

```
use Airan\Plausible\Facades\Plausible;

// Simple with default
$aggregates = Plausible::aggregates();

// Or with optional custom parameters
$aggregates = Plausible::aggregates(
        period: 'custom',
        metrics: ['visitors', 'visits', 'pageviews'],
        filters: ['event:page==/blog**', 'visit:country==KE'],
        date: '2023-01-01,2023-01-31'
    );
```

A successful response will be a json. Example;

```
{
    "bounce_rate": {
        "change": 4,
        "value": 71
    },
    "events": {
        "change": -24,
        "value": 1166
    },
    "pageviews": {
        "change": -24,
        "value": 1166
    },
    "views_per_visit": {
        "change": -26,
        "value": 3
    },
    "visit_duration": {
        "change": -37,
        "value": 132
    },
    "visitors": {
        "change": 1,
        "value": 360
    },
    "visits": {
        "change": 3,
        "value": 389
    }
}
```

#### Aggregates parameters explained `expand to view more details`.

[](#aggregates-parameters-explained-expand-to-view-more-details)

Period - string, optional```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(period: '7d')
```

The `period` MUST be either of the allowed ones i.e `12mo`,`6mo`,`month`,`0d`,`7d`,`day`, or `custom`. If not provided, period will default to `30d`;

 Metrics - array, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(metrics: ['visitors', 'visits'])
```

The `metrics` must contain either of the allowed ones i.e `visitors`,`visits`,`pageviews`,`views_per_visit`,`bounce_rate`,`visit_duration`, or `events`. If not provided, all metrics will be included.

 Compare - boolean, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(compare: false )
```

`compare` defaults to `true`, meaning that the percent difference with the previous period for each metric will be calculated.

 Filters - array, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(filters: ['event:page==/blog**', 'visit:country==KE|DE'])
```

Your filters must be properly formed as per [plausible instructions](https://plausible.io/docs/stats-api#filtering). Filters defaults to `null`.

 Date - string, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::aggregates(period: 'custom', date: '2023-01-01,2023-01-31')
```

Date in `Y-m-d` format. Individual date e.g `2023-01-04` or a range `2023-01-01,2023-01-31`. When not provided, date defaults to `current date`.

> **Info**You must include `period: 'custom'` when you provide a date range.

### 3. Getting Time Series

[](#3-getting-time-series)

To get the timeseries data over a certain time period, run a request as follows.

```
use Airan\Plausible\Facades\Plausible;

// Simple with default
$aggregates = Plausible::timeSeries();

// Or with optional custom parameters
$aggregates = Plausible::timeSeries(
        period: 'custom',
        metrics: ['visitors', 'visits', 'pageviews', 'views_per_visit', 'bounce_rate', 'visit_duration'],
        filters: ['event:page==/blog**'],
        interval: 'month',
        date: '2023-01-01,2023-01-31'
    );
```

A successful response will be a json. Example;

```
[
    {
        "bounce_rate": 17,
        "date": "2023-01-01",
        "pageviews": 60,
        "views_per_visit": 19,
        "visit_duration": 525,
        "visitors": 6,
        "visits": 6
    },
    {
        "bounce_rate": 12,
        "date": "2023-01-02",
        "pageviews": 22,
        "views_per_visit": 4,
        "visit_duration": 149,
        "visitors": 6,
        "visits": 8
    },
    {
        "bounce_rate": 57,
        "date": "2023-01-03",
        "pageviews": 9,
        "views_per_visit": 2.57,
        "visit_duration": 48,
        "visitors": 7,
        "visits": 7
    },
    {
        "bounce_rate": 71,
        "date": "2023-01-04",
        "pageviews": 48,
        "views_per_visit": 8.43,
        "visit_duration": 301,
        "visitors": 7,
        "visits": 7
    }
]
```

#### Timeseries parameters explained `expand to view more details`.

[](#timeseries-parameters-explained-expand-to-view-more-details)

Period - string, optional```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(period: '6mo')
```

The `period` MUST be either of the allowed ones i.e `12mo`,`6mo`,`month`,`0d`,`7d`,`day`, or `custom`. If not provided, period will default to `30d`;

 Metrics - array, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(metrics: ['visits', 'pageviews', 'views_per_visit'])
```

The `metrics` must contain either of the allowed ones i.e `visitors`,`visits`,`pageviews`,`views_per_visit`,`bounce_rate`,`visit_duration`, or `events`. If not provided, all metrics will be included.

 Filters - array, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(filters: ['event:page==/blog**', 'visit:browser==Firefox'])
```

Your filters must be properly formed as per [plausible instructions](https://plausible.io/docs/stats-api#filtering). Filters defaults to `null`.

 Interval - string, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(interval: 'month')
```

Interval can only be either `month` or `date`. When not provided, it defaults to date.

 Date - string, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::timeSeries(period: 'custom', date: '2023-01-01,2023-01-31')
```

Date in `Y-m-d` format. Individual date e.g `2023-01-04` or a range `2023-01-01,2023-01-31`. When not provided, date defaults to `current date`.

> **Info**You must include `period: 'custom'` when you provide a date range.

### 4. Getting Breakdowns

[](#4-getting-breakdowns)

To get a breakdown of your stats by some property, run a request as follows.

```
use \Airan\Plausible\Facades\Plausible;

// Simple with defaults
$visitors = Plausible::breakdown();

// With optional parameters
$aggregates = Plausible::breakdown(
        property: 'event:page',
        period: '12mo',
        metrics: ['visitors', 'visits', 'pageviews'],
        filters: 'event:page==/blog**',
        limit: 500
    );
```

The response in a single digit number

```
[
    {
        "bounce_rate": 71,
        "page": "/",
        "pageviews": 146,
        "visit_duration": 126,
        "visitors": 87,
        "visits": 77
    },
    {
        "bounce_rate": 54,
        "page": "/articles",
        "pageviews": 179,
        "visit_duration": 206,
        "visitors": 71,
        "visits": 50
    },
    {
        "bounce_rate": 81,
        "page": "/blog/about-laravel-plausible",
        "pageviews": 42,
        "visit_duration": 27,
        "visitors": 35,
        "visits": 37
    },
    {
        "bounce_rate": 52,
        "page": "/pricing",
        "pageviews": 72,
        "visit_duration": 147,
        "visitors": 31,
        "visits": 27
    },
    {
        "bounce_rate": 76,
        "page": "/aquatadas",
        "pageviews": 22,
        "visit_duration": 82,
        "visitors": 21,
        "visits": 21
    }
]
```

#### Breakdown parameters explained `expand to view more details`.

[](#breakdown-parameters-explained-expand-to-view-more-details)

Property - string, optional```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(property: '6mo')
```

The `property` MUST be either of the allowed ones i.e. `visitors`, `visits`, `pageviews`, `bounce_rate`, or `visit_duration`. If not provided, period will default to all allowed;

Period - string, optional```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(period: '6mo')
```

The `period` MUST be either of the allowed ones i.e `12mo`,`6mo`,`month`,`0d`,`7d`,`day`, or `custom`. If not provided, period will default to `30d`;

 Date - string, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(date: '2023-01-01')
```

Date in `Y-m-d` format.

> **Info**`period: 'custom'` is not supported. `date: '2023-01-01,2023-02-02' is not supported.

 Metrics - array, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(metrics: ['visits', 'pageviews', 'views_per_visit'])
```

The `metrics` must contain either of the allowed ones i.e `visitors`,`visits`,`pageviews`,`views_per_visit`,`bounce_rate`,`visit_duration`, or `events`. If not provided, all metrics will be included.

 Limit - int, optional ```
use Airan\Plausible\Facades\Plausible;;

$aggregates = Plausible::breakdown(limit: 200)
```

The results limit. It must be between `1` and `1000`. When not provided, limit defaults to `100`.

 Page - int, optional ```
use Airan\Plausible\Facades\Plausible;;

$aggregates = Plausible::breakdown(page: 2)
```

Page for the results. When not provided, page defaults to `1`.

 Filters - string, optional ```
use Airan\Plausible\Facades\Plausible;

$aggregates = Plausible::breakdown(filters: 'event:page==/blog**')
```

Your filters must be properly formed as per [plausible instructions](https://plausible.io/docs/stats-api#filtering). Filters defaults to `null`.

> **Info**Multiple filters are not supported.

### 5. Caching Response

[](#5-caching-response)

To increased performance of your application and reduce reliance to plausible api, all requests are cached for 3 minutes. You can specify cache duration (in seconds) and driver using the following env variables.

```
PLAUSIBLE_CACHE_DURATION=300
PLAUSIBLE_CACHE_DRIVER=redis
```

If for some reason you don't want to cache response, you can turn off caching entirely by adding the following env variable.

```
PLAUSIBLE_CACHE=false
```

Testing
-------

[](#testing)

> **Info**To test this package, run the following command.

```
composer test
```

Changelog
---------

[](#changelog)

Please see [releases](https://github.com/tallesairan/laravel-plausible/releases) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [Njogu Amos](https://github.com/njoguamos)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

26

—

LowBetter than 43% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity5

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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

Every ~1 days

Total

6

Last Release

1063d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/71bc67c217f09cac05a1355dd791c88694732a81d30be15b9a8b726446d9ed6d?d=identicon)[tallesairan](/maintainers/tallesairan)

---

Top Contributors

[![tallesairan](https://avatars.githubusercontent.com/u/2424128?v=4)](https://github.com/tallesairan "tallesairan (9 commits)")

---

Tags

laravellaravel-plausibleAiran

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/tallesairan-laravel-plausible/health.svg)

```
[![Health](https://phpackages.com/badges/tallesairan-laravel-plausible/health.svg)](https://phpackages.com/packages/tallesairan-laravel-plausible)
```

###  Alternatives

[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[nativephp/mobile

NativePHP for Mobile

82724.0k43](/packages/nativephp-mobile)[simplestats-io/laravel-client

Client for SimpleStats!

4515.5k](/packages/simplestats-io-laravel-client)[scalar/laravel

Render your OpenAPI-based API reference

6183.9k2](/packages/scalar-laravel)[njoguamos/laravel-plausible

A laravel package for interacting with plausible analytics api.

208.8k](/packages/njoguamos-laravel-plausible)[codebar-ag/laravel-docuware

DocuWare integration with Laravel

1221.1k](/packages/codebar-ag-laravel-docuware)

PHPackages © 2026

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