← All runbooks
gooseworks-ai / capabilities-apollo-lead-finder

Apollo Lead Finder

Run a two-phase Apollo.io prospecting workflow that first uses free People Search to discover ICP-matching leads, then selectively enriches approved contacts to reveal email, phone, LinkedIn URL, and full contact details. The runbook must preserve the source skill's approval gate

agent codexmodel gpt-5.5snapshot python312-uveval programmatic10 stepsv1.0.0

Deploy Apollo Lead Finder to your jetty.io

One-click installs this runbook into a collection on your Jetty account. You can run it from the Spot dashboard, schedule it, or pipe inputs in via the API.

The shape of the run

10 steps · start to finish.

  1. 1
    Step 1

    Environment Setup

    1. Create /app/results and initialize empty output placeholders for every required file.
    2. Verify APOLLO_API_KEY is set. If it is missing, stop immediately and write validation_report.json with overall_passed=false.
    3. Normalize the selected mode:
    ModeMax search pagesMax search resultsMax enrichments
    test110010
    standard505,000500
    full50050,0002,500
  2. 2
    Step 2

    Intake and Config

    Ask the operator for the ICP and campaign settings before any API call:

  3. 3
    Step 3

    Free People Search

    1. Build the Apollo People Search payload from the config using `person_titles`, `person_seniority`, `person_locations`, `organization_num_employees_ranges`, `q_organization_keyword_tags`, `person_not_titles`, `q_organization_name`, and `organization_locations` when supplied. 2.

  4. 4
    Step 4

    Search Review Gate

    Present total matches, a sample of preview leads, title distribution, and the planned enrichment count. Ask for explicit approval before continuing. If approval is denied, write final summary and validation files, write an empty `leads.csv` with headers, and skip paid enrichment.

  5. 5
    Step 5

    Paid Enrichment

    1. Load the approved Apollo person IDs from `/app/results/search_manifest.json`. 2. Load the optional existing contacts CSV and build a LinkedIn URL set for deduplication. If no existing contacts file is provided, record that deduplication was skipped. 3. Display the exact enrich

  6. 6
    Step 6

    Deduplicate and Review

    Filter enriched leads whose LinkedIn URLs already exist in the supplied contacts file. Present net-new count, email coverage, representative enriched leads, and company coverage. Ask for explicit approval before writing contacts, creating list membership, or exporting the final C

  7. 7
    Step 7

    Apollo List and Contact Export

    Only after approval:

  8. 8
    Step 8

    Review and Refine

    Summarize total matching profiles, new leads found after deduplication, Apollo list details, enriched count, email coverage, and the top approved leads. Recommend specific filter adjustments when the search is too broad, too narrow, low quality, or has low email coverage.

  9. 9
    Step 9

    Iterate on Errors (max 3 rounds)

    If any API call, validation check, or output write fails, inspect the failing stage, apply the smallest targeted fix, and retry that stage for max 3 rounds. Stop before paid API calls if the failure affects approval state, cost estimation, or filter correctness.

  10. 10
    Step 10

    Write Reports

    Write `/app/results/summary.md` with the final filters, counts, approvals, estimated credits, actual enrichment count, list/export state, and any follow-up recommendations. Write `/app/results/validation_report.json` with all setup, search, approval, enrichment, export, and repor