Kirby 3 UTM Tracking

1.4.1 2024-02-06 11:51 UTC

This package is auto-updated.

Last update: 2024-04-06 12:13:26 UTC


Release Downloads Build Status Coverage Status Maintainability Twitter


Using composer:

composer require bnomei/kirby3-utm

Using git submodules:

git submodule add site/plugins/kirby3-utm

Using download & copy: download the latest release of this plugin then unzip and copy it to site/plugins

Commercial Usage

Support open source!

This plugin is free but if you use it in a commercial project please consider to sponsor me or make a donation.
If my work helped you to make some cash it seems fair to me that I might get a little reward as well, right?

Be kind. Share a little. Thanks.

‐ Bruno
Github sponsor Patreon Buy Me a Coffee Paypal dontation Hire me


UTM Page

Create a new page at root level with the blueprint utm.



Events will automatically be tracked to a sqlite database and appear in the UTM page within the panel grouped by campaign and displaying multiple stats.


Original UTM explanation from Bonnie Kittle at


The advertiser, site, publication, etc. that is sending traffic to your property


The advertising or marketing medium, for example, CPC (cost-per-click), banner ad, email newsletter


The individual campaign name, slogan, promo code, etc.


Identify paid search keywords. If you’re manually tagging paid keyword campaigns, you should also use utm_term to specify the keyword.


Used to differentiate similar content or links within the same ad. For example, if you have two call-to-action links within the same email message, you can use utm_content and set different values for each so you can tell which version is more effective. (i.e. image, button, headline)


bnomei.utm. Default Description
enabled true
cache.ipstack true seperate cache for ip data, expires at ipstack.expire
cache.ratelimit true seperate cache for ratelimit, expires at ratelimit.expire
cache.queries true seperate cache for most queries used in panel, flushes automatically with each event tracked
ipstack.access_key null string. access key
ipstack.https false boolean. if true will use premium https endpoint.
ipstack.expire 60*24 int. cache in minutes for ipstack IP resolution.
sqlite.file fn() path to sqlite file. like site/logs
stats.range 30 int. half of range of days for bar and change percentage
ratelimit.enabled true bool. if true it will limit on params below
ratelimit.expire 60 int. in minutes before trials reset
ratelimit.trials 120 int. number of allowed trials in given duration
botDetection.CrawlerDetect true check for crawlers (~10ms)
botDetection.DeviceDetector true check for bots (~40ms)



This plugin is provided "as is" with no guarantee. Use it at your own risk and always test it yourself before using it in a production environment. If you find any issues, please create a new issue.



It is discouraged to use this plugin in any project that promotes racism, sexism, homophobia, animal abuse, violence or any other form of hate speech.