Account progress
All accounts
All environments
All use cases
7d
30d
90d
All
Account progress
Feature usage
Template activation
Usage
Entities & Events
Active accounts
5
Across 2 hosting partners
Templates live
6
of 10 total templates
↑ +1 this month
Stalled >28d
2
Nairobi BP · Kampala HL
Needs intervention
Configuring
2
Active, not yet live
Within normal range
Avg days to go live
12d
Across 6 completed templates
Baseline
Account onboarding status
Click account to expand · Click template row for stage detail · Stall threshold: 28 days
Integration configuration — OOB vs custom
How many accounts have configured each integration type
Integrations · one-time setup
SMS
Amazon SNS (OOB)11 accounts
Custom (partner-built)3 accounts
Email
Amazon SES (OOB)11 accounts
Custom (partner-built)3 accounts
USSD
OOB provider7 accounts
Custom (partner-built)7 accounts
Feature usage
Click any row to expand · Avg uses = avg number of times an account uses this feature per month
On journeyOff journeyUnderstand
Feature / Sub-featureJourneyAvg uses / account / monthAccounts using
Avg uses / account / month = total events ÷ accounts that triggered the feature at least once · Baseline data — thresholds for high/low will be set after 60 days
3 · Template view → use %
Of accounts that viewed a template detail page, what % went on to add it to their account
All environments
Template typeViewsAdded to accountView → use %Avg time view → add
Trade License1,8401287.0%3.4 min
Sanitation Permit642385.9%4.1 min
Building Permit510244.7%5.8 min
Health License388164.1%6.2 min
Business Permit290103.4%7.1 min
Market License17452.9%8.4 min
View → use % is low by design — most sandbox users are exploratory. Becomes more meaningful once segmented by accounts that went on to activate.
4 · Configuration changes per template
What each account modified vs kept as default across the 6 configurable sections
Requires instrumentation
Instrumentation required: events must fire when any template section is saved with changes vs saved with defaults intact. Data below is illustrative prototype — to be replaced with live PostHog events once backend instrumentation is in place.
Section change frequency — across all activated template instances
Viewing account: All metrics are per-account unless "All accounts" is selected
A · Employee Usage
Employee activity — login & session detail
Active = logged in within 14 days · Low = 1–5 logins in last 30d · Inactive = no login in 30+ days
EmployeeRoleLast loginLogins (30d)Avg sessionStatus
Login activity — 6-week trend
Total employee login count per week
Device & channel — employees
Device type and access channel used by employee sessions
Employee action completion time
Avg time per action type · P50 = median · P90 = slowest 10%
Employee app
Inbox backlog trend
Applications unactioned for >3d and >7d · 6-week view
First touch & throughput
Time to first employee action after submission · Applications processed per login
B · Citizen Usage
Geography
Where citizens are accessing the system from · Click a marker for detail
Device & channel — citizens
Device type and access channel used by citizen sessions
Apply-to-issuance
Flow from application start → certificate download · blue = continued · red = dropped off · select an account to view
Form drop-off & timing
Time spent at each step (P50 = median, P90 = slowest 10%) · drop-off count and rate per step
Citizen app
Notification click-through (24h)
Of notifications sent, % where citizen returned and took next action within 24 hours
Citizen app
Payment channels & success rate
Online vs offline split · first-attempt payment success rate per channel
Citizen app
Time per action
Avg time citizens spend at each step · high values indicate friction
Screen abandonment
Where citizens dropped off and how long they spent before leaving
C · Session Patterns
Sessions by hour of day
Local time · helps size capacity and plan maintenance windows
Employee sessions
12am6am12pm6pm11pm
Citizen sessions
12am6am12pm6pm11pm
Naming convention
Events
entity_past_tense_verb
Properties
snake_case
Context IDs
account_id + service_id on every event
Timestamps
_at suffix e.g. submitted_at
Durations
_seconds suffix e.g. duration_seconds
Examples: form_step_completed payment_attempted employee_action_completed notification_link_clicked license_downloaded
Property Hierarchy
properties are captured at three levels — capture once at the right level, not per-event
LEVEL 1 · SDK / Identity
Set once on login via posthog.identify() + posthog.register() — attached to every event automatically
user_id user_type citizen·employee·admin account_id service_id timestamp auto
LEVEL 2 · Session
Captured on session_started — same for all events in that sitting, queried by joining on session_id
session_id device_type mobile·desktop·tablet browser os channel web·whatsapp·ussd country city lat lon
LEVEL 3 · Event-specific
Only properties unique to that action — listed in each event definition below
duration_seconds elapsed_days sessions_count flow_started_at start events only application_id step_name action_type amount outcome … and more
Single-session timing
Event fires on completion. timestamp = end time (auto). Add duration_seconds = active effort. No ended_at needed.
Multi-session timing
flow start stores flow_started_at in localStorage. flow end adds elapsed_days + sessions_count.
Entities
11 entities · included as properties on events
user
AdminCitizenEmployee
Universal user entity across all three apps. user_type distinguishes citizens from employees. All charts filter by user_id and segment by user_type.
user_type values: citizen · employee · admin  |  role (employees only): document_verifier · field_inspector · approver · counter_employee · admin
Key fields
user_iduser_typeaccount_idemailphonerolecreated_atlast_login_at
Charts:All charts (filter by user_type)
account
Admin
Government city or ULB deploying DIGIT services. Top-level scoping entity — included on every event.
Key fields
account_idaccount_namecountrycitypartner_nameenvironment
Charts:All (filter)
service
AdminEmployee
A configured service instance for an account (e.g. Trade License for Lagos). Created from a template.
Key fields
service_idaccount_idtemplate_typestatuscreated_atlive_at
Charts:Acct ProgressTemplate Act.Feature Usage
application
CitizenEmployee
A citizen's license or permit application. Central entity — referenced by documents, payments, inspections, and the license.
Key fields
application_idservice_idaccount_iduser_idchannelsourcesubmitted_atcurrent_stage_id
Charts:Apply FunnelForm TimingBacklogFirst Touch
user_session
AdminCitizenEmployee
A single login session across any app. Captures device, channel, geography, and duration for all session-level charts.
Key fields
session_iduser_iduser_typedevice_typechannelstarted_atended_atcitylatlon
Charts:GeographyDevice/ChSessions/hrEmp SessionsLogin TrendThroughput
form_step
Citizen
A single step in the multi-step application form. Defines what section of the form the citizen is on.
Key fields
step_idstep_indexstep_nameservice_idfield_countis_skippable
Charts:Form TimingApply Funnel
document
CitizenEmployee
A file uploaded by the citizen with their application. Status is updated by the document verifier employee.
Key fields
document_idapplication_iddocument_typefile_size_kbstatusverified_atrejection_reason
Charts:Apply FunnelEmp Actions
payment
CitizenEmployee
A payment transaction against an application. Captures channel, amount, and first-attempt outcome for success rate analysis.
Key fields
payment_idapplication_idchannelamountstatusattempted_atcompleted_atfailure_reason
Charts:PaymentsApply Funnel
notification
CitizenEmployee
An SMS or email notification sent to a citizen. The link_url enables click-through tracking for CTR measurement.
Key fields
notification_idapplication_idrecipient_typechannelevent_typesent_atlink_url
Charts:Notif CTR
employee
AdminEmployee
Extends user with role-specific fields. Identified by user_id with user_type: employee. Role controls which workflow queue and actions are visible.
Key fields
user_iduser_type: employeeaccount_idroleemail
Charts:Emp SessionsEmp ActionsFirst Touch
license
CitizenEmployee
The issued license or certificate that concludes the workflow. Tracks issuance and download for funnel completion.
Key fields
license_idapplication_idlicense_numberissued_atexpiry_date
Charts:Apply FunnelFirst Touch
Events — Admin App
36 events
Event name Fires when Key properties Charts
template_viewed Admin opens a service template detail page account_id, template_type, session_id, view_duration_seconds
Template Act.
template_previewed Admin clicks Preview to see how the citizen portal will look with their current configuration account_id, service_id, template_type, preview_duration_seconds
Feature Usage
template_added flow start Admin adds a template to their account — stores flow_started_at in localStorage to track elapsed time to publish account_id, service_id, template_type, seconds_since_viewed, flow_started_at
Template Act.Acct Progress
categories_configured Admin saves trade categories for the service service_id, account_id, user_id, category_count, duration_seconds, changes_made
Acct ProgressFeature Usage
subcategories_configured Admin saves sub-categories under trade categories service_id, account_id, user_id, subcategory_count, duration_seconds, changes_made
Acct ProgressFeature Usage
form_configured Admin saves the application form field setup service_id, account_id, user_id, field_count, duration_seconds, changes_made
Acct ProgressFeature Usage
roles_configured Admin confirms staff roles and email assignments service_id, account_id, user_id, role_count, duration_seconds, changes_made
Acct ProgressFeature Usage
workflow_configured Admin saves the approval workflow and SLA settings service_id, account_id, user_id, approval_levels, sla_days, duration_seconds, changes_made
Acct ProgressFeature Usage
fees_configured Admin saves the fee structure (base fee, slabs, surcharges) service_id, account_id, user_id, fee_type, slab_count, duration_seconds, changes_made
Acct ProgressFeature Usage
notifications_configured Admin saves notification channel and trigger settings service_id, account_id, user_id, channels_enabled, trigger_count, duration_seconds, changes_made
Acct ProgressFeature Usage
payment_configured Admin saves payment gateway and channel settings service_id, account_id, user_id, gateway, channels_enabled, duration_seconds, changes_made
Acct ProgressFeature Usage
checklist_configured Admin saves the required document checklist (list of documents citizens must upload) service_id, account_id, user_id, document_count, duration_seconds, changes_made
Acct ProgressFeature Usage
config_field_changed Fires once per individual change within any config section save. One checklist_configured save may fire multiple of these — one per changed entity or attribute.
entity_type values
form_field · workflow_step · role · document · fee_rule · notification_trigger
change_type values
added · removed · modified
attribute_changed examples (modified only)
label · required · field_type · sla_days · amount · order_index · visibility
previous_value / new_value (modified only)
Stringified before and after values — e.g. false → true, 7 → 14, Phone → Mobile Number
service_id, account_id, user_id, entity_type, entity_name, change_type, attribute_changed, previous_value, new_value, template_type
Config per Template
go_live_checklist_started flow start Admin opens the Go-Live checklist for the first time — stores flow_started_at in localStorage to track elapsed time to checklist completion service_id, account_id, user_id, config_completed_at, flow_started_at
Acct Progress
users_created Admin creates the initial staff user accounts for the service (batch action in go-live checklist) service_id, account_id, user_id, users_count, duration_seconds
Acct Progress
employee_account_created Admin creates a single employee account — start of the clock for time-to-first-login measurement employee_user_id, role, account_id, service_id, created_by_user_id
Acct ProgressFirst Login
theme_confirmed Admin reviews and confirms the portal branding (logo, colour, name) service_id, account_id, user_id, duration_seconds
Acct Progress
boundary_confirmed Admin confirms the geographic deployment boundary service_id, account_id, user_id, boundary_type, duration_seconds
Acct Progress
go_live_checklist_completed flow end Admin marks the Go-Live checklist as complete — service is ready to publish service_id, account_id, user_id, total_checklist_duration_seconds, elapsed_days, sessions_count
Acct Progress
service_published flow end Admin publishes the service — it goes live for citizens service_id, account_id, template_type, total_config_duration_seconds, elapsed_days, sessions_count
Acct Progress
ONBOARDING & ACCOUNT
super_user_added Admin adds a super user to an account account_id, service_id, added_user_id, total_super_users
Feature Usage
org_details_edited Admin edits organisation / account details (name, address, contact info) account_id, fields_changed, duration_seconds
Feature Usage
system_users_viewed Admin opens the system users list page account_id, service_id, user_count_shown
Feature Usage
profile_viewed User opens their own profile page account_id, view_duration_seconds
Feature Usage
password_reset_requested User requests a password reset account_id, reset_method · reset_method: email · sms
Feature Usage
BOUNDARY
boundary_setup_started Admin opens the boundary configuration screen for the first time account_id, service_id
Feature Usage
osm_boundary_configured Admin uses OpenStreetMap to define the geographic service boundary account_id, service_id, region_selected, duration_seconds
Feature Usage
shapefile_boundary_uploaded Admin uploads a shapefile to define the service boundary account_id, service_id, file_size_kb, upload_success, duration_seconds
Feature Usage
excel_boundary_uploaded Admin uploads an Excel file to define the service boundary account_id, service_id, row_count, upload_success, duration_seconds
Feature Usage
LOCALIZATION
languages_selected Admin selects the supported languages for the service portal account_id, service_id, language_codes, language_count
Feature Usage
localization_edited Admin edits translation strings for a language account_id, service_id, language_code, strings_changed, duration_seconds
Feature Usage
language_added Admin adds a new language to the service portal account_id, service_id, language_code, total_languages
Feature Usage
DASHBOARD USAGE
dashboard_viewed Admin opens a dashboard page — measures whether accounts are actively monitoring at all dashboard_name, template_type, account_id, service_id, referrer · referrer: direct · notification · admin_list
Dashboard Usage
dashboard_tab_clicked Admin switches to a different tab within the dashboard — captures which tabs are used and how long the previous tab was actually read tab_name, previous_tab_name, time_on_previous_tab_seconds, dashboard_name, account_id, service_id
Dashboard Usage
chart_viewed A chart enters the viewport and stays visible for ≥ 2 s (fired via Intersection Observer — passive, no click required) chart_id, chart_name, tab_name, dashboard_name, view_duration_seconds, account_id, service_id
Dashboard Usage
chart_interacted Admin actively interacts with a chart — distinguishes charts that are seen vs charts that drive decisions chart_id, chart_name, interaction_type, tab_name, dashboard_name, account_id, service_id · interaction_type: filter_changed · date_range_changed · export_clicked · drilldown_clicked
Dashboard Usage
Events — Citizen App
22 events
Event name Fires when Key properties Charts
AUTH FLOW
auth_flow_started flow start Citizen lands on the login / auth screen (first step of the funnel) entry_point, account_id, flow_started_at · entry_point: direct · notification_link · shared_link
Login Funnel
otp_requested Citizen submits their phone number or email to receive an OTP otp_channel, account_id · otp_channel: sms · email
Login Funnel
otp_submitted Citizen enters and submits the OTP code attempt_number, otp_channel, time_since_otp_sent_seconds, account_id
Login Funnel
auth_completed flow end Citizen successfully authenticates — session begins immediately after is_first_login, otp_channel, attempt_number, elapsed_days, account_id
Login Funnel
auth_failed OTP is wrong, expired, or max attempts reached — citizen is blocked from proceeding failure_reason, attempt_number, otp_channel, account_id · failure_reason: wrong_code · expired · max_attempts
Login Funnel
SESSION & APPLICATION
session_started user_type: citizen Citizen successfully authenticates and a session begins (fires after auth_completed) session_id, user_id, user_type, device_type, channel, account_id, country, city, lat, lon
GeographyDevice/ChSessions/hr
application_started flow start Citizen clicks "Apply Now" on a service — stores flow_started_at in localStorage to track elapsed time to submission application_id, service_id, account_id, flow_started_at
Apply FunnelForm Timing
form_step_started Citizen enters a form step (first field interaction or step render) application_id, step_id, step_index, step_name, started_at
Form Timing
form_step_completed Citizen passes validation and proceeds to the next step application_id, step_id, step_name, duration_seconds, service_id
Form TimingApply Funnel
form_step_abandoned Citizen exits the app or navigates away without completing the current step application_id, step_id, step_name, time_spent_seconds, last_field_touched_id
Form TimingAbandonment
document_uploaded Citizen selects and uploads a file on the document step application_id, field_id, file_type, file_size_kb, upload_success
Apply FunnelForm Timing
application_submitted flow end Citizen clicks Submit on the final review step application_id, service_id, account_id, total_duration_seconds, elapsed_days, sessions_count
Apply FunnelKPI strip
payment_attempted Citizen initiates a payment (fires before outcome is known) payment_id, application_id, channel, amount, service_id
Payments
payment_completed Payment succeeds on the first attempt payment_id, application_id, channel, amount, duration_seconds
PaymentsApply Funnel
payment_failed A payment attempt fails (used as denominator for success rate) payment_id, application_id, channel, failure_reason
Payments
notification_link_clicked Citizen clicks a tracked link in an SMS or email notification notification_id, application_id, user_id, event_type, channel, time_since_sent_seconds
Notif CTR
license_downloaded Citizen downloads their issued license or certificate PDF application_id, license_id, channel, days_since_issued
Apply Funnel
citizen_registered Citizen completes registration for the first time (distinct from auth — registration creates the account) account_id, registration_channel, otp_channel
Login FunnelFeature Usage
application_viewed Citizen opens an existing application to check its status application_id, service_id, account_id, current_stage, view_duration_seconds
Feature Usage
notifications_viewed user_type: citizen Citizen opens their notifications list account_id, unread_count, view_duration_seconds
Feature Usage
payment_receipt_downloaded Citizen downloads their payment receipt PDF payment_id, application_id, account_id, channel
Feature Usage
application_receipt_downloaded Citizen downloads the application acknowledgment receipt (proof of submission) application_id, account_id, channel, days_since_submitted
Feature Usage
Events — Employee App
16 events
Event name Fires when Key properties Charts
LOGIN
employee_login_attempted Employee submits credentials on the login screen (fires before outcome is known) account_id, login_method, attempt_number · login_method: password · sso
Login Funnel
employee_first_login_completed Employee logs in successfully for the very first time — fires once per account lifetime. Paired with employee_account_created to measure activation lag. account_id, role, hours_since_account_created, days_since_account_created, login_method
First LoginAcct Progress
SESSION & ACTIONS
session_started user_type: employee Employee logs in and a session begins session_id, user_id, account_id, role, device_type, channel, country, city, lat, lon
Emp SessionsLogin TrendSessions/hrDevice/Ch
session_ended Employee session closes (logout or idle timeout) session_id, user_id, duration_seconds, applications_actioned_count
Emp SessionsThroughput
employee_action_started Employee opens an application and begins an action (verify_documents, request_more_info, schedule_inspection, approve, reject) action_id, user_id, application_id, action_type, started_at
Emp ActionsFirst Touch
employee_action_completed Employee submits their action outcome — paired with employee_action_started to compute duration action_id, user_id, application_id, action_type, duration_seconds, outcome
Emp ActionsFirst TouchThroughput
document_verified Employee marks a document as verified application_id, document_id, user_id, time_spent_seconds
Apply FunnelEmp Actions
document_rejected Employee rejects a document with a stated reason application_id, document_id, user_id, rejection_reason
Apply Funnel
inspection_scheduled Employee assigns an inspector and sets a date/time slot for a field inspection application_id, user_id, scheduled_for, service_id
Apply FunnelEmp Actions
inspection_completed Inspector submits their field inspection report (pass / fail / conditional) application_id, user_id, recommendation, duration_seconds
Apply FunnelEmp Actions
license_issued Approver issues the license — final employee action in the workflow application_id, license_id, user_id, days_from_submission
Apply FunnelFirst TouchKPI strip
SEARCH, INBOX & NOTIFICATIONS
notifications_viewed user_type: employee Employee opens their notifications list account_id, unread_count, view_duration_seconds
Feature Usage
search_performed Employee submits a search query in the application search screen account_id, results_count, has_filters
Feature Usage
search_filter_applied Employee applies a filter in the search or inbox (status, date, type) account_id, filter_type, filter_value, results_count
Feature Usage
inbox_sort_applied Employee changes the sort order of their inbox account_id, sort_by, sort_direction · sort_by: date · priority · sla_remaining
Feature Usage
offline_payment_collected Employee records a cash or offline payment on behalf of a citizen application_id, account_id, amount, payment_mode · payment_mode: cash · bank_draft
Feature UsagePayments
Events — System
2 events · fired by backend, not user action
Event name Fires when Key properties Charts
notification_sent System dispatches an SMS or email to a citizen (used as the denominator for CTR calculation) notification_id, application_id, user_id, event_type, channel, sent_at
Notif CTR
application_stage_changed An application moves from one workflow stage to another (drives funnel, backlog age, and time-to-issuance calculations) application_id, from_stage, to_stage, changed_by_type, changed_at, days_in_previous_stage
Apply FunnelBacklogFirst Touch
Total entities
11
user · account · service · application · user_session · form_step · document · payment · notification · employee · license
Total events
76
36 Admin · 22 Citizen · 16 Employee · 2 System
Charts powered
14
Across all 4 dashboard tabs
Event Volume Estimator
estimated events per month based on your account and transaction volume
Total active accounts
Accounts using the platform this month
New accounts this month
Drives one-time template setup events
Transactions per month
Total citizen applications submitted across all accounts
SETUP
200
new accounts × ~100
CITIZEN JOURNEY
11,000
transactions × ~22
EMPLOYEE ACTIONS
5,000
transactions × ~10
SYSTEM
3,500
transactions × ~7
ADMIN / DASHBOARD
750
accounts × ~75
Estimated total events / month
20,450
Breakdown
Multiplier assumptions ▾
Citizen journey (×22 per transaction)
auth flow (4) · session (1.5) · form steps started/completed/abandoned (8) · documents uploaded (2.5) · application submitted + viewed (2) · payments (1.5) · notifications clicked (1) · downloads (1.5)
Employee actions (×10 per transaction)
employee_action started + completed (2) · document verified (2) · inspection events (0.6) · license issued (1) · session overhead (1.4) · search, inbox, notifications (3)
System (×7 per transaction)
notification_sent (3) · application_stage_changed (4)
Setup (×100 per new account)
All admin config events · boundary · localization · go-live checklist · employee onboarding · config_field_changed (~30 field-level changes)
Admin / Dashboard (×75 per account/month)
dashboard_viewed · dashboard_tab_clicked · chart_viewed · chart_interacted · profile · system_users · employee notifications (ongoing monthly activity)