GTM plays/Play 32
Play 32 · Outbound

Local Business TAM from Directories

Local Business TAM from Directories is a six-step outbound play for email, calls and your CRM, from “Size the market before paying for it” to “Tier and load”. It uses Browserbase, Apify, Google Maps, Clay, Claude and seven more tools.

Motion
Outbound
Channel
Email, Call, CRM
Steps
6
Tools
12

The workflow

Play 32

Local Business TAM from Directories

1Size the market before paying for it
Directory totalsFree and exact

One search per region and category. Read the result count, scrape nothing.

Fetch
Browserbase
Maps pilot30 per term

Shows coverage, which categories are noise, and whether a term runs dry early.

Run
ApifyGoogle Maps
Hard dollar cap agreed before the full run. The cap is per search term.
2Scrape two kinds of source
Google MapsWidest coverage
PhoneWebsiteAddressRating

Search the whole region, exclude cities afterwards. Maps lists locations, not companies.

With
ApifyGoogle Maps
Industry directoriesCategory detail
CategoryAddressPaid listings

Confirm page 1 and page 2 differ before crawling. Resumable on region, category and offset.

With
Browserbase
3De-duplicate across sources
Match onThen
Same website domain→Merged, richest copy kept
Same name and street address→Merged across sources
Directory or link-in-bio domain→Domain blanked, never matched
One business, several cities→One row, every city kept
4Enrich, then check it is still true
Freshness checkListings go stale

Before anyone calls: the listing is not marked closed, the phone still connects, and the email is re-verified on the day it is sent.

Status
Google Maps
Verify
ZeroBounce
5Tier, then load
Tier 1Several sites, strong reviews
Call, then emailNow

The phone came with the listing. A rep calls first, then the sequence starts.

Call
Nooks
Log
HubSpot
Send
Smartlead
Tier 2 and 3Single site or thin data
Email onlyAuto

The copy names the category and the city the business was found under.

Send
Smartlead
A deduped local TAM, tiered and reachable
The stackBrowserbaseApifyGoogle MapsClayClaudeProspeoFindymailBounceBanZeroBounceNooksHubSpotSmartlead
Oriel · GTM plays libraryOriel
Open full size
The diagram as text
  1. 1

    Size the market before paying for it

    Directory totals (free and exact): One search per region and category. Read the result count, scrape nothing. Fetch: Browserbase.

    Maps pilot (30 per term): Shows coverage, which categories are noise, and whether a term runs dry early. Run: Apify and Google Maps.

    Hard dollar cap agreed before the full run. The cap is per search term.

  2. 2

    Scrape two kinds of source

    Google Maps (widest coverage): Phone, Website, Address and Rating. Search the whole region, exclude cities afterwards. Maps lists locations, not companies. With: Apify and Google Maps.

    Industry directories (category detail): Category, Address and Paid listings. Confirm page 1 and page 2 differ before crawling. Resumable on region, category and offset. With: Browserbase.

  3. 3

    De-duplicate across sources

    Match on → Then

    • Same website domain → Merged, richest copy kept
    • Same name and street address → Merged across sources
    • Directory or link-in-bio domain → Domain blanked, never matched
    • One business, several cities → One row, every city kept
  4. 4

    Enrich, then check it is still true

    Website and owner: Find a site for address-only rows, then read the team page for the owner. Match: Clay. Read: Claude.

    Email waterfall: Only the misses move to the next provider. Nothing goes out unverified. Find: Prospeo and Findymail. Verify: BounceBan.

    Labeled connection: Then.

    Freshness check (listings go stale): Before anyone calls: the listing is not marked closed, the phone still connects, and the email is re-verified on the day it is sent. Status: Google Maps. Verify: ZeroBounce.

  5. 5

    Tier, then load

    Tier 1: Several sites, strong reviews

    Call, then email (now): The phone came with the listing. A rep calls first, then the sequence starts. Call: Nooks. Log: HubSpot. Send: Smartlead. Tool: Nooks.

    Tier 2 and 3: Single site or thin data

    Email only (auto): The copy names the category and the city the business was found under. Send: Smartlead. Tool: Smartlead.

    Outcome: A deduped local TAM, tiered and reachable. Tools: HubSpot.

Feedback loop: The raw scrape is kept, so new filters and new tiers re-run on it at no cost.

The stack: Browserbase, Apify, Google Maps, Clay, Claude, Prospeo, Findymail, BounceBan, ZeroBounce, Nooks, HubSpot and Smartlead.

