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

overloop-cli

v1.3.0

Published

Overloop CLI - Command line interface for the Overloop sales automation API v2. Manage prospects, campaigns, sourcings, and more from the terminal or AI agents.

Readme

Overloop CLI

npm version License: MIT

⚠️ Beta Notice: This CLI is currently in beta. APIs and tool interfaces may change between versions. Please report any issues on GitHub.

Sales automation CLI for developers and AI agents — Manage prospects, campaigns, sourcings, and more from the terminal.

The Overloop CLI provides a command-line interface to the Overloop API v2, enabling developers and AI agents to automate sales outreach workflows programmatically.


Installation

npm install -g overloop-cli

For AI Agents

Install the Overloop skill for your AI agent (Cursor, Claude Code, etc.):

npx skills add sortlist/overloop-cli

This installs the SKILL.md which gives your agent full knowledge of the CLI commands, patterns, and workflows.


Authentication

The recommended way to authenticate is the interactive login command:

overloop login

This prompts for your API key (get it from Settings > API Keys in your Overloop dashboard), validates it, and saves it to ~/.overloop/config.json.

Alternatively, set the OVERLOOP_API_KEY environment variable (takes priority over saved config):

export OVERLOOP_API_KEY=your_api_key

To remove saved credentials:

overloop logout

Commands

Prospects

overloop prospects:list [--page N] [--per-page N] [--sort field] [--search text] [--filter '{"key":"value"}'] [--expand relations]
overloop prospects:get <id>                  # ID or email address
overloop prospects:create --email [email protected] --first-name John --last-name Doe
overloop prospects:create --data '{"email":"[email protected]","first_name":"John"}'
overloop prospects:update <id> --first-name Jane
overloop prospects:delete <id>

Organizations

overloop organizations:list [--search text] [--filter '{"country":"US"}']
overloop organizations:get <id>
overloop organizations:create --name "Acme Corp" --website https://acme.com
overloop organizations:update <id> --name "New Name"
overloop organizations:delete <id>

Lists

overloop lists:list [--search text]
overloop lists:get <id>
overloop lists:create --name "Hot Leads"
overloop lists:update <id> --name "Warm Leads"
overloop lists:delete <id>

Campaigns

overloop campaigns:list [--filter '{"status":"on"}']
overloop campaigns:get <id> [--expand steps,sourcing]
overloop campaigns:create --name "Q1 Outreach" --timezone "Etc/UTC"
overloop campaigns:create --name "Q1" --auto-enroll --sourcing-id <id>   # auto-enroll sourced prospects
overloop campaigns:create --data '{"name":"Q1 Outreach","steps":[{"type":"delay","config":{"days_delay":5}}]}'
overloop campaigns:update <id> --status on
overloop campaigns:update <id> --auto-enroll       # enable auto-enrollment
overloop campaigns:update <id> --no-auto-enroll    # switch back to manual
overloop campaigns:delete <id>

Campaign Steps (require --campaign)

Important: When creating steps individually, you must chain each step to the previous one using --previous-step-id. Without chaining, steps will not appear in the Overloop UI. The recommended approach is to use inline steps with campaigns:create --data '{"steps":[...]}'.

overloop steps:list --campaign <id>
overloop steps:get <step_id> --campaign <id>

# Preferred: inline steps in campaigns:create (chaining is automatic)
overloop campaigns:create --data '{"name":"My Campaign","steps":[{"type":"delay","config":{"days_delay":1}},{"type":"email","config":{"generate_with_ai":true}}]}'

# Individual creation — must chain with --previous-step-id
STEP1=$(overloop steps:create --campaign <id> --type delay --config '{"days_delay":1}' | jq -r '.data.id')
overloop steps:create --campaign <id> --type email --config '{"generate_with_ai":true}' --previous-step-id $STEP1

overloop steps:update <step_id> --campaign <id> --config '{"subject":"Updated"}'
overloop steps:delete <step_id> --campaign <id>

Campaign Enrollments (require --campaign)

overloop enrollments:list --campaign <id>
overloop enrollments:get <enrollment_id> --campaign <id>
overloop enrollments:create --campaign <id> --prospect <prospect_id>
overloop enrollments:create --campaign <id> --prospect <prospect_id> --reenroll
overloop enrollments:bulk --campaign <id> --prospects "id1,id2,id3"     # bulk enroll up to 100
overloop enrollments:delete <enrollment_id> --campaign <id>

