prospect-builder
Standard workflow for building prospect, target, and lead lists with Landbase. Always uses the Landbase API/CLI as the source of truth — never Clay, never default to Apollo.
Skill body
Prospect Builder
Hard rules — read first
- Landbase API is the source of truth. All enrichment, dedupe, and contact/company lookups go through Landbase first.
- Never use Clay tools. No
query-objects, noask-question-about-accounts, no Clay audiences. - Apollo is cross-check-only. Never the primary write path. If Landbase has a coverage gap, flag the gap rather than silently filling from Apollo.
- Never auto-send. This skill produces files. It does not send emails, post to Slack, or create CRM engagements without explicit confirmation.
- Deliver as a Google Sheet (when a Drive MCP is available). After writing
enriched.csv, push it to Google Drive via the Drive MCPcreate_filetool withcontentMimeType=text/csv— Drive auto-converts to a Google Sheet. Return the livehttps://docs.google.com/spreadsheets/d/<id>/editURL in your summary and save it tonotes.md. A bookmarkable live link is the expected deliverable, not just a CSV on disk. If no Drive MCP is configured, deliver the CSV and say so.
Folder convention
Every prospect run gets its own folder under the user’s working directory:
prospects/YYYY-MM-DD_<slug>/
Inside:
brief.md— the original ask, the criteria, source-of-truth notesquery.jsonorquery.md— the Landbase API query / parameters usedraw.jsonlorraw.csv— Landbase API output (full pull, never truncated)enriched.csv— final ranked / scored output (the deliverable)outreach/— personalization drafts, if requested (drafts only, never sent)notes.md— anything notable: gaps, recommendations, the live Sheet URL
Workflow
- Capture the ask — what’s the ICP? Industry, size, geo, role, signals, exclusions? If any are fuzzy, ask the user before querying.
- Create the folder
prospects/YYYY-MM-DD_<slug>/and writebrief.mdsummarizing the ask. - Sharpen a fuzzy ICP first. If the ask is vague (“CEOs in tech,” “AI companies”), tighten it into 2–3 concrete, queryable sub-segments before pulling — confirm with the user.
- Compose the Landbase query. Use the documented endpoints (see
docs.landbase.com). Many enriched fields are available — select what the ask needs, not everything. - Run the query and save raw output to
raw.jsonl(or.csv). Never truncate raw data. - Enrich / dedupe through Landbase. If a field is missing, flag it in
notes.mdas a Landbase coverage gap. Do not fall back to Apollo unless the user explicitly approves.- AI qualification (recommended): Before ranking, qualify the enriched
dataset against the ICP criteria. Translate the ask into yes/no questions
and run:
landbase-cli workflow qualify ds-ENRICHED \ --qualification-prompts="<yes/no question from ICP criteria>" \ --context-cols=company_name,website,industry,description,employees_count \ --waitIn an interactive session, trigger without
--wait, capture theworkflow_run_id, and follow theworkflow-monitorskill to narrate live progress — a--waitsubprocess can’t stream its progress line into the chat. Keep--waitfor an unattended run where only the final result matters. Use thequalify-leadsskill for the full guided workflow. Widening first then qualifying yields 50%+ more results than filtering by keywords alone.
- AI qualification (recommended): Before ranking, qualify the enriched
dataset against the ICP criteria. Translate the ask into yes/no questions
and run:
- Score and rank. Default dimensions (override per ask): ICP fit, deal-size signal, intent signals, role seniority, and network overlap (cross-reference a LinkedIn connections export for warm intros if the user provides one).
- Output
enriched.csvwith the top N ranked. Suggested columns: name, company, title, why-they-fit, suggested hook (one line, optional), warm-intro-available (Y/N). - Push to Google Sheets (if a Drive MCP is available). Read
enriched.csvand call the Drive MCPcreate_filewithtitle="<human title> (YYYY-MM-DD)",textContent=<csv body>,contentMimeType=text/csv. The response contains anid; the live URL ishttps://docs.google.com/spreadsheets/d/<id>/edit. Save it tonotes.mdunder a## Live deliverableheader. - Write
notes.mdwith: the live Sheet URL (if created), what worked, what’s missing in Landbase, and a suggested next iteration. - Surface to the user — one paragraph: the run summary, the live Sheet URL (prominent, if created), the top 5 names, the file paths, and any flags. Don’t dump the full list in chat — reference the Sheet/file.
Personalization (optional sub-mode)
If the user asks for “personalized outreach” or “hooks per row”:
- Per row, pull additional signal: recent LinkedIn activity, recent company news (e.g. via web search).
- Generate a one-sentence hook tailored to the row.
- Drafts only. Write to
outreach/<contact-slug>.md. Never send. - Match the sender’s voice if known — terse, hook-led, no platitudes; keep it concise.
Red Flags — STOP
- User wants info on one specific company → use
match-lookupinstead - ICP is fuzzy and undefined → run
icp-capturefirst before building the list - User wants long-form content or posts → out of scope; decline
- User wants to sync to CRM → separate explicit operation; ask for confirmation first
Output discipline
- Date-stamped folder. No exceptions.
- Markdown for human-readable artifacts; CSV/JSONL for data.
- Never dump the raw export into the root of
prospects/— always use the run folder. - Note Landbase coverage gaps explicitly — these are useful product feedback.
When in doubt
Ask the user: which ICP, what size of list (10, 100, 1000?), what’s the use (outbound, partnership, M&A, content?), and the deadline. One round-trip of clarification beats a 1000-row list that misses the ask.
Skill frontmatter
Work with this as data
Every skill here is available over the APIs.io API and to AI agents over MCP.