autotouch-cli 0.2.83__tar.gz → 0.2.85__tar.gz

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.
Files changed (55) hide show
  1. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/PKG-INFO +3 -3
  2. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/README.md +2 -2
  3. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/list_build.py +61 -16
  4. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/data/CLI_REFERENCE.md +42 -42
  5. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/data/cli-manifest.json +233 -242
  6. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/PKG-INFO +3 -3
  7. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/list_build_contract.py +34 -5
  8. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/pyproject.toml +1 -1
  9. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/MANIFEST.in +0 -0
  10. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/__init__.py +0 -0
  11. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/cli.py +0 -0
  12. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/cli_contracts.py +0 -0
  13. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/__init__.py +0 -0
  14. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/agents.py +0 -0
  15. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/auth.py +0 -0
  16. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/cells.py +0 -0
  17. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/columns.py +0 -0
  18. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/jobs.py +0 -0
  19. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/leads.py +0 -0
  20. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/linkedin.py +0 -0
  21. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/prompts.py +0 -0
  22. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/rows.py +0 -0
  23. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/search.py +0 -0
  24. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/sequences.py +0 -0
  25. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/tables.py +0 -0
  26. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/tasks.py +0 -0
  27. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/webhooks.py +0 -0
  28. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/commands/workspace_secrets.py +0 -0
  29. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/__init__.py +0 -0
  30. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/auth.py +0 -0
  31. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/config.py +0 -0
  32. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/csv_import.py +0 -0
  33. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/http.py +0 -0
  34. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/io.py +0 -0
  35. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/output.py +0 -0
  36. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/polling.py +0 -0
  37. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/run.py +0 -0
  38. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/core/validation.py +0 -0
  39. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/exceptions.py +0 -0
  40. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/mongo_status.py +0 -0
  41. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/parser.py +0 -0
  42. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/parser_groups.py +0 -0
  43. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/sequence_support.py +0 -0
  44. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli/templates.py +0 -0
  45. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/SOURCES.txt +0 -0
  46. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/dependency_links.txt +0 -0
  47. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/entry_points.txt +0 -0
  48. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/requires.txt +0 -0
  49. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_cli.egg-info/top_level.txt +0 -0
  50. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/__init__.py +0 -0
  51. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/linkedin_contract.py +0 -0
  52. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/linkedin_filters.py +0 -0
  53. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/provider_registry.py +0 -0
  54. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/autotouch_shared/search_contract.py +0 -0
  55. {autotouch_cli-0.2.83 → autotouch_cli-0.2.85}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.83
3
+ Version: 0.2.85
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Project-URL: Homepage, https://app.autotouch.ai
6
6
  Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
@@ -150,7 +150,7 @@ Use `autotouch search companies` and `autotouch search people` for neural search
150
150
 
151
151
  Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
152
152
 
153
- For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
153
+ For structured company builds, start with industry IDs plus geo/company-size filters. User-supplied `keywords` are optional when structured filters are present; use them only to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
154
154
 
155
155
  For account-first prospecting, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use neural search as a default pre-step for every list build; use it when the user's target is genuinely semantic or niche.
156
156
 
@@ -160,7 +160,7 @@ For automation or agent-driven setup, use:
160
160
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
161
161
  - `autotouch cli-reference` for the shipped parser-generated reference
162
162
  - `autotouch capabilities --output json` for provider/workflow contracts
163
- - `autotouch --version` should be `0.2.83` or newer for the cleaned single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
163
+ - `autotouch --version` should be `0.2.85` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, and the cleaned single LinkedIn-sourced list-build path
164
164
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
165
165
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
166
166
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -125,7 +125,7 @@ Use `autotouch search companies` and `autotouch search people` for neural search
125
125
 
126
126
  Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
127
127
 
128
- For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
128
+ For structured company builds, start with industry IDs plus geo/company-size filters. User-supplied `keywords` are optional when structured filters are present; use them only to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
129
129
 
130
130
  For account-first prospecting, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use neural search as a default pre-step for every list build; use it when the user's target is genuinely semantic or niche.
131
131
 
@@ -135,7 +135,7 @@ For automation or agent-driven setup, use:
135
135
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
136
136
  - `autotouch cli-reference` for the shipped parser-generated reference
137
137
  - `autotouch capabilities --output json` for provider/workflow contracts
138
- - `autotouch --version` should be `0.2.83` or newer for the cleaned single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
138
+ - `autotouch --version` should be `0.2.85` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, and the cleaned single LinkedIn-sourced list-build path
139
139
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
140
140
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
141
141
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -5,6 +5,7 @@ import json
5
5
  import time
6
6
  from dataclasses import dataclass
7
7
  from typing import Any, Callable, Dict, Optional
8
+ from urllib.parse import urlencode
8
9
 
9
10
  from autotouch_cli.exceptions import AutotouchInputError, AutotouchTimeoutError
10
11
 
