Build local prospect lists and review them before they hit your CRM

By General Input

Let reps search any business category and city, see which businesses are already in HubSpot, and add only the ones worth keeping.

Integrations

  • Apify
  • HubSpot
  • Google Sheets

Type

App

Categories

  • Sales

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.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerTurn Mailjet email clicks into ranked HubSpot follow-upsStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client accountSee which target accounts just started advertising on LinkedInFront desk appointment confirmation board for the next 3 days