{
  "markdown": "# Overloop CLI\n\n[![npm version](https://img.shields.io/npm/v/overloop-cli.svg)](https://www.npmjs.com/package/overloop-cli) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n> ⚠️ **Beta Notice:** This CLI is currently in beta. APIs and tool interfaces may change between versions. Please report any issues on [GitHub](https://github.com/sortlist/overloop-cli/issues).\n\n**Sales automation CLI for developers and AI agents** — Manage prospects, campaigns, sourcings, and more from the terminal.\n\nThe Overloop CLI provides a command-line interface to the Overloop API v2, enabling developers and AI agents to automate sales outreach workflows programmatically.\n\n---\n\n## Installation\n\n```bash\nnpm install -g overloop-cli\n```\n\n### For AI Agents\n\nInstall the Overloop skill for your AI agent (Cursor, Claude Code, etc.):\n\n```bash\nnpx skills add sortlist/overloop-cli\n```\n\nThis installs the SKILL.md which gives your agent full knowledge of the CLI commands, patterns, and workflows.\n\n---\n\n## Authentication\n\nThe recommended way to authenticate is the interactive login command:\n\n```bash\noverloop login\n```\n\nThis prompts for your API key (get it from **Settings > API Keys** in your Overloop dashboard), validates it, and saves it to `~/.overloop/config.json`.\n\nAlternatively, set the `OVERLOOP_API_KEY` environment variable (takes priority over saved config):\n\n```bash\nexport OVERLOOP_API_KEY=your_api_key\n```\n\nTo remove saved credentials:\n\n```bash\noverloop logout\n```\n\n---\n\n## Commands\n\n### Prospects\n\n```bash\noverloop prospects:list [--page N] [--per-page N] [--sort field] [--search text] [--filter '{\"key\":\"value\"}'] [--expand relations]\noverloop prospects:get <id>                  # ID or email address\noverloop prospects:create --email john@example.com --first-name John --last-name Doe\noverloop prospects:create --data '{\"email\":\"john@example.com\",\"first_name\":\"John\"}'\noverloop prospects:update <id> --first-name Jane\noverloop prospects:delete <id>\n```\n\n### Organizations\n\n```bash\noverloop organizations:list [--search text] [--filter '{\"country\":\"US\"}']\noverloop organizations:get <id>\noverloop organizations:create --name \"Acme Corp\" --website https://acme.com\noverloop organizations:update <id> --name \"New Name\"\noverloop organizations:delete <id>\n```\n\n### Lists\n\n```bash\noverloop lists:list [--search text]\noverloop lists:get <id>\noverloop lists:create --name \"Hot Leads\"\noverloop lists:update <id> --name \"Warm Leads\"\noverloop lists:delete <id>\n```\n\n### Campaigns\n\n```bash\noverloop campaigns:list [--filter '{\"status\":\"on\"}']\noverloop campaigns:get <id> [--expand steps,sourcing]\noverloop campaigns:create --name \"Q1 Outreach\" --timezone \"Etc/UTC\"\noverloop campaigns:create --name \"Q1\" --auto-enroll --sourcing-id <id>   # auto-enroll sourced prospects\noverloop campaigns:create --data '{\"name\":\"Q1 Outreach\",\"steps\":[{\"type\":\"delay\",\"config\":{\"days_delay\":5}}]}'\noverloop campaigns:update <id> --status on\noverloop campaigns:update <id> --auto-enroll       # enable auto-enrollment\noverloop campaigns:update <id> --no-auto-enroll    # switch back to manual\n\n# Replacing the steps of a campaign prospects are enrolled in disenrolls them\noverloop campaigns:update <id> --data '{\"steps\":[...]}' --confirm-disenroll\noverloop campaigns:delete <id>\n```\n\n### Campaign Steps (require `--campaign`)\n\n> **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\":[...]}'`.\n\n```bash\noverloop steps:list --campaign <id>\noverloop steps:get <step_id> --campaign <id>\n\n# Preferred: inline steps in campaigns:create (chaining is automatic)\noverloop campaigns:create --data '{\"name\":\"My Campaign\",\"steps\":[{\"type\":\"delay\",\"config\":{\"days_delay\":1}},{\"type\":\"email\",\"config\":{\"generate_with_ai\":true}}]}'\n\n# Individual creation — must chain with --previous-step-id\nSTEP1=$(overloop steps:create --campaign <id> --type delay --config '{\"days_delay\":1}' | jq -r '.data.id')\noverloop steps:create --campaign <id> --type email --config '{\"generate_with_ai\":true}' --previous-step-id $STEP1\n\noverloop steps:update <step_id> --campaign <id> --config '{\"subject\":\"Updated\"}'\noverloop steps:delete <step_id> --campaign <id>\n```\n\n### Campaign Enrollments (require `--campaign`)\n\n```bash\noverloop enrollments:list --campaign <id>\noverloop enrollments:get <enrollment_id> --campaign <id>\noverloop enrollments:create --campaign <id> --prospect <prospect_id>\noverloop enrollments:create --campaign <id> --prospect <prospect_id> --reenroll\noverloop enrollments:bulk --campaign <id> --prospects \"id1,id2,id3\"     # bulk enroll up to 100\noverloop enrollments:delete <enrollment_id> --campaign <id>\n```\n\n### Step Types\n\n```bash\noverloop step-types:list     # List all available step types for building campaigns\n```\n\n### Sourcings\n\n```bash\noverloop sourcings:list\noverloop sourcings:get <id>\noverloop sourcings:create --name \"Sales in Belgium\" --search-criteria '{\"keywords\":\"sales\",\"locations\":[\"Belgium\"]}'\noverloop sourcings:update <id> --name \"Updated Name\"\noverloop sourcings:delete <id>\noverloop sourcings:start <id>\noverloop sourcings:pause <id>\noverloop sourcings:clone <id>\noverloop sourcings:estimate --search-criteria '{\"job_titles\":[\"CEO\"]}'   # Preview match count\noverloop sourcings:search-options                          # Get all available search criteria\noverloop sourcings:search-options --field locations --q \"Bel\"   # Search specific field options\n```\n\n### Conversations\n\n```bash\noverloop conversations:list [--archived]\noverloop conversations:get <id>\noverloop conversations:update <id> --name \"New Subject\"\noverloop conversations:archive <id>\noverloop conversations:unarchive <id>\noverloop conversations:assign <id> --owner <user_id>\n```\n\n### Account & Users\n\n```bash\noverloop account:get          # Get account information\noverloop me                   # Get current authenticated user\noverloop users:list\noverloop users:get <id>\n```\n\n### Custom Fields\n\n```bash\noverloop custom-fields:list                 # List all custom fields\noverloop custom-fields:list --type prospects # Filter by type\n```\n\n### Sending Addresses\n\n```bash\noverloop sending-addresses:list\n```\n\n### Exclusion List\n\n```bash\noverloop exclusion-list:list [--search text]\noverloop exclusion-list:create --value spam@example.com --item-type email\noverloop exclusion-list:create --value baddomain.com --item-type domain\noverloop exclusion-list:delete <id>\n```\n\n---\n\n## All Output is JSON\n\nEvery command outputs JSON for easy parsing with `jq` or consumption by AI agents:\n\n```bash\n# Get all prospect emails\noverloop prospects:list --per-page 100 | jq '.data[] | .email'\n\n# Get active campaign names\noverloop campaigns:list --filter '{\"status\":\"on\"}' | jq '.data[] | .name'\n\n# Count total prospects\noverloop prospects:list | jq '.pagination.total'\n\n# List all step types\noverloop step-types:list | jq '.data[] | .type'\n```\n\n---\n\n## Common Workflows\n\n### Create a campaign with steps and enroll prospects\n\n```bash\n# 1. Create the campaign with inline steps (preferred — chaining is automatic)\noverloop campaigns:create --data '{\n  \"name\": \"Q1 Cold Outreach\",\n  \"timezone\": \"Europe/Brussels\",\n  \"steps\": [\n    {\"type\": \"delay\", \"config\": {\"days_delay\": 1}},\n    {\"type\": \"email\", \"config\": {\"subject\": \"Hello\", \"content\": \"Hi {{first_name}}\"}}\n  ]\n}'\n\n# 2. Enroll a prospect\noverloop enrollments:create --campaign <id> --prospect <prospect_id>\n\n# 3. Activate the campaign\noverloop campaigns:update <id> --status on\n```\n\n### Source prospects and add to a campaign\n\n```bash\n# 1. Check available search options\noverloop sourcings:search-options --field locations --q \"Belgium\"\n\n# 2. Estimate match count before creating (no credits used)\noverloop sourcings:estimate --search-criteria '{\"job_titles\":[\"Sales\"],\"locations\":[{\"id\":22,\"name\":\"Belgium\",\"type\":\"Country\"}]}'\n\n# 3. Create a sourcing\noverloop sourcings:create --name \"Belgian Sales\" --search-criteria '{\"job_titles\":[\"Sales\"],\"locations\":[{\"id\":22,\"name\":\"Belgium\",\"type\":\"Country\"}],\"company_sizes\":[\"1-10 employees\"]}'\n\n# 4. Start sourcing\noverloop sourcings:start <id>\n```\n\n### Manage the exclusion list\n\n```bash\n# Block a domain\noverloop exclusion-list:create --value competitor.com --item-type domain\n\n# Block a specific email\noverloop exclusion-list:create --value ceo@partner.com --item-type email\n\n# Review and clean up\noverloop exclusion-list:list --search competitor\noverloop exclusion-list:delete <id>\n```\n\n---\n\n## Environment Variables\n\n| Variable | Required | Description |\n|---|---|---|\n| `OVERLOOP_API_KEY` | No | Your Overloop API key (overrides saved config from `overloop login`) |\n| `OVERLOOP_API_URL` | No | Override API base URL (default: `https://api.overloop.ai`) |\n\n---\n\n## Error Handling\n\n| Exit Code | Meaning |\n|---|---|\n| 0 | Success |\n| 1 | Error (message on stderr) |\n\n| HTTP Status | Meaning |\n|---|---|\n| 401 | Missing or invalid API key |\n| 403 | Insufficient permissions |\n| 404 | Resource not found |\n| 422 | Validation error |\n| 429 | Rate limited (600 req/min per key) |\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/sortlist/overloop-cli.git\ncd overloop-cli\nnpm install\nnpm run dev    # Watch mode\nnpm run build  # Production build\n```\n\n---\n\n## License\n\nMIT\n\n---\n\n## Links\n\n- **Website:** [overloop.ai](https://overloop.ai)\n- **API Docs:** [apidoc-v2.overloop.ai](https://apidoc-v2.overloop.ai)\n- **GitHub:** [sortlist/overloop-cli](https://github.com/sortlist/overloop-cli)\n- **Issues:** [Report bugs](https://github.com/sortlist/overloop-cli/issues)\n",
  "bytes": 9692,
  "sha": "3f0de287e08302a96b55bf5bf7f349e5ed939d0ab8c955c5ad81df7869444977",
  "repo_slug": "sortlist/overloop-cli",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_sortlist_overloop_cli_overloop_d6f3ca17/readme"
}