salesprompter-cli 0.1.19 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,9 +3,11 @@
3
3
  `salesprompter-cli` is a JSON-first command line interface for running a practical sales workflow:
4
4
 
5
5
  - Authenticate via Salesprompter app backend
6
- - Define an ideal customer profile
7
- - Resolve a target account from a domain
8
- - Generate seed leads
6
+ - Crawl LinkedIn product categories
7
+ - Derive intended-role job titles
8
+ - Split broad Sales Navigator searches into exportable slices
9
+ - Export those slices through Phantombuster
10
+ - Store product and people data in Salesprompter
9
11
  - Enrich leads
10
12
  - Score leads
11
13
  - Sync leads into CRM and outreach systems
@@ -17,6 +19,9 @@ It is built for two users at the same time:
17
19
  - humans working in a terminal
18
20
  - coding agents such as Codex, Claude Code, and other LLM-driven shell workflows
19
21
 
22
+ The app, CLI, and Chrome extension all write into one shared Salesprompter backend and database. Access is scoped to
23
+ the active workspace you choose at login.
24
+
20
25
  ## Start Here
21
26
 
22
27
  If someone discovers Salesprompter from a vague prompt, give them the shortest working path for their context.
@@ -28,8 +33,8 @@ npx -y salesprompter-cli@latest
28
33
  ## Explicit guided path
29
34
  npx -y salesprompter-cli@latest wizard
30
35
 
31
- ## Raw command surface for agents and scripts
32
- npx salesprompter-cli@latest --help
36
+ ## Primary raw command for agents and scripts
37
+ npx -y salesprompter-cli@latest salesnav:from-product-category --input deel.com --dry-run
33
38
  ```
34
39
 
35
40
  Or install it globally:
@@ -42,40 +47,50 @@ salesprompter --help
42
47
  ```
43
48
 
44
49
  Bare `salesprompter` now opens a guided wizard in an interactive terminal. Keep using explicit subcommands for agents, CI, and copy-paste docs.
45
- If your Salesprompter user belongs to multiple organizations, browser login asks which organization the CLI session should use.
50
+ If your Salesprompter user belongs to multiple workspaces, browser login asks which workspace the CLI session should use.
46
51
 
47
52
  ## Prompt To Command
48
53
 
49
- If the user says something like "I need to determine the ICP of deel.com", there are two different meanings.
54
+ The primary live path is:
55
+
56
+ 1. crawl a LinkedIn product category
57
+ 2. derive the intended job titles
58
+ 3. turn those into Sales Navigator queries
59
+ 4. split broad searches into exportable chunks
60
+ 5. export them through Phantombuster
61
+ 6. store everything in Salesprompter
50
62
 
51
- ### 1. They want leads at Deel itself
63
+ ### "I sell for Deel and want the right people at similar companies"
52
64
 
53
- This means Deel is the target account.
65
+ Start from the company, product, or category input:
54
66
 
55
67
  ```bash
56
- salesprompter account:resolve --domain deel.com --company-name Deel --out ./data/deel-account.json
57
- salesprompter leads:generate --icp ./data/icp.json --count 5 --domain deel.com --company-name Deel --out ./data/deel-leads.json
68
+ salesprompter salesnav:from-product-category --input deel.com
58
69
  ```
59
70
 
60
- ### 2. They sell for Deel and need Deel's ideal customer profile
71
+ The CLI now stays attached while durable title crawls are still running remotely, writes JSONL trace logs, and exits non-zero if any title crawl finishes with failures. Use `--allow-partial-success` only when you explicitly want a best-effort run.
61
72
 
62
- This means Deel is the vendor, not the target account.
73
+ Preview the generated titles and first split queries before creating crawl jobs:
63
74
 
64
75
  ```bash
65
- salesprompter icp:vendor --vendor deel --market dach --out ./data/deel-icp.json
66
- salesprompter leads:lookup:bq --icp ./data/deel-icp.json --limit 100 --execute --out ./data/deel-leads-raw.json --lead-out ./data/deel-leads.json
67
- salesprompter leads:enrich --in ./data/deel-leads.json --out ./data/deel-enriched.json
68
- salesprompter leads:score --icp ./data/deel-icp.json --in ./data/deel-enriched.json --out ./data/deel-scored.json
76
+ salesprompter --json salesnav:from-product-category --input deel.com --dry-run
77
+ ```
78
+
79
+ ### "Find people at deel.com"
80
+
81
+ That is still a direct target-company lookup:
82
+
83
+ ```bash
84
+ salesprompter account:resolve --domain deel.com --company-name Deel --out ./data/deel-account.json
85
+ salesprompter leads:generate --icp ./data/icp.json --count 5 --domain deel.com --company-name Deel --out ./data/deel-leads.json
69
86
  ```
70
87
 
71
- ### 3. They want the LLM to call the CLI directly
88
+ ### Historical warehouse fallback
72
89
 
73
- Use the same commands, but prefer machine-readable output:
90
+ `salesnav:ensure-count` remains a historical backfill path, not the primary workflow:
74
91
 
