email-finder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited email-finder (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Find work emails when you have name + company domain. trykitt first, Icypeas on miss.
Works standalone. Just needs API keys. Pairs with Outreach Magic for credit-saving dedup, persistent storage, and cross-session availability.
Just API keys. Results print to stdout. No database needed.
| Key | For |
|---|---|
TRYKITT_API_KEY | trykitt.ai (first in waterfall) — trykitt.ai |
ICYPEAS_API_KEY | Icypeas (fallback) — app.icypeas.com |
python3 scripts/email_finder.py config # verify keys loaded
python3 scripts/email_finder.py find --name "Jane Doe" --domain acme.com
# → prints result to stdoutAdds pre-flight dedup (skip leads already in OM) and saves results to your local SQLite pipeline. Requires outreachmagic skill with pipeline.py login.
| Keys | For |
|---|---|
| All standalone keys above + | |
OUTREACHMAGIC_AGENT_KEY | OM login via pipeline.py login |
python3 scripts/email_finder.py find --name "Jane Doe" --domain acme.com --save --workspace CLIENT
python3 scripts/email_finder.py batch-find --workspace CLIENT --yes --workers 3 --delay 3 input.jsonBefore find/batch with OM, confirm keys: python3 <SKILLS>/outreachmagic/scripts/pipeline.py sync-secrets --check --json or python3 scripts/email_finder.py config.
Keys sync via Dashboard → pipeline.py sync-secrets. Verify source: python3 scripts/email_finder.py config (*_api_key_source should be agent_secrets).
[{"lead_id": 12345, "name": "Jane Doe", "company_domain": "acme.com"}]| Mode | Flags |
|---|---|
| Waterfall | --workers 3 --delay 3 |
| IcyPeas only | --workers 2 --delay 3 |
| TryKitt only | --workers 3 (optional --delay 0.2) |
check / find with --save). Standalone: skip check — run find directly.trykitt_attempted / icypeas_attempted; mv_attempted after MillionVerifier bulk (result lives in OM email_verification_status). scrubby_deep_submitted / scrubby_deep_attempted after Scrubby Deep Verification submit/fetch. Found state is leads.email, latest_source, and email_verification_status.lead_id on every row; --workspace required for OM save. Standalone: omit --save or use --no-save to print results to stdout.batch-find --dry-run before --yes to see skip counts (leads may already have email in OM while CSV email is empty).batch-find re-checks OM immediately before each API call (skips leads resolved since batch start).batch-find writes CSV/JSON under outreachmagic/exports/, then saves to OM. Standalone: add --skip-om to run without OM (writes to cwd).pipeline.py sync; upload is never automatic).[{"lead_id": 12345, "name": "Jane Doe", "company_domain": "acme.com"}]Optionally include "linkedin_url" when available — trykitt uses it for higher match rates.
# Standalone (no OM) — prints result to stdout
python3 scripts/email_finder.py find --name "Jane Doe" --domain acme.com
# Standalone batch (no OM) — writes CSV to cwd
python3 scripts/email_finder.py batch-find --skip-om --yes --dry-run input.json
# With OM — find + dedup + save
python3 scripts/email_finder.py find --name "Jane Doe" --domain acme.com --save --workspace CLIENT
# Dry run (skip counts, no API spend)
python3 scripts/email_finder.py batch-find --workspace CLIENT --dry-run outreachmagic/batches/leads.json
# Batch (find + OM save)
python3 scripts/email_finder.py batch-find --workspace CLIENT --yes \
--output-base outreachmagic/exports/emails --workers 3 --delay 3 outreachmagic/batches/leads.json
# OM save only — after failed import or --no-save run (accepts batch .csv or .json)
python3 scripts/email_finder.py import-to-om --file outreachmagic/exports/emails.csv --workspace CLIENT
python3 scripts/email_finder.py update --check
# MillionVerifier (optional)
python3 scripts/email_finder.py config
python3 scripts/email_finder.py verify-credits
python3 scripts/email_finder.py verify-bulk --workspace CLIENT --dry-run
python3 scripts/email_finder.py verify-bulk --workspace CLIENT --poll --yes
# Scrubby Deep Verification (optional — 72h second pass on catch-all / unknown)
python3 scripts/email_finder.py scrubby-deep-credits # Check remaining credits
python3 scripts/email_finder.py scrubby-deep-submit --workspace CLIENT --dry-run # Dry-run (email count only)
python3 scripts/email_finder.py scrubby-deep-submit --workspace CLIENT # Submit all unverified
python3 scripts/email_finder.py scrubby-deep-submit --workspace CLIENT --filter=catch_all # Only catch_all/unknown
python3 scripts/email_finder.py scrubby-deep-fetch --identifier ID --workspace CLIENT # Fetch results + save
python3 scripts/email_finder.py scrubby-deep-fetch --identifier ID --workspace CLIENT --poll # Poll until complete
python3 scripts/email_finder.py scrubby-deep-status --identifier ID # Check job status
python3 scripts/email_finder.py scrubby-deep-list # List all deep verification jobs
# Combined workflow: MV bulk + Scrubby Deep on catch_all/unknown
python3 scripts/email_finder.py verify-with-scrubby --workspace CLIENT --dry-run
python3 scripts/email_finder.py verify-with-scrubby --workspace CLIENTMILLIONVERIFIER_API_KEY in a local .env may show ***; OM agent_secrets.env overrides via ensure_env_loaded().
Resume a crashed batch by re-running the same batch-find command (skips completed API rows). If a run failed with network/auth errors, use `--retry-errors` to re-attempt errored rows without deleting the checkpoint.
| User says | You do |
|---|---|
| "Find Patrick at stripe.com" | find --name … --domain stripe.com (standalone) or with --save --workspace W (OM) |
| "Find emails for my CSV" (with OM) | batch-find --dry-run → batch-find --yes |
| "Find emails for my CSV" (standalone) | batch-find --skip-om --dry-run → batch-find --skip-om --yes |
| "Retry failed email lookup" | Same batch-find command with --retry-errors |
pipeline.py update on outreachmagic.import-to-om --file {output-base}.csv --workspace Wimport-to-om --file {output-base}.csv --workspace Wimport-to-om or re-run with smaller batches.icypeas_poll_attempts in config--retry-errors, or delete {output-base}.csv / .json and start fresh.sync-secrets --checkStarts useful alone: find / batch-find --skip-om. Pairs with lead-enrich (research → domain) and Outreach Magic (credit-saving dedup, persistent SQLite, cross-session availability). Learn more at outreachmagic.io. Both companions skip leads already tagged (serper_attempted / trykitt_attempted / icypeas_attempted).
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.