---
ref: workflow:community-buyer-threads
title: Find Reddit and HN threads where buyers ask for a tool
author: thedogwiththedataonit
tools: [tool:exa/search-web, tool:typesafe/answer-typed-questions, tool:slack/post-message]
tags: [capability:classify-signals, capability:route-alerts, capability:search-web, channel:chat, has:api, motion:outbound]
updated: 2026-09-29
---

# Find Reddit and HN threads where buyers ask for a tool

Searches Reddit and Hacker News with Exa, keeps the posts where someone is shopping for your category with Jev, and sends them to Slack.

Set up the tools below, then run the steps in order for the user, carrying each step's results into the next. The run is done when the user has the outcome below.

## Outcome

- A table of every post found, with whether its author is shopping, what kind of post it is, the competitor it names and Jev's probability.
- A Slack post for each thread worth answering, with its link and a drafted reply for a person to post, and the unsure threads in one list.

## Inputs

Ask the user for these before you start.

- `category`: what you sell, in the words buyers use, e.g. cold email software
- `keywords`: searches that find candidate posts, e.g. cold email tool recommendation; alternative to Instantly; best tool for sending cold email
- `competitors`: the tools posts might name, e.g. Instantly, Smartlead, lemlist
- `lookback_days`: how recent a post counts, e.g. 7
- `min_confidence`: how sure Jev must be before its answer is used without you, e.g. 0.8; a yes-or-no answer counts as yes at or above it and as no at or below 1 minus it
- `disclosure`: who is replying and their tie to your product, said in every reply, e.g. I'm Sam, and I work on Acme Mail
- `product_facts`: what a reply may say about your product and the tools around it, e.g. prices, limits and the alternatives you'd point people to
- `alerts_channel`: the Slack channel the threads go to, e.g. #community-leads

## Set up

### Search the web (Exa, tool:exa/search-web)

Use the first option your agent supports.

Note: On MCP, domain, date and category filters need `web_search_advanced_exa`: list it in the server URL's `tools` parameter with every other tool you want, since the list replaces the defaults.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "exa": { "url": "https://mcp.exa.ai/mcp?login" } } }
```

Call the MCP tool `web_search_exa`.

#### API (official)

- Base URL: https://api.exa.ai
- Endpoint: `POST /search`
- Auth: send the header `Authorization: Bearer $EXA_API_KEY`
- Get a key: https://dashboard.exa.ai/api-keys

### Answer typed questions (TypeSafe AI, tool:typesafe/answer-typed-questions)

Use the API.

- Base URL: https://api.typesafe.ai
- Endpoint: `POST /v1/systemone`
- Auth: send the header `Authorization: Bearer $TYPESAFE_API_KEY`
- Get a key: https://console.typesafe.ai

Note: Put every question about one record in one request. `GET /v1/models` lists the models and is the cheapest check of a key; a request over the rate limit gets a 429 with a Retry-After header.

Note: Send `state`, `model` (`jev-latest`) and named `questions`, each with `type`, `instructions` and `criteria`: a choice maps labels to descriptions, a score lists its levels in order, a noul's is optional. Read a score by its most likely level; send unsure answers to a person.

### Post a message (Slack, tool:slack/post-message)

Use the first option your agent supports.

Note: Needs the `chat:write` scope. Over MCP it posts as the signed-in user; the API and CLI post as the app's bot.

#### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "slack": { "url": "https://mcp.slack.com/mcp" } } }
```

Call the MCP tool `slack_send_message`.

#### CLI (official)

Install the command, then confirm it runs.

```sh
curl -fsSL https://downloads.slack-edge.com/slack-cli/install.sh | bash
slack --version
```

Run `slack api chat.postMessage`.

Set `$SLACK_BOT_TOKEN` in your environment first (get a key: https://api.slack.com/apps).

Before step 1, confirm access to each service with its cheapest read-only call, like a list or a search. Never send or change anything to test access.

## Steps

1. **Find candidate posts** with Search the web (Exa). Search each of `keywords` on reddit.com and news.ycombinator.com, published in the last `lookback_days`, with each page's text. Keep each post's URL, title, text and date; drop duplicates.
2. **Keep the shoppers** with Answer typed questions (TypeSafe AI). Send each post's title and text as the state, with a noul `shopping` (true: the author is choosing or replacing a tool for `category`; false: using one happily, sharing news, promoting their own product or hiring), a choice `kind` of recommendation_request, competitor_complaint, comparison, pain_point, question and other, and a choice `competitor` over `competitors` plus none. Keep the posts whose `shopping` is yes, with their kind and competitor, and list the unsure ones apart.
3. **Draft the replies** yourself. For each kept post, draft a reply that answers what the author asked in their own terms, includes `disclosure`, and names alternatives where they fit better, using only `product_facts` and the thread and leaving a [fill in] where a draft needs anything else. No links unless the thread asks for them. Show the drafts to the user.
4. **Send them to the team** with Post a message (Slack). Post each kept thread to `alerts_channel` with its link, kind, competitor, the `shopping` probability and the drafted reply, most likely shoppers first, then the unsure threads in one message.

## Notes

A person posts every reply, from their own account, after reading the thread and the community's rules on self-promotion; write it to help the author, not to pitch. The keyword search in step 1 can stay broad, because Jev reads every match and keeps only the shoppers.

Run it daily with `lookback_days` set to 1.

## Rules

- Use only the services set up above. The read-only calls they need, like listing ids or polling for results, are fine.
- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
