{"id":48807610,"url":"https://github.com/sortlist/signals-cli","last_synced_at":"2026-04-16T05:00:51.218Z","repository":{"id":345079419,"uuid":"1184108618","full_name":"sortlist/signals-cli","owner":"sortlist","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-27T09:39:40.000Z","size":76,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-27T20:35:59.074Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sortlist.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-17T09:03:43.000Z","updated_at":"2026-03-27T19:15:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/sortlist/signals-cli","commit_stats":null,"previous_names":["sortlist/signals-cli"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sortlist/signals-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sortlist%2Fsignals-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sortlist%2Fsignals-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sortlist%2Fsignals-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sortlist%2Fsignals-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sortlist","download_url":"https://codeload.github.com/sortlist/signals-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sortlist%2Fsignals-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31872036,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-14T06:01:04.432Z","updated_at":"2026-04-16T05:00:51.208Z","avatar_url":"https://github.com/sortlist.png","language":"TypeScript","funding_links":[],"categories":["📊 Data and Research Agents","🆕 New and Emerging AI Tools","4. \u003ca name='Business'\u003e\u003c/a\u003e👔 Business","Monitoring","Resources"],"sub_categories":["Data Analysis","Other Cloud Provider Credits","Prometheus","[Bombora](https://bombora.com/) / [6sense](https://6sense.com/)"],"readme":"# Signals CLI\n\n[![npm](https://img.shields.io/npm/v/signals-sortlist-cli)](https://www.npmjs.com/package/signals-sortlist-cli) [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](LICENSE)\n\n**Lead intelligence CLI for developers and AI agents** -- Discover leads, manage subscriptions, and automate workflows from the terminal.\n\nThe Signals CLI provides a command-line interface to the [Signals](https://signals.sortlist.com/) API, enabling developers and AI agents to monitor sources (LinkedIn, funding databases, etc.) and discover new leads programmatically.\n\n---\n\n## Installation\n\n```bash\nnpm install -g signals-sortlist-cli\n```\n\n### For AI Agents\n\nInstall the Signals skill for your AI agent (Cursor, Claude Code, OpenClaw, etc.):\n\n```bash\nnpx skills add sortlist/signals-cli\n```\n\nThis installs the [SKILL.md](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\nsignals login\n```\n\nThis prompts for your API key (get it from **Settings \u003e API Keys** in your dashboard), validates it, and saves it to `~/.signals/config.json`.\n\nAlternatively, set the `SIGNALS_API_KEY` environment variable (takes priority over saved config):\n\n```bash\nexport SIGNALS_API_KEY=your_api_key\n```\n\nTo remove saved credentials:\n\n```bash\nsignals logout\n```\n\nAPI keys are scoped to your **team**. Use `--business` (`-b`) to specify which business to operate on for leads, subscriptions, and webhooks.\n\n---\n\n## Commands\n\n### Signals (catalog)\n\nThe signal catalog lists all available monitoring types. This is read-only and public.\n\n```bash\n# List all signal types\nsignals signals:list\n\n# Get details for a specific signal\nsignals signals:get linkedin-company-engagers\n```\n\n### Businesses\n\nEach team can have multiple businesses. All leads, subscriptions, and webhooks are scoped to a business.\n\n```bash\n# List all businesses in your team\nsignals businesses:list\n\n# Get a business with its Ideal Customer Profile\nsignals businesses:get 1\n\n# Create a business from a website (auto-analyzes name, description, and ICP)\nsignals businesses:create --website https://acme.com\n\n# Create a business manually\nsignals businesses:create --name \"Acme Corp\" --website https://acme.com\n\n# Create with ICP attributes\nsignals businesses:create --name \"Acme Corp\" \\\n  --icp '{\"target_job_titles\":[\"CTO\",\"VP of Engineering\"],\"target_locations\":[\"North America\"]}'\n```\n\n**`businesses:create` options:**\n\n| Option | Required | Description |\n|---|---|---|\n| `--website` | Conditional | Website URL. If passed alone, auto-analyzes name/description/ICP |\n| `--name` | Conditional | Business name (required when not using website-only mode) |\n| `--description` | No | Short description |\n| `--icp` | No | Ideal Customer Profile attributes as JSON string |\n\n```bash\n# Update a business name\nsignals businesses:update 1 --name \"New Name\"\n\n# Update the ICP (include the ICP id from businesses:get response)\nsignals businesses:update 1 --icp '{\"id\":1,\"target_job_titles\":[\"CTO\",\"VP Engineering\"],\"lead_matching_mode\":70}'\n```\n\n**`businesses:update` options:**\n\n| Option | Description |\n|---|---|\n| `--name` | Business name |\n| `--website` | Website URL |\n| `--description` | Short description |\n| `--icp` | ICP attributes as JSON string (include `id` to update existing ICP) |\n\n### Subscriptions\n\nA subscription is a signal you've activated with a specific configuration (e.g. \"Track engagers on Apple's LinkedIn page\"). All subscription commands require `--business` (`-b`).\n\n```bash\n# List all subscriptions\nsignals subscriptions:list --business 1\n\n# Get a subscription with stats\nsignals subscriptions:get 42 --business 1\n\n# Create a subscription\nsignals subscriptions:create --business 1 \\\n  --signal linkedin-company-engagers \\\n  --name \"Apple Engagers\" \\\n  --config '{\"linkedin_url\":\"https://www.linkedin.com/company/apple/\"}'\n\n# Update a subscription\nsignals subscriptions:update 42 --business 1 --name \"Renamed Subscription\"\n\n# Pause (stops scanning for new leads)\nsignals subscriptions:pause 42 --business 1\n\n# Resume\nsignals subscriptions:resume 42 --business 1\n\n# Delete\nsignals subscriptions:delete 42 --business 1\n```\n\n**`subscriptions:create` options:**\n\n| Option | Required | Description |\n|---|---|---|\n| `--business` | Yes | Business ID |\n| `--signal` | Yes | Signal slug from the catalog |\n| `--name` | Yes | Name for this subscription |\n| `--config` | No | Signal-specific config as JSON string |\n\n**`subscriptions:update` options:**\n\n| Option | Description |\n|---|---|\n| `--name` | Updated name |\n| `--active` | Set active state (true/false) |\n| `--config` | Updated config as JSON string |\n\n### Leads\n\nLeads are enriched profiles discovered by your active subscriptions. Each lead includes name, company, LinkedIn URL, email, phone, and more. All lead commands require `--business` (`-b`).\n\n```bash\n# List leads (paginated)\nsignals leads:list --business 1\nsignals leads:list --business 1 --page 2 --per-page 50\n\n# Get a single lead with full details and delivery history\nsignals leads:get 1234 --business 1\n\n# Delete a lead (soft-delete)\nsignals leads:delete 1234 --business 1\n```\n\n**`leads:list` options:**\n\n| Option | Default | Description |\n|---|---|---|\n| `--business` | — | Business ID (required) |\n| `--page` | 1 | Page number |\n| `--per-page` | 25 | Results per page (max 100) |\n\n### Webhooks\n\nRegister URLs to receive an HTTP POST in real-time whenever a new lead is discovered. All webhook commands require `--business` (`-b`).\n\n```bash\n# List webhooks\nsignals webhooks:list --business 1\n\n# Create a webhook with HMAC signature verification\nsignals webhooks:create --business 1 --url https://example.com/webhook --secret whsec_abc123\n\n# Delete a webhook\nsignals webhooks:delete 10 --business 1\n```\n\n**`webhooks:create` options:**\n\n| Option | Required | Description |\n|---|---|---|\n| `--business` | Yes | Business ID |\n| `--url` | Yes | URL to receive POST requests |\n| `--secret` | No | Secret for HMAC-SHA256 signature verification |\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 lead emails\nsignals leads:list --business 1 --per-page 100 | jq '.leads[] | .payload.email'\n\n# Get subscription IDs that are active\nsignals subscriptions:list --business 1 | jq '.subscriptions[] | select(.active) | .id'\n\n# Count total leads\nsignals leads:list --business 1 | jq '.meta.total_count'\n\n# List business names\nsignals businesses:list | jq '.businesses[] | .name'\n```\n\n---\n\n## Common Workflows\n\n### Set up a new business and start monitoring\n\n```bash\n# 1. Create a business from a website (auto-generates ICP)\nsignals businesses:create --website https://acme.com\n\n# 2. Note the business ID from the response, then browse signals\nsignals signals:list\n\n# 3. Create a subscription\nsignals subscriptions:create --business 1 \\\n  --signal linkedin-company-engagers \\\n  --name \"Acme Engagers\" \\\n  --config '{\"linkedin_url\":\"https://www.linkedin.com/company/acme/\"}'\n\n# 4. Check for leads\nsignals leads:list --business 1\n```\n\n### Pause and resume scanning\n\n```bash\nsignals subscriptions:pause 42 --business 1    # Stop scanning\nsignals subscriptions:resume 42 --business 1   # Start scanning again\n```\n\n### Set up real-time notifications\n\n```bash\n# Register a webhook\nsignals webhooks:create --business 1 --url https://my-app.com/signals --secret my_secret\n\n# Verify\nsignals webhooks:list --business 1\n```\n\n---\n\n## Environment Variables\n\n| Variable | Required | Description |\n|---|---|---|\n| `SIGNALS_API_KEY` | No | Your Signals API key (overrides saved config from `signals login`) |\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| 404 | Resource not found |\n| 422 | Validation error |\n| 429 | Rate limited (60 req/min) |\n\n---\n\n## Development\n\n```bash\ngit clone https://github.com/sortlist/signals-cli.git\ncd signals-cli\nnpm install\nnpm run dev    # Watch mode\nnpm run build  # Production build\n```\n\n### Project Structure\n\n```\nsrc/\n  index.ts              # CLI entry point (yargs)\n  api.ts                # SignalsAPI client class\n  config.ts             # Config management (~/.signals/config.json)\n  commands/\n    login.ts            # login, logout\n    signals.ts          # signals:list, signals:get\n    businesses.ts       # businesses:list, businesses:get, businesses:create, businesses:update\n    subscriptions.ts    # Subscription management\n    leads.ts            # Lead management\n    webhooks.ts         # Webhook management\n```\n\n---\n\n## API Documentation\n\nFull API docs: [https://api.meetsignals.ai/docs/api](https://api.meetsignals.ai/docs/api)\n\n---\n\n## License\n\nMIT\n\n---\n\n## Links\n\n- **Website:** [api.meetsignals.ai](https://api.meetsignals.ai)\n- **API Docs:** [api.meetsignals.ai/docs/api](https://api.meetsignals.ai/docs/api)\n- **GitHub:** [sortlist/signals-cli](https://github.com/sortlist/signals-cli)\n- **Issues:** [Report bugs](https://github.com/sortlist/signals-cli/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsortlist%2Fsignals-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsortlist%2Fsignals-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsortlist%2Fsignals-cli/lists"}