Step Types

overloop step-types:list     # List all available step types for building campaigns

Sourcings

overloop sourcings:list
overloop sourcings:get <id>
overloop sourcings:create --name "Sales in Belgium" --search-criteria '{"keywords":"sales","locations":["Belgium"]}'
overloop sourcings:update <id> --name "Updated Name"
overloop sourcings:delete <id>
overloop sourcings:start <id>
overloop sourcings:pause <id>
overloop sourcings:clone <id>
overloop sourcings:estimate --search-criteria '{"job_titles":["CEO"]}'   # Preview match count
overloop sourcings:search-options                          # Get all available search criteria
overloop sourcings:search-options --field locations --q "Bel"   # Search specific field options

Conversations

overloop conversations:list [--archived]
overloop conversations:get <id>
overloop conversations:update <id> --name "New Subject"
overloop conversations:archive <id>
overloop conversations:unarchive <id>
overloop conversations:assign <id> --owner <user_id>

Account & Users

overloop account:get          # Get account information
overloop me                   # Get current authenticated user
overloop users:list
overloop users:get <id>

Custom Fields

overloop custom-fields:list                 # List all custom fields
overloop custom-fields:list --type prospects # Filter by type

Sending Addresses

overloop sending-addresses:list

Exclusion List

overloop exclusion-list:list [--search text]
overloop exclusion-list:create --value [email protected] --item-type email
overloop exclusion-list:create --value baddomain.com --item-type domain
overloop exclusion-list:delete <id>

All Output is JSON

Every command outputs JSON for easy parsing with jq or consumption by AI agents:

# Get all prospect emails
overloop prospects:list --per-page 100 | jq '.data[] | .email'

# Get active campaign names
overloop campaigns:list --filter '{"status":"on"}' | jq '.data[] | .name'

# Count total prospects
overloop prospects:list | jq '.pagination.total'

# List all step types
overloop step-types:list | jq '.data[] | .type'

Common Workflows

Create a campaign with steps and enroll prospects

# 1. Create the campaign with inline steps (preferred — chaining is automatic)
overloop campaigns:create --data '{
  "name": "Q1 Cold Outreach",
  "timezone": "Europe/Brussels",
  "steps": [
    {"type": "delay", "config": {"days_delay": 1}},
    {"type": "email", "config": {"subject": "Hello", "content": "Hi {{first_name}}"}}
  ]
}'

# 2. Enroll a prospect
overloop enrollments:create --campaign <id> --prospect <prospect_id>

# 3. Activate the campaign
overloop campaigns:update <id> --status on

Source prospects and add to a campaign

# 1. Check available search options
overloop sourcings:search-options --field locations --q "Belgium"

# 2. Estimate match count before creating (no credits used)
overloop sourcings:estimate --search-criteria '{"job_titles":["Sales"],"locations":[{"id":22,"name":"Belgium","type":"Country"}]}'

# 3. Create a sourcing
overloop sourcings:create --name "Belgian Sales" --search-criteria '{"job_titles":["Sales"],"locations":[{"id":22,"name":"Belgium","type":"Country"}],"company_sizes":["1-10 employees"]}'

# 4. Start sourcing
overloop sourcings:start <id>

Manage the exclusion list

# Block a domain
overloop exclusion-list:create --value competitor.com --item-type domain

# Block a specific email
overloop exclusion-list:create --value [email protected] --item-type email

# Review and clean up
overloop exclusion-list:list --search competitor
overloop exclusion-list:delete <id>

Environment Variables

| Variable | Required | Description | |---|---|---| | OVERLOOP_API_KEY | No | Your Overloop API key (overrides saved config from overloop login) | | OVERLOOP_API_URL | No | Override API base URL (default: https://api.overloop.ai) |


Error Handling

| Exit Code | Meaning | |---|---| | 0 | Success | | 1 | Error (message on stderr) |

| HTTP Status | Meaning | |---|---| | 401 | Missing or invalid API key | | 403 | Insufficient permissions | | 404 | Resource not found | | 422 | Validation error | | 429 | Rate limited (600 req/min per key) |


Development

git clone https://github.com/sortlist/overloop-cli.git
cd overloop-cli
npm install
npm run dev    # Watch mode
npm run build  # Production build

License

MIT


Links