Skip to content

Custom Reports

Custom reports let you combine any metrics, dimensions, and filters to answer specific questions about your email performance, flows, contacts, and events. You can save reports, duplicate them, and organize them by visibility.


Creating a Report

To create a custom report, you need three things:

  1. Data source -- where the data comes from
  2. Metrics -- what you want to measure
  3. Dimensions -- how you want to group the data

Data Sources

SourceWhat it measures
email_logsEmail delivery, opens, clicks, bounces
flow_tripsFlow trips started, completed, failed
flowsFlow-level performance aggregates
contactsContact growth and subscription status
eventsCustom event volume and activity

Metrics

Metrics are the numbers in your report. Each metric has a field type:

FieldDescriptionExample
countTotal count of recordsEmails Sent, New Contacts
count_distinctCount of unique valuesUnique Contacts
rateRatio of two values as a percentageOpen Rate = opened / delivered
sumSum of a numeric fieldTotal events
avgAverage of a numeric fieldAverage completion rate

For rate metrics, you specify a numerator and denominator:

json
{
"field": "rate",
"label": "Open Rate",
"numerator": "opened",
"denominator": "delivered"
}

Dimensions

Dimensions group your data. The most common dimension is date (with day, week, or month granularity), but you can also group by flow name, email status, tags, and more.

DimensionGranularity optionsDescription
dateday, week, monthTime-series grouping
flow_name--Group by flow
flow_status--Group by draft, active, paused, archived
email_status--Group by delivery status
tag--Group by flow tag

Filters

Filters narrow the data before metrics are calculated.

OperatorDescriptionExample
eqEqualsstatus eq "delivered"
neqNot equalsstatus neq "failed"
gt / gteGreater than (or equal)count gt 100
lt / lteLess than (or equal)bounce_rate lt 5
inIn a liststatus in ["opened", "clicked"]
not_inNot in a liststatus not_in ["bounced"]
containsContains substringflow_name contains "welcome"

Chart Types

TypeBest for
lineTrends over time
barComparing categories
areaVolume over time with emphasis on magnitude
pieDistribution / proportion
tableDetailed data view

Field Discovery

Before building a report, you can discover all available metrics, dimensions, and filters. The field discovery endpoint returns fields organized by category (Email, Flow, Contact, Event), each with its type, data type, and supported operators.

Available field categories:

CategoryMetricsDimensionsFilters
EmailSent, Delivered, Opened, Clicked, Bounced, Open Rate, Click Rate, Bounce RateDate, Email StatusEmail Status
FlowTrips Started, Trips Completed, Trips Failed, Completion Rate, Emails Sent (via Flow)Flow Name, Flow StatusFlow Name
ContactTotal Contacts, New Contacts, Subscribed, UnsubscribedDate Created, Subscription StatusSubscription Status
EventTotal Events, Unique Contacts, Unique Event TypesDate, Event NameEvent Name, Event Source
Tip

Use the field discovery endpoint (GET /v1/reports/fields) in the report builder to see all available fields with their operators. This is the same data that powers the drag-and-drop builder in the dashboard.


Date Ranges

Every report supports date range filtering. You can use preset ranges or explicit dates.

Preset Ranges

ValuePeriod
1dLast 24 hours
7dLast 7 days
30dLast 30 days (default)
90dLast 90 days
todayCurrent day (midnight to now)
yesterdayPrevious day (midnight to midnight)

Custom Dates

Pass from_date and to_date as ISO 8601 strings to override the preset range.

Period Comparison

Enable compare: true to see how the current period compares to the previous period of equal length. For example, if you view the last 30 days, comparison shows the 30 days before that. Each KPI will include a trend percentage showing the change.


Saving and Managing Reports

Visibility

VisibilityWho can see it
privateOnly you
workspaceAll workspace members with analytics:read permission

Duplicating a Report

Duplicate an existing report (including pre-built templates) to create an editable copy. The copy is always set to private visibility so you can customize it without affecting the original.

Deleting a Report

Deleting a report also removes any associated schedule and share link. This action cannot be undone.

Warning

Deleting a report removes its schedule and share link permanently. If other team members rely on a scheduled report, consider transferring ownership or changing visibility to workspace first.


Live Preview

The report builder includes a live preview mode. As you configure metrics, dimensions, and filters, you can execute the query without saving the report. This uses the ad-hoc query endpoint (POST /v1/reports/query) and returns the same KPIs, chart data, and table data as a saved report.


Caching

Report query results are cached in Redis for 5 minutes. This means:

  • Repeated views of the same report with the same date range return instantly
  • Changing the date range or filters triggers a fresh query
  • Shared report links benefit from the same cache
Note

The 5-minute cache means that very recent data (events ingested in the last few minutes) may not appear immediately in report results. Refresh the report after the cache expires to see the latest data.