log in sign up now
Find Decision Makers and Contact Information from Company Names back to library
~ / library / Prospecting / find-decision-makers-and-contact-information-from-company-names

Find Decision Makers and Contact Information from Company Names

Finds senior decision-makers (Director, VP, Head, C Suite, Owner, Partner) and their emails for a list of companies using MoltSets, filtered by deliverability risk score (A/B/C/D/F). Works for any CSV of company names + domains, not just exhibitor lists. Handles messy real-world data like name collisions, missing domains, and emails that aren't indexed under the obvious search.
  • find people at these companies
  • get me contacts for this exhibitor list
  • senior execs at each of these companies

What this skill does

Turns a raw list of companies (name + domain, typically from an event exhibitor list) into a table of senior contacts with verified, risk-scored email addresses. Built from hard-won trial and error against messy small-business data — most companies on a list like this are NOT well-indexed, and the naive approach (search_people with a company_domain filter, stop after 2 hits) misses the majority of real, findable emails.

Chain

CSV of company name + domain
  to search_people            (free-text query first, then exact company name for the fuller roster)
  to linkedin_to_best_email / search_business_email_by_name   (chase an email per qualifying person)
  to reverse_linkedin_lookup  (confirm an email genuinely doesn't exist)
  to reverse_email_lookup     (pattern-guess common conventions, batched)
  each email checked against acceptable risk score (A/B/C/D/F) before it counts toward the target

Inputs

  • Company list — name + domain per row (exhibitor list, prospect list, account list)
  • Target seniorities — default: Director, VP, Head, C Suite, Owner, Partner
  • Emails per company — asked up front, never silently defaulted
  • Acceptable risk scores — asked up front; recommended default is A, B, C, F (D excluded, since D means a confirmed bounce, complaint, or spam trap)
  • LinkedIn-only fallback — whether to fill the count with LinkedIn-only rows when an acceptable-score email comes up short

When it activates

  • "find people at these companies"
  • "get me contacts for this exhibitor list"
  • "senior execs at each of these companies"
  • A CSV with company name/website columns uploaded alongside a request for contacts

Output

A CSV: row, company, domain, contact_name, title, seniority, email, email_type, risk_score, verification_status, linkedin_url, notes. Every match is tagged VERIFIED / INFERRED / UNVERIFIED / NOT FOUND so rows are safe to act on — LinkedIn-only fills, stale addresses, and out-of-range risk scores are flagged, not silently mixed in.

Search filters

search_people filters on query, company, company_domain, country, state, city, seniority, department or functional_area, industry, linkedin_industry, naics_code, employee_range, and revenue_range.

  • Filters are free precision - execution cost comes from the free-text query, so a filters-only search runs ~40x cheaper and lands more precisely. A bare query is never the right shape; at minimum it gets country attached (~99% fill rate).
  • Size and revenue apply to the person's current employer - "VPs at 51-200 employee software companies" is one call, not a company search followed by a people search.
  • Three industry vocabularies - broad industry buckets, LinkedIn's ~150 niche labels, or a NAICS code at any depth. Shortening the code widens the net.
  • Sparse filters are the usual cause of a thin result set - seniority/industry/department are ~60% filled and naics_code/linkedin_industry ~50%, and every filter is exact-match, silently dropping records where the field is empty.
  • Sizing is free - count_only: true returns a match count without fetching data or charging tokens, and every response carries results.total to read before paginating.

Tips

  • Free-text query beats the exact company and company_domain filters on messy small-business data — company is an analysed match, so every word you pass must appear in the stored name, and one extra word zeroes the result. Start with query (plus country — never bare), then use the exact stored name to pull the fuller roster. This is the one workflow where a query-led search is right; everywhere else, filters first
  • Chase order per person: email in the search result → linkedin_to_best_emailsearch_business_email_by_namereverse_linkedin_lookup → pattern-guessing, checking each result's risk score as it surfaces and moving on if it's outside the acceptable set
  • Pattern-guess a standard 6-convention set through reverse_email_lookup (batched, up to 100 per call, no token cost on misses) before giving up — it finds real emails the forward tools miss
  • Calibrate on a ~20-row batch first; expect roughly half to two-thirds of small/local exhibitors to yield usable contacts
01 Download the .moltsets skill file below
02 Open Claude and go to Settings to Skills
03 Click Add skill and select the downloaded file
04 Open a new chat in Claude
05 Prompt Claude using one of the example prompts or use your own
// difficultyIntermediate
// connectionCSV, Excel, Google Sheets
// got a skill of your own? Submit it to the library