Build local prospect lists and review them before they hit your CRM
Let reps search any business category and city, see which businesses are already in HubSpot, and add only the ones worth keeping.
I want an app my SDR team opens to build local prospect lists on demand, instead of waiting for a weekly scrape to run and then deduping a CSV by hand. The people using it are sales reps, not analysts, so the whole job happens on one screen: search, review, push.
The main screen is a search form with four inputs: business category (for example "dentist" or "HVAC contractor"), city, minimum star rating, and minimum review count. When the rep hits Search, a handler runs an Apify Google Maps scraper Actor using Run Actor Synchronously and Get Dataset Items, passing the category and city as the search terms. Use compass~crawler-google-places (the Google Maps Extractor) as the default Actor and make the Actor ID configurable in app settings. Note that the Apify REST API needs the tilde form of the Actor ID, not the forward slash form shown in the Apify Store URL.
Cap each run with maxItems, defaulting to around 100, so a broad search cannot burn through Apify credits, and pass a timeout. The synchronous endpoint returns dataset items directly as an array rather than wrapped in a data envelope. It also times out at roughly five minutes, so if a run exceeds that, fall back to Run Actor (Async), poll Get Actor Run until the status is terminal, and then read the rows with Get Dataset Items. Show a progress state while the search runs. Apply the minimum rating and minimum review count filters to the rows that come back.
Before the results table renders, every row must be checked against HubSpot with Search Companies. Match on the website domain first, normalizing by stripping the protocol and any www prefix, and fall back to a company name search when a business has no website. This check happens up front rather than after the fact: any business already in the CRM is badged "already in HubSpot" and left unticked, and everything else is ticked by default. Reviewing before pushing is the entire point of this app, so never create records straight off a search.
Render the results as a sortable table with a tick box on each row plus business name, star rating, review count, phone, website and full address. Every column sorts, so a rep can order by review count or rating and work the strongest listings first. Show a running count of how many rows are currently ticked.
A Push button takes the ticked rows and, for each one, creates the business in HubSpot with Create Company, setting name, domain, phone, city and address. It then attaches the scraped detail with Create Note holding the star rating, review count, phone number and the search that produced the row (category, city and date), associated to the company just created. Include an optional toggle for filing a follow up with Create Task against the same company, with a due date the rep picks, defaulting to three business days out. Push rows one at a time and keep a per row result so a single failure does not lose the batch, then show a summary of created, skipped and failed when it finishes.
Model every pushed business as a company with an attached note. Do not try to create contacts.
A second button, Append to working list, sends the same ticked selection to a shared Google Sheet using Append Values, writing one row per business with the same columns plus the rep name and the date. This is the team shared working list, so it always appends and never overwrites.
Saved searches are per user. Each rep's searches are stored with their four inputs so they can rerun one with a single click, and recent searches appear on the main screen. Every push is logged in the app with the rep, the businesses pushed and the timestamp, and there is a Push log view listing that history alongside the search behind it. When a search returns, also check the push log and flag any business a teammate has already pushed, so two reps never work the same street twice.
What does this prompt do?
- Search by business category, city, minimum star rating and minimum review count, and get a fresh list of local businesses in seconds instead of waiting for a weekly scrape to run
- Every result is checked against your CRM before the list appears, so anything you already have is clearly badged and left unticked
- Tick the businesses worth keeping and add them to HubSpot in one go, each with a note holding the rating, review count and phone number
- Send the same selection to a shared Google Sheet, and every push is logged in the app so two reps never work the same street twice
What do I need to use this?
- An Apify account with a Google Maps scraper actor, such as the popular Google Maps Extractor from the Apify store
- A HubSpot login that can create companies, notes and tasks
- A Google account and a shared spreadsheet to hold the team working list
- Nothing else for your reps: they just open the app and search
How can I customize it?
- Set the default minimum rating and review count so weak listings never reach the table
- Swap in a different Google Maps scraper, or pull extra fields like opening hours and business category
- Choose whether a follow up task is created on every push or only when the rep asks for one
- Point the shared working list at a different spreadsheet or a different tab per team
FAQs
Will this work on HubSpot Free?
How does it know a business is already in our CRM?
Does it add contacts, or just companies?
How long does a search take?
Can two reps use it at the same time?
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.
Drag creators through Sourced to Wrapped on a board grouped by campaign, with audience stats on every card and a one-click brief for each creator.
Pick a repricing rule, send an assistant out to check competitor pages, then approve the new prices that clear your margin floor.
See the projected bounce rate for any outbound send before it goes out, and keep the launch button locked until the list is clean enough to be safe.
Stop exporting CSVs to build a prospect list.
Give your reps one screen that finds local businesses, flags the ones you already have, and pushes the rest to HubSpot.