Documentation

How LeadScan works

LeadScan fetches any company's public website, parses the HTML and HTTP headers, fingerprints the technology stack, reads growth signals, and produces a structured intelligence report — all in under 5 seconds. No API key, no account, no rate limits.

// What happens when you scan stripe.com
1.Fetch stripe.com (follows redirects, 10s timeout)
2.Parse HTML → detect 40+ tech fingerprints
3.Read page links → detect growth signals
4.Score across 4 dimensions → 0–100 conviction
5.Run Llama 3.3 AI summary + outreach (optional)
Return structured IntelReport JSON

Conviction Score

A single 0–100 number that reflects how strong of a sales target this company is. Four signals, each weighted differently.

Tech Modernity

25%

How modern and well-maintained their stack is. Points for React, Next.js, TypeScript, cloud-native infra. Deductions for jQuery, Flash-era tech, or missing HTTPS.

Growth Signals

35%

The heaviest weight. Hiring, changelog, blog, investors, and recent job posts all indicate active growth. A company scaling fast is more receptive to new tools.

Market Presence

20%

Presence of a pricing page, API docs, and developer portal indicates a product-led, commercially mature company.

Contactability

20%

Can you actually reach them? Presence of business emails, LinkedIn, Twitter, and GitHub links on their public site.


Tech Stack Detection

LeadScan scans the raw HTML, JavaScript bundle filenames, meta tags, and HTTP response headers for known technology fingerprints. No third-party APIs — it reads what's publicly visible in the browser.

Frontend

ReactVue.jsAngularSvelteNext.jsNuxt.jsRemixAstroHTMXAlpine.jsjQuery

Backend

Node.jsDjangoLaravelRailsFastAPISpringASP.NETPhoenixExpress

Infrastructure

AWSCloudflareVercelNetlifyGCPAzureFly.ioRailwayHeroku

Analytics

SegmentAmplitudeMixpanelHeapPostHogPlausibleGoogle AnalyticsHotjar

Marketing

HubSpotIntercomDriftMarketoSalesforceZendeskCrisp

Payments

StripePaddleChargebeeBraintreeSquare

Growth Signals

Six binary signals detected from the company's public site. Each one is weighted in the Growth Signals component of the conviction score.

💼

Actively hiring

Detects /careers, /jobs pages with open listings and recent postings.

💳

Has pricing page

Looks for /pricing or pricing-related anchors — signals commercial maturity.

📖

Has API / docs

Checks for /docs, /api, /developers, or developer portal links.

📝

Has a blog

Finds /blog, /news, /articles — signals active content marketing.

📋

Has a changelog

Looks for /changelog, /releases, /whats-new — signals shipping velocity.

💰

Funded / investors

Scans for investor logos, 'backed by', Series A/B/C mentions on the homepage.


CLI Reference

Install once, use anywhere. The leadscan CLI is published on npm and works with npx — no install needed.

$ npx leadscan analyze stripe.com

Full company report in the terminal.

$ npx leadscan analyze stripe.com --json

Output as JSON (pipe to jq, save to file, etc.).

$ npx leadscan outreach stripe.com

Generate AI cold email, LinkedIn message, and call opener.

$ npx leadscan batch domains.txt

Scan every domain in a text file (one per line), ranked by score.

Install globally

npm install -g leadscan

Then use leadscan analyze stripe.com directly from any terminal, no npx prefix needed.


API Reference

The web app exposes two JSON endpoints used internally. You can call them directly from scripts or other tools — no auth required.

POST/api/analyze

Scrape and score a company. Returns a full IntelReport.

Request body

{ "domain": "stripe.com", "ai": true }

Response

{
  "domain": "stripe.com",
  "convictionScore": 78,
  "summary": "Global payments infrastructure...",
  "scoreBreakdown": {
    "techModernity": 85,
    "growthSignals": 72,
    "marketPresence": 80,
    "contactability": 65
  },
  "techStack": { "frontend": ["React","Next.js"], ... },
  "signals": { "isHiring": true, "hasPricing": true, ... },
  "emails": ["support@stripe.com"],
  "socialLinks": { "twitter": "...", "linkedin": "..." }
}
POST/api/outreach

Generate AI outreach for a company.

Request body

{
  "domain": "stripe.com",
  "role": "Head of Engineering",
  "product": "observability tool"
}

Response

{
  "domain": "stripe.com",
  "email": { "subject": "...", "body": "..." },
  "linkedin": "...",
  "callOpener": "..."
}