leadscan
v1.0.1
Published
AI-powered company intelligence from your terminal — tech stack, growth signals, and cold outreach in seconds
Maintainers
Readme
Scan any company in 5 seconds. Tech stack, growth signals, conviction score, AI outreach.
Install · Commands · AI Setup · Library API
Install
npm install -g leadscanOr run without installing:
npx leadscan analyze stripe.comCommands
analyze <domain>
Full intelligence report on any company — tech stack, growth signals, contact info, and a 0–100 conviction score. No API key needed.
leadscan analyze stripe.com
leadscan analyze linear.app --json > linear.jsonWith AI analysis (set GROQ_API_KEY — free key here):
GROQ_API_KEY=your_key leadscan analyze notion.soAdds: company summary, industry classification, target customer profile, and value proposition.
outreach <domain>
Generates a personalized cold email, LinkedIn message, and call opener for a specific role at the company.
leadscan outreach vercel.com --role "CTO" --product "CI/CD monitoring tool"
leadscan outreach hubspot.com --role "VP of Sales" --product "sales training platform"| Flag | Required | Description |
|---|---|---|
| -r, --role <role> | Yes | Who you're targeting |
| -p, --product <product> | Yes | What you're selling |
| --json | No | Output raw JSON |
Without GROQ_API_KEY: basic template with company details substituted in.
With GROQ_API_KEY: every message references specific things found about the company.
batch <file>
Process a list of domains from a plain text file. Ranks by conviction score. Supports JSON export.
# targets.txt
stripe.com
linear.app
vercel.com
notion.so
figma.comleadscan batch targets.txt --min-score 60 --output qualified.json| Flag | Default | Description |
|---|---|---|
| --min-score <n> | 0 | Only include companies above this score |
| --output <file> | — | Save results to JSON instead of printing |
| --ai | false | Use AI analysis for each company |
Conviction Score
Every company gets a 0–100 conviction score built from four weighted signals:
| Signal | Weight | What it measures | |---|---|---| | Tech modernity | 25% | Modern stack (React, Vercel, Stripe, PostHog) vs. legacy (WordPress, Bootstrap) | | Growth signals | 35% | Actively hiring, funded, has pricing page, has a blog | | Market presence | 20% | LinkedIn, Twitter, GitHub, Crunchbase presence | | Contactability | 20% | Emails on the page, LinkedIn, hiring pages |
Score guide: 75+ = strong target · 50–74 = worth a look · <50 = low priority
Tech Stack Detection
Detects 40+ technologies across 6 categories from homepage HTML and script sources. Zero external API calls.
| Category | Technologies detected | |---|---| | Frontend | React, Next.js, Vue, Svelte, Remix, Nuxt, Tailwind, Alpine.js | | Backend | Node.js, Django, Rails, Laravel, WordPress, Shopify, Webflow, Framer | | Analytics | Google Analytics, Segment, Mixpanel, Amplitude, PostHog, Heap, Hotjar, Plausible | | Marketing | HubSpot, Intercom, Drift, Zendesk, Mailchimp, ActiveCampaign, Customer.io | | Infrastructure | Vercel, Cloudflare, AWS, Google Cloud, Fastly, Netlify, Firebase | | Payments | Stripe, Paddle, Chargebee, Recurly, Braintree, PayPal, Square |
AI Setup (optional)
Get a free API key at console.groq.com — no credit card required.
export GROQ_API_KEY=your_key_here
leadscan analyze linear.appUses Llama 3.3 70B via Groq. The tool works fully without a key — AI adds company summary, industry detection, and personalized outreach generation.
Use as a library
leadscan also exports a typed API for use in your own projects:
import { scrapeCompany, buildIntelReport, analyzeCompany, generateOutreach } from "leadscan";
// Scrape + score
const data = await scrapeCompany("stripe.com");
const report = buildIntelReport(data);
console.log(report.convictionScore); // 75
console.log(report.techStack.frontend); // ["React", "Next.js"]
console.log(report.signals.isHiring); // true
console.log(report.emails); // ["[email protected]"]
// With AI (requires GROQ_API_KEY)
const ai = await analyzeCompany(data);
console.log(ai.industry); // "Fintech"
console.log(ai.targetCustomer); // "online businesses of all sizes"
// Generate outreach
const outreach = await generateOutreach(data, "Head of Engineering", "observability tool", ai);
console.log(outreach.email.subject); // personalized subject line
console.log(outreach.linkedin); // LinkedIn messageFull TypeScript types exported — see src/lib/types.ts for the complete interface.
Output formats
Every command supports --json for piping into other tools:
leadscan analyze stripe.com --json | jq '.convictionScore'
leadscan batch targets.txt --output results.json
cat results.json | jq 'sort_by(-.convictionScore) | .[0].domain'Contributing
PRs welcome. The project structure:
src/
cli.ts # Commander entry point
commands/
analyze.ts # analyze command
outreach.ts # outreach command
batch.ts # batch command
lib/
scraper.ts # HTML fetching + parsing (Cheerio)
scorer.ts # 4-signal conviction scoring model
ai.ts # Groq AI integration (company analysis + outreach)
display.ts # Terminal output (chalk + cli-table3)
types.ts # All TypeScript interfacesgit clone https://github.com/nadellasripad11/leadscan
cd leadscan
npm install
npm run build
node dist/cli.js analyze stripe.comLicense
MIT — Sripad Nadella
