Skip to content
← Processes

Find buyers engaging with competitors

Everyone who engages with a competitor's posts gets found, scored against your ICP, enriched, and staged for outreach with a human approving the list.

Apify→HubSpot→Lemlist→Slack
Starts
Weekly schedule
Steps
5
Checks and gates
0
A person decides
Never, runs alone

Trigger · Schedule

Weekly schedule

A weekly pass over the last fortnight of engagement, which is the window where it is still worth acting on.

Claude runs the rest autonomously

  1. 1

    AI lists who engaged with competitors.

    Apify

    Apify

    Everyone who reacted to or commented on a competitor's posts in the last fourteen days is listed once, with what they engaged with.

  2. 2

    AI keeps only likely buyers.

    HubSpot

    HubSpot

    The competitor's own staff, anyone already in your pipeline, and titles outside the function you sell to are removed.

  3. 3

    AI scores each person against your ICP.

    Company and person are scored separately, then combined, so a good company with the wrong contact stays visible as exactly that.

  4. 4

    AI finds emails for top scorers.

    Only people above the threshold get a work email looked up, and anyone with none found stays on the list, marked unreachable.

  5. 5

    AI drafts the campaign for approval.

    Lemlist

    Lemlist

    One opener per person, drawn from the post they engaged with, waits in a draft campaign, with a summary posted for a person to approve.

    Slack

    Slack

Watching a competitor's engagement is a job somebody does by hand for about a week. You open their page, scroll the reactions on the last few posts, copy the interesting names into a sheet, look up a handful of them, and then stop, because doing it properly means checking a few hundred profiles every week and the returns are invisible until you have done it for a month.

Both halves of the work already exist as data. Who engaged with a public post is public, and what a good account looks like is written down in your CRM as the shape of everything you closed. Joining and filtering the two is the rest of the job, and it is a job an AI agent can run every week.

What you get

A staged campaign built from people who already engaged with a competitor this week, each one scored against your ICP, enriched, and held for a human to approve before anything sends.

How AI finds leads in competitor engagement

Each weekly run pulls the reactions and comments on your competitors' posts from the last 14 days through Apify, on LinkedIn or on any network where that engagement is publicly readable. Two weeks is the window worth using: older engagement has gone cold, and a shorter window returns too little to rank.

The whole set is collected in one run, deduplicated, and kept with its context: which post, what kind of interaction, and the comment text where there is one. That context is what the opener is written from later.

Engagement on its own is a weak signal. A like is not intent, and treating it as intent is how this becomes spam. Everything after collection is filtering, hard enough that what survives is worth an email.

Filtering competitor engagement down to likely buyers

Three groups are removed first, in this order:

  • The competitor's own staff. Employees engage with their own company's posts constantly.
  • Your existing pipeline. Anyone already in HubSpot as an open opportunity or a customer, checked by email where there is one and by company domain otherwise.
  • The wrong function. A commenting engineer at a target account is not the buyer, though they may be worth keeping as a route in.

Everyone left is scored against your ICP on the axes you actually sell against: company size, sector, geography, and how close the title sits to the buying role. The company and the person are scored separately and then combined, so a perfect-fit company with the wrong contact shows up as exactly that instead of being averaged into the middle. Anyone under the threshold is dropped and counted, not queued.

What makes competitor engagement prospecting hold up

Enrichment runs after scoring, never before. A competitor post with decent reach returns a few hundred people, and enriching all of them buys you the discovery that most were students, employees and people in the wrong country. Scoring costs nothing, so the free filter goes first. On a typical week you pay for thirty lookups instead of four hundred. People above the threshold with no verified email stay on the list, marked unreachable, since a named person at a target account is still useful to whoever owns it.

Deduplicate by profile URL rather than by name. The same person reacting to three posts in a fortnight is one prospect, and their display name will not group them. Middle initials appear and disappear, job titles get appended, accents get stripped by whatever scraped them. The profile URL is the only identifier the platform itself treats as unique.