Open the diagram full size (1180 px wide)

The play in six steps

  1. 01

    Step 1: Size the market before paying for it

    Local businesses are thin or missing in B2B databases, but most directories will tell you how many listings exist before you scrape a single page.

    • Fetch one result page per region and category with Browserbase and read the total. It costs nothing and it is exact.
    • Run a Google Maps pilot on Apify at 30 places per search term. If every term fills all 30, there is more supply. If terms come back short, the full run will stop early.
    • The cap is per term, not a total: multiply it by the number of terms to get the real size of the run.
    • Agree a hard dollar budget before the full run starts.
  2. 02

    Step 2: Scrape Google Maps

    Maps has the widest coverage of local businesses and carries a phone, a website and an address on most rows.

    • Use the Apify Google Maps actor with two or three phrasings of each search term.
    • Search a whole state or region, then drop cities afterwards instead of narrowing the query.
    • Pass a max spend so Apify stops charging at the budget.
    • Filter on category. Broad terms pull in neighbouring trades.
    • Maps lists locations, not companies. A business with five offices shows up five times.
  3. 03

    Step 3: Add the industry directories

    Trade and professional directories hold businesses Maps misses, plus category detail Maps never had.

    • Fetch result pages with Browserbase. Server-rendered listings need no browser session and no LLM.
    • Find the parameter that really changes the page: fetch page 1 and page 2 and confirm they differ before crawling.
    • Category labels are exact strings. Test each one on a single fetch first.
    • Make the crawl resumable on region, category and offset, with retries.
    • Expect contact data only on paid listings. Free listings usually carry a name and an address.
  4. 04

    Step 4: De-duplicate across sources and cities

    The same business turns up in several sources, several categories and several neighbouring cities, and every duplicate is a wasted call.

    • Match on website domain first, then on normalised name plus street address.
    • Blank directory and link-in-bio domains before matching, or unrelated businesses collapse into one row.
    • Keep the richest copy of each record, plus the full set of categories and cities it appeared under.
    • Count rows with a CSV parser, not a line count. Descriptions carry line breaks.
  5. 05

    Step 5: Enrich the website, the owner and the email

    Directories rarely publish emails, so the contact layer is built downstream, and a listing that closed last month is worse than no listing.

    • Resolve a website in Clay for rows that arrived with only a name and an address.
    • Have Claude read the about or team page and name the owner or principal.
    • Run the email waterfall in Clay: Prospeo first, Findymail on the misses, BounceBan on everything found.
    • Run a freshness check before anything is sent:
      • Drop listings Google Maps marks as permanently or temporarily closed
      • Drop phone numbers that no longer connect
      • Re-verify the email with ZeroBounce on send day, not the day it was found
  6. 06

    Step 6: Tier and load

    A local TAM is large and uneven, so the tier decides where a rep's time goes.

    • Score on what the sources actually hold: number of locations, review count and rating, website quality, category fit.
    • Tier 1 gets a call through Nooks and then an email. The number is a published business line, so a call is fair.
    • Tier 2 and 3 get email only through Smartlead, naming the category and city they were found under.
    • Load companies and contacts into HubSpot before the first send.
    • Keep the raw scrape so filters can be re-run later at no cost.

Tools used

The twelve tools this play names. Each links to the other plays that use it.

Related plays

Play 30

Public Records Signals

1Pull public records on a schedule
Government APIsFree, read-only
Disaster declarationsWeather eventsSEC filings

Daily for declarations, weekly for filing phrase searches.

Pull
Plain GET on a schedule
Portals with no APIReal browser
Court docketsPermits

Throttled, sessions recycled. Portals behind a CAPTCHA are out.

Drive
BrowserbaseFirecrawl
One row per recordDate, source URL, verbatim excerpt
2Match each record to an account
Entity resolutionThe hard part

A record names a legal entity or a place, not your CRM account.

Name
Strip Inc, Corp, LLC, The
Place
County or address to known sites
Against
HubSpotSalesforce
MatchConfidence
Name and location agree→High: routes on its own
Name only→Medium: review queue
Fuzzy or alias→Low: review queue
3Qualify in two gates
Gate1
Not suppressed

Customers, open deals and competitors come out first.

× Customer or open deal
Gate2
Actually relevant

Claude reads the excerpt and gives a one-line reason.

