Snapshot your HubSpot pipeline weekly in Google Sheets using Make
Prerequisites
- Make account (Core plan or higher for scheduling intervals under 15 minutes — though weekly is fine on any plan)
- HubSpot connection configured in Make via OAuth
- Google Sheets connection configured in Make via OAuth
- A Google Sheet prepared with snapshot headers (see Step 1)
Overview
Make (formerly Integromat) is well-suited for this workflow because its visual flow builder handles data aggregation natively — no code required. You'll use Make's HubSpot module to search deals, Numeric and Text Aggregators to compile metrics, and the Google Sheets module to append the snapshot row.
Step 1: Prepare the Google Sheet
Create a new Google Sheet with headers in the first row:
Date | Total Value | Deal Count | Appointment Scheduled (Count) | Appointment Scheduled (Value) | Qualified (Count) | Qualified (Value) | Proposal (Count) | Proposal (Value) | Closed Won (Count) | Closed Won (Value)Adjust the stage columns to match your HubSpot pipeline stages.
Step 2: Create a scenario and schedule it
Create a new scenario in Make. Click the clock icon at the bottom-left to configure the schedule:
- Schedule type: At regular intervals
- Run scenario: Every week
- Day: Monday
- Time: 08:00
- Timezone: Select your team's timezone
On the Free plan, the minimum interval is 15 minutes. For weekly schedules, any plan works.
Step 3: Fetch pipeline stages
Add an HTTP module (Make an API Call) to fetch pipeline stage names:
- URL:
https://api.hubapi.com/crm/v3/pipelines/deals - Method: GET
- Headers: Use the HubSpot connection (Make adds the Authorization header automatically)
This gives you a mapping of stage IDs to labels and the display order.
Step 4: Search for deals
Add a HubSpot CRM module → Search CRM Objects:
- Object type: Deals
- Filter: Pipeline equals "default" (or your pipeline name)
- Properties to return:
dealname,amount,dealstage,closedate,createdate - Limit: Set to the maximum (Make handles pagination for you)
Unlike n8n or Zapier, Make's HubSpot module handles pagination automatically. It iterates through all matching results internally, emitting one bundle per deal. You don't need to build a pagination loop.
Step 5: Aggregate deals into metrics
This is where Make's visual builder shines. You'll use aggregators to collapse all deal bundles into summary numbers.
Total pipeline value
Add a Numeric Aggregator module:
- Source module: The HubSpot Search module
- Aggregate function: SUM
- Value: Map
amountfrom the deal bundles
This outputs one bundle with the total pipeline value.
Deal count
Add a second Numeric Aggregator:
- Source module: The HubSpot Search module
- Aggregate function: COUNT
Per-stage breakdown
For each pipeline stage, add a Numeric Aggregator with a filter:
- Add a Numeric Aggregator for the stage
- Set Source module to the HubSpot Search module
- Set Aggregate function to COUNT
- Click the filter icon and add:
dealstageequalsappointmentscheduled(or whatever the stage ID is) - Add a second Numeric Aggregator for the same stage with SUM on
amount - Repeat for each stage
Each module run counts as one credit in Make. The Numeric Aggregator processes all bundles but only counts as 1 credit. However, each filtered aggregator pair (count + value) costs 2 credits per run. For a pipeline with 5 stages, that's ~12 credits per execution (1 trigger + 1 HTTP + 1 search + 5x2 aggregators + 1 sheets append).
Alternative: Use a single Code module
If you have many stages or want less visual clutter, replace the per-stage aggregators with a single Tools → Set Multiple Variables or Code module that processes all bundles at once:
- Language: JavaScript
- Code:
const bundles = $input;
const byStage = {};
for (const bundle of bundles) {
const stage = bundle.dealstage || 'unknown';
if (!byStage[stage]) byStage[stage] = { count: 0, value: 0 };
byStage[stage].count += 1;
byStage[stage].value += parseFloat(bundle.amount || '0');
}
return { byStage: JSON.stringify(byStage) };Step 6: Append row to Google Sheets
Add a Google Sheets module → Add a Row:
- Connection: Your Google Sheets OAuth connection
- Spreadsheet: Select your snapshot spreadsheet
- Sheet: Select the sheet tab
- Map each column:
- Date:
{{formatDate(now; "YYYY-MM-DD")}} - Total Value: Map from the SUM aggregator
- Deal Count: Map from the COUNT aggregator
- Stage columns: Map from each per-stage aggregator (or parse from the Code module output)
- Date:
Use formatDate(now; "YYYY-MM-DD") for ISO dates. Make's date formatting uses Moment.js-style tokens.
Step 7: Add error handling
Add error handlers to critical modules:
- On the HubSpot module: Add a Resume error handler with a 10-second delay (handles 429 rate limit responses)
- On the Google Sheets module: Add a Break error handler that stores the incomplete execution and retries later
- Go to Scenario settings → Error handling and enable Email notifications for failed executions
Step 8: Test and activate
- Click Run once to execute the scenario manually
- Inspect each module's output — click any module to see the bundles it processed
- Open Google Sheets and verify a new row was appended with the correct date and metrics
- Toggle the scenario to Active (the scheduling icon turns blue)
Cost and credits
- Free plan: 1,000 credits/month, 15-minute minimum interval. A weekly snapshot with ~50 deals and 5 stages uses approximately 15 credits per run (~60 credits/month). Plenty of room on the free plan.
- Core plan: $10.59/month for 10,000 credits. Required for more complex branching or higher volume.
- Credit calculation: 1 trigger + 1 HTTP + 50 deal bundles through search + aggregators + 1 Sheets append. Triggers count as 1 credit regardless of bundles returned.
Scenario execution limits
- Execution timeout: 40 minutes (hard limit). Not a concern for a pipeline snapshot.
- Maximum scenario data size: 6 MB per execution. Large pipelines with thousands of deals may need filters to reduce data volume.
Next steps
- Week-over-week comparison — use Make's Data Store module to persist last week's totals, then add delta columns to the Sheet
- Conditional alerts — add a Router with a Filter that sends a Slack message when total pipeline drops below a threshold
- Multiple pipelines — duplicate the search module for each pipeline and aggregate separately
- Chart embedding — create a Google Sheets chart on the snapshot data and share the Sheet link with stakeholders
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.