# 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]**.

## 0. Set up (skip if you're already connected)

If you don't already have live tool access for this, connect it
first. This prompt is only as real as the tools behind it:

1. Get a Tulina account: book a demo at https://tulina.ai/book.
2. Add Tulina's MCP server to your assistant: https://mcp.tulina.ai/mcp
3. In Tulina, connect your own API keys for the tools this
   prompt uses: social scraping, your CRM, your outreach tool, and your team's
   messaging tool.

Once connected, your assistant has real tool access and the rest of
this prompt runs as written.

## 0b. Already on Tulina? Three things around the run

An account and the MCP server are not the whole setup. Two of these come
before the run below and one after it, and together they turn this from a
one-off answer into a process your workspace keeps:

1. **Activate this process's connectors first.** Call
   `oto_connector(op="list")`, match it against the tools named in step 3
   above, and `oto_connector(op="select", name="...")` every one that
   isn't active yet. Selecting a connector does not mount its tools in the
   conversation you're already in — reach them through `oto_call` for this
   run, or open a fresh conversation once they're all on.
2. **Attach the work to an existing project.** `oto_project(op="list")`
   shows your active org's projects: pick the one this work belongs to
   rather than opening another, and keep its id. The project is where this
   process, the tables it writes to and the connectors it uses hang
   together.
3. **When the run is done, save it as a process — with its graph.** Write
   the body with `oto_procedure(op="set", ...)`, then attach it with
   `oto_project(op="link", project_id=..., target_type="procedure",
   target_ref="<your slug>")`. The body has to carry a drawing: read
   `oto_guide(op="read", slug="procedure-flowchart")` and follow it
   exactly — ONE untagged fenced block in that grammar, opening with the
   trigger and a quoted example of what you'd type to start a run. Tulina
   parses that drawing back into the graph it renders as the process's
   default view, which is what makes it come out in the same style as
   every other process in the app; a drawing the grammar can't read falls
   back to raw characters instead. Saving a process needs org-admin
   rights — without them, hand the finished body to someone who has them.

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

## 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.