@@ -43,9 +44,15 @@ def _payload(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime, kind
43
44
  filters[key] = values
44
45
  if getattr(args, "has_jobs", False):
45
46
  filters["has_jobs"] = True
46
- profile_language = str(getattr(args, "profile_language", "") or "").strip()
47
- if profile_language:
48
- filters["profile_language"] = profile_language
47
+ for attr, key in (
48
+ ("profile_language", "profile_language"),
49
+ ("service_category", "service_category"),
50
+ ("first_name", "first_name"),
51
+ ("last_name", "last_name"),
52
+ ):
53
+ value = str(getattr(args, attr, "") or "").strip()
54
+ if value:
55
+ filters[key] = value
49
56
  payload: Dict[str, Any] = {
50
57
  "kind": kind,
51
58
  "num_results": max(1, min(int(getattr(args, "num_results", 100) or 100), 10000)),
@@ -134,6 +141,29 @@ def cmd_list_build_results(args: argparse.Namespace, *, runtime: ListBuildComman
134
141
 
135
142
  def cmd_list_build_inputs(args: argparse.Namespace, *, runtime: ListBuildCommandRuntime) -> None:
136
143
  token = runtime.resolve_token(args.token, required=True)
144
+ input_type = str(getattr(args, "type", "") or "").strip()
145
+ query = str(getattr(args, "query", "") or "").strip()
146
+ if input_type or query:
147
+ if not input_type or not query:
148
+ raise AutotouchInputError("list-build inputs search requires both --type and --query")
149
+ params = urlencode(
150
+ {
151
+ "type": input_type,
152
+ "q": query,
153
+ "limit": max(1, min(int(getattr(args, "limit", 20) or 20), 50)),
154
+ }
155
+ )
156
+ data = runtime.request_api(
157
+ "GET",
158
+ f"/api/list-builds/inputs/search?{params}",
159
+ base_url=args.base_url,
160
+ token=token,
161
+ use_x_api_key=args.use_x_api_key,
162
+ timeout=args.timeout,
163
+ verbose=args.verbose,
164
+ )
165
+ runtime.print_json(data, args.compact)
166
+ return
137
167
  data = runtime.request_api(
138
168
  "GET",
139
169
  "/api/list-builds/inputs",
@@ -169,20 +199,10 @@ def register_list_build_subcommands(
169
199
  parser = subparsers.add_parser("list-build", help="Build durable LinkedIn-sourced company and lead lists")
170
200
  sub = parser.add_subparsers(dest="list_build_cmd", required=True)
171
201
 
172
- def add_create_args(p: argparse.ArgumentParser) -> None:
202
+ def add_common_create_args(p: argparse.ArgumentParser) -> None:
173
203
  p.add_argument("--data-json", help="Explicit list-build payload JSON")
174
204
  p.add_argument("--data-file", help="Path to list-build payload JSON file")
175
205
  p.add_argument("--list-name", help="Optional display name")
176
- p.add_argument("--keywords", help="Search keywords")
177
- p.add_argument("--title", help="Lead title/persona query")
178
- p.add_argument("--geo-id", action="append", help="Geography ID; repeat or comma-separate in JSON")
179
- p.add_argument("--industry-id", action="append", help="Industry ID; repeat or comma-separate in JSON")
180
- p.add_argument("--company-size", action="append", help="Company size bucket, e.g. 1-10 or 11-50")
181
- p.add_argument("--current-company-id", action="append", help="Company ID for lead search")
182
- p.add_argument("--past-company-id", action="append", help="Past company ID for lead search")
183
- p.add_argument("--school-id", action="append", help="School ID for lead search")
184
- p.add_argument("--profile-language", help="Profile language code, e.g. en")
185
- p.add_argument("--has-jobs", action="store_true", help="Only include companies with active job listings")
186
206
  p.add_argument("--num-results", type=int, default=100, help="Target result count, 1-10000")
187
207
  p.add_argument("--page-size", type=int, default=25, help="Provider page size")
188
208
  p.add_argument("--wait", action="store_true", help="Poll until terminal status")
@@ -190,12 +210,34 @@ def register_list_build_subcommands(
190
210
  p.add_argument("--wait-timeout", type=int, default=0, help="Max seconds to wait (0 = no timeout)")
191
211
  add_api_common_arguments(p)
192
212
 
213
+ def add_company_create_args(p: argparse.ArgumentParser) -> None:
214
+ add_common_create_args(p)
215
+ p.add_argument("--keywords", required=False, help="Optional company keyword anchor; structured filters can run without it")
216
+ p.add_argument("--geo-id", action="append", help="LinkedIn GeoURN ID; repeat or comma-separate in JSON")
217
+ p.add_argument("--industry-id", action="append", help="Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON")
218
+ p.add_argument("--company-size", action="append", help="Company size bucket, e.g. 1-10 or 11-50")
219
+ p.add_argument("--has-jobs", action="store_true", help="Only include companies with active job listings")
220
+
221
+ def add_lead_create_args(p: argparse.ArgumentParser) -> None:
222
+ add_common_create_args(p)
223
+ p.add_argument("--keywords", help="Optional free-text profile keyword")
224
+ p.add_argument("--title", help="Lead title/persona query")
225
+ p.add_argument("--geo-id", action="append", help="LinkedIn GeoURN ID; repeat or comma-separate in JSON")
226
+ p.add_argument("--industry-id", action="append", help="Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON")
227
+ p.add_argument("--current-company-id", action="append", help="Company ID returned by a company list build")
228
+ p.add_argument("--past-company-id", action="append", help="Past company ID for lead search")
229
+ p.add_argument("--school-id", action="append", help="School ID for lead search")
230
+ p.add_argument("--profile-language", help="Profile language code, e.g. en")
231
+ p.add_argument("--service-category", help="Service category string")
232
+ p.add_argument("--first-name", help="First-name filter")
233
+ p.add_argument("--last-name", help="Last-name filter")
234
+
193
235
  companies = sub.add_parser("companies", help="Build a company/account list")
194
- add_create_args(companies)
236
+ add_company_create_args(companies)
195
237
  companies.set_defaults(func=handlers["companies"])
196
238
 
197
239
  leads = sub.add_parser("leads", help="Build a lead/contact list")
198
- add_create_args(leads)
240
+ add_lead_create_args(leads)
199
241
  leads.set_defaults(func=handlers["leads"])
200
242
 
201
243
  status = sub.add_parser("status", help="Get list-build job status")
@@ -212,6 +254,9 @@ def register_list_build_subcommands(
212
254
  results.set_defaults(func=handlers["results"])
213
255
 
214
256
  inputs = sub.add_parser("inputs", help="Show valid list-build filter IDs and values")
257
+ inputs.add_argument("--type", choices=["geo", "industry", "service", "title_skill", "title-skills"], help="Search input type")
258
+ inputs.add_argument("--query", help="Search text for input ID lookup")
259
+ inputs.add_argument("--limit", type=int, default=20, help="Max lookup results, 1-50")
215
260
  add_api_common_arguments(inputs)
216
261
  inputs.set_defaults(func=handlers["inputs"])
217
262
 
@@ -1,6 +1,6 @@
1
1
  # Autotouch CLI Reference
2
2
 
3
- Generated from the installed parser for `autotouch-cli` `0.2.83`.
3
+ Generated from the installed parser for `autotouch-cli` `0.2.85`.
4
4
  Manifest schema version: `2`.
5
5
 
6
6
  ## Output Modes
@@ -2323,15 +2323,7 @@ Build a company/account list
2323
2323
  - `autotouch list-build companies [-h] [--data-json DATA_JSON]
2324
2324
  [--data-file DATA_FILE]
2325
2325
  [--list-name LIST_NAME]
2326
- [--keywords KEYWORDS] [--title TITLE]
2327
- [--geo-id GEO_ID]
2328
- [--industry-id INDUSTRY_ID]
2329
- [--company-size COMPANY_SIZE]
2330
- [--current-company-id CURRENT_COMPANY_ID]
2331
- [--past-company-id PAST_COMPANY_ID]
2332
- [--school-id SCHOOL_ID]
2333
- [--profile-language PROFILE_LANGUAGE]
2334
- [--has-jobs] [--num-results NUM_RESULTS]
2326
+ [--num-results NUM_RESULTS]
2335
2327
  [--page-size PAGE_SIZE] [--wait]
2336
2328
  [--poll-interval POLL_INTERVAL]
2337
2329
  [--wait-timeout WAIT_TIMEOUT]
@@ -2339,21 +2331,15 @@ Build a company/account list
2339
2331
  [--use-x-api-key] [--timeout TIMEOUT]
2340
2332
  [--output {json,ndjson,human}]
2341
2333
  [--compact] [--select SELECT |
2342
- --json-pointer JSON_POINTER] [--verbose]`
2334
+ --json-pointer JSON_POINTER] [--verbose]
2335
+ [--keywords KEYWORDS] [--geo-id GEO_ID]
2336
+ [--industry-id INDUSTRY_ID]
2337
+ [--company-size COMPANY_SIZE]
2338
+ [--has-jobs]`
2343
2339
  - Options:
2344
2340
  - `--data-json` (kind=json; input=json): Explicit list-build payload JSON
2345
2341
  - `--data-file` (kind=file; input=file): Path to list-build payload JSON file
2346
2342
  - `--list-name` (kind=string): Optional display name
2347
- - `--keywords` (kind=string): Search keywords
2348
- - `--title` (kind=string): Lead title/persona query
2349
- - `--geo-id` (kind=string; repeatable): Geography ID; repeat or comma-separate in JSON
2350
- - `--industry-id` (kind=string; repeatable): Industry ID; repeat or comma-separate in JSON
2351
- - `--company-size` (kind=string; repeatable): Company size bucket, e.g. 1-10 or 11-50
2352
- - `--current-company-id` (kind=string; repeatable): Company ID for lead search
2353
- - `--past-company-id` (kind=string; repeatable): Past company ID for lead search
2354
- - `--school-id` (kind=string; repeatable): School ID for lead search
2355
- - `--profile-language` (kind=string): Profile language code, e.g. en
2356
- - `--has-jobs` (kind=boolean; when omitted=False; when present=True): Only include companies with active job listings
2357
2343
  - `--num-results` (kind=integer; default=100): Target result count, 1-10000
2358
2344
  - `--page-size` (kind=integer; default=25): Provider page size
2359
2345
  - `--wait` (kind=boolean; when omitted=False; when present=True): Poll until terminal status
@@ -2368,6 +2354,11 @@ Build a company/account list
2368
2354
  - `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
2369
2355
  - `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
2370
2356
  - `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
2357
+ - `--keywords` (kind=string): Optional company keyword anchor; structured filters can run without it
2358
+ - `--geo-id` (kind=string; repeatable): LinkedIn GeoURN ID; repeat or comma-separate in JSON
2359
+ - `--industry-id` (kind=string; repeatable): Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON
2360
+ - `--company-size` (kind=string; repeatable): Company size bucket, e.g. 1-10 or 11-50
2361
+ - `--has-jobs` (kind=boolean; when omitted=False; when present=True): Only include companies with active job listings
2371
2362
 
2372
2363
  #### `autotouch list-build inputs`
2373
2364
 
@@ -2378,12 +2369,18 @@ Show valid list-build filter IDs and values
2378
2369
  - Destructive: `no`
2379
2370
  - Output modes: `json, ndjson, human`
2380
2371
  - Example:
2381
- - `autotouch list-build inputs [-h] [--base-url BASE_URL] [--token TOKEN]
2372
+ - `autotouch list-build inputs [-h]
2373
+ [--type {geo,industry,service,title_skill,title-skills}]
2374
+ [--query QUERY] [--limit LIMIT]
2375
+ [--base-url BASE_URL] [--token TOKEN]
2382
2376
  [--use-x-api-key] [--timeout TIMEOUT]
2383
2377
  [--output {json,ndjson,human}] [--compact]
2384
2378
  [--select SELECT |
2385
2379
  --json-pointer JSON_POINTER] [--verbose]`
2386
2380
  - Options:
2381
+ - `--type` (kind=string; choices=geo,industry,service,title_skill,title-skills): Search input type
2382
+ - `--query` (kind=string): Search text for input ID lookup
2383
+ - `--limit` (kind=integer; default=20): Max lookup results, 1-50
2387
2384
  - `--base-url` (kind=string; default=https://app.autotouch.ai): API base URL (default: https://app.autotouch.ai)
2388
2385
  - `--token` (kind=string; sensitive): Developer API key / JWT token
2389
2386
  - `--use-x-api-key` (kind=boolean; when omitted=False; when present=True): Send token via X-API-Key header
@@ -2406,15 +2403,7 @@ Build a lead/contact list
2406
2403
  - `autotouch list-build leads [-h] [--data-json DATA_JSON]
2407
2404
  [--data-file DATA_FILE]
2408
2405
  [--list-name LIST_NAME]
2409
- [--keywords KEYWORDS] [--title TITLE]
2410
- [--geo-id GEO_ID]
2411
- [--industry-id INDUSTRY_ID]
2412
- [--company-size COMPANY_SIZE]
2413
- [--current-company-id CURRENT_COMPANY_ID]
2414
- [--past-company-id PAST_COMPANY_ID]
2415
- [--school-id SCHOOL_ID]
2416
- [--profile-language PROFILE_LANGUAGE]
2417
- [--has-jobs] [--num-results NUM_RESULTS]
2406
+ [--num-results NUM_RESULTS]
2418
2407
  [--page-size PAGE_SIZE] [--wait]
2419
2408
  [--poll-interval POLL_INTERVAL]
2420
2409
  [--wait-timeout WAIT_TIMEOUT]
@@ -2422,21 +2411,21 @@ Build a lead/contact list
2422
2411
  [--use-x-api-key] [--timeout TIMEOUT]
2423
2412
  [--output {json,ndjson,human}] [--compact]
2424
2413
  [--select SELECT |
2425
- --json-pointer JSON_POINTER] [--verbose]`
2414
+ --json-pointer JSON_POINTER] [--verbose]
2415
+ [--keywords KEYWORDS] [--title TITLE]
2416
+ [--geo-id GEO_ID]
2417
+ [--industry-id INDUSTRY_ID]
2418
+ [--current-company-id CURRENT_COMPANY_ID]
2419
+ [--past-company-id PAST_COMPANY_ID]
2420
+ [--school-id SCHOOL_ID]
2421
+ [--profile-language PROFILE_LANGUAGE]
2422
+ [--service-category SERVICE_CATEGORY]
2423
+ [--first-name FIRST_NAME]
2424
+ [--last-name LAST_NAME]`
2426
2425
  - Options:
2427
2426
  - `--data-json` (kind=json; input=json): Explicit list-build payload JSON
2428
2427
  - `--data-file` (kind=file; input=file): Path to list-build payload JSON file
2429
2428
  - `--list-name` (kind=string): Optional display name
2430
- - `--keywords` (kind=string): Search keywords
2431
- - `--title` (kind=string): Lead title/persona query
2432
- - `--geo-id` (kind=string; repeatable): Geography ID; repeat or comma-separate in JSON
2433
- - `--industry-id` (kind=string; repeatable): Industry ID; repeat or comma-separate in JSON
2434
- - `--company-size` (kind=string; repeatable): Company size bucket, e.g. 1-10 or 11-50
2435
- - `--current-company-id` (kind=string; repeatable): Company ID for lead search
2436
- - `--past-company-id` (kind=string; repeatable): Past company ID for lead search
2437
- - `--school-id` (kind=string; repeatable): School ID for lead search
2438
- - `--profile-language` (kind=string): Profile language code, e.g. en
2439
- - `--has-jobs` (kind=boolean; when omitted=False; when present=True): Only include companies with active job listings
2440
2429
  - `--num-results` (kind=integer; default=100): Target result count, 1-10000
2441
2430
  - `--page-size` (kind=integer; default=25): Provider page size
2442
2431
  - `--wait` (kind=boolean; when omitted=False; when present=True): Poll until terminal status
@@ -2451,6 +2440,17 @@ Build a lead/contact list
2451
2440
  - `--select` (kind=string): Extract a dotted field path from the final result (for example: id or items.0.id)
2452
2441
  - `--json-pointer` (kind=string): Extract a JSON pointer from the final result (for example: /id)
2453
2442
  - `--verbose` (kind=boolean; when omitted=False; when present=True): Print request metadata to stderr
2443
+ - `--keywords` (kind=string): Optional free-text profile keyword
2444
+ - `--title` (kind=string): Lead title/persona query
2445
+ - `--geo-id` (kind=string; repeatable): LinkedIn GeoURN ID; repeat or comma-separate in JSON
2446
+ - `--industry-id` (kind=string; repeatable): Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON
2447
+ - `--current-company-id` (kind=string; repeatable): Company ID returned by a company list build
2448
+ - `--past-company-id` (kind=string; repeatable): Past company ID for lead search
2449
+ - `--school-id` (kind=string; repeatable): School ID for lead search
2450
+ - `--profile-language` (kind=string): Profile language code, e.g. en
2451
+ - `--service-category` (kind=string): Service category string
2452
+ - `--first-name` (kind=string): First-name filter
2453
+ - `--last-name` (kind=string): Last-name filter
2454
2454
 
2455
2455
  #### `autotouch list-build pricing`
2456
2456
 
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.83",
2
+ "version": "0.2.85",
3
3
  "manifest_schema_version": 2,
4
4
  "entry_points": {
5
5
  "autotouch": "autotouch_cli.cli:main",
@@ -32826,125 +32826,6 @@
32826
32826
  ],
32827
32827
  "takes_value": true
32828
32828
  },
32829
- {
32830
- "dest": "keywords",
32831
- "required": false,
32832
- "help": "Search keywords",
32833
- "kind": "string",
32834
- "action": "store",
32835
- "flags": [
32836
- "--keywords"
32837
- ],
32838
- "takes_value": true
32839
- },
32840
- {
32841
- "dest": "title",
32842
- "required": false,
32843
- "help": "Lead title/persona query",
32844
- "kind": "string",
32845
- "action": "store",
32846
- "flags": [
32847
- "--title"
32848
- ],
32849
- "takes_value": true
32850
- },
32851
- {
32852
- "dest": "geo_id",
32853
- "required": false,
32854
- "help": "Geography ID; repeat or comma-separate in JSON",
32855
- "kind": "string",
32856
- "action": "append",
32857
- "repeatable": true,
32858
- "flags": [
32859
- "--geo-id"
32860
- ],
32861
- "takes_value": true
32862
- },
32863
- {
32864
- "dest": "industry_id",
32865
- "required": false,
32866
- "help": "Industry ID; repeat or comma-separate in JSON",
32867
- "kind": "string",
32868
- "action": "append",
32869
- "repeatable": true,
32870
- "flags": [
32871
- "--industry-id"
32872
- ],
32873
- "takes_value": true
32874
- },
32875
- {
32876
- "dest": "company_size",
32877
- "required": false,
32878
- "help": "Company size bucket, e.g. 1-10 or 11-50",
32879
- "kind": "string",
32880
- "action": "append",
32881
- "repeatable": true,
32882
- "flags": [
32883
- "--company-size"
32884
- ],
32885
- "takes_value": true
32886
- },
32887
- {
32888
- "dest": "current_company_id",
32889
- "required": false,
32890
- "help": "Company ID for lead search",
32891
- "kind": "string",
32892
- "action": "append",
32893
- "repeatable": true,
32894
- "flags": [
32895
- "--current-company-id"
32896
- ],
32897
- "takes_value": true
32898
- },
32899
- {
32900
- "dest": "past_company_id",
32901
- "required": false,
32902
- "help": "Past company ID for lead search",
32903
- "kind": "string",
32904
- "action": "append",
32905
- "repeatable": true,
32906
- "flags": [
32907
- "--past-company-id"
32908
- ],
32909
- "takes_value": true
32910
- },
32911
- {
32912
- "dest": "school_id",
32913
- "required": false,
32914
- "help": "School ID for lead search",
32915
- "kind": "string",
32916
- "action": "append",
32917
- "repeatable": true,
32918
- "flags": [
32919
- "--school-id"
32920
- ],
32921
- "takes_value": true
32922
- },
32923
- {
32924
- "dest": "profile_language",
32925
- "required": false,
32926
- "help": "Profile language code, e.g. en",
32927
- "kind": "string",
32928
- "action": "store",
32929
- "flags": [
32930
- "--profile-language"
32931
- ],
32932
- "takes_value": true
32933
- },
32934
- {
32935
- "dest": "has_jobs",
32936
- "required": false,
32937
- "help": "Only include companies with active job listings",
32938
- "kind": "boolean",
32939
- "action": "store_true",
32940
- "nargs": 0,
32941
- "default_when_omitted": false,
32942
- "value_when_present": true,
32943
- "flags": [
32944
- "--has-jobs"
32945
- ],
32946
- "takes_value": false
32947
- },
32948
32829
  {
32949
32830
  "dest": "num_results",
32950
32831
  "required": false,
@@ -33130,6 +33011,67 @@
33130
33011
  "--verbose"
33131
33012
  ],
33132
33013
  "takes_value": false
33014
+ },
33015
+ {
33016
+ "dest": "keywords",
33017
+ "required": false,
33018
+ "help": "Optional company keyword anchor; structured filters can run without it",
33019
+ "kind": "string",
33020
+ "action": "store",
33021
+ "flags": [
33022
+ "--keywords"
33023
+ ],
33024
+ "takes_value": true
33025
+ },
33026
+ {
33027
+ "dest": "geo_id",
33028
+ "required": false,
33029
+ "help": "LinkedIn GeoURN ID; repeat or comma-separate in JSON",
33030
+ "kind": "string",
33031
+ "action": "append",
33032
+ "repeatable": true,
33033
+ "flags": [
33034
+ "--geo-id"
33035
+ ],
33036
+ "takes_value": true
33037
+ },
33038
+ {
33039
+ "dest": "industry_id",
33040
+ "required": false,
33041
+ "help": "Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON",
33042
+ "kind": "string",
33043
+ "action": "append",
33044
+ "repeatable": true,
33045
+ "flags": [
33046
+ "--industry-id"
33047
+ ],
33048
+ "takes_value": true
33049
+ },
33050
+ {
33051
+ "dest": "company_size",
33052
+ "required": false,
33053
+ "help": "Company size bucket, e.g. 1-10 or 11-50",
33054
+ "kind": "string",
33055
+ "action": "append",
33056
+ "repeatable": true,
33057
+ "flags": [
33058
+ "--company-size"
33059
+ ],
33060
+ "takes_value": true
33061
+ },
33062
+ {
33063
+ "dest": "has_jobs",
33064
+ "required": false,
33065
+ "help": "Only include companies with active job listings",
33066
+ "kind": "boolean",
33067
+ "action": "store_true",
33068
+ "nargs": 0,
33069
+ "default_when_omitted": false,
33070
+ "value_when_present": true,
33071
+ "flags": [
33072
+ "--has-jobs"
33073
+ ],
33074
+ "takes_value": false
33133
33075
  }
33134
33076
  ],
33135
33077
  "mutually_exclusive_groups": [
@@ -33164,7 +33106,7 @@
33164
33106
  },
33165
33107
  "availability": null,
33166
33108
  "examples": [
33167
- "autotouch list-build companies [-h] [--data-json DATA_JSON]\n [--data-file DATA_FILE]\n [--list-name LIST_NAME]\n [--keywords KEYWORDS] [--title TITLE]\n [--geo-id GEO_ID]\n [--industry-id INDUSTRY_ID]\n [--company-size COMPANY_SIZE]\n [--current-company-id CURRENT_COMPANY_ID]\n [--past-company-id PAST_COMPANY_ID]\n [--school-id SCHOOL_ID]\n [--profile-language PROFILE_LANGUAGE]\n [--has-jobs] [--num-results NUM_RESULTS]\n [--page-size PAGE_SIZE] [--wait]\n [--poll-interval POLL_INTERVAL]\n [--wait-timeout WAIT_TIMEOUT]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]"
33109
+ "autotouch list-build companies [-h] [--data-json DATA_JSON]\n [--data-file DATA_FILE]\n [--list-name LIST_NAME]\n [--num-results NUM_RESULTS]\n [--page-size PAGE_SIZE] [--wait]\n [--poll-interval POLL_INTERVAL]\n [--wait-timeout WAIT_TIMEOUT]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}]\n [--compact] [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]\n [--keywords KEYWORDS] [--geo-id GEO_ID]\n [--industry-id INDUSTRY_ID]\n [--company-size COMPANY_SIZE]\n [--has-jobs]"
33168
33110
  ],
33169
33111
  "stability": "stable",
33170
33112
  "handler": "_fn"
@@ -33218,125 +33160,6 @@
33218
33160
  ],
33219
33161
  "takes_value": true
33220
33162
  },
33221
- {
33222
- "dest": "keywords",
33223
- "required": false,
33224
- "help": "Search keywords",
33225
- "kind": "string",
33226
- "action": "store",
33227
- "flags": [
33228
- "--keywords"
33229
- ],
33230
- "takes_value": true
33231
- },
33232
- {
33233
- "dest": "title",
33234
- "required": false,
33235
- "help": "Lead title/persona query",
33236
- "kind": "string",
33237
- "action": "store",
33238
- "flags": [
33239
- "--title"
33240
- ],
33241
- "takes_value": true
33242
- },
33243
- {
33244
- "dest": "geo_id",
33245
- "required": false,
33246
- "help": "Geography ID; repeat or comma-separate in JSON",
33247
- "kind": "string",
33248
- "action": "append",
33249
- "repeatable": true,
33250
- "flags": [
33251
- "--geo-id"
33252
- ],
33253
- "takes_value": true
33254
- },
33255
- {
33256
- "dest": "industry_id",
33257
- "required": false,
33258
- "help": "Industry ID; repeat or comma-separate in JSON",
33259
- "kind": "string",
33260
- "action": "append",
33261
- "repeatable": true,
33262
- "flags": [
33263
- "--industry-id"
33264
- ],
33265
- "takes_value": true
33266
- },
33267
- {
33268
- "dest": "company_size",
33269
- "required": false,
33270
- "help": "Company size bucket, e.g. 1-10 or 11-50",
33271
- "kind": "string",
33272
- "action": "append",
33273
- "repeatable": true,
33274
- "flags": [
33275
- "--company-size"
33276
- ],
33277
- "takes_value": true
33278
- },
33279
- {
33280
- "dest": "current_company_id",
33281
- "required": false,
33282
- "help": "Company ID for lead search",
33283
- "kind": "string",
33284
- "action": "append",
33285
- "repeatable": true,
33286
- "flags": [
33287
- "--current-company-id"
33288
- ],
33289
- "takes_value": true
33290
- },
33291
- {
33292
- "dest": "past_company_id",
33293
- "required": false,
33294
- "help": "Past company ID for lead search",
33295
- "kind": "string",
33296
- "action": "append",
33297
- "repeatable": true,
33298
- "flags": [
33299
- "--past-company-id"
33300
- ],
33301
- "takes_value": true
33302
- },
33303
- {
33304
- "dest": "school_id",
33305
- "required": false,
33306
- "help": "School ID for lead search",
33307
- "kind": "string",
33308
- "action": "append",
33309
- "repeatable": true,
33310
- "flags": [
33311
- "--school-id"
33312
- ],
33313
- "takes_value": true
33314
- },
33315
- {
33316
- "dest": "profile_language",
33317
- "required": false,
33318
- "help": "Profile language code, e.g. en",
33319
- "kind": "string",
33320
- "action": "store",
33321
- "flags": [
33322
- "--profile-language"
33323
- ],
33324
- "takes_value": true
33325
- },
33326
- {
33327
- "dest": "has_jobs",
33328
- "required": false,
33329
- "help": "Only include companies with active job listings",
33330
- "kind": "boolean",
33331
- "action": "store_true",
33332
- "nargs": 0,
33333
- "default_when_omitted": false,
33334
- "value_when_present": true,
33335
- "flags": [
33336
- "--has-jobs"
33337
- ],
33338
- "takes_value": false
33339
- },
33340
33163
  {
33341
33164
  "dest": "num_results",
33342
33165
  "required": false,
@@ -33522,6 +33345,132 @@
33522
33345
  "--verbose"
33523
33346
  ],
33524
33347
  "takes_value": false
33348
+ },
33349
+ {
33350
+ "dest": "keywords",
33351
+ "required": false,
33352
+ "help": "Optional free-text profile keyword",
33353
+ "kind": "string",
33354
+ "action": "store",
33355
+ "flags": [
33356
+ "--keywords"
33357
+ ],
33358
+ "takes_value": true
33359
+ },
33360
+ {
33361
+ "dest": "title",
33362
+ "required": false,
33363
+ "help": "Lead title/persona query",
33364
+ "kind": "string",
33365
+ "action": "store",
33366
+ "flags": [
33367
+ "--title"
33368
+ ],
33369
+ "takes_value": true
33370
+ },
33371
+ {
33372
+ "dest": "geo_id",
33373
+ "required": false,
33374
+ "help": "LinkedIn GeoURN ID; repeat or comma-separate in JSON",
33375
+ "kind": "string",
33376
+ "action": "append",
33377
+ "repeatable": true,
33378
+ "flags": [
33379
+ "--geo-id"
33380
+ ],
33381
+ "takes_value": true
33382
+ },
33383
+ {
33384
+ "dest": "industry_id",
33385
+ "required": false,
33386
+ "help": "Industry ID from `autotouch list-build inputs`; repeat or comma-separate in JSON",
33387
+ "kind": "string",
33388
+ "action": "append",
33389
+ "repeatable": true,
33390
+ "flags": [
33391
+ "--industry-id"
33392
+ ],
33393
+ "takes_value": true
33394
+ },
33395
+ {
33396
+ "dest": "current_company_id",
33397
+ "required": false,
33398
+ "help": "Company ID returned by a company list build",
33399
+ "kind": "string",
33400
+ "action": "append",
33401
+ "repeatable": true,
33402
+ "flags": [
33403
+ "--current-company-id"
33404
+ ],
33405
+ "takes_value": true
33406
+ },
33407
+ {
33408
+ "dest": "past_company_id",
33409
+ "required": false,
33410
+ "help": "Past company ID for lead search",
33411
+ "kind": "string",
33412
+ "action": "append",
33413
+ "repeatable": true,
33414
+ "flags": [
33415
+ "--past-company-id"
33416
+ ],
33417
+ "takes_value": true
33418
+ },
33419
+ {
33420
+ "dest": "school_id",
33421
+ "required": false,
33422
+ "help": "School ID for lead search",
33423
+ "kind": "string",
33424
+ "action": "append",
33425
+ "repeatable": true,
33426
+ "flags": [
33427
+ "--school-id"
33428
+ ],
33429
+ "takes_value": true
33430
+ },
33431
+ {
33432
+ "dest": "profile_language",
33433
+ "required": false,
33434
+ "help": "Profile language code, e.g. en",
33435
+ "kind": "string",
33436
+ "action": "store",
33437
+ "flags": [
33438
+ "--profile-language"
33439
+ ],
33440
+ "takes_value": true
33441
+ },
33442
+ {
33443
+ "dest": "service_category",
33444
+ "required": false,
33445
+ "help": "Service category string",
33446
+ "kind": "string",
33447
+ "action": "store",
33448
+ "flags": [
33449
+ "--service-category"
33450
+ ],
33451
+ "takes_value": true
33452
+ },
33453
+ {
33454
+ "dest": "first_name",
33455
+ "required": false,
33456
+ "help": "First-name filter",
33457
+ "kind": "string",
33458
+ "action": "store",
33459
+ "flags": [
33460
+ "--first-name"
33461
+ ],
33462
+ "takes_value": true
33463
+ },
33464
+ {
33465
+ "dest": "last_name",
33466
+ "required": false,
33467
+ "help": "Last-name filter",
33468
+ "kind": "string",
33469
+ "action": "store",
33470
+ "flags": [
33471
+ "--last-name"
33472
+ ],
33473
+ "takes_value": true
33525
33474
  }
