pirsch-analytics/laravel-pirsch
Integrate Pirsch analytics into Laravel with a simple, privacy-friendly API. Track page views and custom events server-side—no cookies, no GDPR headaches—and review stats in the Pirsch dashboard.
What this release is. laravel-pirsch 1.1.0 is a compatibility release: it adds Laravel 13 support (PR #12, authored by Laravel Shift). No new API surface, no configuration changes, no deprecations are called out in the notes. The substantive change is almost certainly a widened illuminate/support (and related framework) version constraint in composer.json, plus CI matrix coverage.
Architecture fit. The package is a thin service-provider/facade wrapper over the Pirsch PHP SDK. It sits in the "outbound analytics" layer of a Laravel app: it does not touch the request lifecycle unless you opt in (middleware or explicit Pirsch::hit() / Pirsch::event() calls in controllers, listeners, or jobs). That is a low-coupling shape — the package is a client library, not a framework extension. It is a good fit for teams that want server-side, cookieless pageview and event tracking without shipping a browser tag, and a poor fit for anyone who needs client-side behavioural capture (scroll depth, clicks, heatmaps) or a tag-manager-driven setup.
Integration feasibility. Low effort. Standard Composer install, config publish, three or four environment variables (client ID, client secret, host), and one or two call sites. The main design decision is where the call goes: synchronously in a controller (simple, but couples user-facing latency to a third-party HTTP call), via a queued job or terminate() middleware (recommended), or batched. That decision, not the package, is the work.
Technical risk.
Key questions.
debug/dry-run mode and a no-op fallback so local and CI environments don't emit real analytics?Stack fit. Any Laravel application on the supported version range. The package is framework-idiomatic (provider, facade, publishable config) and carries no database migrations, no queues of its own, and no frontend assets — which means it drops in and out cleanly. It is a natural fit if you already run Laravel queues and a scheduler; it is a slightly awkward fit for a stateless, horizontally-scaled API service with no queue worker, where every tracking call must be non-blocking.
Migration path. Greenfield adoption is trivial. If migrating off GA4 or another provider, do not attempt historical backfill through this package — it is a write-only client. Run both providers in parallel for two to four weeks, reconcile a handful of key pages against the old numbers, then decommission the old tag. Expect absolute numbers to differ (different bot filtering, different sessionisation); agree on tolerance before the parallel run.
Compatibility. Verify the resolved constraint set in your own composer.lock — the meaningful output of this release is that composer require no longer conflicts on Laravel 13. If you are pinned to Laravel 11 or 12, 1.1.0 is a no-op for you and can be taken at leisure. If you are planning a Laravel 13 upgrade, this package is now one fewer blocker and can be sequenced into that upgrade rather than treated as a separate project.
Sequencing.
terminate()-based dispatch before the first production call — do not start synchronous.Maintenance. Very low steady-state cost: one Composer dependency, no schema, no runtime services. The recurring work is version-constraint upkeep on each Laravel major, which is exactly what this release represents — and the fact that Laravel Shift is doing it is a mildly positive signal about the project's hygiene, not a guarantee of longevity. Budget roughly a half-day per Laravel major, plus a quarterly composer outdated review.
Support. Upstream support is community/GitHub-issue based, with the commercial vendor behind the analytics service rather than the wrapper. For anything beyond "it doesn't install," you are largely self-supporting. This is fine for a non-critical analytics channel and should be stated explicitly in the risk register so no one assumes an SLA exists.
Scaling. Calls are outbound HTTP, so scale cost is per-request latency and egress, not CPU or memory. Two independent ceilings: your own throughput to the vendor's ingest endpoint, and the vendor's plan-level event quota and rate limits. Queued dispatch flattens the first; only a commercial conversation addresses the second. Watch for quota exhaustion during traffic spikes — a launch day or a bot flood can silently burn a month of quota and truncate the month's data.
Failure modes.
.env or a log line. Standard secret handling applies; rotate on any suspicion.Ramp-up. A mid-level Laravel engineer can integrate this in under a day, and the package deserves no dedicated training. The genuinely non-obvious parts are operational, not technical: choosing queued dispatch, confirming errors are observable, and getting legal sign-off on the consent posture. Plan for a short design review with the engineer, a short conversation with legal, and an hour of dashboard/alert setup — that is the real cost, and it dwarfs the integration itself.
How can I help you explore Laravel packages today?