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

reply-cli

v0.1.2

Published

Command-line interface for Reply.io. Manage sequences, contacts, email accounts, and schedules from your terminal.

Downloads

37

Readme


Overview

reply-cli is the command-line interface for Reply.io. It installs the reply command for managing your outreach from the terminal:

| Command | What it does | |---|---| | reply sequences | List, create, clone, start, pause, and archive outreach sequences | | reply sequences stats | View per-step performance, top performers, and aggregate summary | | reply sequence-contacts | Add and remove contacts from sequences | | reply contacts | Create, update, delete, and search contacts with lifecycle actions | | reply accounts | List connected email accounts | | reply schedules | Manage sending schedules | | reply import | Import contacts from CSV with column mapping |


Table of Contents


Installation

Requires Node.js >= 20

npm install -g reply-cli

Or run without installing:

npx reply-cli sequences list

Quick Start

# 1. Set your API key
export REPLY_API_KEY=your-api-key

# 2. List your sequences
reply sequences list

# 3. Create a contact
reply contacts create --email [email protected] --first-name John --company Acme

# 4. Add the contact to a sequence
reply sequence-contacts add --contact [email protected] --sequence 12345

# 5. Check sequence performance
reply sequences stats 12345

# 6. View aggregate stats
reply sequences stats --summary

Authentication

Get your API key from Reply.io Settings > API.

# Environment variable
export REPLY_API_KEY=your-api-key

# Or pass directly to any command
reply sequences list --api-key your-api-key

# Or put it in a .env file in your project directory
echo "REPLY_API_KEY=your-api-key" >> .env

Resolution order (highest priority first):

--api-key flag  →  REPLY_API_KEY env var  →  .env file (walks up directories)

Commands

sequences

Manage outreach sequences (campaigns).

reply sequences list                          # List all sequences with stats
reply sequences get <id>                      # Get details and email steps
reply sequences create                        # Create from stdin JSON
reply sequences update <id>                   # Update settings from stdin JSON
reply sequences clone <id> --name "New Name"  # Clone with all steps
reply sequences start <id>                    # Start sending emails
reply sequences pause <id>                    # Pause sending
reply sequences archive <id>                  # Archive sequence

Examples

# List all sequences
reply sequences list

# Get sequence details as JSON
reply sequences get 12345 --json

# Create a sequence from a config file
cat config.json | reply sequences create

# Clone a sequence
reply sequences clone 12345 --name "Q2 Outreach"

# Start a paused sequence
reply sequences start 12345

Create sequence JSON format:

{
  "name": "My Sequence",
  "emailAccounts": ["[email protected]"],
  "settings": {
    "emailsCountPerDay": 50,
    "daysToFinishProspect": 7,
    "EmailSendingDelaySeconds": 55
  },
  "steps": [
    {
      "number": "1",
      "InMinutesCount": "0",
      "templates": [{ "subject": "Quick question", "body": "Hi {{FirstName}}!" }]
    },
    {
      "number": "2",
      "InMinutesCount": "1440",
      "templates": [{ "subject": "Following up", "body": "Hi {{FirstName}}, just checking in." }]
    }
  ]
}

sequences stats

View sequence performance statistics.

reply sequences stats <id>       # Detailed per-step stats for a sequence
reply sequences stats --top      # Top 3 sequences by reply rate
reply sequences stats --summary  # Aggregate performance across all sequences

Examples

# Per-step breakdown: sent, opens, replies, bounces, clicks
reply sequences stats 12345

# Top performers
reply sequences stats --top

# Account-wide summary as JSON
reply sequences stats --summary --json

sequence-contacts

Add or remove contacts from sequences.

reply sequence-contacts add --contact <email> --sequence <id> [--force]
reply sequence-contacts add-new --contact <email> --first-name <name> --sequence <id>
reply sequence-contacts add-bulk --contacts <ids> --sequence <id> [--overwrite]
reply sequence-contacts remove --contact <email> --sequence <id>
reply sequence-contacts remove-all --contact <email>

| Subcommand | What it does | |---|---| | add | Enroll an existing contact in a sequence. --force moves from another active sequence | | add-new | Create a contact and enroll in one step | | add-bulk | Enroll multiple contacts by ID (comma-separated) | | remove | Remove from a specific sequence | | remove-all | Remove from all sequences |

Examples

# Add existing contact to sequence
reply sequence-contacts add --contact [email protected] --sequence 12345

# Create + enroll in one step
reply sequence-contacts add-new --contact [email protected] --first-name Jane --sequence 12345

