Messages, tasks, notes and team roster
Only named human actions, in the local time zone and business hours
Productivity, SLA and pending items per person
Daily report, dashboard and AI agent
What it solves
- A productivity ranking that counts only what people did, without automation, broadcasts or system events.
- Response time and conversations handled measured in a way that neither worsens nor improves because of a broadcast campaign.
- A daily list of deals with no active task or with an overdue task, by owner and campus.
Business questions it answers
Ask your agent these questions once the case is live.
What you need
- Messaging and CRM connected to Nekt, with messages, tasks and notes
- A team roster: user, email, role (SDR, closer, campus) and validity period
- Business hours and the SLA agreed with coordination
What you get
- A day x agent table with messages, conversations and attributed sales, flagging what adds up and what does not
- A per-conversation table with first human response time and outcome
- A daily pending-items report and SDR audit by email
- An AI agent that answers productivity questions with the right rules
Where to activate
Pending items and the previous day's SDR audit, by owner, sent before business hours start.
Messages, conversations, response time and attributed sales by person and campus, with non-additive columns recounted for the slice.
Answers who handled, who replied and what is stalled, with the human and additivity rules already applied.
The sources are simple. The work is in the team roster, in separating humans from automation and in deciding what can be added up. The detailed view has the business rules, the pitfalls and the acceptance test. Or send everything straight to your agent with the Nekt MCP.
The messaging tool records everything as a message: automatic broadcast, bot, system event, internal note and human reply. Counting everything rewards automation; adding up conversations handled day by day counts the same conversation several times; measuring response time on broadcast conversations, where the lead never wrote, concludes the team is slow. In the CRM, logins shared by campus and tasks created by automation hide who actually worked the lead.
How it is usually done, and the rule
Each row is a mistake that already happened in practice.
Count only outbound messages sent by an identified user (in Clint, type = 'USER' with user_id filled). Outbound without a user is automation. System events (EVENT) and private notes (NOTE) are not conversation and leave the counts, but the conversation stays in the table so no deal disappears. A user outside the team roster becomes unidentified: counted in total volume, left out of the ranking.
Messages, media and deliveries add up across days and people. Conversations handled and contacts are distinct counts: the same conversation appears on several days, sources and deals, and they do not add up. Rates (delivery, read, response) are rebuilt as sum over sum, never as an average of daily rates. Write this in the table header and in the context document.
A cycle runs from the lead's first unanswered message to the first human reply. Break ties between messages in the same second by id, otherwise the time shifts between runs. Measure only conversations with a message from the contact: in operations that broadcast, half of the conversations have no question to answer. Also keep the first reply of any kind, which is what the lead experiences, separate from the human one. Aggregate by median.
A conversation can cover several deals and a deal appears in several conversations. Attribute each sale only once: to the owning conversation (the one with the deal's last message) and, within it, to the last human agent. Agent's average ticket = attributed value / conversations with their own revenue, never divided by conversations that merely took part in the sale.
Keep a table of user, email, role (SDR, closer, campus, AI agent) and period. People change roles and teams: classify each action by the role held in the month it happened. A login shared by a campus measures the campus, not the person. Different spellings of the same salesperson in free-text fields map to one canonical name through a single reference.
A deal came from the SDR when the SDR's first proven activity (note, task created or completed) precedes the campus's first activity. In that case, the campus entry counts on the date of the campus's first activity; otherwise it is a direct entry on the creation date. Activity before the SDR funnel was created does not count as SDR work. The author is whoever created or completed the task; the owner is only a fallback.
Tasks generated by automation (email opened notice, email replied, cadence step) stay out of activities and out of contact evidence. The contact channel used (WhatsApp, call, email, material sent, last attempt) comes from the text of a task completed by a person, and a note only counts as activity for whoever recorded it.
Overdue task = not completed, not canceled and due before today in America/Sao_Paulo. No active task only when there is no task or all tasks are completed or canceled. Check every task of the deal, not only the latest, and only on open deals. No task does not mean paused: pause comes from the official pause field.
The audit of the previous day rebuilds the state at the cutoff (midnight Brasília time): a task completed after the cutoff counts as active at the cutoff, and a note edited after the cutoff is ignored. Business hours (for example 08:00 to 18:00) and the week (Sunday to Saturday or Monday to Friday) are declared and the same for everyone.
In RD Station Conversas, a conversation with closed = true is closed even with opened = true. Open and closed counters show today's state, not closures that happened on the day: do not read the current state as yesterday's output. Transfers and redistributions stay in their own columns, because they change who owns the conversation.
What goes into each metric
Message direction, task authorship and pending status.
Definitions
Pitfalls that already happened
Before the human filter, the broadcast automation showed up as the most productive agent on the team.
Separate human outbound, automation and events before building any ranking.
The month's total conversations, added up from the days, far exceeded the real number because the same conversation came back on several days.
Recount the month with a distinct count and flag the daily column as non-additive.
Half of the conversations were broadcasts with no message from the lead and entered the calculation as unanswered waits.
Measure only conversations with a message from the contact.
The same deal appeared in two conversations, and the team's summed revenue exceeded actual sales.
Use the exclusive value per deal, in the owning conversation.
Several agents shared the same campus login in the CRM, and the per-person ranking compared one person with an entire front desk.
Map the login to the campus and compare campuses with each other; ask for individual logins to measure people.
Tasks created automatically when the lead opened an email counted as contacts made, and the SDR looked like they had worked leads they never touched.
Filter automatic tasks by their standard text before counting activity and contact.
Acceptance test
The case is done when every item passes.
- The sum of messages sent per agent in the month equals the source's total human outbound messages for the same slice.
- The month's conversations handled, recounted with a distinct count, never exceed the sum of the days, and the dashboard never adds up the daily column.
- The sum of sales attributed to all agents equals the value of won deals that had a conversation, with no difference.
- No won or lost deal appears in the overdue tasks list.
- Running yesterday's audit in the afternoon gives the same result as running it in the morning.
Agent package
Paste into Claude, ChatGPT or any client with the Nekt MCP connected.
Sales team productivity - Productivity = named human outbound: type = 'USER' with user_id filled and the user in the team roster <team table>. Outbound without a user = automation. EVENT and NOTE are not conversation. - User outside the roster = nao_identificado: in total volume, out of the ranking. - Additive: messages, media, deliveries, attributed sales. Non-additive: conversations handled and contacts (distinct count). Rates = sum / sum. - Response time: cycle from the lead's first unanswered message to the first human reply, only in conversations with a lead message. Aggregate by median. Break ties by id. - Attributed sale: exclusive value per deal, in the conversation with the deal's last message, to the last human agent. Ticket = attributed value / conversations with attributed revenue. - Role (SDR, closer, campus) from the team roster with monthly validity. A shared login measures the campus. - New from SDR: SDR's first activity before the campus's first; date = campus's first activity. Activity before <SDR funnel creation date> does not count. - Automatic tasks (email opened, email replied, cadence) do not count as activity or contact. - Overdue task: not completed, not canceled, due < today in America/Sao_Paulo, open deal. No active task: no task or all completed or canceled. No task does not mean paused. - Daily audit: state at the <time> Brasília cutoff of the previous day; business hours <start> to <end>; week <Sunday to Saturday>. - RD Station Conversas: closed = true is closed even with opened = true. Open and closed are current state. - Always state the last load of messages and tasks. Exceptions by client: - <client>: the login <email> is shared by campus <campus>. - <client>: SDR = users <list>; closers = <list>. - <client>: the SDR funnel started on <date>; there are no SDR metrics before that.
Build the "Sales team productivity" case in my Nekt workspace following the rules at https://academy.nekt.com/en/industrias/educacao/produtividade-time-comercial.md. 1) Find the source tables and confirm the columns the rules use. 2) Create a transformation at the stated grain applying every rule. 3) Run the acceptance test and show me the result of each item. 4) Create the case's context document in the workspace, leaving my clients' exceptions open for me to fill in.
Variations
With Google Meet transcripts, count turns and speaking time per participant to see how much the salesperson talked and how much they listened.
Productivity by campus, with transfers between the SDR and campuses and a Sunday to Saturday week in Brasília time.
When the team tracks tasks in Notion or a spreadsheet, apply the same overdue rule with the tool's list of completed statuses.