How Countly Works
Countly tracks users on mobile apps as well as web and desktop apps using a small plugin (SDK) that you integrate into your application (or website) in under 10 minutes. As soon as there is any activity or event on any of these platforms, Countly immediately starts collecting data. After installing the Countly SDK on your application, the application users will start sending event data to the Countly server. Countly gathers information from these events regarding their actions, how they behave, which operator they are on, etc.
We are using Node.js and MongoDB. Both the backend and frontend are completely written in JavaScript. You may take a look at the API code, which collects data from client SDKs and writes this data to the database.
How Event and Session data are sent to Countly
As the user opens the application, the Countly SDK starts collecting data the way you define it. Events and Sessions are collected and then sent to the Countly (or your) servers using an HTTPS request every 60 seconds for mobile SDKs, and every 500 milliseconds for web SDKs.
Note that you should see Session data on your dashboard as soon as the app launches. However, for Events, you will need to wait for the next tick, which occurs every 60 seconds. If you record more than 10 different events inside the app, it will not even wait for the next tick, sending them immediately instead.
Countly Updates, Update Schedules, and Update Notifications
We distribute each version through our Github page. Countly changelog lists all Countly versions and corresponding changelogs. The news of new version launches is also shared by email and on our blog. Follow the Countly blog to remain informed of all updates.
The Countly Assistant, which is enabled by default and available for both the Enterprise Edition and the Community Edition, will notify you when there is an update on major SDKs as well as the Countly server with a bell icon on the top right of your Countly panel.
Updates for Enterprise Edition and for Community Edition are handled differently. Regardless, whenever the Countly server gets updated, your Countly instance will be inaccessible for an estimated maximum of 5 minutes. Then, after completion of the upgrade, you may experience lagged performance due to the server processing queued requests. Depending on the number of requests, this impact may persist for no more than between 5 to 10 minutes.
Languages that Countly supports
Countly supports more than 10 languages. Head over to the Countly localization project and support us if your language is not on the list. Sending an email to us will suffice to start.
Online Demos
You can create a 30-day free account on Countly, and start working on your dashboard.
Downloading Countly Server and SDKs
Here is everything you need to download and start with Countly
- Server source code (main branch) can be found on Github for those who want to try the latest code.
- Ready-to-install stable packages are on the Github releases page
- All SDKs can be downloaded from here, including Javascript SDK to track web pages and mobile websites.
Countly Source Code is open source: What this means.
We want our application created not by a handful of developers, but hundreds. We want to discuss the future of Countly in an open, democratic environment. We want your ideas to put in the next release, so academics, businesses, and enterprises can benefit immediately. Take part in our friendly community! Always feel free to send your bug reports or feature requests, and to provide fixes and best practices.
Other than the Countly Community Edition, we provide the Enterprise Edition for companies, a fully supported platform, which is a self-hosted or on-cloud deployed product analytics and innovation solution.
Hosting Options in Countly: Self-hosted vs. Private Cloud Deployment
Countly offers two hosting options. You may either install Countly on-premises (i.e., self-hosted) or let Countly handle the deployment, maintenance, and backup procedures for you through private cloud deployment. The differences between both are highlighted as below:
Private cloud | Self-hosted | |
Server setup | Countly is responsible for the setup and configuration of the operating system, Countly server, MongoDB (including the replica set support), Ngnix, and additional components. | Countly provides the customer with the recommended specifications and configurations for servers that will be used to host the software. The customer obtains and configures the servers according to these recommendations and installs the supported Linux OS along with Countly. |
Maintenance | Countly is responsible for the maintenance of the software and for the end-to-end health of the servers and network connectivity. Network-related issues by 3rd party hosting companies are handled by them accordingly. | The customer is responsible for the end-to-end health of the servers and network connectivity. Any maintenance related to Countly software is executed by the customer according to the directions provided by Countly. |
Backups | Countly establishes and executes backup procedures. | The customer establishes and is responsible for backup procedures. |
Upgrades | Upgrades are automatically applied and tested by Countly after a new version is released. | Upgrades are included as part of the subscription plan and are the responsibility of the customer to install and test. Countly provides documentation for installing any upgrades. Typically, there are 2 major upgrades annually, along with a few more minor upgrades. |
Monitoring | Server monitoring is done using a 3rd party professional monitoring service. In case an issue occurs, the support staff is alerted immediately. | Server monitoring is implemented by the customer and the customer is responsible for informing Countly about any app-level issues detected. Countly can make recommendations for server monitoring services if requested. |
Support | Countly has immediate and full access to the customer's instance and can assist, with client authorization and approval, with investigating, recreating, diagnosing, and resolving any reported issues. | The customer assists the Countly support team by documenting any issues, providing additional information as requested by Countly, and authorizing and approving remote access to the software upon Countly's request. |
Operating Systems that Countly Supports
Countly officially offers integration with the world's three leading smartphone operating systems, Android, iOS, and Windows Phone. Also, Countly can track desktop applications and any devices which are capable of sending HTTP requests in general, including but not limited to Windows and macOS. For a list of SDKs, see this page.
Using Countly for Desktop Analytics
Countly uses the same SDK for iOS and macOS, which you can use to track all your macOS applications. There is also a Windows SDK that you can use to track your Microsoft Windows apps. There is also a Windows SDK that you can use to track your Microsoft Windows apps.
Using One Countly Account for Multiple Applications
You can use one Countly account to control more than one application. We see companies maintaining more than 300 apps at once, on a single server.
Browsers that Countly Runs On
We test Countly on Chrome, Firefox, and IE9+. A recent(ish) version of these modern browsers works well. We do not support IE8.
Programming Language and Underlying Infrastructure
Countly relies on MongoDB, Node.js, and Nginx. The main programming language is JavaScript.
Why Countly Uses MongoDB and Node.js
We searched for the most reliable and performance-centric stacks and chose our stack carefully. MongoDB and Node.js are used across the globe and are powered and trusted by tens of thousands of companies, from Foursquare to Adobe and eBay to McAfee.
Tracking Data in Real-Time
When a Countly SDK sends data to Countly, you will see the data in real-time. There are no batch processes running in the background that visualize or collect data.
Impact of Countly on Application Speed
Our lightweight SDK works asynchronously and doesn't block any function calls inside your code. Profiling for iOS shows that SDK has a 2% overhead on total CPU usage. Compared to the high CPU and data consumption for services that send in-app video, this is clearly an advantage.

