Every email from a real company is researched and scored against who you sell to; the best leads reach you in Slack within minutes.

UsesClaudeGmailPerplexitySlack

Get a Slack alert when a high-value lead emails you

Whenever a new email arrives in your Gmail inbox, the AI works out who wrote it and which company they work for, from the signature and the sending domain rather than a free mailbox address. Newsletters, receipts and vendor pitches come back with no company, and mail from your own colleagues and replies in a conversation already under way are skipped, so no research is spent on them. For a real company, the web is researched for what it does, its size, funding, customers and recent changes, and the lead is scored from 1 to 10 against what you sell, weighing what the email asks for as heavily as the company's size.

A score at or above your bar becomes a Slack direct message naming the company, the score, the reason, what the research found and a link to the email. Lower scores are only noted in the run, and an answer from the AI that cannot be read scores zero, so a bad answer can never fire a false alert.

You need Gmail, Anthropic, Perplexity and Slack connected, and three things you are asked for when you add it: who gets the alerts (the Slack user ID), what you sell and to whom, and your own email domain so mail from colleagues is skipped.

GmailGmailWhen an email arrives. Save it as email.When an email arrives. Save it as email.
ValuesSet slackUserId to blank.Set slackUserId to blank.
ValuesSet whatWeSell to blank.Set whatWeSell to blank.
ValuesSet yourEmailDomain to blank.Set yourEmailDomain to blank.
ValuesSet vipThreshold to 7.Set vipThreshold to 7.
ValuesSet watchThreshold to 4.Set watchThreshold to 4.
Decisions & LoopsIf email.subject is empty and email.body is emptyIf email.subject is empty and email.body is empty
Yes
Decisions & LoopsFinish the run: The Gmail trigger fired with no readable message, so there is nothing to score. Nothing was sent.Finish the run: The Gmail trigger fired with no readable message, so there is nothing to score. Nothing was sent.
No
No steps
TextTrim email.from and save it as senderLine.Trim email.from and save it as senderLine.
TextExtract the first email address from senderLine and save it as senderEmail.Extract the first email address from senderLine and save it as senderEmail.
Decisions & LoopsIf email.thread_id isn't blank and email.email_id isn't blank and…If email.thread_id isn't blank and email.email_id isn't blank and…
Yes
Decisions & LoopsFinish the run: This email is a reply in a conversation that was already going, so it was not scored again - only the first email of a conversation is researched.Finish the run: This email is a reply in a conversation that was already going, so it was not scored again - only the first email of a conversation is researched.
No
No steps
TextReplace @ with in yourEmailDomain and save it as ownDomain.Replace @ with in yourEmailDomain and save it as ownDomain.
TextExtract the first domain from senderEmail and save it as senderDomain.Extract the first domain from senderEmail and save it as senderDomain.
Decisions & LoopsIf ownDomain isn't blank and senderDomain is ownDomain in lowercaseIf ownDomain isn't blank and senderDomain is ownDomain in lowercase
Yes
Decisions & LoopsFinish the run: Mail from a colleague at senderDomain is not scored, so nothing was researched or sent.Finish the run: Mail from a colleague at senderDomain is not scored, so nothing was researched or sent.
No
No steps
TextTrim email.subject and save it as subject.Trim email.subject and save it as subject.
TextShorten email.body to 4000 characters (keeping words whole) and save it as emailBody.Shorten email.body to 4000 characters (keeping words whole) and save it as emailBody.
ClaudeClaudeAsk Claude: 'You are reading one inbound email to work out who wrote it and which company they work for.Ask Claude: 'You are reading one inbound email to work out who wrote it and which company they work for. Reply with exactly one line, in this shape, using | as the separator: <company name> | <person's full name> | <company website domain> Rules: - Trust, in this order: the signature block, the sender's email domain, the body. - Ignore free mailbox domains (gmail.com, outlook.com, hotmail.com, yahoo.com, icloud.com, proton.me, aol.com). They name a mailbox provider, not an employer — read the signature instead. - Write UNKNOWN for any field the email does not tell you. Never guess a company from a first name, a job title, or the subject line alone. - If this is a newsletter, an automated notification, a receipt, a calendar invite, a vendor cold pitch or spam, reply with exactly: UNKNOWN | UNKNOWN | UNKNOWN - One line only. No preamble, no explanation, no markdown, no quotes. --- EMAIL --- FROM: senderLine SUBJECT: subject BODY: emailBody'. Save it as identity. Maximum response length: 100
ValuesSet identityLine to identity.response_text | | .Set identityLine to identity.response_text | | .
TextSplit identityLine by | and save it as identityParts.Split identityLine by | and save it as identityParts.
TextTrim identityParts[0] and save it as companyName.Trim identityParts[0] and save it as companyName.
TextTrim identityParts[1] and save it as contactName.Trim identityParts[1] and save it as contactName.
TextTrim identityParts[2] and save it as companyDomain.Trim identityParts[2] and save it as companyDomain.
Decisions & LoopsIf companyName is empty or companyName in uppercase is UNKNOWNIf companyName is empty or companyName in uppercase is UNKNOWN
Yes
ValuesShow in the output: No company could be identified from this email (senderLine), so it was not researched or scored. Newsletters, notifications and personal mail land here.Show in the output: No company could be identified from this email (senderLine), so it was not researched or scored. Newsletters, notifications and personal mail land here.
Decisions & LoopsFinish the run: Not an identifiable company — no research, no alert.Finish the run: Not an identifiable company — no research, no alert.
No
No steps
PerplexityPerplexityAsk Perplexity: 'Research this company and report what a B2B sales team needs to know before they reply to an inbound email from it.Ask Perplexity: 'Research this company and report what a B2B sales team needs to know before they reply to an inbound email from it. Company: companyName Website domain: companyDomain Cover each of these on its own line, and write unknown wherever the public record does not tell you — a gap is useful, a guess is not: - What they do, in one sentence - Approximate headcount, with the year of the figure - Annual revenue or latest funding round, with amounts and dates - Notable customers or logos - Industry and headquarters - Anything in the last 12 months that changes their ability to buy: funding, an acquisition, layoffs, a leadership change, expansion into a new market Prefer the company's own site, recent news and filings, and cite a source URL for every figure. Watch for name collisions: confirm the company you describe is the one at this domain. If you cannot find it at all, reply with exactly: COMPANY NOT FOUND'. Save it as research.
TextTrim research.response_text and save it as researchText.Trim research.response_text and save it as researchText.
ClaudeClaudeAsk Claude: 'You are qualifying one inbound lead for a sales team.Ask Claude: 'You are qualifying one inbound lead for a sales team. --- WHAT WE SELL, AND WHO WE SELL IT TO --- whatWeSell --- WHO GOT IN TOUCH --- contactName at companyName (companyDomain) From: senderLine Subject: subject Their message: emailBody --- WHAT PUBLIC RESEARCH SAYS ABOUT THE COMPANY --- researchText Score this lead from 1 to 10 on how much revenue it could be worth to us and how ready they look to buy. - 8-10: fits who we sell to on size and budget, AND the message shows real intent — they ask about pricing, a demo, a timeline, or name a project they are trying to solve. - 5-7: a plausible fit, but either the fit or the intent is unproven — a general enquiry, a company you could not size, an individual with no clear budget. - 1-4: not a lead. Out of who we sell to, no company found, a vendor pitching us, a recruiter, a job applicant, a student, a partnership blast, or a mass mailing. Weigh what the email actually asks for at least as heavily as the company's size: a large company sending a vague hello is not a VIP lead, and a small company with a funded, named project can be. Reply with exactly one line, the score first: <score> | <one sentence naming the single fact that decided it> The score must be a whole number from 1 to 10 and must be the first thing in your reply. No preamble, no markdown, no explanation beyond that one sentence.'. Save it as scoring. Maximum response length: 300
ValuesSet scoreLine to scoring.response_text | .Set scoreLine to scoring.response_text | .
TextSplit scoreLine by | and save it as scoreParts.Split scoreLine by | and save it as scoreParts.
ValuesSet leadScore to +the first number in scoreParts[0].Set leadScore to +the first number in scoreParts[0].
TextTrim scoreParts[1] and save it as scoreReason.Trim scoreParts[1] and save it as scoreReason.
Decisions & LoopsIf leadScore is greater than or equal to vipThresholdIf leadScore is greater than or equal to vipThreshold
Yes
ValuesSet alertText to 🚨 *VIP lead — companyName* · score leadScore/10Set alertText to 🚨 *VIP lead — companyName* · score leadScore/10 *Who:* contactName · senderEmail *Subject:* subject *Why it scored that:* scoreReason *What the research turned up:* researchText truncated to 1200 characters using … as the ellipsis (keeping words whole) *Open the thread:* https://mail.google.com/mail/u/0/#inbox/@email.thread_id.
SlackSlackSend a direct message to slackUserId. Save it as alert.Send a direct message to slackUserId. Save it as alert.alertText
ValuesShow in the output: VIP alert sent for companyName (scored leadScore/10).Show in the output: VIP alert sent for companyName (scored leadScore/10).
Else if @leadScore is greater than or equal to @watchThresh…
ValuesShow in the output: companyName scored leadScore/10 — below the VIP bar of vipThreshold, so no alert was sent. scoreReason Add a CRM step here to log the lead instead.Show in the output: companyName scored leadScore/10 — below the VIP bar of vipThreshold, so no alert was sent. scoreReason Add a CRM step here to log the lead instead.
Otherwise
ValuesShow in the output: companyName scored leadScore/10 — not a lead, so nothing was sent. scoreReason.Show in the output: companyName scored leadScore/10 — not a lead, so nothing was sent. scoreReason.