Calendar Event Duration Summariser
Free to download on every platform. Comes pre-installed on BotFone, BotPad and BotFlip — with extra free apps included.
About this app
WHAT IT DOES
Automatically scans calendar pages and summarizes event durations to give you instant insight into your meeting load. The script detects calendar events on the page, extracts start and end times from visible text, attributes, and aria labels, and calculates total meeting time, average duration, meeting count, and duration distribution. You can see at a glance how much of your day is consumed by meetings, identify your busiest time blocks, and track meeting patterns across different calendar views. Optional filters allow you to include or exclude all-day events and filter out busy status events.
WHERE IT RUNS
Works on all major calendar platforms including Google Calendar, Outlook Web App (OWA), Office 365, Apple iCloud Calendar, Yahoo Calendar, and any web-based calendar application. Also functions on calendar views within project management tools like Asana, Trello, and Monday.com that display event-style items. Runs on all websites (match pattern *://*/*) with configurable selectors for maximum flexibility across different calendar implementations.
HOW TO USE
Install the script and navigate to your calendar view. The summary automatically appears in the panel showing event count, total duration, and average meeting length. Click "Scan Now" to manually refresh the summary. Configure detection through the panel: customize CSS selectors for event elements and time elements, set all-day indicators, and toggle filters for all-day events and busy status events. The script updates every 5 seconds and responds to dynamic page changes, keeping your summary current as you navigate between days and weeks.
REAL MECHANISM: TIME EXTRACTION WITH RANGE PARSING AND DURATION CALCULATION
This script uses a sophisticated time extraction engine that combines multiple parsing strategies. First, it checks data attributes (data-starttime, data-endtime, data-start, data-end) for pre-formatted time values. Second, it queries time elements using configurable CSS selectors and extracts text content, looking for time range patterns using regex (\d{1,2}:\d{2}\s*(?:AM|PM)?)\s*[-–—]\s*(\d{1,2}:\d{2}\s*(?:AM|PM)?). Third, it scans aria-label attributes for time information. The parser supports both 12-hour (with AM/PM) and 24-hour formats, converting times to minutes from midnight using a standardized algorithm that handles edge cases like 12:00 AM (0 minutes) and 12:00 PM (720 minutes). Duration is calculated by subtracting start minutes from end minutes, with automatic handling of events that cross midnight (adding 24 hours). All-day events are detected through configurable indicator strings (all-day, allday) and class name analysis. The aggregation engine computes total minutes, average duration, median, and min/max range, formatting results into human-readable strings with configurable hour/minute display. All extraction runs on a 5-second interval with a MutationObserver using 300ms debounce.
THE PANEL
Drag the panel anywhere on screen by clicking and holding the header. It snaps to screen edges when released. Collapse it to a small bubble by clicking the minimize button, and expand it back by clicking the bubble. Resize the panel from any corner. Press Escape to close the configuration panel. Your position and size preferences are saved automatically per site.
PLEASE NOTE
This script requires the free BotGentz browser extension which provides the BGPanel framework and storage APIs. Calendar interfaces change frequently; if the script stops detecting events correctly, you may need to update the CSS selectors in the configuration panel. All data (configuration and settings) is stored locally in your browser using GM_setValue and never sent anywhere. No analytics, no tracking, no external calls. The script only reads DOM elements visible on the page and never accesses calendar data, credentials, or sensitive information. The script does not modify calendar events, it only reads and summarizes visible content.