npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@buzzlead/campaign-builder

v0.1.0

Published

Drop your URL and a CSV of prospects. Get a research brief + 2 personalized cold emails for each. Free BYOL (bring-your-own-list) CLI from BuzzLead.

Readme

Campaign Builder

Drop your URL and a CSV of prospects. Get a research brief + 2 personalized cold emails for each. BYOL — bring your own list. Free CLI from BuzzLead.

npm version license

The same engine that powers the free web tool — but you can throw an unlimited prospect list at it from your terminal.

npx @buzzlead/campaign-builder \
  --my-site mycompany.com \
  --input prospects.csv \
  --out campaign.csv

For each row in your CSV, you get back:

  • A short research brief (what they do, growth signal, main challenge, best angle)
  • Email 1 — 4T framework, under 70 words
  • Email 2 — tight problem-frame follow-up, under 90 words

No DiscoLike, no AI Ark, no contact lookup. You already have the list. This is the tool that turns your list into copy.


What it does

For each prospect in your input list:

  1. Crawl their website via Jina Reader
  2. Build a research brief — Claude extracts what they do, their growth signals, their likely main challenge, and the best cold-outreach angle
  3. Write Email 1 — 4T framework (Trigger / Think / Bridge / Talk), peer-to-peer voice, under 70 words
  4. Write Email 2 — problem-frame + mechanism + soft CTA, under 90 words, different angle from Email 1

Combined with a one-time analysis of your own site (the sender context), every email is personalized to the prospect's actual business.


Input format

Prospect list as CSV or JSON. Required columns/keys:

| Column | Required | Notes | |---|---|---| | first_name | ✓ | | | last_name | | Optional but recommended | | email | | Carried through to output unchanged | | job_title | ✓ | E.g. "VP Sales", "Head of Operations" | | company | ✓ | Display name | | website_url | ✓ | The site we crawl for research | | linkedin_url | | Carried through |

CSV example:

first_name,last_name,email,job_title,company,website_url,linkedin_url
Jane,Smith,[email protected],VP Sales,Initech,https://initech.com,https://linkedin.com/in/jane
John,Doe,[email protected],Head of Growth,Umbrella Corp,https://umbrella.io,

JSON example:

[
  { "firstName": "Jane", "lastName": "Smith", "jobTitle": "VP Sales", "company": "Initech", "websiteUrl": "https://initech.com" }
]

Header aliases are accepted: firstname / first_name / First Name, title / role / job_title, website / url / domain / website_url, etc.


Install

# One-shot via npx
npx @buzzlead/campaign-builder --my-site mycompany.com --input prospects.csv

# Or install globally
npm install -g @buzzlead/campaign-builder
campaign --my-site mycompany.com --input prospects.csv

# Or as a library
import { runCampaign } from "@buzzlead/campaign-builder";
const result = await runCampaign({
  mySiteUrl: "mycompany.com",
  prospects: [/* ProspectInput[] */],
});

API keys

Just one required.

| Key | Why | Where | |---|---|---| | ANTHROPIC_API_KEY | Site analysis + research + email generation | https://console.anthropic.com |

Optional:

  • JINA_API_KEY — faster site scraping (anonymous works)

Cost per run

Approximate, at 10 prospects:

| Provider | Calls | ~Cost | |---|---|---| | Anthropic | 1 (your site) + 3 × 10 (per prospect) = 31 calls | $0.20–0.50 | | Jina | 11 scrapes | ~$0.01 | | Total | | ~$0.20–0.50 |

Scales linearly. For 100 prospects: ~$2–5.


CLI usage

Usage: campaign [options]

Required:
  -m, --my-site <url>        Your company URL (sender context)
  -i, --input <path>         Path to prospect CSV or JSON

Optional:
  -o, --out <path>           Output CSV path. Default: ./campaign.csv
      --silent               Suppress progress output
      --json                 Print full result as JSON to stdout

Examples

Standard run from CSV:

campaign --my-site mycompany.com --input prospects.csv

From JSON, pipe to JSON output:

campaign --my-site mycompany.com --input prospects.json --json > result.json

CSV output

Columns:

first_name, last_name, email, job_title, company, website_url, linkedin_url,
research_summary, email_1, email_2, skipped, skip_reason

Every text field is double-quoted. Newlines inside cells are escaped as \n. Skipped rows include the reason so you can audit.


How it differs from the web tool

| | Web tool | CLI | |---|---|---| | Prospect cap | 10 | Unlimited (your wallet's the limit) | | Lead gate | Required | None | | Auth | Shared keys | Your keys | | Input | Manual table entry | CSV or JSON file | | Library API | No | Yes |


Library API

import {
  runCampaign,                    // end-to-end pipeline
  scrapeWebsite,                   // step 1 helper
  consolidateCompanyProfile,       // your-site analysis
  consolidateProspectProfile,      // per-prospect research brief
  generateEmail1,                  // 4T framework
  generateEmail2,                  // problem-frame follow-up
  buildCsv,                        // CSV output
  parseProspectsCsv,               // input parsers
  parseProspectsJson,
} from "@buzzlead/campaign-builder";

Want this run continuously, on auto-pilot?

Campaign Builder turns your existing list into copy. BuzzLead the agency runs the whole motion: sourcing new lists, sending the campaigns, handling replies, booking meetings. 10M+ cold emails sent. $8M+ in client revenue.

If you want the version with humans behind it, talk to us at buzzlead.io.


License

MIT. Use it however you want.