× Not relevant
4Tier what the record allows
Act aloneThe event is the reason
Owner alertThis week

Record link, excerpt and matched sites, straight to the owner.

Alert
Slack
Log
HubSpot
One more factPerson or site first
Find the person

The right contact, then a checked email.

Find
AI Ark
Email
ProspeoFindymail
Verify
BounceBan
Rank onlyContext, no message
Score only

Adds weight to the account score. Never opens a message.

On
HubSpot
5Reach out with the record as evidence
State the public fact plainly

Something the buyer can check for themselves, with the source link at hand.

Email
Smartlead
Call
Nooks
A dated reason to call this week
The stackSEC EDGARBrowserbaseFirecrawlClayHubSpotSalesforceClaudeSlackAI ArkProspeoFindymailBounceBanSmartleadNooks
Oriel · GTM plays libraryOriel
Play 30Outbound · ABM

Public Records Signals

5 steps · Email, Call, CRM

+8 more
Play 08

Competitor Post Engagers

1Watch the competitor voices
Company pagesCompetitors
LaunchesWebinarsCustomer posts

Every competitor page that posts.

With
LinkedIn
Founders and execsTheir people
FoundersExecsCreators

The people who post for them, reviewed monthly.

With
LinkedIn
New posts from the last 24 hoursDeduped by post id
2Capture who engages
Post engagersScraped once per post
ReactionsCommentsPost text

A comment counts for more than a reaction. The post travels with every engager.

Scrape
Apify
Pool
Clay
3Enrich, then qualify in three gates
Person and company
RoleSeniorityHeadcountVerified email
Find
Explorium
Email
ProspeoFindymail
Verify
BounceBan
Gate1
Company fit

ICP industry, headcount and region. Competitor staff and partners come out.

× Not ICP
Gate2
Persona

The titles that buy, not everyone who reacts.

× Wrong persona
Gate3
Not already yours

Customers and open deals are removed.

× Customer or open deal
4Pitch the switch on the post topic
They engaged withSwitch angle
A launch post→How it compares to yours
A how-to post→The same job, done simpler
A pricing post→The cost of staying
Name the topic, never the act of watching.
5Multi-thread the account
“An opener written from the post topic”
Switch conversation booked
The stackLinkedInApifyClayExploriumHubSpotProspeoFindymailBounceBanClaudeHeyReachSmartleadSlack
Oriel · GTM plays libraryOriel
Play 08Outbound

Competitor Post Engagers

6 steps · LinkedIn, Email, CRM

+6 more
Play 12

Contact Data Refresh Before Every Send

1Pull everyone about to be contacted
Contacts queued for next week's sendsLists and sequences
What can have gone stale
JobCompanyWork emailMobileLinkedIn URLTitle
2Check each field against a live source
Still at the company?Job change

Compare the current LinkedIn role with the CRM record.

Check
LinkedInApify
Email still delivers?Verify

Re-verify on send week, not on the day it was found.

Verify
BounceBanZeroBounce
Number still live?Line type

Look up carrier and line type, drop disconnected numbers.

Check
Twilio
3Decide what each record needs
FindingAction
Left the company→Find the replacement, follow the person
Email risky or invalid→Find a new email, else LinkedIn only
Title changed→Re-score, maybe a new angle
Number dead→Remove it from call lists
All still true→Send as planned
4Fill the gaps
Replacement at the account

The new person in the same seat inherits the account context.

Find
ApolloClay
Email
FindymailProspeo
The mover at the new company

A past champion who moved is often the warmest lead you have.

Track
LinkedIn
Mobile
FullEnrich
Gate1
Only verified records go out

Anything still unverified is held for the next cycle.

× Unverifiedheld, rechecked next week
Every send goes to a real person in the right seat
The stackHubSpotLinkedInApifyBounceBanZeroBounceTwilioClayApolloFindymailProspeoFullEnrichSmartlead
Oriel · GTM plays libraryOriel
Play 12Outbound · ABM

Contact Data Refresh Before Every Send

4 steps · Email, LinkedIn, Call, CRM

+6 more

All GTM plays

Work with us

Have us run this play

Tell us what you are trying to hit this quarter, and we will suggest where to start.

Oriel

Oriel runs the go-to-market work behind growing B2B tech teams.

Talk with an operator

Find your next pipeline opportunity.

Explore
Resources
Services
Get in touch
Founder of Oriel
Ashwanth SFounder
Book a call
Explore AI summary