ZENSTATS BETA IS LIVE
Track everything.
Automate the rest.
Frictionless analytics for your SaaS, websites, and backend APIs. Zero overhead, un-cheatable metrics, and ultra-secure signature validation.
Zero Friction. Universal Integration.
Choose your environment and see how incredibly simple it is.
await fetch('https://zenstats.arthuraugis.fr/api/track', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_SECRET' }, body: JSON.stringify({ event: 'bot_command' }) });
import requests requests.post( 'https://zenstats.../track', headers={'Authorization': 'Bearer YOUR_SECRET'}, json={'event': 'command'} )
$ch = curl_init('https://zenstats.../track'); curl_setopt($ch, CURLOPT_POSTFIELDS, ...); curl_exec($ch);
req, _ := http.NewRequest("POST", url, payload) req.Header.Set("Authorization", "Bearer KEY") client.Do(req)
curl -X POST https://zenstats.../track \ -H "Authorization: Bearer SECRET" \ -d '{"event":"bot_online"}'
<meta name="zenstats-verification" content="KEY" />
require 'net/http' uri = URI('https://zenstats.../track') req = Net::HTTP::Post.new(uri) req['Authorization'] = 'Bearer KEY' res = Net::HTTP.start(...)
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(".../track")) .header("Authorization", "Bearer SECRET") .POST(BodyPublishers.ofString(json)) .build();
using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", key); await client.PostAsync(".../track", content);
let client = reqwest::Client::new(); let res = client.post("https://zenstats.../track") .bearer_auth(SECRET_KEY) .json(&payload) .send() .await?;
var req = URLRequest(url: URL(string: ".../track")!) req.httpMethod = "POST" req.setValue("Bearer KEY", forHTTPHeaderField: "Authorization") req.httpBody = try? JSONEncoder().encode(event) let (data, _) = try await URLSession.shared.data(for: req)
val client = OkHttpClient() val request = Request.Builder() .url("https://zenstats.../track") .header("Authorization", "Bearer SECRET") .post(body) .build() client.newCall(request).execute()
final res = await http.post( Uri.parse('https://zenstats.../track'), headers: { 'Authorization': 'Bearer SECRET' }, body: jsonEncode({'event': 'app_started'}) );
cpr::Response r = cpr::Post(cpr::Url{".../track"}, cpr::Header{{"Authorization", "Bearer SECRET"}}, cpr::Body{payload});
import axios from 'axios'; await axios.post<ZenStatsResponse>('.../track', payload, { headers: { Authorization: `Bearer ${key}` } });
await fetch('https://zenstats.arthuraugis.fr/api/track', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_SECRET' }, body: JSON.stringify({ event: 'bot_command' }) });
import requests requests.post( 'https://zenstats.../track', headers={'Authorization': 'Bearer YOUR_SECRET'}, json={'event': 'command'} )
$ch = curl_init('https://zenstats.../track'); curl_setopt($ch, CURLOPT_POSTFIELDS, ...); curl_exec($ch);
req, _ := http.NewRequest("POST", url, payload) req.Header.Set("Authorization", "Bearer KEY") client.Do(req)
curl -X POST https://zenstats.../track \ -H "Authorization: Bearer SECRET" \ -d '{"event":"bot_online"}'
<meta name="zenstats-verification" content="KEY" />
require 'net/http' uri = URI('https://zenstats.../track') req = Net::HTTP::Post.new(uri) req['Authorization'] = 'Bearer KEY' res = Net::HTTP.start(...)
HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(".../track")) .header("Authorization", "Bearer SECRET") .POST(BodyPublishers.ofString(json)) .build();
using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", key); await client.PostAsync(".../track", content);
let client = reqwest::Client::new(); let res = client.post("https://zenstats.../track") .bearer_auth(SECRET_KEY) .json(&payload) .send() .await?;
var req = URLRequest(url: URL(string: ".../track")!) req.httpMethod = "POST" req.setValue("Bearer KEY", forHTTPHeaderField: "Authorization") req.httpBody = try? JSONEncoder().encode(event) let (data, _) = try await URLSession.shared.data(for: req)
val client = OkHttpClient() val request = Request.Builder() .url("https://zenstats.../track") .header("Authorization", "Bearer SECRET") .post(body) .build() client.newCall(request).execute()
final res = await http.post( Uri.parse('https://zenstats.../track'), headers: { 'Authorization': 'Bearer SECRET' }, body: jsonEncode({'event': 'app_started'}) );
cpr::Response r = cpr::Post(cpr::Url{".../track"}, cpr::Header{{"Authorization", "Bearer SECRET"}}, cpr::Body{payload});
import axios from 'axios'; await axios.post<ZenStatsResponse>('.../track', payload, { headers: { Authorization: `Bearer ${key}` } });
Zero Bloat. Infinite Possibilities.
No heavy client SDKs to install. Send a single POST request to track perfectly without altering your core logic.
Websites
Use your Public Key right in the browser. We verify your domain dynamically to block fake traffic. No bloated tags.
Backend Servers
Designed explicitly for Node.js / Python environments. Easily track logic pathways, API usage, and user flows natively.
100% Open Source
Fully transparent and community-driven. Deploy it on your own infrastructure or use our hosted version with zero vendor lock-in and complete control.