75
92
  ```bash
76
- salesprompter --json icp:vendor --vendor deel --market dach
77
- salesprompter --json icp:vendor --vendor deel --market dach --out ./data/deel-icp.json
78
- salesprompter --json leads:lookup:bq --icp ./data/deel-icp.json --limit 100 --lead-out ./data/deel-leads.json
93
+ salesprompter salesnav:ensure-count --target-count 200000 --org-id "$SALESPROMPTER_ORG_ID"
79
94
  ```
80
95
 
81
96
  ## Documentation
@@ -118,7 +133,7 @@ This CLI is not a standalone toy. It is a production integration surface for the
118
133
  - BigQuery-backed runs (`domainfinder:run:bq`, `domainfinder:audit-existing:bq`)
119
134
  - before/after delta checks (`domainfinder:audit-delta`)
120
135
 
121
- The current version is account-first. It resolves a company from a domain, then generates contacts for that account through provider interfaces. The default providers are still fallback heuristics, but the JSON contracts are now stable for real company and people-data integrations.
136
+ The current live path is product-first. It resolves a LinkedIn product category, derives intended-role Sales Navigator searches, and lets the app run durable exports through Phantombuster. Account-first lead generation still exists for direct target-company lookups.
122
137
 
123
138
  When the output `mode` is `fallback`, the leads are modeled contacts for workflow testing, not verified real contacts. A real provider path should return `mode: "real"` using the same JSON shape.
124
139
 
@@ -147,16 +162,25 @@ salesprompter auth:whoami --verify
147
162
  salesprompter auth:logout
148
163
  ```
149
164
 
150
- If your user belongs to multiple organizations, the browser flow asks you to choose the organization for that CLI session before returning to the terminal.
165
+ If your user belongs to multiple workspaces, the browser flow asks you to choose the workspace for that CLI session before returning to the terminal.
151
166
 
152
167
  Environment variables:
153
168
 
154
169
  - `SALESPROMPTER_API_BASE_URL`: override backend URL (default `https://salesprompter.ai`)
155
170
  - `SALESPROMPTER_CONFIG_DIR`: override local config dir
171
+ - `SALESPROMPTER_ORG_ID`: optional org override for privileged Sales Navigator backfills
156
172
  - `SALESPROMPTER_SKIP_AUTH=1`: bypass auth guard (tests/dev only)
157
173
  - `INSTANTLY_API_KEY`: required for real `sync:outreach --target instantly`
158
174
  - `INSTANTLY_CAMPAIGN_ID`: default campaign id for Instantly sync
159
175
  - `SALESPROMPTER_INSTANTLY_BASE_URL`: override Instantly API base URL (tests/local proxies)
176
+ - `NEXT_PUBLIC_SUPABASE_URL` or `SALESPROMPTER_SUPABASE_URL`: required for `salesnav:ensure-count` and for CLI-managed Sales Navigator exports
177
+ - `SUPABASE_SERVICE_ROLE_KEY`: required for `salesnav:ensure-count` and for CLI-managed Sales Navigator exports
178
+ - `LINKEDIN_SESSION_COOKIE_ENCRYPTION_KEY` or `EXTENSION_AUTH_SECRET` or `CLERK_SECRET_KEY`: required for Sales Navigator export and crawl commands that launch exports
179
+ - `SALESPROMPTER_LINKEDIN_SESSION_EXCLUDED_EMAILS`: optional comma-separated emails to keep out of CLI-managed Sales Navigator rotation
180
+ - `SALESPROMPTER_LINKEDIN_SESSION_EXCLUDED_HANDLES`: optional comma-separated LinkedIn handles to keep out of CLI-managed Sales Navigator rotation
181
+ - `SALESPROMPTER_CLI_MANAGE_LINKEDIN_SESSIONS=0`: optional test or legacy fallback override; when omitted, the CLI claims, rotates, and preflights Sales Navigator session cookies before export launch
182
+ - `GOOGLE_SERVICE_ACCOUNT_KEY`: required for `salesnav:ensure-count`
183
+ - `BIGQUERY_PROJECT_ID`: optional when the Google service-account JSON already includes `project_id`
160
184
 
161
185
  App compatibility:
162
186
 
@@ -197,6 +221,11 @@ salesprompter icp:define --name "EU SaaS RevOps" \
197
221
 
198
222
  salesprompter auth:login
199
223
  salesprompter auth:whoami --verify
224
+ salesprompter --json salesnav:from-product-category --input deel.com --dry-run
225
+ salesprompter salesnav:from-product-category --input deel.com
226
+ # Historical fallback only. Resumes from prior CLI historical backfill runs unless you pass --start-offset.
227
+ salesprompter salesnav:ensure-count --target-count 200000 --org-id "$SALESPROMPTER_ORG_ID"
228
+ salesprompter salesnav:crawl --query-url "https://www.linkedin.com/sales/search/people?query=..."
200
229
  salesprompter icp:vendor --vendor deel --market dach --out ./data/deel-icp.json
201
230
  salesprompter leads:lookup:bq --icp ./data/deel-icp.json --limit 100 --execute --out ./data/deel-leads-raw.json --lead-out ./data/deel-leads.json
202
231
  salesprompter leads:enrich --in ./data/deel-leads.json --out ./data/deel-enriched.json