Give the same ideal customer profile (ICP) to two analysts and you can get two completely different lists. “U.S. SaaS companies hiring salespeople” leaves open which companies count as SaaS, how recent the hiring needs to be, and who you want to contact. Ask your AI agent to turn those decisions into rules the client can approve before you pull records.
I’m a co-founder of GetLeads, the database used in this example. The workflow applies to other data sources too.
1. Turn the client brief into rules
Say your agency runs outbound for a sales training provider. The client wants U.S. B2B SaaS companies with 50–500 employees that are hiring sales staff. Define the company, the person, and what evidence gets a record onto the final list.
| Decision | Rule to approve |
|---|---|
| Company fit | U.S. headquarters, 50–500 employees, and software sold to businesses on a subscription basis. Confirm the business model on the company website when the database description is unclear. |
| Hiring signal | At least one open sales role posted in the last 90 days. Save the posting URL and date. If the source does not show an open role, mark hiring as unconfirmed. |
| Buyer | A current sales executive or leader who could own sales training: CRO, VP of Sales, Head of Sales, or Sales Director. Review ambiguous titles in context. |
| Delivery | One approved contact per company. Include company domain, role, evidence link and review date. Require a work email for the email campaign and exclude existing customers and prior opt-outs. |
That 90-day window and one-contact cap are example client choices. Ask the client to resolve anything the brief leaves open, including whether a U.S. office counts or only a U.S. headquarters. In GetLeads, size bands can overlap the requested range. A count of LinkedIn employee profiles is a different measure from company headcount. If the client treats the range as a hard cutoff, check a separate headcount source for borderline companies and hold any you cannot confirm.
Turn this brief into company rules, buyer rules, outreach requirements and exclusions. For each rule, tell me whether the data source can filter on it, whether you need separate evidence, and what you will do if that evidence is missing. Show me any choices the client still needs to make. Stop before pulling records.
2. Count and review the companies
Use get_available_columns and get_available_values to check the documented GetLeads fields and values. Keep agreed requirements, such as U.S. headquarters, separate from the several ways a company might appear in the data.
- Business model: Test relevant software industry tags and description terms such as “SaaS” or “cloud software” as alternative routes. Some of these searches will find agencies, resellers, or consumer products. Check a preview against the client’s definition.
- Hiring: Check the resulting domains for open sales postings, or start with
search_jobsif hiring is the most selective rule. Group matching posts by company. Run alternative job-title searches such as SDR, account executive and sales development representative separately where needed, then combine the domains. Check that each role is relevant and meets the date window. A missing posting does not prove the company is not hiring.
Use count_companies before search_companies. Count each plausible route, then count the combined company search rather than adding the counts together. Named filters intersect; a list of values for one filter can match any value in that list. For alternatives across searchable fields, use the documented where_sql predicate. If the routes run in different tools, join on the company domain and remove duplicate companies. The GetLeads search guide explains how to combine search routes, and the job posts guide covers hiring searches.
Review companies from each route, especially ones found by only one route. If many fail for the same reason, adjust that part of the search and count again. Save the approved domains, with the company and posting evidence, for the contact search.
3. Find and check the people at those companies
Pass the approved domains into count_contacts and then search_contacts. Group titles by responsibility: CRO and Chief Revenue Officer are variants of the same role; VP of Sales, VP Sales and Head of Sales describe a sales leadership group. Use a Sales Director as a separate candidate for review. Keep contact location separate from company headquarters, and leave it open if the client did not request a local buyer.
Look at role fit before applying email requirements. Count again with the work-email requirement to distinguish how many people match the role from how many have an address in the database. A title suggests responsibility; it does not prove buying authority. Check current employment and keep the strongest supported match at each company.
Review duplicates across searches and against the client’s records. Use the person’s LinkedIn profile URL where available; otherwise use a normalized work email or review name and employer together. If records disagree about the employer, resolve the conflict before merging. Enrich shortlisted contacts only where missing fields still matter. Document which values came from the database and which you independently confirmed.
Keep the stored email status. CATCH_ALL and UNKNOWN leave the individual mailbox unconfirmed. GetLeads recommends reverifying addresses before sending, even those marked VALID. Verification cannot guarantee delivery. Apply the client’s suppression lists and campaign exclusions before approving any row for outreach.
4. Deliver the approved rows with a decision trail
Save the brief, filters, source links and review date so the next person can see why each row was included. Keep three outcomes: approved for records that meet the rules, hold when evidence is missing or contradictory, and exclude when a rule fails. For example, a qualified sales leader with no confirmed work email belongs on hold for this email campaign.
For a reviewed shortlist, create a CSV from the approved rows. GetLeads’ export_contacts runs a search from its filters, so a bulk export still needs to be joined to your approved list and checked before delivery. Include only the agreed fields. Keep hold and exclusion decisions in a separate review file.
Before delivery, show the company count, contact count, and how many candidate rows were approved, held or excluded after deduplication. Give me the top reasons for holds and exclusions. Confirm one contact per approved domain and check that the final CSV has exactly the approved rows. Wait for my sign-off before using it in a campaign.
GetLeads counts are free. Search results, exports and standard enrichment use plan credits or draw on your fair-use allowance; see the billing and limits reference. Refresh the evidence before reusing the list, especially current roles, open job posts and email verification. Keep the date of each check separate from the export date.