PHPackages                             ibrahim-kaya/visit-tracker - 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. ibrahim-kaya/visit-tracker

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

ibrahim-kaya/visit-tracker
==========================

A Laravel package to track page visits including IP, browser, device, and referrer information.

1.0.4(3mo ago)330MITPHPPHP &gt;=8.0

Since Aug 16Pushed 3mo agoCompare

[ Source](https://github.com/ibrahim-kaya/visit-tracker)[ Packagist](https://packagist.org/packages/ibrahim-kaya/visit-tracker)[ RSS](/packages/ibrahim-kaya-visit-tracker/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (5)Dependencies (5)Versions (6)Used By (0)

Laravel Visit Tracker by *[İbrahim Kaya](https://ibrahimkaya.dev)*
------------------------------------------------------------------

[](#laravel-visit-tracker-by-i̇brahim-kaya)

[![Latest Stable Version](https://camo.githubusercontent.com/379c7e79809530221295ff15a09b5f83fb163f3f633ccc96e03de15f7b48aa00/687474703a2f2f706f7365722e707567782e6f72672f6962726168696d2d6b6179612f76697369742d747261636b65722f76)](https://packagist.org/packages/ibrahim-kaya/visit-tracker) [![Total Downloads](https://camo.githubusercontent.com/45d42da490fb7de3428728842fca73bf3e7d8b7149fbaae5309d9e5d12f5aed3/687474703a2f2f706f7365722e707567782e6f72672f6962726168696d2d6b6179612f76697369742d747261636b65722f646f776e6c6f616473)](https://packagist.org/packages/ibrahim-kaya/visit-tracker) [![Latest Unstable Version](https://camo.githubusercontent.com/ccdd72a9b0925bd53c04b3016d6b0c55f3e878b6064e62926ecbbf1539e4f07f/687474703a2f2f706f7365722e707567782e6f72672f6962726168696d2d6b6179612f76697369742d747261636b65722f762f756e737461626c65)](https://packagist.org/packages/ibrahim-kaya/visit-tracker) [![License](https://camo.githubusercontent.com/f2b280f9f73ba6b03999f6c3f515db98be2589780220ec1abe26245a0c560d7c/687474703a2f2f706f7365722e707567782e6f72672f6962726168696d2d6b6179612f76697369742d747261636b65722f6c6963656e7365)](https://packagist.org/packages/ibrahim-kaya/visit-tracker) [![PHP Version Require](https://camo.githubusercontent.com/60eafdd9033c38a38a675ca12e7167f06d2954482cab9882f52954e6a7042805/687474703a2f2f706f7365722e707567782e6f72672f6962726168696d2d6b6179612f76697369742d747261636b65722f726571756972652f706870)](https://packagist.org/packages/ibrahim-kaya/visit-tracker)

A **Laravel package** to automatically track page visits including IP, browser, device, referrer, and more. Perfect for analytics and monitoring.

---

🌟 Features
----------

[](#-features)

- Automatic tracking of all web requests.
- **Queue-based processing** for better performance.
- Logs detailed visitor information:
    - IP address (with optional geolocation from )
    - Browser name
    - Platform/OS
    - Device type
    - Referrer URL
    - Full URL
    - User agent
    - HTTP method (GET, POST, PUT, DELETE, etc.)
    - Request payload/body (optional, configurable with sensitive data exclusion)
    - Authenticated user ID (if logged in)
- Exclude specific routes or paths.
- Exclude specific HTTP methods (e.g., POST, PATCH).
- Optional logging of bots.
- Configurable IP info cache duration.
- Middleware auto-registered for all web routes.
- **Asynchronous IP geolocation** processing via Laravel queues.

---

🚀 Installation
--------------

[](#-installation)

### 1️⃣ Require the package via Composer

[](#1️⃣-require-the-package-via-composer)

```
composer require ibrahim-kaya/visit-tracker
```

---

### 2️⃣ Publish the configuration

[](#2️⃣-publish-the-configuration)

```
php artisan vendor:publish --provider="IbrahimKaya\VisitTracker\VisitTrackerServiceProvider" --tag=visit-tracker-config
```

- Creates `config/visit-tracker.php`.

---

### 3️⃣ Run migrations

[](#3️⃣-run-migrations)

```
php artisan migrate
```

- Creates `page_visit_logs` table.

### 4️⃣ Configure queue system (optional)

[](#4️⃣-configure-queue-system-optional)

**If you want to use queues** (recommended for production), make sure your Laravel application has a queue driver configured in `.env`:

```
QUEUE_CONNECTION=database
# or
QUEUE_CONNECTION=redis
# or
QUEUE_CONNECTION=sync
```

If using database queues, run:

```
php artisan queue:table
php artisan migrate
```

**If you don't want to use queues**, set `use_queue => false` in `config/visit-tracker.php`. This will process visits synchronously (useful for development/testing).

**Start queue worker (only if using queues):**

```
php artisan queue:work
```

**Or for production (supervisor recommended):**

```
php artisan queue:work --daemon
```

---

⚙️ Configuration
----------------

[](#️-configuration)

`config/visit-tracker.php`:

```
return [
    'excluded_paths' => [
        'admin/*',
        'telescope/*',
    ],

    'excluded_methods' => [
        'POST',
        'PATCH',
    ],

    'log_bots' => false,

    'ip_info_cache_duration' => 86400, // seconds

    'use_queue' => true, // Use Laravel queues for processing

    'log_payload' => false, // Set to true to log request payload/body data

    'excluded_payload_fields' => [
        'password',
        'password_confirmation',
        'token',
        '_token',
    ],
];
```

- **excluded\_paths** → Wildcards supported. Paths that will not be logged.
- **excluded\_methods** → HTTP methods that will not be logged. Example: `['POST', 'PATCH']` - these requests will not be logged. Leave empty array `[]` to log all methods.
- **log\_bots** → Set `true` to log bot visits.
- **ip\_info\_cache\_duration** → Cache IP info to reduce API calls.
- **use\_queue** → Set `true` to use Laravel queues, `false` for synchronous processing.
- **log\_payload** → Set `true` to log request payload/body data. Set to `false` to disable payload logging for privacy/security reasons.
- **excluded\_payload\_fields** → Fields to exclude from request payload logging (useful for sensitive data like passwords, tokens, etc.). Only applies if `log_payload` is `true`.

---

💻 Usage
-------

[](#-usage)

No extra code is required. Visit any web page and the visit is logged automatically.

**Retrieve logs example:**

```
use IbrahimKaya\VisitTracker\Models\PageVisitLog;

$recentVisits = PageVisitLog::latest()->take(5)->get();

foreach ($recentVisits as $visit) {
    echo $visit->ip_address;
    echo $visit->browser;
    echo $visit->device_type;
    echo $visit->method; // HTTP method (GET, POST, etc.)
    echo $visit->payload; // Request payload (array, null for GET requests)
}
```

**Optional manual middleware:**

```
protected $middleware = [
    \IbrahimKaya\VisitTracker\Middleware\VisitTracker::class,
];
```

---

📊 Statistics
------------

[](#-statistics)

The `PageVisitLog` model provides various static methods to retrieve statistics about your visits.

> **Note:** The examples below are just some quick use functions. For detailed usage, you can query the model directly using Laravel's Eloquent methods to retrieve and manipulate the data as needed. All visit data is stored in the `page_visit_logs` table and can be accessed through the `PageVisitLog` model.

### Basic Statistics

[](#basic-statistics)

**Total Visits:**

```
use IbrahimKaya\VisitTracker\Models\PageVisitLog;

// Get total visits (including bots)
$total = PageVisitLog::totalVisits();

// Get total visits excluding bots
$total = PageVisitLog::totalVisits(true);
```

**Unique Visitors:**

```
// Counts unique visitors using user_id (if logged in) or session_id
// This ensures logged-in users are counted correctly even if their session_id changes
$unique = PageVisitLog::uniqueVisitors();
$unique = PageVisitLog::uniqueVisitors(true); // Exclude bots
```

**Unique IP Addresses:**

```
$uniqueIps = PageVisitLog::uniqueIpAddresses();
$uniqueIps = PageVisitLog::uniqueIpAddresses(true); // Exclude bots
```

### Page Statistics

[](#page-statistics)

**Most Visited Pages:**

```
// Get top 10 most visited pages
$topPages = PageVisitLog::mostVisitedPages(10);

// Get top 5 most visited pages excluding bots
$topPages = PageVisitLog::mostVisitedPages(5, true);

// Access results
foreach ($topPages as $page) {
    echo $page->page_url . ': ' . $page->visit_count . ' visits';
}
```

**Visits by Date Range:**

```
// Get visits for a specific date range
$visits = PageVisitLog::visitsByDateRange('2024-01-01', '2024-01-31');

// Get visits from a specific date to today
$visits = PageVisitLog::visitsByDateRange('2024-01-01');

// Get visits up to a specific date
$visits = PageVisitLog::visitsByDateRange(null, '2024-01-31');

// Exclude bots
$visits = PageVisitLog::visitsByDateRange('2024-01-01', '2024-01-31', true);
```

### Device &amp; Browser Statistics

[](#device--browser-statistics)

**Statistics by Device Type:**

```
$deviceStats = PageVisitLog::statisticsByDeviceType();
$deviceStats = PageVisitLog::statisticsByDeviceType(true); // Exclude bots

// Access results
foreach ($deviceStats as $stat) {
    echo $stat->device_type . ': ' . $stat->count . ' visits';
}
```

**Statistics by Browser:**

```
$browserStats = PageVisitLog::statisticsByBrowser();
$browserStats = PageVisitLog::statisticsByBrowser(true); // Exclude bots

foreach ($browserStats as $stat) {
    echo $stat->browser . ': ' . $stat->count . ' visits';
}
```

**Statistics by Platform:**

```
$platformStats = PageVisitLog::statisticsByPlatform();
$platformStats = PageVisitLog::statisticsByPlatform(true); // Exclude bots

foreach ($platformStats as $stat) {
    echo $stat->platform . ': ' . $stat->count . ' visits';
}
```

### Referrer Statistics

[](#referrer-statistics)

**Top Referrers:**

```
// Get top 10 referrers
$referrers = PageVisitLog::statisticsByReferrer(10);
$referrers = PageVisitLog::statisticsByReferrer(10, true); // Exclude bots

foreach ($referrers as $referrer) {
    echo $referrer->referrer . ': ' . $referrer->count . ' visits';
}
```

### Time-based Statistics

[](#time-based-statistics)

**Daily Statistics:**

```
// Get daily statistics for the last 30 days
$daily = PageVisitLog::dailyStatistics(30);
$daily = PageVisitLog::dailyStatistics(30, true); // Exclude bots

foreach ($daily as $day) {
    echo $day->date . ': ' . $day->count . ' visits';
}
```

### Geographic Statistics

[](#geographic-statistics)

**Statistics by Country:**

```
// Requires detailed IP info to be enabled in config
$countryStats = PageVisitLog::statisticsByCountry();
$countryStats = PageVisitLog::statisticsByCountry(true); // Exclude bots

foreach ($countryStats as $stat) {
    echo $stat['country'] . ': ' . $stat['count'] . ' visits';
}
```

### Summary Statistics

[](#summary-statistics)

**Get All Statistics at Once:**

```
// Get summary statistics for the last 30 days
$summary = PageVisitLog::summaryStatistics(30);
$summary = PageVisitLog::summaryStatistics(30, true); // Exclude bots

// Returns an array with:
// - total_visits
// - unique_visitors
// - unique_ips
// - top_pages (top 5)
// - by_device
// - by_browser
// - by_platform

echo $summary['total_visits'];
echo $summary['unique_visitors'];
```

### Query Scopes

[](#query-scopes)

**Exclude Bots Scope:**

```
// Use the scope to filter out bots
$visits = PageVisitLog::excludeBots()->get();
```

**Date Range Scope:**

```
// Filter visits by date range
$visits = PageVisitLog::dateRange('2024-01-01', '2024-01-31')->get();

// Combine scopes
$visits = PageVisitLog::excludeBots()
    ->dateRange('2024-01-01', '2024-01-31')
    ->get();
```

---

📜 License
---------

[](#-license)

MIT License © [İbrahim Kaya](https://ibrahimkaya.dev)

###  Health Score

38

—

LowBetter than 84% of packages

Maintenance82

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 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 ~37 days

Total

5

Last Release

119d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f929508275c5ec25054383133d70b12a804a513623774d46765162210669c1d7?d=identicon)[ibrahim-kaya](/maintainers/ibrahim-kaya)

---

Top Contributors

[![ibrahim-kaya](https://avatars.githubusercontent.com/u/20479749?v=4)](https://github.com/ibrahim-kaya "ibrahim-kaya (15 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/ibrahim-kaya-visit-tracker/health.svg)

```
[![Health](https://phpackages.com/badges/ibrahim-kaya-visit-tracker/health.svg)](https://phpackages.com/packages/ibrahim-kaya-visit-tracker)
```

###  Alternatives

[illuminate/broadcasting

The Illuminate Broadcasting package.

7126.5M177](/packages/illuminate-broadcasting)[laragear/preload

Effortlessly make a Preload script for your Laravel application.

119363.5k](/packages/laragear-preload)[bensampo/laravel-embed

Painless responsive embeds for videos, slideshows and more.

142146.8k](/packages/bensampo-laravel-embed)[glhd/conveyor-belt

14797.0k](/packages/glhd-conveyor-belt)[pulkitjalan/ip-geolocation

IP Geolocation Wrapper with Laravel Support

89164.9k1](/packages/pulkitjalan-ip-geolocation)[adrianorosa/laravel-geolocation

Laravel Geo Location package to get details for a given IP Address

6593.3k1](/packages/adrianorosa-laravel-geolocation)

PHPackages © 2026

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