Skip to content
← Processes

Source and qualify leads

A target company gets searched across LinkedIn, ranked against your ICP, and the qualified shortlist lands in your CRM with email and mobile filled in.

Salesforce→LinkedIn→Dropcontact→Apollo.io→Kaspr→Lusha
Starts
Company selected by a rep
Steps
6
Checks and gates
0
A person decides
Never, runs alone

Trigger · Event

Company selected by a rep

A rep picks the company they want worked, and that company is the run's only input.

Salesforce

Claude runs the rest autonomously

  1. 1

    AI lists the company's senior people.

    LinkedIn

    LinkedIn

    You get everyone at the target company in the seniority band you're after, from every page of results, not the first screenful.

  2. 2

    AI shortlists people who fit your ICP.

    Each person is ranked on function, seniority and whether they still work there, and anyone outside your profile is set aside.

  3. 3

    AI finds each contact's email.

    Dropcontact

    Dropcontact

    Each qualified contact gets an email, with a second provider picking up whoever the first pass couldn't find.

    Apollo.io

    Apollo.io

  4. 4

    AI finds each contact's mobile.

    Kaspr

    Kaspr

    Each contact gets a mobile number the same way, with a second provider filling in whoever the first pass couldn't reach.

    Lusha

    Lusha

  5. 5

    AI spots contacts already in the CRM.

    Salesforce

    Salesforce

    Anyone already in your CRM is recognised by their profile link, so they get updated instead of duplicated.

  6. 6

    AI adds new contacts, updates the rest.

    Salesforce

    Salesforce

    New contacts land in your CRM flagged so a rep can tell they just arrived, and existing ones are updated instead.

Sourcing a target account by hand means a rep searching LinkedIn one page at a time, guessing which of thirty people with plausible titles are actually worth a look, then running each name through an enrichment tool one at a time before anything reaches the CRM. Every step is mechanical, and every step is also where the list goes stale or half-finished before it's used.

Both halves already exist as data. LinkedIn's graph holds who works where, and your ICP becomes a rule once it's written down. The work is search, score, enrich, write back, in that order, every time, which makes lead generation for a named account a good job for an AI agent that can reach LinkedIn, enrichment providers and Salesforce.

What you get

A ranked, ICP-qualified shortlist becomes Salesforce Contacts, deduplicated by LinkedIn profile, tagged as newly found, with email and mobile already filled in.

Finding the right people at one target company

A run starts from one company a rep picked. The agent resolves it to its exact corporate entity instead of the nearest name match, filtering on the domain when it is known. It discards entities with no indexed employees and pages that look like a subsidiary or showcase page, and it checks sub-organizations before giving up on a headquarters that returns nobody.

People are then searched at that entity within the seniority bands you sell into, economic buyers and decision-makers at the top, champions below, and every page of results is fetched, since the good candidates are often past the first screen. Two traps sit here. Some title filters are silently ignored, so the agent pulls the broader seniority set and checks titles itself against the functions you sell into. And every branch or store of a multi-location business shares the parent's domain, so people are filtered by the corporate entity's own ID, never by domain, or local staff flood the results.

Scoring leads against your ICP

Scoring against an ICP is where most of these pipelines quietly fail. A title-only filter looks precise, yet it misses the person whose title doesn't say "marketing" but whose role is, and it keeps the person who left the role six months ago and never updated their headline. Ranking on the fuller signal (function, seniority band, current tenure) is what keeps the shortlist honest instead of merely long.

The shortlist aims for a realistic split across buyer tiers instead of the largest possible headcount. If you sell to a head office, anyone at store, branch or franchise level is excluded however senior the title looks. Each person kept carries a one-line reason for the fit. When the run is unattended, with nobody reviewing the shortlist, borderline candidates are dropped.

Email and mobile, resolved in bulk

Email and phone are worth resolving in bulk: the whole batch to a primary provider in one call, then whoever it couldn't reach through a second. One lookup per contact costs an order of magnitude more calls for no better result. Email comes from Dropcontact and Apollo, mobile from Kaspr and Lusha, each pair run as a batch followed by a fallback for the residue.

The identifier matters as much as the batching. A phone lookup keyed on email alone has returned a completely unrelated person, wrong company and wrong number, even though it billed as a match. Anchoring the same lookup on LinkedIn profile plus name plus company resolved correctly every time it was checked against a CRM record already known to be right. Only the mobile field is written, never the office line, which this pipeline has no real value for.

Writing to Salesforce without duplicates

The last mile is dedup, and it has to run on something more stable than a name. Two different people share a name more often than a pipeline expects, and a married name or an accent is enough to break a naive match. Before creating anything, the agent queries Salesforce once for the whole batch by LinkedIn URL and splits it into contacts that already exist and contacts that are new. When Salesforce's own duplicate rule still blocks a create, usually because the existing record has no LinkedIn URL on file, that record is found by name and account, its LinkedIn URL is filled in, and it is treated as existing.

New contacts are created in bulk with a fixed set of fields (name, title, email, mobile, account, and the LinkedIn URL that serves as the dedup key next time) and flagged as newly found. Existing contacts get only the new email or phone, in one batched update, and their flag is never touched. That is what lets this run again next week against the same account without leaving duplicates behind, and lets a "newly found" flag mean what it says.

The prompt

The real prompt behind the steps above, detailed enough that an agent with the same tools can run it as written. The Run buttons copy the full version, which also carries the steps for connecting those tools.

# Source, qualify, and push contacts to Salesforce

You have access to a LinkedIn company/people search tool, email and
phone enrichment tools, and read/write access to Salesforce. Run this
for **[Company Name]**.


## 1. List the company's senior people

