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 +53 -24
- package/dist/cli.js +1431 -127
- package/dist/linkedin-products.js +29 -8
- package/dist/linkedin-session.js +751 -0
- package/dist/sales-navigator.js +207 -36
- package/dist/salesnav-backfill.js +710 -0
- package/package.json +4 -1
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
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
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
|
-
##
|
|
32
|
-
npx salesprompter-cli@latest --
|
|
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
|
|
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
|
-
|
|
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
|
-
###
|
|
63
|
+
### "I sell for Deel and want the right people at similar companies"
|
|
52
64
|
|
|
53
|
-
|
|
65
|
+
Start from the company, product, or category input:
|
|
54
66
|
|
|
55
67
|
```bash
|
|
56
|
-
salesprompter
|
|
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
|
-
|
|
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
|
-
|
|
73
|
+
Preview the generated titles and first split queries before creating crawl jobs:
|
|
63
74
|
|
|
64
75
|
```bash
|
|
65
|
-
salesprompter
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
###
|
|
88
|
+
### Historical warehouse fallback
|
|
72
89
|
|
|
73
|
-
|
|
90
|
+
`salesnav:ensure-count` remains a historical backfill path, not the primary workflow:
|
|
74
91
|
|
|
75
92
|
```bash
|
|
76
|
-
salesprompter
|
|
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
|
|
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
|
|
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
|