33526
33475
  ],
33527
33476
  "mutually_exclusive_groups": [
@@ -33556,7 +33505,7 @@
33556
33505
  },
33557
33506
  "availability": null,
33558
33507
  "examples": [
33559
- "autotouch list-build leads [-h] [--data-json DATA_JSON]\n [--data-file DATA_FILE]\n [--list-name LIST_NAME]\n [--keywords KEYWORDS] [--title TITLE]\n [--geo-id GEO_ID]\n [--industry-id INDUSTRY_ID]\n [--company-size COMPANY_SIZE]\n [--current-company-id CURRENT_COMPANY_ID]\n [--past-company-id PAST_COMPANY_ID]\n [--school-id SCHOOL_ID]\n [--profile-language PROFILE_LANGUAGE]\n [--has-jobs] [--num-results NUM_RESULTS]\n [--page-size PAGE_SIZE] [--wait]\n [--poll-interval POLL_INTERVAL]\n [--wait-timeout WAIT_TIMEOUT]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]"
33508
+ "autotouch list-build leads [-h] [--data-json DATA_JSON]\n [--data-file DATA_FILE]\n [--list-name LIST_NAME]\n [--num-results NUM_RESULTS]\n [--page-size PAGE_SIZE] [--wait]\n [--poll-interval POLL_INTERVAL]\n [--wait-timeout WAIT_TIMEOUT]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]\n [--keywords KEYWORDS] [--title TITLE]\n [--geo-id GEO_ID]\n [--industry-id INDUSTRY_ID]\n [--current-company-id CURRENT_COMPANY_ID]\n [--past-company-id PAST_COMPANY_ID]\n [--school-id SCHOOL_ID]\n [--profile-language PROFILE_LANGUAGE]\n [--service-category SERVICE_CATEGORY]\n [--first-name FIRST_NAME]\n [--last-name LAST_NAME]"
33560
33509
  ],
