All Projects → ankane → Ahoy.js

ankane / Ahoy.js

Licence: mit
Simple, powerful JavaScript analytics

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Ahoy.js

Ahoy
Simple, powerful, first-party analytics for Rails
Stars: ✭ 3,478 (+879.72%)
Mutual labels:  events, analytics
Pg Listen
📡 PostgreSQL LISTEN & NOTIFY for node.js that finally works.
Stars: ✭ 348 (-1.97%)
Mutual labels:  events
Concourse
Distributed database warehouse for transactions, search and analytics across time.
Stars: ✭ 310 (-12.68%)
Mutual labels:  analytics
Grouparoo
🦘 The Grouparoo Monorepo - open source customer data sync framework
Stars: ✭ 334 (-5.92%)
Mutual labels:  events
Perspective
A data visualization and analytics component, especially well-suited for large and/or streaming datasets.
Stars: ✭ 3,989 (+1023.66%)
Mutual labels:  analytics
Covid19 Forecast Hub
Projections of COVID-19, in standardized format
Stars: ✭ 342 (-3.66%)
Mutual labels:  analytics
Matomo Sdk Android
SDK for Android to measure your apps with Matomo. Works on Android phones, tablets, Fire TV sticks, and more!
Stars: ✭ 309 (-12.96%)
Mutual labels:  analytics
Minsql
High-performance log search engine.
Stars: ✭ 356 (+0.28%)
Mutual labels:  analytics
Dataform
Dataform is a framework for managing SQL based data operations in BigQuery, Snowflake, and Redshift
Stars: ✭ 342 (-3.66%)
Mutual labels:  analytics
Beeva Best Practices
Best Practices and Style Guides in BEEVA
Stars: ✭ 335 (-5.63%)
Mutual labels:  analytics
Bistro
A general-purpose data analysis engine radically changing the way batch and stream data is processed
Stars: ✭ 333 (-6.2%)
Mutual labels:  analytics
Message Io
Event-driven message library for building network applications easy and fast.
Stars: ✭ 321 (-9.58%)
Mutual labels:  events
Ansible Grafana
Platform for analytics and monitoring
Stars: ✭ 340 (-4.23%)
Mutual labels:  analytics
Clickhouse Native Jdbc
ClickHouse Native Protocol JDBC implementation
Stars: ✭ 310 (-12.68%)
Mutual labels:  analytics
Sysend.js
Send messages between open pages or tabs in same browser
Stars: ✭ 347 (-2.25%)
Mutual labels:  events
Delta
An open-source storage layer that brings scalable, ACID transactions to Apache Spark™ and big data workloads.
Stars: ✭ 3,903 (+999.44%)
Mutual labels:  analytics
Fb2cal
Fetch Facebook Birthdays events and create an ICS file for use with calendar apps
Stars: ✭ 335 (-5.63%)
Mutual labels:  events
Ember Metrics
Send data to multiple analytics integrations without re-implementing new API
Stars: ✭ 356 (+0.28%)
Mutual labels:  analytics
Nanocomponent
🚃 - create performant HTML components
Stars: ✭ 355 (+0%)
Mutual labels:  events
Rpc Websockets
JSON-RPC 2.0 implementation over WebSockets for Node.js and JavaScript/TypeScript
Stars: ✭ 344 (-3.1%)
Mutual labels:  events

Ahoy.js

🔥 Visit and event tracking for JavaScript

  • Easily track unique visitors
  • Track events across page navigation

Use it with any backend. For Rails, check out the Ahoy gem.

Installation

Download ahoy.js and include it on your page.

<script src="ahoy.js"></script>

Or use Yarn:

yarn add ahoy.js

And import it with:

import ahoy from 'ahoy.js';

How It Works

When someone lands on your website, they are assigned a visit token and a visitor token.

The visit token expires after 4 hours, in which a new visit is created. Visits are useful for tracking metrics like monthly active users. The visitor token expires after 2 years. A POST request is sent to /ahoy/visits with:

  • visit_token
  • visitor_token
  • referrer
  • landing_page

The server can capture:

  • ip
  • user_agent
  • user - from app authentication

And calculate things like:

  • referring_domain and search_keyword from referrer
  • utm_source, utm_medium, utm_term, utm_content, and utm_campaign from landing_page
  • city, region, and country from ip
  • browser, os, and device_type from user_agent

Events

Track events with:

ahoy.track(name, properties);

A POST request is sent to /ahoy/events with:

  • name
  • properties
  • time

The server can capture:

  • visit_token - from cookies
  • user - from app authentication

As a precaution, the server should reject times that do not match:

1 minute ago < time <= now

All Events

Track all views and clicks with:

ahoy.trackAll();

Set the page with:

ahoy.configure({page: "Landing page"});

And sections with:

<div data-section="Header">
  <a href="/home">Home</a>
</div>

These are included in event properties if set.

Views

ahoy.trackView();

Name - $view

Properties

  • url - https://www.streamflip.com
  • title - Streamflip

Clicks

ahoy.trackClicks();

Name - $click

Properties

  • tag - a
  • id - account-link
  • class - btn btn-primary
  • text - View Account
  • href - /account

Submits

ahoy.trackSubmits();

Name - $submit

Changes

ahoy.trackChanges();

Name - $change

Development

Ahoy is built with developers in mind. You can run the following code in your browser’s console.

Force a new visit

ahoy.reset(); // then reload the page

Log messages

ahoy.debug();

Turn off logging

ahoy.debug(false);

Configuration

Here’s the default configuration:

ahoy.configure({
  urlPrefix: "",
  visitsUrl: "/ahoy/visits",
  eventsUrl: "/ahoy/events",
  page: null,
  platform: "Web",
  useBeacon: true,
  startOnReady: true,
  trackVisits: true,
  cookies: true,
  cookieDomain: null,
  headers: {},
  visitParams: {},
  withCredentials: false,
  visitDuration: 4 * 60, // 4 hours
  visitorDuration: 2 * 365 * 24 * 60 // 2 years
});

When trackVisits is set to false, Ahoy.js will not attempt to create a visit on the server, but assumes that the server itself will return visit and visitor cookies.

Subdomains

To track visits across multiple subdomains, use:

ahoy.configure({cookieDomain: "yourdomain.com"});

Users

Ahoy automatically associates users with visits and events if the user is authenticated on the server.

If you use cookies for authentication and the JavaScript library is on the same subdomain as the server, no additional configuration is needed.

If you use cookies and the JavaScript library is on a different domain or subdomain as the server, set:

ahoy.configure({withCredentials: true});

This will send credentials such as cookies, authorization headers or TLS client certificates to the server.

If you use headers for authentication, pass them with:

ahoy.configure({headers: {"Authorization": "Bearer ..."}});

Fetch

If you use the Fetch API to make requests and the JavaScript library is on a different domain or subdomain as the server, Ahoy cookies are not sent to the server by default. You can pass the info in headers with:

fetch(url, {
  headers: {"Ahoy-Visit": ahoy.getVisitId(), "Ahoy-Visitor": ahoy.getVisitorId()}
});

History

View the changelog

Contributing

Everyone is encouraged to help improve this project. Here are a few ways you can help:

To get started with development:

git clone https://github.com/ankane/ahoy.js.git
cd ahoy.js
yarn install
yarn build
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].