Sales call scoreboard: revenue per hour on the phone

By General Input

See which reps turn dials into revenue. One board joins phone activity with CRM deals so calls per closed deal and revenue per hour finally have answers.

Integrations

  • Aircall
  • HubSpot

Type

App

Categories

  • Sales
  • Operations

Build me an app my sales manager opens every Monday to answer one question our tools cannot answer today: how much revenue did our calling actually produce? Aircall can see phone effort but not deals, and HubSpot can see deals but not phone effort. This app joins the two.

The main screen is a rep scoreboard for a date range I pick, with a date range control at the top that defaults to the current month. One row per rep, with these columns: calls placed, connect rate, total talk time, average call length, deals created, deals won, revenue won, calls per closed deal, and revenue per hour on the phone. Every column is sortable, ascending and descending, so I can find who is dialing a lot but closing little. Show a totals row across the whole team as well.

For the phone side, handlers read Aircall List Calls and Search Calls, filtered by user, direction, and the selected date range, plus List Users to get the roster of reps. Aircall date filters are UNIX timestamps in seconds. For the CRM side, handlers read HubSpot Search Deals filtered by owner and close date, plus List Owners. Match an Aircall user to a HubSpot owner on email address, since Aircall exposes users by numeric id or email and HubSpot List Owners can be filtered by email. Reps present in one system but not the other should still appear on the board with the missing side shown as blank rather than zero, and flagged with a small unmatched indicator so the manager knows it is a data problem and not a performance problem.

Business rules to bake in. Exclude internal rep-to-rep calls from every count: read Aircall List Numbers and treat any call whose other party matches a workspace number, or matches another Aircall user, as internal and drop it. Define connect rate as answered calls divided by total attempted calls, so unanswered, voicemail, and failed calls sit in the denominator only. Calls per closed deal is calls placed divided by deals won. Revenue per hour on the phone is revenue won divided by total talk time expressed in hours. Guard both ratios against divide by zero and render a dash rather than infinity when a rep has no closed deals or no talk time. Deals with a blank amount still count toward deals created and deals won but add nothing to revenue won.

Clicking a rep opens a drill-down of their individual calls for the same date range: date and time, direction, other party, duration, answered or missed, and the tags applied to that call. From any call in that list I can leave a coaching note, which writes through Aircall Comment a Call, or attach a tag, which writes through Aircall Tag a Call with the tag choices loaded from Aircall List Tags. After either write, refresh that call row so the new note or tag shows immediately.

Handle the data volume properly. Aircall list endpoints page at 1 to 50 records per page and cap Calls at 10,000 items in total, so page through results rather than taking the first page, and warn me in the UI if a selected range hits the cap so I know the numbers are truncated. HubSpot search is capped at 10,000 results and rate limited to about 4 requests per second, so page with the cursor and stay under that. Aggregate everything server side in the handlers and send the finished rows to the UI. Show a loading state while a wide range is being assembled, and keep the last successful result on screen rather than blanking the board if a refresh fails.

Related prompts

Explore more prompts
Turn Mailjet email clicks into ranked HubSpot follow-upsiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInAccount health board that puts product usage next to your CRMLook up a customer's full chat history mid conversationLusha prospecting workbench with credit-safe revealsWhich companies your LinkedIn ads reach, matched to your CRMLead response desk with a running clock on every new leadApprove Lusha enrichment field by field before HubSpot saves it