Sales call scoreboard: revenue per hour on the phone
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.
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.
What does this prompt do?
- Shows one row per sales rep for any date range you pick, with calls placed, connect rate, total talk time, average call length, deals created, deals won, and revenue won side by side
- Calculates the two numbers your phone system and your CRM cannot produce alone: calls per closed deal and revenue per hour spent on the phone
- Sorts by any column, so you can instantly spot the rep dialing all day with nothing closing, and the rep closing big on very few calls
- Opens a rep's individual call history on click, showing the tags on each call, so you can see what is actually happening on the dials
- Lets you leave a coaching note or add a tag on any call without leaving the board
What do I need to use this?
- An Aircall account with calling activity for the reps you want to measure
- A HubSpot account with deals, deal owners, and deal amounts filled in
- Your reps set up with the same email address in both Aircall and HubSpot, which is how the two sides get matched
- Deal close dates and amounts kept reasonably current in HubSpot, since the revenue columns read straight from them
How can I customize it?
- Change the default date range the board opens on, for example last week instead of this month
- Adjust which deals count as revenue, such as only deals in a specific pipeline or above a minimum amount
- Add or remove scoreboard columns, or change which one the board sorts by when it first loads
- Tune the rule that hides internal rep-to-rep calls if your team uses a separate set of internal numbers
FAQs
How does it know which HubSpot deals belong to which caller?
What exactly counts as a connected call?
Do internal calls between reps mess up the numbers?
Can I pick any date range I want?
Will my coaching notes show up in Aircall?
Does this work if some deals have no amount filled in?
Related templates
Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.
Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.
One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.
See every competitor battlecard next to the number of open deals that name that competitor, so the cards carrying real pipeline get refreshed first.
Score every target account against the buying committee you actually need, see the exact holes, and have an assistant fill them in your CRM.
See open and pending conversations from all your Help Scout inboxes in one queue, sorted so the customers who have waited longest on you come first.
Stop guessing whether the dialing is paying off.
Put phone effort and closed revenue on the same row for every rep, and open Monday's pipeline review with the answer already on screen.