Tracker integration, REST API, webhooks, and SDK reference.
Base URL: https://app.galor.group
Add the tracking snippet to your HTML <head>. The script is 13KB gzipped and loads asynchronously.
<script defer src="https://signal.galor.group/g.js" data-website-id="YOUR_WEBSITE_ID"></script>
Optional attributes:
| Attribute | Effect |
|---|---|
data-persist | Enable cookie-based visitor tracking (requires consent) |
data-consent-banner | Show Galor's built-in GDPR consent banner |
data-widgets | Enable on-site widgets (slide-in, exit intent) |
?galor=false to any URL to disable tracking for that session.Track specific actions like button clicks or form submissions. Pass an optional metadata object.
// Basic event
__galor.track('signup_button_clicked');
// Event with metadata
__galor.track('plan_selected', {
plan: 'pro',
billing: 'annual'
});Track purchases from client-side. Amount in standard units (e.g. 99.00). Server-side webhooks (Stripe/Paddle) are also supported for automatic tracking.
// Record a $99.00 USD transaction
__galor.revenue(99.00, 'USD');
// With order ID
__galor.revenue(149.50, 'EUR', {
order_id: 'ORD-12345'
});Link anonymous sessions to known users in LeadRadar. Email and phone are SHA-256 hashed before storage.
__galor.identify({
email: 'founder@startup.com',
name: 'Jane Doe',
company: 'Startup Inc'
});If using your own CMP instead of Galor's built-in banner, call these functions after getting user consent.
// User granted consent __galorConsent.grant(); // User denied consent __galorConsent.deny();
data-persist, Galor uses cookieless tracking (no consent required). Add data-persist + your CMP for cookie-based visitor identification.Generate API keys in Settings → API Keys (Scale plan). Keys are prefixed galor_live_ and scoped to a single website.
# Pass your key in the X-API-Key header curl -H "X-API-Key: galor_live_abc123def456" \ https://app.galor.group/api/v1/stats?period=7d
Aggregate traffic stats for your website.
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 7d | 7d, 30d, or 90d |
Response:
{
"period": "7d",
"visitors": 1420,
"pageviews": 3840,
"events": 5200,
"sessions": 1650,
"bounce_rate": 42
}Custom event breakdown — name, total count, and unique visitors per event.
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 7d | 7d, 30d, or 90d |
limit | number | 100 | Max results (up to 1000) |
Response:
{
"period": "30d",
"events": [
{
"name": "signup_button_clicked",
"count": 342,
"unique_visitors": 280
},
{
"name": "plan_selected",
"count": 156,
"unique_visitors": 148
}
]
}Daily visitor/pageview timeseries, top countries, and top pages.
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | 7d | 7d, 30d, or 90d |
Response:
{
"period": "7d",
"daily": [
{ "date": "2026-03-07", "visitors": 203, "pageviews": 510 },
{ "date": "2026-03-08", "visitors": 189, "pageviews": 480 }
],
"top_countries": [
{ "country": "DE", "visitors": 340 },
{ "country": "US", "visitors": 280 }
],
"top_pages": [
{ "page": "/blog/post", "views": 820, "visitors": 610 },
{ "page": "/pricing", "views": 450, "visitors": 380 }
]
}Export analytics data as CSV. Requires dashboard session auth (not API key).
| Parameter | Required | Description |
|---|---|---|
websiteId | Yes | Website UUID |
type | Yes | pages, referrers, countries, events, sessions, leads, bots |
period | No | 7d (default), 30d, 90d |
Public health check endpoint. No authentication required. Returns database connectivity status.
// 200 OK
{
"status": "ok",
"timestamp": "2026-03-14T14:20:36.602Z",
"checks": {
"postgres": { "status": "ok", "latencyMs": 2 },
"clickhouse": { "status": "ok", "latencyMs": 4 }
}
}
// 503 — one or more databases degraded
{
"status": "degraded",
...
}All errors return JSON with an error field.
| Status | Meaning | Example |
|---|---|---|
400 | Bad request | {"error": "Invalid period"} |
401 | Invalid or missing API key | {"error": "Unauthorized"} |
403 | Insufficient plan tier | {"error": "Scale plan required"} |
429 | Rate limited | {"error": "Too many requests"} |
500 | Server error | {"error": "Internal error"} |
| Endpoint | Limit | Window |
|---|---|---|
| API v1 endpoints | Per-key (default: 100) | 1 minute |
| Event ingestion | 100 events per IP | 1 minute |
| Dashboard endpoints | 60–120 requests | 1 minute |
| Share password auth | 10 attempts | 1 minute |
429.EST. 2025 // GALOR.GROUP