$npx -y skills add parallel-web/parallel-agent-skills --skill parallel-findallDiscover entities (companies, people, products, etc.) matching a natural-language description. Use when the user asks to 'find all X' or 'list every Y that…' — e.g., 'Find AI startups that raised Series A in 2026', 'List roofing companies in Charlotte NC', 'Show me YC W24 dev too
| 1 | # FindAll: Entity Discovery |
| 2 | |
| 3 | Find: $ARGUMENTS |
| 4 | |
| 5 | > Requires `parallel-cli` ≥ 0.6.0 (the `findall entity-search` command was added in 0.6.0; the broader `findall` command was added in 0.3.0). If either errors with `no such command` or similar, tell the user to run `parallel-cli update` (or `pipx upgrade parallel-web-tools` if installed via pipx), then retry. |
| 6 | |
| 7 | ## When to use this skill |
| 8 | |
| 9 | Use FindAll when the user wants a **structured list of entities** matching a description, not webpages or a narrative answer. |
| 10 | |
| 11 | | User asks for… | Use | |
| 12 | |---|---| |
| 13 | | "Find all X that…" / "List every Y…" | **parallel-findall** (this skill) | |
| 14 | | Webpage results / quick answers / current info | parallel-web-search | |
| 15 | | Narrative report / analysis / "research X" | parallel-deep-research | |
| 16 | | Add fields to a list you already have | parallel-data-enrichment | |
| 17 | |
| 18 | If the user already has a list and just wants to add fields, this is the wrong skill — use parallel-data-enrichment. |
| 19 | |
| 20 | FindAll has two paths: the comprehensive, asynchronous `findall run` (Steps 1–2) and the fast, synchronous `entity-search` (final section). |
| 21 | |
| 22 | - **`entity-search`** — very fast (few seconds), only supports people or company search. Supports a more limited set of query arguments. Optimized for recall over precision; results are not individually verified. |
| 23 | - **`findall run`** — Provides comprehensive coverage, complex, match conditions, exclusions, enrichment, citations, or a type other than people/companies. |
| 24 | |
| 25 | If it's ambiguous, ask the user which they'd prefer and offer a default. Remember entity search limits: companies/people only, no exclusions/generator/enrichment, and `entity_set_id` can't be used with `enrich`/`extend` (re-run via `findall run` if needed). |
| 26 | |
| 27 | Switch to `entity-search` **only when the user explicitly signals they want a fast, throwaway list**. `entity-search` is also strictly more limited: it only supports `companies` or `people` entity types, no exclusions, no generator choice, no enrichment, and the returned `entity_set_id` is **not** usable with `findall enrich`/`extend`. If you start there and the user later asks to enrich or extend, you'll have to re-run via `findall run`. |
| 28 | |
| 29 | ## Step 1: Start the run |
| 30 | |
| 31 | ```bash |
| 32 | parallel-cli findall run "$ARGUMENTS" --no-wait --json |
| 33 | ``` |
| 34 | |
| 35 | Defaults: generator `core`, match limit `10`. Stick with `core` unless the user has a reason to escalate: |
| 36 | |
| 37 | - `-g pro` — most thorough generator (slower, costlier). Use when the user asks for "comprehensive" coverage or matches are sparse on `core` |
| 38 | - `-g base` — fastest, but **markedly lower quality**. Often returns query-echo entities (e.g., directory pages, the literal query string), entries with no URL, or category placeholders. Only use if the user explicitly asks for a quick scan and accepts noise; otherwise prefer `core` |
| 39 | - `-n 50` — return up to 50 matched entities (5–1000 allowed) |
| 40 | |
| 41 | If the user wants to exclude known entities (e.g., "find competitors but not Google or OpenAI"): |
| 42 | |
| 43 | ```bash |
| 44 | parallel-cli findall run "$ARGUMENTS" --no-wait --json \ |
| 45 | --exclude '[{"name":"Google","url":"google.com"},{"name":"OpenAI","url":"openai.com"}]' |
| 46 | ``` |
| 47 | |
| 48 | Tip — preview the schema first if the objective is ambiguous: `parallel-cli findall ingest "$ARGUMENTS" --json` shows the entity type and match conditions the API inferred, so you can refine wording before paying for a run. |
| 49 | |
| 50 | Parse the JSON output to extract the `findall_id` and any monitoring URL. Tell the user: |
| 51 | |
| 52 | - A FindAll run has been started |
| 53 | - Approximate cadence (minutes for `core`, longer for `pro`) |
| 54 | - They can keep working while it runs |
| 55 | |
| 56 | ## Step 2: Poll for results |
| 57 | |
| 58 | Choose a descriptive filename (e.g., `series-a-ai-2026`, `charlotte-roofers`). Use lowercase with hyphens, no spaces. |
| 59 | |
| 60 | ```bash |
| 61 | parallel-cli findall poll "$FINDALL_ID" -o "/tmp/$FILENAME.json" --timeout 540 |
| 62 | ``` |
| 63 | |
| 64 | Important: |
| 65 | |
| 66 | - Use `--timeout 540` (9 minutes) to stay within tool execution limits |
| 67 | - Do NOT pass `--json` for large result sets — it will flood context. `-o` saves the full results to disk |
| 68 | |
| 69 | ### If the poll times out |
| 70 | |
| 71 | Re-run the same `parallel-cli findall poll` command to continue waiting. Server-side the run continues regardless. |
| 72 | |
| 73 | ## Response format |
| 74 | |
| 75 | Before presenting matches, **filter the results** for obvious noise: |
| 76 | |
| 77 | - Drop entries with empty/missing `url` |
| 78 | - Drop entrie |