# 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.

- Workflow type: app
- Services: Aircall, HubSpot
- Categories: Sales, Operations
- Published: 2026-08-14

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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

## FAQ

### How does it know which HubSpot deals belong to which caller?

It matches your Aircall users to your HubSpot deal owners by email address. If a rep uses a different email in each system, they will show phone activity with no deals attached until the addresses match, so it is worth a quick check before your first review.

### What exactly counts as a connected call?

Connect rate is answered calls divided by total calls attempted in the range. Calls that ring out, hit voicemail, or fail are counted in the denominator but not the numerator, so the percentage reflects real conversations rather than dial volume.

### Do internal calls between reps mess up the numbers?

No. Calls placed between your own team members are filtered out of every count, so a rep who spends an hour on internal calls does not get credit for an hour of selling.

### Can I pick any date range I want?

Yes, though very wide ranges pull a lot of call records and take longer to load. Month-long or quarter-long ranges work comfortably. If you want multiple years of history in one view, it is better to run it a period at a time.

### Will my coaching notes show up in Aircall?

Yes. A note you leave on a call is saved as a comment on that call in Aircall, and a tag you add appears on the call there too, so the rest of your team sees them in their normal workflow.

### Does this work if some deals have no amount filled in?

Deals with a blank amount still count toward deals created and deals won, but contribute nothing to revenue won. That can make revenue per hour look low for a rep with incomplete records, so the board is only as good as your deal hygiene.

Use this prompt in General Input: https://www.generalinput.com/prompts/sales-call-scoreboard-revenue-per-hour-on-the-phone