"The only analytics dashboard I open every day"

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

EndpointDescription
/api/analytics/mainTotals, % changes and the visitors/revenue time series. Returns MainResponse.
/api/analytics/realtimeVisitors in the last 5 minutes. Returns { count }.
/api/analytics/realtime/mapLive visitors with location, system and current page. Returns RealtimeMapResponse.
/api/analytics/data/sourceChannels, referrers and campaigns. Returns SourceResponse.
/api/analytics/data/locationCountries, regions and cities. Returns LocationResponse.
/api/analytics/data/pathPages and entry pages. Returns PathResponse.
/api/analytics/data/hostnameHostnames (subdomains, additional domains). Returns HostnameResponse.
/api/analytics/data/exit-linkOutbound links clicked. Returns ExitLinkResponse.
/api/analytics/data/systemBrowsers, operating systems and devices. Returns SystemResponse.
/api/analytics/data/custom-eventsGoals; with selectedGoal=payment, converted visitors and their journeys. Returns GoalsResponse | PaymentGoalResponse.
/api/analytics/data/ai-crawlsAI crawler hits by provider and category. Returns AiCrawlsResponse.
/api/analytics/conversionVisits/time to conversion, purchase patterns, conversion by dimension. Returns ConversionResponse.
/api/analytics/gscGoogle Search Console keywords with attributed revenue. Returns GscResponse.

Query parameters

Every endpoint accepts the same parameters:

ParameterValuesDescription
websiteIdstringRequired. Website UUID.
periodtoday, yesterday, last24h, last7d, last30d, last12m, wtd, mtd, ytd, allDefault last30d.
granularityhourly, daily, weekly, monthlyBucket size of time series. Defaults to a sensible value for the period.
offset0–1000Periods back from the current one (1 = previous period).
timezoneIANA nameOverrides the website timezone, e.g. Europe/Rome.
hostnamestringpath / exit-link: restrict to one hostname.
selectedGoalpaymentcustom-events: return converted visitors instead of goals.
page, limit1–1000, 1–100custom-events with selectedGoal: pagination.
categoryanswer_fetch, search_index, training, ai_crawlerai-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). currency in /main gives the symbol.
  • In /main, conversionRate and bounceRate are percentages (0–100). In breakdown rows, conversionRate is 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.

✍️ Something missing? Tell us.

🧭 New to DataEasy? Start with the introduction