# Bulk enroll by contact IDs
reply sequence-contacts add-bulk --contacts 111,222,333 --sequence 12345

# Remove from all sequences
reply sequence-contacts remove-all --contact [email protected]

contacts

Manage contacts (prospects).

reply contacts list [--page N --limit N]       # Paginated contact list
reply contacts get <id|email>                  # Contact details
reply contacts create --email <email> --first-name <name> [options]
reply contacts update --email <email> [options]
reply contacts delete <id|email>               # Delete a contact
reply contacts search --email <email>          # Search by email
reply contacts search --linkedin <url>         # Lookup by LinkedIn URL
reply contacts mark-replied <email>            # Mark as replied in all sequences
reply contacts mark-finished <email>           # Mark as finished in all sequences
reply contacts opt-out <email>                 # Remove from all sequences
reply contacts stats <email>                   # Campaign history and email activity

| Flag | Description | |---|---| | --email <email> | Email address (required for create/update) | | --first-name <name> | First name (required for create) | | --last-name <name> | Last name | | --company <company> | Company name | | --title <title> | Job title | | --phone <phone> | Phone number | | --linkedin <url> | LinkedIn profile URL | | --city, --state, --country | Location fields | | --custom <fields> | Custom fields: Key1=Val1,Key2=Val2 |

Examples

# Create a contact
reply contacts create --email [email protected] --first-name John --company Acme --title CEO

# Update company
reply contacts update --email [email protected] --company "New Corp"

# View contact performance
reply contacts stats [email protected]

# Mark as finished
reply contacts mark-finished [email protected]

import

Import contacts from CSV files.

reply import preview --file <path>                         # Preview CSV and available fields
reply import upload --file <path> --mapping <json> [opts]  # Upload with column mapping

| Flag | Description | |---|---| | --file <path> | Path to CSV file | | --mapping <json> | JSON mapping Reply fields to CSV column names | | --list-id <id> | Assign contacts to a list | | --overwrite | Overwrite existing contacts |

Examples

# Preview CSV structure and available Reply.io fields
reply import preview --file contacts.csv

# Upload with mapping
reply import upload \
  --file contacts.csv \
  --mapping '{"email":"Email Address","firstName":"First Name","company":"Company"}' \
  --overwrite

accounts

Manage connected email accounts.

reply accounts list    # List all connected email accounts
reply accounts check   # Machine-readable check (ACCOUNTS_FOUND:<n> or NO_ACCOUNTS)

schedules

Manage sending schedules.

reply schedules list               # List all schedules
reply schedules get <id>           # Schedule details
reply schedules create             # Create from stdin JSON
reply schedules delete <id>        # Delete a schedule
reply schedules set-default <id>   # Set as the default schedule

Examples

# List schedules
reply schedules list

# Create a schedule
echo '{
  "name": "Business Hours",
  "timezoneId": "Eastern Standard Time",
  "mainTimings": [
    {"weekDay":"Monday","isActive":true,"timeRanges":[{"fromTime":{"hour":9,"minute":0},"toTime":{"hour":17,"minute":0}}]},
    {"weekDay":"Tuesday","isActive":true,"timeRanges":[{"fromTime":{"hour":9,"minute":0},"toTime":{"hour":17,"minute":0}}]}
  ]
}' | reply schedules create

# Set as default
reply schedules set-default 12345

Output Modes

Every command supports:

| Mode | Flag | Behavior | |---|---|---| | Human-readable | (default) | Formatted table with colors | | JSON | --json | Compact JSON to stdout | | Pretty JSON | --pretty | Indented JSON to stdout |

# Table output (default)
reply sequences list

# Compact JSON
reply sequences list --json

# Pretty JSON
reply sequences list --pretty

Pipe-Friendly Usage

When stdout is not a TTY, colors are automatically disabled. Errors go to stderr, data to stdout.

# Get all sequence IDs
reply sequences list --json | jq '.[].id'

# Export contacts as JSON
reply contacts list --limit 100 --json > contacts.json

# Check if accounts exist in a script
if reply accounts check 2>/dev/null; then
  echo "Accounts connected"
fi

Troubleshooting

REPLY_API_KEY not found

export REPLY_API_KEY=your-api-key
# or
echo "REPLY_API_KEY=your-api-key" >> .env

Invalid API key

Check your key at Reply.io Settings > API.

Rate limit exceeded

Reply.io allows 15,000 API calls/month. Some endpoints (campaign list, stats) have a 10-second throttle between requests.

Access denied

You may need the owner/master API key for this operation.


Links