Twilio Flex reporting without Flex Insights: one set of definitions
Historical reporting is the part of Twilio Flex that contact center teams ask us about most. The questions are rarely about missing charts. They are about trust: the wallboard said 82% service level at 4 p.m., the report the next morning says 77%, and nobody can explain the difference.
This post covers the decisions behind Floor Walker Reports and what they mean for the people who run a contact center on Flex.
Where Flex reporting gets hard
Flex's built-in historical reporting is Flex Insights. It is a reasonable choice for many teams, and it is included in Flex's paid plans. According to Twilio's documentation, a few of its properties shape what you can do with it:
- Data refreshes every 60 minutes. Today's report lags the floor by up to an hour.
- Custom data has fixed slots. Up to ten custom conversation attributes and ten measures, with values cut at 128 characters.
- The service level threshold is global by default (60 seconds) and is changed through Twilio support; per-queue thresholds need custom metrics in its own analytics language.
- It is built around TaskRouter tasks. What a caller does in the IVR before a task exists is not part of the picture unless flows are built to create tasks for it.
- Its service level settings apply to historical reporting, not to Flex's real-time queue view.
Together they mean two screens can count the same contact center differently, and changing a target is not a supervisor's job.
One feed for live and historical numbers
The most important decision: the live wallboard and the historical reports read the same events. Twilio sends the contact center's TaskRouter and Studio events to Floor Walker as they happen, through Event Streams in your Twilio account. The wallboard, the supervisor console and the reports are all built from that one feed, so a call shows up in today's report seconds after it ends.
From those events Floor Walker keeps four kinds of records:
- Queue visits and agent legs: every time a task waits in a queue, and every agent's part of it (ring, talk, hold, wrap-up).
- Contacts: one record per customer contact, end to end, across transfers.
- IVR and bot journeys: every Studio execution, step by step, joined to its contact.
- 15-minute intervals per queue and per agent, including time in each agent activity.
Decide every rule once
The business rules are decided once, when each contact is stored, not in each report. Every queue visit knows whether it was offered, how it ended (answered, abandoned, short abandon, transferred), how long the customer waited, and whether it counted toward service level and was within it.
That makes the definitions short and explicit:
- Offered is a customer-initiated inbound contact entering a queue. Outbound calls and transfer legs are not offered, so they do not inflate answered or service level.
- Short abandons, callers who hang up within a few seconds, are not abandons and are left out of service level.
- Service level is contacts answered within the queue's threshold, divided by answered plus abandoned.
- Contacts count in the period in which they started, in the report's time zone.
Because the rules are part of the stored record, every metric is a plain count, sum or ratio, and anyone who counts the same way gets the same answer, including your analysts in their own tools.
One set of metric definitions, everywhere
Every metric is defined once, with its name, its formula, a plain-language description and whether higher is better. The same definitions drive the wallboards on the TVs, the supervisor console, the reports and report builder, exports and scheduled emails, and Ask AI and the MCP server for AI assistants. So "abandoned" means the same thing on the wall at 4 p.m. and in the monthly review, and the same metric over the same period is the same number on every screen. It sounds obvious; in practice it is what ends the morning argument about whose number is right.
Service level per queue, applied to history
A sales line might aim for 80% in 20 seconds, a collections queue for 90% in 60. In Floor Walker each queue has its own threshold, target and short-abandon time, set by supervisors in one screen, with defaults of 20 seconds, 80% and 5 seconds. There are no separate service level settings on the wallboard or in the console: they read the same values.
When a supervisor changes a queue's threshold, that queue's stored contacts are re-evaluated with the new value, and the confirmation says how many were affected. Last month's report then uses today's definition.
That is a deliberate trade-off: a spreadsheet exported last week can differ from the same report run today. We chose "one definition everywhere" over "numbers frozen when they were run", because comparing this month with last month only works if both are counted the same way.
The IVR in the same report
Every Studio execution, an IVR call or a bot conversation, becomes a journey with one step per widget, joined to the contact. Each journey ends in one of a few ways: handed to an agent, contained (the flow finished without an agent), abandoned in the IVR, or an error.
That gives containment rate, IVR abandon rate and the menu step where callers hang up, next to queue metrics, without changing flows. Two details matter in practice:
- Caller input is not stored by default, because digits and speech can hold card or ID numbers. You can choose specific widgets, such as a main menu, whose input is kept and used for grouping.
- Milestones add meaning a widget cannot carry: "the caller heard their balance", "the bot detected a billing intent". A milestone named for self-service resolution also marks the journey as contained.
Custom fields without slots
Any task attribute can become a report field: a customer tier, a product line, a region. It can be grouped and filtered like any built-in dimension. There is no fixed number of fields and no length limit, and because the values are read from the stored task data, a new field works for history too.
Getting the data out
A reporting tool should be easy to leave, so the data is open from the start:
- Saved reports keep their metrics, groupings, filters and period. A relative period such as "last week" is worked out each time the report runs. Reports are private by default and can be shared with every supervisor.
- Email schedules send a saved report daily, weekly or monthly as Excel or CSV, to up to 50 recipients.
- Exports of any report to Excel or CSV, with queues and agents by name.
- Nightly open data files of every report data set in Parquet and CSV, laid out by date so a data warehouse can pick them up.
- A read-only reporting connection for Power BI, Tableau, Looker or Metabase, and a reporting API for your own applications.
Ask AI and MCP
Ask AI answers questions such as "which queue had the worst service level last week?". The model plans up to three structured queries against the metric definitions; they run like any report, with the asking user's permissions, and a second step writes the answer from the numbers that came back. The model never writes code or database queries, and every answer shows the queries it ran.
The MCP server gives AI assistants such as Claude the same access: list the metrics and their definitions, run a query, ask a question, search contacts and open one contact end to end, from the IVR to the AI summary of the call.
Permissions are the same everywhere: agents see only their own numbers in reports, exports, Ask AI and MCP alike, checked on every request.
Where to start, and what you keep
TaskRouter keeps 30 days of events, so at switch-on Floor Walker can import the last 30 days and you start with a month of history. IVR journeys and hold times begin from the day the live feed is connected, and anything older stays in Flex Insights or its export. Report data is kept for 25 months by default, in the Floor Walker environment you chose: hosted by us, or in your own cloud or data center.
FAQ
Can I replace Flex Insights for Twilio Flex reporting?
Yes. Flex can send its TaskRouter and Studio events through Event Streams as they happen, so a reporting product can count the same contacts with your own definitions. Floor Walker Reports does that and imports the last 30 days when you start.
How do I report on IVR and Studio flows in Twilio Flex?
Treat every Studio execution as a journey: store each widget step and how it ended, and join it to the contact. That gives containment, IVR abandons and menu drop-off without adding tasks to every flow.
How do I keep wallboard and historical report numbers consistent?
Feed both from the same events and count with the same definitions. In Floor Walker the wallboard, the supervisor console and the reports share one set of metric definitions and one per-queue service level setting, so the same metric over the same period is the same number everywhere.
Floor Walker adds live and historical reporting, a wallboard, a supervisor console, a predictive dialer and per-task screen recording to Twilio Flex, hosted by us or installed in your own cloud or data center. Read the reports docs at https://floorwalker.dev/docs/reports.
Book a demo: hello@floorwalker.dev