ActivityPulse Overview
ActivityPulse is a web-based application that generates daily, weekly, and monthly activity summaries for software engineers and similar roles. It helps engineering managers get a consolidated overview of their team’s activity by pulling data from various sources — GitLab, GitHub, Atlassian Jira and Confluence, Microsoft 365 — and summarizing it using a large language model such as Claude or GPT.
Unified Visibility Across Your Toolchain
Teams work across GitLab, Jira, Confluence, Microsoft Teams, Outlook, and more. ActivityPulse pulls activity from all of them into one place, so you never have to tab between dashboards to understand what happened this week.
Integrated data sources:
- GitLab — Commits, merge requests, code reviews, issue comments, and project membership. Includes commit statistics (lines added/removed) and links back to the original GitLab items.
- GitHub — Pull requests, commits, issues, reviews, and branches.
- Atlassian (Jira & Confluence) — Issue activity, worklogs, assignments, and Confluence page edits. Supports JQL queries and saved Jira filters for targeted issue tracking.
- Microsoft 365 — Email volume, Teams calls and meetings (with participant and duration details), OneDrive and SharePoint file activity, and calendar events. Includes meeting-to-calendar enrichment so you can see what each meeting was actually about.
Each data source is independently configurable — enable or disable any source at the organization level, and selectively disable sources for individual teammates who don’t use a particular tool.
AI-Powered Activity Summaries
Instead of manually piecing together what each person did, ActivityPulse generates natural-language summaries using large language models. Choose between Claude (Anthropic) or OpenAI as your LLM provider.
- On-demand summaries for any teammate over any date range — ideal for preparing 1:1s, writing performance narratives, or catching up after time off.
- Scheduled email reports delivered daily, weekly, or monthly with configurable timezone and teammate selection, so summaries come to you without opening the app.
- Customizable prompts — tailor the LLM prompt template to match your organization’s tone or focus areas (e.g., emphasize collaboration, delivery velocity, or cross-team contributions).
All generated summaries are stored and searchable, building an ongoing narrative of team contributions over time.
Goal Tracking and Issue Hierarchy
Understanding individual tasks is useful; understanding how they roll up to larger goals is powerful. ActivityPulse resolves issue parent-child relationships from Jira and maps contributions up to top-level epics and initiatives.
- Contributions by goal — See which teammates contributed to each epic or initiative, with deduplication so the same issue isn’t counted twice.
- Contributions by teammate — Flip the view to see what goals each person is advancing.
- Full hierarchy visibility — Drill into the nested issue tree with depth indicators, status, resolution, and time spent at every level.
- Jira filter integration — Use your existing saved Jira filters to scope which issues feed into goal tracking.
This makes it straightforward to answer “who is contributing to our Q2 reliability initiative?” without manually cross-referencing Jira boards.
Value Stream Analytics
Value Stream Analytics traces each Jira issue’s journey from creation to completion, measuring how long work spends in each phase of the development lifecycle — coding, code review, merge, and testing. It combines events from Jira, GitLab, and GitHub into a unified timeline per issue so you can pinpoint exactly where delays occur.
- Cycle time breakdown — See how total delivery time splits across development, review wait, review, merge, and QA phases for every issue.
- Issue hierarchy view — Issues are organized by their Jira parent-child relationships, with parent metrics aggregated from all descendants.
- Bottleneck detection — Identify issues with the longest cycle times and the phases responsible for the delay.
- AI-powered analysis — Send the full dataset to your configured LLM for a written report with bottleneck identification, review effectiveness observations, and prioritized recommendations.
Use a JQL query or a saved Jira filter to select which issues to analyze. For a detailed walkthrough, see the Value Stream Analytics guide.
Proactive Alerts (Red Flags)
ActivityPulse continuously evaluates teammate activity against configurable heuristics and surfaces anomalies as Warning or Critical red flags. These are designed to catch workload and engagement signals that are easy to miss in day-to-day management.
Built-in detection rules:
| Rule | Warning | Critical |
|---|---|---|
| Daily worklog hours | > 10 hours | > 12 hours |
| Low workday hours | < 6 hours on a weekday | — |
| Daily meeting load | > 3 hours average | > 5 hours average |
| Assigned merge requests | > 10 open | > 20 open |
| Stale issues | Not updated in 60+ days | — |
| Stale merge requests | Not updated in 60+ days | — |
| Low camera usage in calls | < 90% video-on rate | — |
Red flags appear on the dashboard for quick triage and are available through a dedicated alerts view with date range filtering. They give you early warning of burnout risk, disengagement, or work getting stuck — without waiting for someone to raise a hand.
Shared Filters: Date Range and Teammate Selectors
A consistent filter bar appears at the top of every major page — the Dashboard, Activities, Summaries, and all Signals views. The two controls in this bar — the date range selector and the teammate selector — work the same way everywhere, and selections carry over automatically when navigating between pages.
Date Range Selector
The date range button shows the active period (e.g., “Current week · 7 days”) and opens a picker with two panels: a quick-select preset list on the left and a two-month calendar on the right.
Preset periods:
| Preset | What it covers |
|---|---|
| Yesterday | The previous calendar day |
| Current week | Monday of the current week through today |
| Last 7 days | Rolling 7-day window ending today |
| Last week | Full Monday–Sunday of the previous week |
| Current month | 1st of the current month through today |
| Last 30 days | Rolling 30-day window ending today |
| Last month | Full previous calendar month |
| Previous 2 months | Full two calendar months prior to the current one |
| Year to date | January 1st through today |
| Last 365 days | Rolling 365-day window ending today |
| Last year | Full previous calendar year |
Custom ranges: Click any start date on the calendar, then click an end date. A hover preview shows the range as you move the cursor. The calendar navigates month by month and shows both months side-by-side.
Period navigation: The left and right arrow buttons step through time using the active period’s natural unit — stepping by one week for weekly presets, one month for monthly presets, and so on for custom ranges. This makes it fast to compare the same period across consecutive weeks or months without reopening the picker.
The button label shows the preset name when a preset is active, or the formatted date range (“Jan 15 – Jan 20, 2025”) when a custom range is selected, along with a span badge showing the total number of days.
Teammate Selector
The teammate button (default label: “All teammates”) opens a dropdown with a search box and two sections: teams and individual teammates.
Team selection: Each team entry shows the team name and member count. Selecting a team selects all its members at once. If only some members of a team are selected individually, the team checkbox shows an indeterminate state. Deselecting a team deselects all its members.
Individual selection: Teammates can be selected in any combination, independently of team membership.
Search: Typing in the search box filters both teams (by name) and teammates (by display name) in real time. The “Select all” toggle respects the current search — it selects or deselects only the visible matching entries, leaving unmatched selections untouched.
Button label: The button adapts its label to what is selected:
- Nothing selected → “All teammates” (no filter applied, all data shown)
- One person → their display name
- Multiple individuals → “N teammates”
- Full teams selected → team names with member counts (e.g., “Engineering (4), Platform (2)“)
Filter Persistence
Both filters are stored in the URL as query parameters (fromDate, toDate, preset, teammate), so the current view is fully bookmarkable and shareable. When navigating between filter-aware pages, the selections carry over — switching from Activities to the Dashboard preserves your date range and teammate selection without any extra steps.
Activities Feed
The Activities page is a chronological, filterable log of every event captured from your connected data sources — the raw ingredient behind summaries, dashboards, and signal views.
What you see:
Each activity entry shows the data source (GitLab, Atlassian, Microsoft 365, GitHub), a source-specific description rendered by the relevant plugin, a relative and absolute timestamp, and the teammate’s name when viewing across multiple people. Clicking any entry opens a detail panel with the full activity metadata and raw payload — useful for debugging integrations or understanding exactly what was captured.
Filtering:
- Date range — Choose from preset periods (yesterday, current week, last 7 days, last week, current month, last 30 days, last month, and more) or pick a custom range with the calendar picker. Navigate forward and backward through periods with arrow controls.
- Teammates and teams — Filter to one or more teammates, or select an entire team at once. The selector is searchable and supports mixed team/individual selection.
- Activity types — A sidebar card shows every activity type present in the current date range with counts. Click any type to include or exclude it; multi-select is supported. Types span the full toolchain: commits, merge requests (created, merged, closed, approved, commented), issues, Jira worklogs, Confluence page edits, calendar events, Teams calls and meetings, OneDrive/SharePoint file activity, and more.
- Time-of-day drill-down — Clicking a cell in the activity heatmap narrows the list to activities within that specific hour, letting you pinpoint bursts of activity.
Pagination:
Activities load 100 at a time. A “Load more” button appends the next page without resetting the view, and a count shows how many of the total are currently visible.
How activities are stored:
Each activity record captures: the source system, the specific activity type, a start timestamp, an optional end time (for duration-based events like meetings), a flexible JSON payload containing all source-specific detail, and a deduplication key so re-syncs don’t create duplicates. All activity data is stored in your organization’s private database — nothing is retained externally.
Plugin-rendered descriptions:
Because activity payloads differ across sources, each plugin supplies its own renderer. GitLab activities show commit messages, MR titles, and issue links; Atlassian activities show Jira issue keys and Confluence page names; MS365 activities show meeting subjects, call participants, file names, and email counts; and so on. This means descriptions are always source-accurate rather than generic.
Jira Worklog Signals
The Jira Worklog signals view gives you a complete picture of how time is being logged across your team in Jira — broken down by person, project, and day.
Summary statistics:
- Total time logged across all selected teammates and the date range
- Number of distinct projects and issues touched
- Total worklog entry count
Daily breakdown matrix — A hierarchical table showing time logged per day for each teammate, organized by project. Columns represent dates (grouped by ISO week number), weekends are visually distinguished, and color-coded bars on total rows indicate workload intensity:
- Green: 6–10 hours logged
- Yellow: under 6 hours
- Red: over 10 hours (potential overload signal)
Teammate rows collapse and expand so you can focus on individuals or teams without losing context.
Project and issue breakdown — Aggregated totals per project, sorted by time spent, with a drill-down list of individual issues showing the issue key (linking directly to Jira), the issue summary, and time logged.
Individual worklog entries — A full chronological table of every worklog record in the selected period, showing timestamp, teammate, issue key (with Jira link), worklog description, time spent, and project.
Filtering and navigation:
- Date range picker with period presets (day, week, month) and previous/next navigation
- Teammate filter to narrow results to specific team members
- Paginated loading for large datasets
Teammates and Teams
Managing teammates
The Teammates admin page lists every person being tracked, with columns for display name, email address, team memberships, and external IDs. Admins and owners can add, edit, and delete teammates from here.
Adding a teammate: Enter a display name and optionally an email address. If you type an email first, ActivityPulse pre-fills the display name (capitalising the email prefix) and suggests external IDs for each connected data source — the full email for MS365 and Atlassian, and the username part for GitLab. You can override any of these before saving.
External identity mapping: Each teammate can have one external ID per data source. These mappings tell ActivityPulse which account in GitLab, Jira, MS365, and so on belongs to this person, so activity recorded under different user identifiers across tools is correctly attributed to a single teammate. External IDs are managed through a dedicated dialog that shows each source with its mapped value, an inline edit control, and a delete button.
Per-source sync toggle: Next to each external ID is a sync toggle. Disabling a source for a particular teammate skips that source during background sync — useful when someone has a GitLab account but only works in Jira, or when a contractor uses MS365 but not Atlassian. Disabled sources are shown at reduced opacity in the external IDs column of the main table.
Team membership from the teammate view: When editing a teammate, a team membership panel shows all available teams as a dropdown. Selecting a team adds the teammate to it immediately; clicking the badge next to a team name removes them.
Managing teams
The Teams admin page lists all teams with their name, description, and member count. Each row can be expanded inline to see the current members without leaving the page.
Creating and editing teams: Teams have a name and an optional description. Both can be changed at any time. Deleting a team removes the team and its memberships — it does not delete the teammates themselves.
Managing members: The “Manage members” dialog for a team shows the current member list with a remove button per person, and a dropdown at the top listing all teammates not yet in that team. Adding or removing a member takes effect immediately and updates the member count.
A teammate can belong to multiple teams simultaneously, and the same teammate can appear in any number of teams.
Teams as filters
The teammate selector in the global filter bar is team-aware. Teams appear as a dedicated section above the individual teammate list in the dropdown. Selecting a team selects all its current members at once; deselecting it removes them all. If some members of a team are selected but not others, the team checkbox shows an indeterminate state.
The button label reflects full-team selections explicitly — for example “Engineering (4), Platform (2)” — so it is immediately clear what scope is being applied without opening the dropdown. When the selection is a mix of teams and individuals that doesn’t correspond to any whole team, the label falls back to a count (“5 teammates”).
This makes it straightforward to scope the dashboard, activity feed, summaries, or any signal view to a specific sub-team, compare two teams by selecting both, or toggle between “all of Engineering” and “all of Platform” with a single click.
Access control
ActivityPulse supports role-based access at the organization level:
- Owner — Full administrative control.
- Admin — Manage teams, teammates, data sources, and configuration.
- Viewer — Read-only access.
Configurable Data Sync and Retention
You control how often data is fetched, how far back it reaches, and how long it’s retained.
- Sync frequency — Set how often ActivityPulse pulls new data from each source (1 to 168 hours, defaulting to daily).
- Historical window — Configure how many days of history to fetch on each sync (1 to 365 days).
- Retention policy — Automatically clean up data older than your configured retention period (default 90 days).
- Manual fetch — Trigger an immediate sync for all sources or a specific source, with results showing activities and signals fetched, duration, and any errors.
Background sync runs autonomously on a schedule, with built-in guards to prevent overlapping fetches for the same organization and source.
Deploy Locally
ActivityPulse is designed for on-premises, self-hosted deployment. All organization data — activity records, teammate profiles, AI-generated summaries, and configuration — stays entirely within your infrastructure. Nothing is sent to external services beyond the authenticated API calls to your own data sources (GitLab, Jira, MS365) and, when summaries are requested, to your configured LLM provider.
This gives you full control over where your data lives, how it’s secured, and who can access it — meeting the requirements of air-gapped environments, regulated industries, and organizations with strict data residency policies.