Monitoring #activities on a deal-by-deal basis

I’m looking for a way to visualise sales reps’ weekly activities (emails, #calls, #meetings) on a deal-by-deal level in the Sales Reports.

Example of what I would envision this report to look like for our rep “Oscar”:

Filtered by Rep “Oscar” - Filtered by time period: this week

           //Stage // Emails sent  // Emails received // Meetings  // Calls  //Close date //Amount

Deal 1 // Q // 7 // 0 // 10 // 0 // 1.1.27 // X $
Deal 2 //Q// 0 // 11 // 0 // 0 // 25.11.26 // X $$$$

This visualisation would help me understand where Sales Rep Oscar is currently focusing his efforts on a deal-by-deal basis, and measure against the entire pipeline of sales bids.

Where I got to & where I’m struggling
In reporting, I created a custom object with activities, primary data source “deals” + connected to “activities” (emails, notes, meetings, calls). Created a table consisting of “deal name”, “close date”, “amount”.

I’m now unsure how to best measure the number of weekly emails, calls, meetings associated with the deal. ‘Distinct Count’ seems to take into account everything since the deal was created. But if I go with distinct “email title” for example, this doesn’t seem to work as well.

Q: How/Where do I calculate numbers for weekly/monthly number of emails/meetings/notes/calls for a deal in a Hubspot Report?

Thank you.

Distinct count on activity title (or activity id) without a date bound will always look “since deal created.” You need the date on the activity row, not only on the deal.

Working approach in Custom Report Builder:

  1. Primary data source: Deals. Join Activities (emails / calls / meetings) that are associated to the deal.

  2. Rows: Deal name (and Stage, Amount, Close date as columns if you want them on the same table).

  3. Filters (report-level):

    • Deal owner = Oscar (or pipeline filter you care about)

    • Activity date (or Email send date / Call timestamp / Meeting start) is in this week / this month

  4. Metrics: Count of activities, broken out by Activity type (or separate columns if your hub lets you filter each metric by type = Email / Call / Meeting).

  5. If “emails received” is a separate activity type or direction field, add that as its own filtered metric. Do not use Distinct email title for volume.

If the join only gives lifetime activities:

- Duplicate the report and hard-filter Activity date = This week, or

- Use a calculated / rolling property only if you already maintain “# emails last 7 days” style rollups on the deal (workflow or ops sync). Native report date filter on the activity is cleaner than distinct-title hacks.

Quick sanity check: pick one known busy deal, set Activity date = Yesterday, confirm the count matches the timeline before you trust the weekly view.

If you say whether emails are logged as Engagements vs Conversations-only, easy to say which date field to filter.