33561
33510
  "stability": "stable",
33562
33511
  "handler": "_fn"
@@ -33990,6 +33939,48 @@
33990
33939
  "required_flags": [],
33991
33940
  "positionals": [],
33992
33941
  "options": [
33942
+ {
33943
+ "dest": "type",
33944
+ "required": false,
33945
+ "help": "Search input type",
33946
+ "kind": "string",
33947
+ "action": "store",
33948
+ "choices": [
33949
+ "geo",
33950
+ "industry",
33951
+ "service",
33952
+ "title_skill",
33953
+ "title-skills"
33954
+ ],
33955
+ "flags": [
33956
+ "--type"
33957
+ ],
33958
+ "takes_value": true
33959
+ },
33960
+ {
33961
+ "dest": "query",
33962
+ "required": false,
33963
+ "help": "Search text for input ID lookup",
33964
+ "kind": "string",
33965
+ "action": "store",
33966
+ "flags": [
33967
+ "--query"
33968
+ ],
33969
+ "takes_value": true
33970
+ },
33971
+ {
33972
+ "dest": "limit",
33973
+ "required": false,
33974
+ "help": "Max lookup results, 1-50",
33975
+ "kind": "integer",
33976
+ "action": "store",
33977
+ "default_when_omitted": 20,
33978
+ "default": 20,
33979
+ "flags": [
33980
+ "--limit"
33981
+ ],
33982
+ "takes_value": true
33983
+ },
33993
33984
  {
33994
33985
  "dest": "base_url",
33995
33986
  "required": false,
@@ -34143,7 +34134,7 @@
34143
34134
  },
34144
34135
  "availability": null,
34145
34136
  "examples": [
34146
- "autotouch list-build inputs [-h] [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]"
34137
+ "autotouch list-build inputs [-h]\n [--type {geo,industry,service,title_skill,title-skills}]\n [--query QUERY] [--limit LIMIT]\n [--base-url BASE_URL] [--token TOKEN]\n [--use-x-api-key] [--timeout TIMEOUT]\n [--output {json,ndjson,human}] [--compact]\n [--select SELECT |\n --json-pointer JSON_POINTER] [--verbose]"
34147
34138
  ],
34148
34139
  "stability": "stable",
34149
34140
  "handler": "_fn"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: autotouch-cli
3
- Version: 0.2.83
3
+ Version: 0.2.85
4
4
  Summary: Autotouch Smart Table CLI
5
5
  Project-URL: Homepage, https://app.autotouch.ai
6
6
  Project-URL: Documentation, https://github.com/nicolonic/autotouch_main/tree/main/docs/research-table/reference
@@ -150,7 +150,7 @@ Use `autotouch search companies` and `autotouch search people` for neural search
150
150
 
151
151
  Use `autotouch list-build companies` and `autotouch list-build leads` for structured, repeatable list construction. This is the only CLI path for building LinkedIn-sourced company and lead lists. Treat list builds as the sourcing step for the Smart Table research workspace: build company/account records first by default, add the records to a research table, then enrich, score, segment, find related leads, attach signals/notes, and continue downstream workflows from that table. Use lead builds directly when the request is explicitly person/contact focused. This path uses Autotouch-managed provider access, so users do not need to connect their own LinkedIn account. Use filters like geography IDs, company size, industry IDs, title/persona, and current company IDs; call `autotouch list-build inputs` for supported values. Durable list builds run as background jobs with status/results endpoints and cost 1 credit per successful non-empty result page.
152
152
 
153
- For structured company builds, start with industry IDs plus geo/company-size filters. Company builds still need a broad `keywords` anchor (for example, `software`), but keywords are less reliable because they depend on company/profile text; use them to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
153
+ For structured company builds, start with industry IDs plus geo/company-size filters. User-supplied `keywords` are optional when structured filters are present; use them only to refine, disambiguate, or recover hard-to-classify targets instead of carrying the whole target definition.
154
154
 
155
155
  For account-first prospecting, build companies/accounts first, inspect the returned company IDs, then pass those IDs to `autotouch list-build leads --current-company-id ...`. Do not use neural search as a default pre-step for every list build; use it when the user's target is genuinely semantic or niche.
156
156
 
@@ -160,7 +160,7 @@ For automation or agent-driven setup, use:
160
160
  - `autotouch cli-manifest --output json` for the local machine-readable command contract
161
161
  - `autotouch cli-reference` for the shipped parser-generated reference
162
162
  - `autotouch capabilities --output json` for provider/workflow contracts
163
- - `autotouch --version` should be `0.2.83` or newer for the cleaned single LinkedIn-sourced list-build path, `list-build inputs/pricing`, research-workspace list-build guidance, and 10-result neural search cap
163
+ - `autotouch --version` should be `0.2.85` or newer for structured company list builds without user-supplied keywords, stored list-build input lookup, research-workspace list-build guidance, and the cleaned single LinkedIn-sourced list-build path
164
164
  - `autotouch capabilities --output json --select list_builds` for documented list-build inputs such as geography IDs, company size buckets, profile language, and company IDs
165
165
  - `autotouch list-build inputs` and `autotouch list-build pricing` before creating durable list-build jobs
166
166
  - `autotouch list-build companies` and `autotouch list-build leads` for durable LinkedIn-sourced company and lead list builds with Smart Table-owned background workers, visible progress, and no user-owned LinkedIn connection requirement
@@ -16,7 +16,7 @@ _LIST_BUILD_ENDPOINTS: Dict[str, Dict[str, Any]] = {
16
16
  "body": {
17
17
  "kind": "required companies|leads",
18
18
  "list_name": "optional display name",
19
- "keywords": "required broad anchor for company builds; optional lead keywords; use with structured filters, not as the sole targeting definition",
19
+ "keywords": "optional broad anchor for company builds with structured filters; optional lead keywords; use with structured filters, not as the sole targeting definition",
20
20
  "title": "optional lead title/persona query",
21
21
  "num_results": "optional 1-10000 target result count",
22
22
  "page_size": "optional provider page size; leads capped to 50",
@@ -26,7 +26,12 @@ _LIST_BUILD_ENDPOINTS: Dict[str, Dict[str, Any]] = {
26
26
  "company_sizes": "optional company size buckets: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10,000, 10,001+",
27
27
  "has_jobs": "optional boolean for company lists",
28
28
  "current_company_ids": "optional company IDs returned by company list builds; used for lead lists",
29
+ "past_company_ids": "optional past company IDs for lead lists",
30
+ "school_ids": "optional school IDs for lead lists",
29
31
  "profile_language": "optional language code such as en",
32
+ "service_category": "optional service category string for lead lists",
33
+ "first_name": "optional first-name filter for lead lists",
34
+ "last_name": "optional last-name filter for lead lists",
30
35
  },
31
36
  },
32
37
  "notes": "LinkedIn-sourced durable list build through Autotouch-managed provider access. Does not require a user-owned LinkedIn connection. Use it to source company/account or lead records for the Smart Table research workspace.",
@@ -59,6 +64,17 @@ _LIST_BUILD_ENDPOINTS: Dict[str, Dict[str, Any]] = {
59
64
  "required_scope": LIST_BUILD_SCOPE,
60
65
  "notes": "Returns documented input IDs and filter values for company and lead list builds.",
61
66
  },
67
+ "list_build_input_search": {
68
+ "method": "GET",
69
+ "path": "/api/list-builds/inputs/search",
70
+ "required_scope": LIST_BUILD_SCOPE,
71
+ "query": {
72
+ "type": "required geo|industry|service|title_skill",
73
+ "q": "required lookup text; query is also accepted as an alias",
74
+ "limit": "optional 1-50 result count",
75
+ },
76
+ "notes": "Searches Autotouch's stored LinkedIn-sourced input catalog and refreshes missing lookup values internally. Responses do not expose the underlying data vendor.",
77
+ },
62
78
  }
63
79
 
64
80
  _LIST_BUILD_CAPABILITIES: Dict[str, Any] = {
@@ -73,16 +89,27 @@ _LIST_BUILD_CAPABILITIES: Dict[str, Any] = {
73
89
  "lead_flow": "Use lead builds directly when the request is explicitly person/contact focused; otherwise derive leads from company/account results.",
74
90
  },
75
91
  "known_input_ids": {
76
- "geo_ids": {"United States": "103644278"},
92
+ "geo_ids": {
93
+ "Australia": "101452733",
94
+ "Canada": "101174742",
95
+ "France": "105015875",
96
+ "Germany": "101282230",
97
+ "India": "102713980",
98
+ "United Kingdom": "101165590",
99
+ "United States": "103644278",
100
+ },
101
+ "geo_ids_note": "Examples only; /api/list-builds accepts arbitrary valid LinkedIn GeoURN IDs.",
77
102
  "company_size_buckets": ["1-10", "11-50", "51-200", "201-500", "501-1000", "1001-5000", "5001-10,000", "10,001+"],
103
+ "industry_catalog": "GET /api/list-builds/inputs returns 434 active LinkedIn Industry Codes V2 IDs plus inactive/deprecated IDs.",
104
+ "input_search": "GET /api/list-builds/inputs/search resolves geo, industry, service, and title_skill values from Autotouch's stored input catalog.",
78
105
  "profile_language_examples": ["en"],
79
106
  },
80
107
  "targeting_guidance": [
81
108
  "Use this as the only company/lead list-building path.",
82
109
  "Call `autotouch list-build inputs` before choosing geography, industry, size, language, or company-ID filters.",
83
110
  "Start company/account targeting with industry_ids, geo_ids, and company_sizes.",
84
- "Company builds still require a broad keywords anchor, but keywords are less reliable because they depend on company/profile text.",
85
- "Use keywords to refine, disambiguate, or recover hard-to-classify targets; avoid keywords-only list builds except for exploratory searches.",
111
+ "Company builds do not require user-supplied keywords when structured filters are present.",
112
+ "Use keywords only to refine, disambiguate, or recover hard-to-classify targets; avoid keywords-only list builds except for exploratory searches.",
86
113
  ],
87
114
  "workflow": [
88
115
  "Use this as the only company/lead list-building path.",
@@ -98,7 +125,9 @@ _LIST_BUILD_CAPABILITIES: Dict[str, Any] = {
98
125
  },
99
126
  "recommended_cli": [
100
127
  "autotouch list-build inputs",
101
- "autotouch list-build companies --keywords 'software' --geo-id 103644278 --industry-id <industry_id> --company-size 1-10 --num-results 1000 --wait",
128
+ "autotouch list-build inputs --type geo --query 'Washington'",
129
+ "autotouch list-build inputs --type industry --query 'software'",
130
+ "autotouch list-build companies --geo-id 103644278 --industry-id <industry_id> --company-size 1-10 --num-results 1000 --wait",
102
131
  "autotouch list-build leads --title 'Account Executive OR SDR' --current-company-id <company_id> --profile-language en --num-results 500 --wait",
103
132
  "autotouch list-build status --job-id <job_id>",
104
133
  "autotouch list-build results --job-id <job_id> --type companies",
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "autotouch-cli"
7
- version = "0.2.83"
7
+ version = "0.2.85"
8
8
  description = "Autotouch Smart Table CLI"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes