Dashboard API
The dashboard is built on a JSON API that you can call too. All endpoints are GET requests on https://dataeasy.app and return the shapes documented below.
These are the dashboard's own endpoints: they are authorised with your DataEasy session (the same cookies as the dashboard), and websites with a public dashboard can be read without signing in. For server-to-server calls with an API key or a personal access token (Bearer), use the REST API v1.
Endpoints
| Endpoint | Description |
|---|---|
/api/analytics/main | Totals, % changes and the visitors/revenue time series. Returns MainResponse. |
/api/analytics/realtime | Visitors in the last 5 minutes. Returns { count }. |
/api/analytics/realtime/map | Live visitors with location, system and current page. Returns RealtimeMapResponse. |
/api/analytics/data/source | Channels, referrers and campaigns. Returns SourceResponse. |
/api/analytics/data/location | Countries, regions and cities. Returns LocationResponse. |
/api/analytics/data/path | Pages and entry pages. Returns PathResponse. |
/api/analytics/data/hostname | Hostnames (subdomains, additional domains). Returns HostnameResponse. |
/api/analytics/data/exit-link | Outbound links clicked. Returns ExitLinkResponse. |
/api/analytics/data/system | Browsers, operating systems and devices. Returns SystemResponse. |
/api/analytics/data/custom-events | Goals; with selectedGoal=payment, converted visitors and their journeys. Returns GoalsResponse | PaymentGoalResponse. |
/api/analytics/data/ai-crawls | AI crawler hits by provider and category. Returns AiCrawlsResponse. |
/api/analytics/conversion | Visits/time to conversion, purchase patterns, conversion by dimension. Returns ConversionResponse. |
/api/analytics/gsc | Google Search Console keywords with attributed revenue. Returns GscResponse. |
Query parameters
Every endpoint accepts the same parameters:
| Parameter | Values | Description |
|---|---|---|
websiteId | string | Required. Website UUID. |
period | today, yesterday, last24h, last7d, last30d, last12m, wtd, mtd, ytd, all | Default last30d. |
granularity | hourly, daily, weekly, monthly | Bucket size of time series. Defaults to a sensible value for the period. |
offset | 0–1000 | Periods back from the current one (1 = previous period). |
timezone | IANA name | Overrides the website timezone, e.g. Europe/Rome. |
hostname | string | path / exit-link: restrict to one hostname. |
selectedGoal | payment | custom-events: return converted visitors instead of goals. |
page, limit | 1–1000, 1–100 | custom-events with selectedGoal: pagination. |
category | answer_fetch, search_index, training, ai_crawler | ai-crawls: filter by crawler category. |
Filters
Add any of these to restrict results to matching visitors (several filters combine with AND): channel, referrer, utm_source, utm_medium, utm_campaign, utm_term, utm_content, ref, via, country (ISO code, e.g. US), region, city, path, browser, os, device (desktop, mobile, tablet).
Example: main metrics
curl "https://dataeasy.app/api/analytics/main?websiteId=WEBSITE_UUID&period=last7d&granularity=daily"200 OK (abridged)
{
"processedData": [
{
"name": "23 Oct",
"timestamp": "2026-10-23T00:00:00+02:00",
"visitors": 412,
"newVisitors": 351,
"returningVisitors": 61,
"pageviews": 1033,
"sessions": 468,
"bounces": 187,
"duration": 81240000,
"revenue": 290,
"renewalRevenue": 0,
"refundedRevenue": 0,
"customers": 4,
"sales": 4,
"paymentCount": 4,
"goalCount": 37,
"conversionRate": 0.97,
"bounceRate": 39.96,
"sessionDuration": 173590
}
],
"previousProcessedData": [],
"includeRenewalRevenue": false,
"isMrr": false,
"totalVisitors": 2841,
"totalRevenue": 1915,
"totalCustomers": 27,
"revenuePerVisitor": 0.67,
"conversionRate": 0.95,
"bounceRate": 41.2,
"sessionDuration": 168400,
"currency": "$",
"percentageChange": { "totalVisitors": "12.4", "totalRevenue": "-3.1" }
}Example: sources
curl "https://dataeasy.app/api/analytics/data/source?websiteId=WEBSITE_UUID&period=last30d&country=US"200 OK (abridged)
{
"totals": {
"referrers": { "count": 38, "uv": 9120, "revenue": 6210, "goalCount": 410, "paymentCount": 81 },
"channels": { "count": 6, "uv": 9120, "revenue": 6210, "goalCount": 410, "paymentCount": 81 }
},
"channels": [
{
"name": "Organic Search",
"uv": 3920,
"revenue": 2890,
"paymentCount": 38,
"conversionRate": 0.0097,
"goalCount": 171,
"goalConversionRate": 0.0436,
"referrers": []
}
],
"referrers": [
{
"name": "google.com",
"uv": 3511,
"image": "https://icons.duckduckgo.com/ip3/google.com.ico",
"revenue": 2650,
"paymentCount": 35,
"conversionRate": 0.01,
"goalCount": 160,
"goalConversionRate": 0.0456,
"channel": "Organic Search",
"referrerType": "referrer"
}
],
"campaigns": [
{ "name": "launch-week", "param": "utm_campaign", "uv": 640, "revenue": 410, "paymentCount": 6,
"conversionRate": 0.0094, "goalCount": 33, "goalConversionRate": 0.0516 }
]
}Example: realtime
GET /api/analytics/realtime
{ "count": 14 }Units and conventions
- Money is in the website currency, in major units (e.g. dollars).
currencyin/maingives the symbol. - In
/main,conversionRateandbounceRateare percentages (0–100). In breakdown rows,conversionRateis a ratio (0–1). - Durations are in milliseconds. Timestamps are ISO 8601 in the website timezone.
- Errors return a non-2xx status with
{ "error": "…" }: 400 for invalid parameters, 401 when you need to sign in, 404 for an unknown website or endpoint.