GTM Playbooks
OutboundAdvanced

Build Prospect Lists from Plain-English Requests in Slack

The problem

Reps and marketers wait days for RevOps to build a prospect list, or pull their own from Apollo with inconsistent filters, no CRM dedupe, and no check on how many credits the pull will burn.

Implementation steps

  1. 1

    Create a #list-requests channel with a pinned request format (who, where, company size, signal, titles, how many), and have a Zapier or Make scenario trigger on new top-level messages there and pass the text, requester, and message timestamp to the next step

  2. 2

    Parse the request with an AI step into a fixed JSON filter set: industries, keywords, hq_countries, employee_min, employee_max, latest_funding (round or amount), hiring_titles, technologies, target_titles, seniority, max_contacts, and unmapped_terms; reply in the thread with the filters as understood and list any term it could not map instead of guessing

  3. 3

    Estimate before spending: get the number of matching companies from the search, apply the max rows cap you set for the channel, multiply by the per-row credits you measured from Clay's run estimate on a 10-row test of your enrichment and email columns, and post "N companies match, capped at X contacts, about Y credits" in the thread

  4. 4

    Require approval: below your credit threshold the requester confirms in the thread; above it, or past the monthly budget, a named approver such as the RevOps lead must approve in the thread, and nothing is pulled without a confirmation

  5. 5

    Source and enrich in a Clay table: Find Companies with the industry, headcount, location, keyword, and technographic filters, or Apollo's search with its job postings and funding filters for hiring and funding signals, using Find Companies' exclude companies option with your customer and open-opportunity domains; then find people by target title, cap contacts per company, and run a work email waterfall with validation only on rows inside the cap

  6. 6

    Dedupe against the CRM and active sequences by normalized email and domain: drop do-not-contact records and contacts already in an Instantly or Smartlead campaign, and flag accounts with an owner or an open opportunity instead of dropping them so the requester sees who to ask

  7. 7

    Reply in the thread with the result: accounts found, contacts with a valid email, rows removed (customers, open opportunities, already sequenced, invalid email), credits used against the estimate, and a link to the Clay table view or a CSV; the agent never enrolls anyone, so the requester reviews the list and adds it to a sequence

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

Slack intake (#list-requests, Zapier or Make on new top-level messages):
Request: "Series B fintechs in the US hiring RevOps, 200 to 1000 employees, VP Sales and Head of RevOps, 150 contacts"

AI parse to JSON:
{ industries, keywords, hq_countries, employee_min, employee_max, latest_funding,
  hiring_titles, technologies, target_titles, seniority, max_contacts, unmapped_terms }
Thread reply: "Filters: {{filters}}. Could not map: {{unmapped_terms}}. Reply 'confirm' or correct me."

Estimate and approval:
- Matches: company count from the search
- Cap: min(max_contacts, {{channel_cap}})
- Credits: cap x {{credits_per_row}} (from Clay's estimate on a 10-row test)
- Thread: "{{matches}} companies match, capped at {{cap}} contacts, about {{credits}} credits"
- Over {{approval_threshold}} credits or monthly budget: approver must confirm

Clay Table: Accounts
- Company Name | Domain (normalized) | Industry | Employee Count | HQ Country | Latest Funding | Hiring Signal (Apollo job postings) | CRM Status (customer, open opp, owner) | Keep (formula)
- Source: Find Companies (filters + exclude companies = customers and open opps) or Apollo search

Clay Table: Contacts
- Full Name | Title | LinkedIn URL | Row Number | Work Email (waterfall, Only run if Keep AND Row Number <= cap) | Email Valid | In CRM | In Sequencer | Final (formula)

Thread result:
"{{accounts}} accounts, {{valid_contacts}} contacts with valid emails. Removed: {{customers}} customers, {{open_opps}} open opps, {{sequenced}} already sequenced, {{invalid}} invalid. Credits: {{used}} of {{estimate}} estimated. List: {{clay_view_or_csv_link}}"
Output: self-serve prospect lists with consistent filters, CRM and sequence dedupe, and a credit check before every pull

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you