# Turn a HubSpot list into a call sheet you can actually dial

> See which contacts have a mobile, which have only an email, and which have neither, then fill the gaps and approve each number before it saves.

- Workflow type: app
- Services: Datagma, HubSpot, Google Sheets
- Categories: Sales, Operations
- Published: 2026-08-17

## What it does

- Loads a HubSpot list or filter into one call sheet and flags every person as reachable by mobile, reachable by email only, or not reachable at all.
- Lets you tick the unreachable rows and look up their missing mobile numbers and work emails in a single batch, with an optional WhatsApp check on each number found.
- Holds every result in a review panel first. You see the number, whether WhatsApp confirmed it, and nothing goes back to HubSpot until you approve that row.
- Shows your remaining lookup balance in the header before you start a batch, and pushes the finished call sheet to a Google Sheets tab so the team has a record of who was worked.

## What you'll need

- A HubSpot account with contacts you can search, plus permission to edit contact records
- A Datagma account, which is what finds the missing mobile numbers and work emails
- A Google account with a spreadsheet where the finished call sheet gets logged
- A HubSpot list or filter that matches the people you plan to call in this block

## Prompt

I want an app my sales reps open before every calling block that turns a HubSpot contact list into a dialable call sheet. The people using it are SDRs and inside sales reps who are about to spend an hour on the phone, so the app has to answer one question fast: which of these people can I actually reach right now, and can I fix the ones I cannot before I start dialing.

The main screen is the call sheet. Let me pick a HubSpot list or a filter (owner, lifecycle stage, last activity date, a saved list membership) and load the contacts with HubSpot Search Contacts, requesting the properties the sheet needs: first name, last name, job title, company, company domain or website, mobile phone number, phone, work email, and LinkedIn URL if the portal stores one. Show one row per contact with name, title, company, mobile, work email, and a reachability column that classifies each person into exactly one of three states: has a mobile, has a work email but no mobile, or has neither. Make the reachability state filterable and sortable so a rep can jump straight to the unreachable block, and show a count of each state above the table.

Put my remaining Datagma balance in the header, read with Datagma Get Credits, and refresh it when the app loads and again after every batch finishes. This matters because reps should see what they have left before committing a batch, so show the selected row count next to the balance. Datagma only charges when it actually finds a match, so make it clear in the interface that rows which come back empty do not consume credits.

Let me select rows with checkboxes, including a select-all for a filtered view, and press one button to fill the gaps. For each selected contact, run Datagma Search Phone Numbers using their work email and/or LinkedIn profile URL as the input, with the optional WhatsApp check enabled so I learn whether the number is live. When a contact has a name and a company domain but no email address at all, run Datagma Find Work Email first from the name plus the domain (or the LinkedIn company slug if that is what is stored), then feed any email it returns back into the phone lookup for that same person. Process the batch with sensible concurrency, show per-row progress, and never block the whole batch on one slow or failed lookup.

Important detail about reading results: Datagma responses come back as HTTP 200 even when nothing was found, and carry a numeric code in the body where 5 means not found and 3 means an invalid argument or bad key. Read the body code rather than trusting the HTTP status, and render those rows honestly as no match or as a bad input, not as a silent success or a hard error.

Every result lands in a review panel rather than going straight to the CRM. For each row show the contact, what was found (the mobile number, the work email, or both), whether WhatsApp verified the number, and what the value in HubSpot is today so I can see I am filling a blank rather than overwriting something. Nothing writes back through HubSpot Update Contact until I approve that specific row. Give me approve and skip per row plus an approve-all-found action, write only the approved fields onto the matching contact ID, and mark the row as saved in the call sheet with the new value shown inline. If a write fails, keep the found value in the panel so I can retry rather than losing the result I paid for.

Finally, let me push the finished call sheet to a Google Sheets tab with Append Values so the team has a record of who was worked. Let me choose the spreadsheet and tab, and append one row per contact with name, title, company, mobile, work email, whether WhatsApp verified the number, the reachability state after enrichment, whether the record was updated in HubSpot, who ran it, and the date. Appending should add to the existing tab rather than replacing it, so the log builds up across calling blocks.

Remember the last list or filter each rep used and reopen it on their next visit, so opening the app before a calling block takes one click. Keep the whole thing on one screen where possible: the sheet, the selection, and the review panel should feel like a single workspace rather than a multi step wizard.

## How to customize

- Set which HubSpot list or filter loads by default, so each rep opens straight into their own calling block.
- Turn the WhatsApp check on or off, or treat a WhatsApp confirmed number as the only kind worth dialing.
- Choose which spreadsheet and tab the finished call sheet is appended to, and which columns go with it.
- Adjust what counts as reachable, for example if a direct line matters to your team as much as a mobile.

## FAQ

### Does this change my HubSpot contacts automatically?

No. Every number and email found lands in a review panel, and each row has to be approved individually before anything is written back to HubSpot. Rows you skip leave the CRM untouched.

### What happens when no phone number is found for someone?

The row is marked as no match and stays on your sheet so you know it was already tried. You are not billed for those, because the lookups only charge when a real match comes back.

### Will it work if a contact only has a LinkedIn profile and no email?

Yes. Mobile lookups can run from an email address, a LinkedIn profile URL, or both together. Work email lookups need a name plus the company domain, so contacts missing both a domain and a LinkedIn company are flagged as not enough information.

### How do I know what a batch will cost before I run it?

Your remaining balance is shown in the header and refreshes before each run, so you can see what you have left next to the number of rows you selected.

### What does the WhatsApp check actually tell me?

It tells you whether the mobile that came back is active on WhatsApp, which is a useful signal that the number is live and worth dialing rather than an old one.

### Can several reps use this on the same list?

Yes. The call sheet reads whatever list or filter you point it at, so reps can each open their own segment, and the export records who was worked and when.

Use this prompt in General Input: https://www.generalinput.com/prompts/turn-a-hubspot-list-into-a-call-sheet-you-can-actually-dial