Introducing Halfbite. Click tracking made simple.

About two years ago, I needed click tracking for the service that I was building. However, click tracking wasn’t really core to the idea and in fact I had a handful of other projects that could really benefit from click tracking as well.

The truth is that over the years I have hacked away on many projects and ideas…and throughout almost all of them I’ve had a need for more in-depth and accessible analytics…especially click-tracking analytics.

Yes, there have long been tools like for tracking the number of clicks a link gets, and analytics tools from Google and Chartbeat that can give you some detailed insight into what pages are getting views (including some really cool real-time analytics).

But I wanted (actually I *needed*) something a little different than what any of these were offering. Here was my specific wish list:

1. I wanted to track clicks on every single link within my service.

2. I did not want to have to make any special edits to any of the links on my site (ie. no special url params for tracking or special codes/urls to make sure the clicks are tracked).

3. I wanted to know just how many people actually clicked on the links they find on my service (especially when the link pointed to a location off my service).

4. When possible, I wanted to know which users actually clicked on which links.

5. I did not want to obfuscate my links.

It may sound like a pretty challenging wish list, but the truth is that almost all of this can be accomplished with a fairly small amount of Javascript and jQuery code.

And I figured, even though it’s simple jQuery, why not break it out into it’s own little web service and make it easy to add in as an after thought to any web application I might want?

This also would give me the advantage of not having to rewrite the Javascript, set up the backend data store, or build out the same reporting tools for every project that I wanted click tracking for.

And so that’s what I did. About two years ago, I put out an initial version written mostly in PHP that was heavily used in the recommendation and personalization algorithm.

Since that time, it’s been running mostly unchanged and without issue (mostly only on my own projects as very few others have adopted it yet – I think at least partially because I’ve never made a public mention or push for it before).

However, a few days ago I got the alert from Amazon that the EC2 instance that I was running this service on was on hardware that was going to be retired. I needed to migrate it to a new instance.

So I took that as the perfect time and motivation to also implement a few other upgrades and changes. The biggest change is that I’ve ported the backend system from PHP to Python (but you really shouldn’t notice a difference in the service – other than it’s slightly faster).

The other change I made was to finally clean up the UI and the documentation a bit (especially the ‘how to install’ documentation you can see once you create an account)…so that hopefully it’s a little easier for people to understand and adopt (if they want).

Anyway - if you have a chance, please go check it out at and let me know what you think (btw - it’s powering the click analytics behind and some of my other projects via the API).

This post has received 35 loves.


This is the personal blog of Kevin Marshall (a.k.a Falicon) where he often digs into side projects he's working on for and other random thoughts he's got on his mind.

Kevin has a day job as CTO of Veritonic and is spending nights & weekends hacking on Share Game Tape. You can also check out some of his open source code on GitHub or connect with him on Twitter @falicon or via email at kevin at

If you have comments, thoughts, or want to respond to something you see here I would encourage you to respond via a post on your own blog (and then let me know about the link via one of the routes mentioned above).