"I saw you commented on their post about warehouse routing" is a sentence with evidence behind it. Keep the engagement context attached to each person during collection and the opener writes itself from it. Strip it out and write the opener later, and you get "I see you're interested in logistics", which reads as generated because it is.

A draft campaign a person approves

Each person above the threshold gets one opener, grounded in the post they engaged with and what they said about it, loaded into Lemlist as a draft campaign. A summary goes to your team's channel in Slack: how many people were found, how many survived scoring, how many were enriched, and a sample of the openers. Nothing sends until a person approves it.

Each run reports the engagements collected, how many were dropped at each filter and why, how many were enriched, how many are unreachable, and the campaign's draft status.

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.

# Find buyers engaging with competitors

You have access to a scraping tool, a CRM, an outreach tool, and a
messaging tool. Run this for **[competitor company names]**.


## 1. List who engaged with competitors

Pull reactions and comments on the competitor's posts from the last 14
days. Two weeks is the window worth using: older engagement has gone
cold, and a shorter window returns too little to rank.

Collect the whole set in one run rather than post by post. Deduplicate
by profile URL, not by display name, because the same person shows up
under different name spellings across posts.

Keep the engagement itself alongside each person: which post, what
kind of interaction, and the comment text if there is one. That
context is what step 4 writes from, and losing it here means the
opener has nothing real to stand on.

## 2. Keep only likely buyers

Most engagement is not from prospects. Remove, in this order:

- Anyone whose current employer is the competitor. Employees engage
  with their own company's posts constantly.
- Anyone already in your CRM as an open opportunity or a customer.
  Check by email where you have one, by company domain otherwise.
- Anyone whose title does not sit in the function you sell to. A
  commenting engineer at a target account is not the buyer, though
  they may be worth keeping as a route in.

## 3. Score each person against your ICP

Score each remaining person on the axes you actually sell against:
company size, sector, geography, and how close their title is to the
buying role. Score the company and the person separately, then combine
them, so a perfect-fit company with the wrong contact is visible as
exactly that rather than averaged into the middle.

Anything below your threshold gets dropped and counted, not queued.

## 4. Find emails for top scorers only

Find a work email for the people above the threshold and nobody else.
Enrichment costs money per lookup, and running it before scoring is
the single most expensive mistake in this workflow: it prices the
entire engagement list rather than the fraction of it worth writing to.

Where no verified email comes back, keep the person on the list and
mark them unreachable rather than dropping them silently. A named
person with no email is still useful to whoever owns that account.

## 5. Draft the campaign and ask for approval

Write one opener per person, grounded in the specific post they
engaged with and what they said about it. Load them into the outreach
tool as a draft campaign, not a live one.

Post the summary to your team's channel: how many were found, how many
survived scoring, how many were enriched, and a sample of the openers.
Nothing sends until a person approves it.

## Output

Report: total engagements collected, how many were dropped at each
filter and why, how many were enriched successfully, how many are
unreachable, and the campaign's draft status.

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, "Find buyers engaging with competitors" 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 finding leads from competitor engagement

Yes, wherever that engagement is publicly readable. A scraper pointed at a competitor's posts returns whoever reacted or commented, and the agent filters that list to likely buyers, scores them against your ICP, and stages a draft campaign for a person to approve. The filtering, scoring and enrichment steps do not care which network the names came from.

Three filters before anyone is contacted. Competitor employees and existing pipeline are removed outright, everyone left is scored against your ICP with a hard threshold, and the campaign stages as a draft that a person has to approve. Engagement alone never triggers an email.

By scoring before enriching. Enrichment is billed per lookup, so scoring first means you only pay for the fraction of the list that passed your ICP threshold, which on a typical competitor's post is a small minority of the people who engaged.

No. They stay on the list and are marked unreachable. A named person at a target account is still worth handing to whoever owns that account, even when there is no address to write to.

Processes that share tools with this one. The shared tools are lit.

See Tulina in a 30-minute demo.

Book a demo