- Resolve [Company Name] to its exact corporate entity — not the
  nearest name match. If you know the domain, filter on that; avoid a
  generic "website" filter if your tool has one, it tends to return
  the whole database instead of the one company.
- Discard any candidate with zero indexed employees, or that looks
  like a subsidiary/showcase page rather than the real operating
  company. If the best headquarters-level entity returns nobody, check
  its sub-organizations before giving up.
- Search people at that entity filtered to the seniority bands you
  sell into (e.g. C-suite/VP/Director/Head for economic buyers and
  decision-makers, Manager/Senior for champions). Fetch **every page**
  of results — the good candidates are often past the first screen.
- If your tool's title filter is unreliable (some silently ignore it),
  don't trust it blind: pull the broader seniority-filtered set and
  filter titles yourself against a keyword list for the functions you
  sell into.
- Never filter people by domain for a multi-location business — every
  branch or store shares the parent's domain and floods the results
  with local staff. Filter by the corporate entity's own ID instead.

## 2. Shortlist people who fit your ICP

- Your ICP: **[fill in — target function, seniority band, company
  profile]**.
- If you sell to a corporate/HQ buying center, exclude anyone at
  store, branch, or franchise level, even if their title looks senior.
- Sanity-check tenure: drop anyone whose headline shows a different
  current employer than the target company.
- Aim for a realistic split across buyer tiers (e.g. 1-2 economic
  buyers, 3-4 decision-makers, 4-5 champions) rather than maximizing
  headcount.
- Record a one-line reason per person for why they fit — you'll want
  it on the record later, and so will the rep who opens it.
- If this is running unattended, with no one to review the shortlist,
  be conservative: anything borderline gets dropped, not kept.

## 3. Find each contact's email

- Submit the **entire qualified batch in one call** to your primary
  email-enrichment tool — most batch 100-250 contacts per call, check
  yours. Never loop this one contact at a time; it costs an order of
  magnitude more calls for the same result.
- For anyone the first pass couldn't resolve, run a second batched
  pass through a fallback provider.

## 4. Find each contact's mobile

- Same discipline as email: submit the whole batch to your primary
  phone-enrichment tool in bulk.
- Identify each contact by **LinkedIn URL + name + company** — never
  by email alone. A bare-email lookup has been known to return a
  completely unrelated person at a different company, even though it
  billed as a match.
- Fall back to a second, single-lookup provider only for the residual
  contacts the bulk pass couldn't resolve.

## 5. Spot contacts already in the CRM

- Before creating anything, query Salesforce **once** for every
  contact in the batch by LinkedIn URL — a single
  `WHERE LinkedIn_URL IN (...)`-style query covers the whole batch,
  never one query per contact.
- Split the batch into contacts that already exist (capture their Id)
  and contacts that are genuinely new.
- If Salesforce's own fuzzy duplicate rule still blocks a create (this
  happens when an existing record has no LinkedIn URL on file), look
  that record up by name + account, back-fill its LinkedIn URL, and
  treat it as "already exists" instead of fighting the duplicate rule.

## 6. Add new contacts, update the rest

- Bulk-create every genuinely new contact in one call (chunk at ~200
  if your tool caps batch size). Write only: first/last name, title,
  email, **mobile phone** (never the office/landline field — it's a
  different field and this pipeline never has a real value for it),
  the account, and the LinkedIn URL itself, since it's your dedup key
  for next time.
- Flag newly created records only (e.g. a status or source field set
  to something like "Newly found") — never touch that flag on a
  contact that already existed.
- Bulk-update the contacts that already existed with whatever new
  email/phone you resolved, in one batched call, not one per contact.
- Never write outside this explicit field list — no internal
  scoring/tier fields, no guessed mappings.

## Output

Report: how many contacts found, how many net-new vs. updated, how
many got email, how many got phone, and anyone dropped along the way
and why.

Why run it with Tulina

A prompt helps one person. A process moves a team.

Pasted into a chat, the prompt above works once, for whoever pasted it. In Tulina, "Source and qualify leads" becomes a process the team shares, that keeps its history, runs on its own, and stays inside the same security perimeter as the tools it calls.

  • The whole team works on the same one

    PersonalTeamOrganisation

    A process lives where it belongs: yours, your team's or the whole organisation's. Whoever runs it can improve it, and everyone starts from the best version instead of explaining the job again.

  • Every edit is a version

    v1v2v3

    Each change is a new version with the previous one kept, so a bad edit is undone by restoring an earlier one. Every run records the version it followed, and what a run teaches goes back into the process.

  • It runs without you

    schedulewebhookon demand

    A hosted agent runs the process on Tulina's own infrastructure, on a schedule or when an event arrives, and keeps going when you close the chat. Nothing to host. Every run is tracked to its outcome.

  • Inside the same security perimeter

    vaultrolesrun log

    Credentials stay in the vault, never in the prompt. Roles decide who may run what, every call is logged, and a step a person has to approve waits for that person.

Questions about AI lead generation for Salesforce

Yes — an agent with access to LinkedIn, a CRM, and enrichment tools can search a target company for the right people, score them against your ICP, and hand over a ranked shortlist with contact details already resolved.

By checking the fuller signal, not just a title match — function, seniority band, and current tenure. A title-only filter misses the person whose title doesn't literally say "marketing" but whose role is, and keeps someone who left the role months ago.

Yes, through an enrichment waterfall — a whole batch goes to a primary provider in one call, and whoever it can't reach goes to a second. The reliable version anchors the lookup on LinkedIn profile plus name and company, not email alone.

Not if it checks first — matching every candidate against the CRM by a stable identifier like LinkedIn profile URL before creating anything, since two people can share a name but never a profile URL.

Other processes that run mainly on Salesforce. The tools they share with this one are lit.

See Tulina in a 30-minute demo.

Book a demo