Our tests with an Android profiler prove Countly takes up less than 0.1% of your CPU time for a single CPU core in a typical usage scenario of a 5-minute session where 5 events and 8 requests are sent. This number will be lower than 0.1% for more CPU cores.
Differences between Countly data and other providers data
There are a few reasons for data discrepancy among analytics providers:
- Users may download the application and open it when they do not have network access. In this case, some analytics providers may choose to discard the events, while others choose to store it. Countly stores it, for example, and as soon as the user regains internet connection, the event is sent again.
- Users with jailbroken iPhones may have analytics disabled. In this case, the data is never sent. Also, if a user chooses to not send analytics feedback for their iOS device, it's not possible to report data to iTunes.
- A user may download the application once, but run it on multiple devices, or may download the app multiple times, but run it on the same device. In this case, Google Analytics and other analytics services may count that user differently.
- Some services (e.g. Google Analytics) may sample data, e.g. discard it if the traffic is over their internal limit.
- Countly counts new users as unique device IDs, meaning if a user downloads the same app to their iPhone and iPad, it's counted twice. Apple's iTunes service only counts it once.
- SDKs may have issues with running in different environments. For example, it may send improper encoding, resulting in the server not parsing it. We see such behavior especially in Asian markets with some Asian languages using different encoding types.
- Some of the iOS and Android platforms are old and unsupported by analytics providers. In this case, if a platform is supported by one provider and not the other, then a discrepancy may occur as the SDK will gracefully fail on the unsupported platform.
- Different analytics services have different time-zone configurations. This directly affects how daily sessions, daily unique users, daily active users, and retention tables are calculated.
Other than the possibilities mentioned above, improper integration of the SDK may cause data discrepancy on the server-side, as seen below:
- If the SDK is integrated in a different way than what is shown in the official documentation,
- If the initialization of the SDK depends on any state on a device,
- If the SDK is being used in a non-native application environment,
- If the SDK’s original source code is modified,
- If more than one instance of the SDK is attempted to run at the same time.
Unfortunately, we do not know how the backend and SDK side works for closed proprietary services. However, Countly's SDK, data collection, storage, and visualization methods and database model are completely open source, and it's possible to retrieve stored raw data either via REST API or via MongoDB commands.
With that being said, we have run several units and stress tests to make sure no data is lost during transmission, and we are very confident with our codebase. In the event that you would like to have a separate discussion about how we collect, store, and visualize data, we are always happy to hear from you.
Monitoring Data Point Consumption
Data points include Sessions, Events, information sent when a crash occurs, or when a user responds to a Push Notification. These data points are automatically calculated and reported under Utilities > Data Points
.
You may view the sample screenshot below. Clicking on each of the months will give you the number of data points consumed by each application as well as all data points under the title "All apps".

Roles of Each User Type
You can choose the role to assign to each person based on the access you wish for them to have to your data.
Regarding roles, there is a rule of thumb: "User" can only read and not write/modify; "Admin" can read and write/modify, but only in the context of the app that is given to them; and "Global Admin" can read and write/modify all apps and server-wide things. More information in this regard is provided here.
Contributing to Countly
Countly appreciates receiving ideas, feedback, and constructive comments. All your suggestions will be handled by one of our staff and will be taken care of with utmost importance. If you are a developer, please fork our repositories and send pull requests.
If you want to see Countly in your own language, please join our localization efforts.
Do not forget to subscribe to our Twitter and Facebook pages, in order to follow our fast progress.