# Show HN Founder Lead Extractor (`ayeeyee/hackernews-showhn-founder-lead-extractor`) Actor

Turn Hacker News Show HN launches into founder leads: discover via HN's keyless Algolia API, then enrich the founder's own project site with MX/DNS-verified emails, phones, socials, tech stack, A-D lead score, fresh-founder-readiness signal.

- **URL**: https://apify.com/ayeeyee/hackernews-showhn-founder-lead-extractor.md
- **Developed by:** [Virtual Footprint LLC](https://apify.com/ayeeyee) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 show hn founder leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

<p align="center">
<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAwIiBoZWlnaHQ9IjMyMCIgdmlld0JveD0iMCAwIDEyMDAgMzIwIiByb2xlPSJpbWciIGFyaWEtbGFiZWxsZWRieT0idGl0bGUgZGVzYyI+CiAgPHRpdGxlIGlkPSJ0aXRsZSI+U2hvdyBITiBGb3VuZGVyIExlYWQgRXh0cmFjdG9yPC90aXRsZT4KICA8ZGVzYyBpZD0iZGVzYyI+UmVhbCBTaG93IEhOIGxhdW5jaGVzLCBkaXNjb3ZlcmVkIHZpYSBITidzIG93biBBbGdvbGlhIEFQSSBhbmQgZW5yaWNoZWQgd2l0aCB2ZXJpZmllZCBjb250YWN0czwvZGVzYz4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iZWRnZSIgeDE9IjAiIHkxPSIwIiB4Mj0iMSIgeTI9IjEiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZjY2MDAiIHN0b3Atb3BhY2l0eT0iMC4xOCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNmZjY2MDAiIHN0b3Atb3BhY2l0eT0iMCIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICA8L2RlZnM+CiAgPHJlY3Qgd2lkdGg9IjEyMDAiIGhlaWdodD0iMzIwIiByeD0iMjYiIGZpbGw9IiMwYTBkMTIiLz4KICA8cmVjdCB3aWR0aD0iMTIwMCIgaGVpZ2h0PSIzMjAiIHJ4PSIyNiIgZmlsbD0idXJsKCNlZGdlKSIvPgogIDxyZWN0IHg9IjAuNSIgeT0iMC41IiB3aWR0aD0iMTE5OSIgaGVpZ2h0PSIzMTkiIHJ4PSIyNS41IiBmaWxsPSJub25lIiBzdHJva2U9IiMxYzIxMjkiIHN0cm9rZS13aWR0aD0iMSIvPgoKICA8ZyBpZD0idGl0bGUtYmxvY2siIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU2IDY0KSI+CiAgICA8cmVjdCB4PSIwIiB5PSItMjgiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgcng9IjIiIGZpbGw9IiNmZjY2MDAiLz4KICAgIDx0ZXh0IHg9IjIwIiB5PSItMjAiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEyIiBmaWxsPSIjZmY2NjAwIj5MRUFELUdFTiBBQ1RPUiAmIzE4MzsgUkVBTCBEQVRBLCBOTyBGQUJSSUNBVElPTjwvdGV4dD4KICAgIDx0ZXh0IHg9IjAiIHk9IjI2IiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBTZWdvZSBVSSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSI0MCIgZm9udC13ZWlnaHQ9IjgwMCIgZmlsbD0iI2ZmZmZmZiI+U2hvdyBITiBGb3VuZGVyIExlYWQgRXh0cmFjdG9yPC90ZXh0PgogICAgPHRleHQgeD0iMCIgeT0iNjAiIGZvbnQtZmFtaWx5PSItYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFNlZ29lIFVJLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE2IiBmaWxsPSIjYzlkMWQ5Ij5SZWFsIFNob3cgSE4gbGF1bmNoZXMsIGRpc2NvdmVyZWQgdmlhIEhOJ3Mgb3duIEFsZ29saWEgQVBJIGFuZCBlbnJpY2hlZCB3aXRoIHZlcmlmaWVkIGNvbnRhY3RzPC90ZXh0PgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAxMDApIj4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMCkiPgogICAgICA8dGV4dCB4PSIwIiB5PSIwIiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBTZWdvZSBVSSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2ZmZmZmZiI+MywyMzc8L3RleHQ+CiAgICAgIDx0ZXh0IHg9IjAiIHk9IjIwIiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBTZWdvZSBVSSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMiIgZmlsbD0iIzhiOTQ5ZSI+SE4gcG9pbnRzPC90ZXh0PgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTUwIDApIj4KICAgICAgPHRleHQgeD0iMCIgeT0iMCIgZm9udC1mYW1pbHk9Ii1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgU2Vnb2UgVUksIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMjgiIGZvbnQtd2VpZ2h0PSI3MDAiIGZpbGw9IiNmZmZmZmYiPkE8L3RleHQ+CiAgICAgIDx0ZXh0IHg9IjAiIHk9IjIwIiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBTZWdvZSBVSSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMiIgZmlsbD0iIzhiOTQ5ZSI+Zm91bmRlciByZWFkaW5lc3M8L3RleHQ+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDAgMCkiPgogICAgICA8dGV4dCB4PSIwIiB5PSIwIiBmb250LWZhbWlseT0iLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBTZWdvZSBVSSwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIyOCIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0iI2ZmZmZmZiI+QTwvdGV4dD4KICAgICAgPHRleHQgeD0iMCIgeT0iMjAiIGZvbnQtZmFtaWx5PSItYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFNlZ29lIFVJLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjEyIiBmaWxsPSIjOGI5NDllIj5sZWFkIHNjb3JlPC90ZXh0PgogICAgPC9nPgogICAgPC9nPgogIDwvZz4KCiAgPGcgaWQ9InRlcm1pbmFsLXByb29mIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MDAgNzYpIj4KICAgIDxyZWN0IHg9Ii0yNCIgeT0iLTQwIiB3aWR0aD0iNDcwIiBoZWlnaHQ9IjEzNCIgcng9IjE0IiBmaWxsPSIjMGQxMTE3IiBzdHJva2U9IiMxYzIxMjkiIHN0cm9rZS13aWR0aD0iMSIvPgogICAgPHRleHQgeD0iMCIgeT0iLTE0IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMSIgZmlsbD0iIzhiOTQ5ZSI+JCBhcGlmeSBjYWxsIGhhY2tlcm5ld3Mtc2hvd2huLWZvdW5kZXItbGVhZC1leHRyYWN0b3I8L3RleHQ+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDE2KSI+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDE2KSI+CiAgICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgcng9IjIiIGZpbGw9IiM1MWNmNjYiLz4KICAgICAgPHRleHQgeD0iMTgiIHk9IjkiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEyIiBmaWxsPSIjYzlkMWQ5Ij50aXRsZTogIlNob3cgSE46IEkgbWFkZSBhbiBvcGVuLXNvdXJjZSBsYXB0b3AiPC90ZXh0PgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCA0MikiPgogICAgICA8cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHJ4PSIyIiBmaWxsPSIjNTFjZjY2Ii8+CiAgICAgIDx0ZXh0IHg9IjE4IiB5PSI5IiBmb250LWZhbWlseT0idWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMiIgZmlsbD0iI2M5ZDFkOSI+YXV0aG9yOiBIZWxsbzk5OTk5MDEgJiMxODM7IDMsMjM3IHBvaW50czwvdGV4dD4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgNjgpIj4KICAgICAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEwIiByeD0iMiIgZmlsbD0iIzUxY2Y2NiIvPgogICAgICA8dGV4dCB4PSIxOCIgeT0iOSIgZm9udC1mYW1pbHk9InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiIGZvbnQtc2l6ZT0iMTIiIGZpbGw9IiNjOWQxZDkiPmZvdW5kZXJMYWJlbDogcHJpbWUgZnJlc2gtZm91bmRlciB0YXJnZXQ8L3RleHQ+CiAgICA8L2c+CiAgICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDk0KSI+CiAgICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgcng9IjIiIGZpbGw9IiM1MWNmNjYiLz4KICAgICAgPHRleHQgeD0iMTgiIHk9IjkiIGZvbnQtZmFtaWx5PSJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIiBmb250LXNpemU9IjEyIiBmaWxsPSIjYzlkMWQ5Ij5oYXNDb250YWN0OiB0cnVlICYjMTgzOyBlbWFpbFZlcmlmaWVkOiB0cnVlPC90ZXh0PgogICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+" width="100%" alt="hackernews-showhn-founder-lead-extractor hero banner">
</p>

## Show HN Founder Lead Extractor

Turn Hacker News **"Show HN"** launches into ready-to-pitch founder leads.

For each Show HN post, this Actor discovers the story via HN's official keyless
[Algolia API](https://hn.algolia.com/api), resolves the founder's **own project
website** (the story `url`, or a link in the post body), and enriches that site
with the same MX/DNS-verified email + phone + social + tech-stack + A–D lead
score layer used across the API Factory lead-extractors. Each lead also carries
project metadata (HN points, author, launch date) and a **fresh-founder-readiness
signal** (HN traction + launch recency + contactability → A–D grade).

No HN author/commit emails are mined (that is the ToS-gray personal-data harvest
we reject). The contact always comes from the founder's **own** project website.

> No API keys. No residential proxy. No compose cost. Works straight out of the
> box — HN's Algolia endpoint is public and keyless, and we fetch each
> founder's own public site directly.

***

### Use cases

- **Founder / VC outreach** — find founders who *just* launched in a space you
  care about (AI agents, dev tools, fintech…), with a verified contact on their
  project site.
- **Agency / dev-tool vendor prospecting** — sell hosting, observability, auth,
  payments, or growth tools to freshly-launched projects that don't have a vendor
  stack yet.
- **Monitoring / "newly launched since last run"** — schedule with `sinceDays`
  to get only Show HN launches from the trailing N days.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | string\[] | `["Show HN"]` | Keywords to discover Show HN launches. Use the literal `Show HN` to sweep all launches. Only stories whose title starts with `Show HN:` are kept. |
| `maxPerQuery` | int | `10` | Cap per query (1–50). |
| `sinceDays` | int | `0` | Keep only launches from the trailing N days. `0` = all time. Monitoring mode. |
| `minPoints` | int | `0` | Minimum HN points (community traction). |
| `verifyEmails` | bool | `true` | MX/DNS-validate the best contact email's domain. |
| `enrichWebsite` | bool | `true` | Fetch the founder's project site for emails/phones/socials/tech. Disable for metadata-only runs. |
| `concurrency` | int | `5` | Parallel launches enriched (1–10). |
| `proxyConfiguration` | object | `{}` | Optional — only if you hit rate limits. |

Provide `searchQueries` and/or `sinceDays`. With neither a keyword nor a recency
filter the Actor sweeps all-time Show HN launches.

### Output

One dataset item per Show HN launch that resolves a project website:

```json
{
  "inputQuery": "Show HN",
  "storyId": "42797260",
  "title": "Show HN: I made an open-source laptop from scratch",
  "author": "Hello9999901",
  "points": 3237,
  "launchDate": "2025-01-22T20:41:52+00:00",
  "hnUrl": "https://news.ycombinator.com/item?id=42797260",
  "projectUrl": "https://www.byran.ee/posts/creation/",
  "storyExcerpt": "Hello! I spent the past ~6 months engineering a laptop…",
  "emails": ["..."],
  "emailVerified": true,
  "phones": ["..."],
  "socials": {"github": "..."},
  "techStack": ["Cloudflare", "React"],
  "founderReadiness": "A",
  "founderLabel": "Prime fresh-founder target — strong HN traction, recently launched, reachable contact.",
  "leadScore": "A",
  "hasContact": true
}
```

Launches with **no** external project website (text-only Ask-HN-style posts) or no
contact signal are returned as metadata-only rows and are **not** billed.

### Pricing (pay-per-successful-result)

| Event | Price | When charged |
|---|---|---|
| **Show HN Founder Lead** (primary) | **$0.008** | once per launch that returns a real contact signal (email/phone/social) from the founder's project site |
| Verified Founder Email | $0.003 | when a launch yields an MX/DNS-validated email |
| Fresh-Founder-Readiness Signal | $0.001 | when the A–D readiness grade is computed |
| Actor Start | $0.0001 | once per run |

You are charged per launch that produces a real, contactable lead — never for
empty/stale results (the #1 complaint about flat-rate launch-dump scrapers).
Pricing is set well above per-run compute cost: there is **zero upstream compose
cost** (self-contained — HN's keyless Algolia API + each founder's own public
site).

### Real-run sample

Captured from a live Apify run (input: `{"searchQueries":["open source"],"maxPerQuery":3}`) — the founder of **OpenFreeMap** ("Show HN: OpenFreeMap – Open-Source Map Hosting", 848 HN points):

```json
{
  "inputQuery": "open source",
  "storyId": "41635592",
  "title": "Show HN: OpenFreeMap – Open-Source Map Hosting",
  "author": "hyperknot",
  "points": 848,
  "launchDate": "2024-09-24T11:59:22+00:00",
  "hnUrl": "https://news.ycombinator.com/item?id=41635592",
  "projectUrl": "https://openfreemap.org/",
  "storyExcerpt": "Hi HN, After 9 years of running my own OpenStreetMap tile server infra for MapHub ( https://news.ycombinator.com/item?id=11389989 ), I've open-sourced it and launched OpenFreeMap. You can either self-host or use our public instance. Everything is open-source, including the full production setup — there's no 'open-core' model here. Check out the repo ( https://github.com/hyperknot/openfreemap ).",
  "emails": ["zsolt@openfreemap.org"],
  "emailVerified": true,
  "phones": [],
  "socials": {"twitter": "https://x.com/hyperknot"},
  "techStack": ["Cloudflare"],
  "founderReadiness": "B",
  "founderLabel": "Strong founder prospect — real launch signal and contactable.",
  "leadScore": "A",
  "hasContact": true
}
```

Verified across distinct inputs — all return real Show HN launches with correct metadata:

| Input | Result |
|---|---|
| `{"searchQueries":["Show HN"],"sinceDays":30}` (fresh-monitoring) | 5 launches from the trailing 30 days; 1 verified contact (`team@tilion.dev`, MX-verified) |
| `{"searchQueries":["Show HN"],"minPoints":50}` (high-traction) | 5 launches, 2690–3531 HN points; 2 with contact |
| `{"searchQueries":["open source"]}` (keyword) | 5 launches incl. the OpenFreeMap sample above + `paisa.fyi` / `restfox.dev` |

A `github.com/...` project URL (very common for Show HN) is correctly returned as a metadata-only row (`socials: {}`, `tech: []`, `hasContact: false`) — GitHub repo pages expose no founder business contact and would otherwise leak GitHub's own corporate social links. Such rows are **not** billed.

### Performance & cost

- \~0.5–2s per launch (one keyless Algolia call + one project-site fetch + DNS
  MX lookup), run concurrently up to `concurrency`.
- A 10-launch run typically completes in well under a minute.
- Cost ≈ `$0.008 × leads_with_contact` + the small secondary-event fees. A run
  that returns 10 contactable leads costs ≈ $0.08 + $0.01 (verified emails).

### Troubleshooting

- **No results / fewer than expected** — the keyword may not appear in recent
  Show HN titles. Try the literal `Show HN` (the all-sweep), or lower
  `minPoints`. `search_by_date` (newest-first) is used automatically for the
  all-sweep and for any recency-filtered run.
- **`hasContact: false` on a launch** — the founder's project site had no
  scrapeable email/phone/social (common for pure GitHub-README launches). The
  row is still returned with metadata + readiness grade; it is not billed.
- **`emailVerified: false` on a real-looking email** — the email parsed from
  the site but its domain had no live MX record (disposable/misconfigured).
  Disable `verifyEmails` to skip the DNS check for faster runs.
- **A launch points at `news.ycombinator.com`** — that story had no external
  project link; we fall back to URLs in the post body, then to a no-contact
  metadata row (never a guessed address).
- **Rate limits** — Algolia is generous; a proxy is only needed at very high
  concurrency against many queries in quick succession.

### Frequently asked questions

**Does this only find brand-new launches?**
No — by default it sweeps all "Show HN" launches matching your query, old and new. Use the recency filter if you specifically want fresh launches.

**What does `founderReadiness` actually measure?**
A combination of the launch's HN points and how recent it is — a highly-upvoted recent launch scores differently than an old post with the same point count that's since gone quiet.

**Why is `projectUrl` sometimes null?**
Not every Show HN post links to a live product URL in its HN metadata — some are text-only posts. When there's no link, contact enrichment has nothing to work from and returns empty rather than guessing.

**Is this scraping Hacker News' website?**
No — it uses HN's own official, keyless Algolia search API (the same one HN's own search box uses), not HTML scraping.

### Related lead-gen Actors

Part of a signal-based B2B lead catalog, each sourced from a different official, keyless public API and each pay-per-verified-result: [ATS Hiring-Intent Lead Finder](https://apify.com/ayeeyee/ats-hiring-intent-lead-finder) (open-roles hiring signal via Greenhouse/Lever/Ashby), [GitHub Org / Dev-Tool Lead Extractor](https://apify.com/ayeeyee/github-org-devtool-lead-extractor) (repo-traction signal), [Show HN Founder Lead Extractor](https://apify.com/ayeeyee/hackernews-showhn-founder-lead-extractor) (launch-traction signal), [Hugging Face AI Org Lead Extractor](https://apify.com/ayeeyee/huggingface-ai-org-lead-extractor) (AI-adoption signal), [SEC Form D Funded Company Lead Extractor](https://apify.com/ayeeyee/sec-formd-funded-company-lead-extractor) (fresh-funding signal), [Steam Game Studio Lead Extractor](https://apify.com/ayeeyee/steam-game-studio-lead-extractor) (shipped-product signal), [Website Contact & Company Extractor](https://apify.com/ayeeyee/website-contact-company-extractor) (bring-your-own-domain-list enrichment).

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to discover Show HN launches via HN's keyless Algolia API (e.g. 'AI agent', 'developer tool'). Use the literal 'Show HN' (the default) to sweep all Show HN launches. Only stories whose title starts with 'Show HN:' are kept.

## `maxPerQuery` (type: `integer`):

Cap on Show HN launches returned per query (1-50).

## `sinceDays` (type: `integer`):

Keep only Show HN stories created within the trailing N days. 0 = no recency filter (sweep all time). Use this for the 'newly launched since last run' monitoring mode.

## `minPoints` (type: `integer`):

Keep only Show HN stories with at least this many HN points (community traction). 0 = no minimum.

## `verifyEmails` (type: `boolean`):

Validate the best contact email's domain against live MX/DNS records.

## `enrichWebsite` (type: `boolean`):

Fetch the founder's own project website (the Show HN story url) and extract emails/phones/socials/tech stack. Disable for faster, metadata-only runs (no contact data, nothing billed).

## `concurrency` (type: `integer`):

Show HN launches enriched in parallel (1-10).

## `proxyConfiguration` (type: `object`):

Optional. Only needed if you hit rate limits; the Actor works without a proxy (HN's keyless Algolia API + the founders' own public websites).

## Actor input object example

```json
{
  "searchQueries": [
    "Show HN",
    "AI agent"
  ],
  "maxPerQuery": 10,
  "sinceDays": 0,
  "minPoints": 0,
  "verifyEmails": true,
  "enrichWebsite": true,
  "concurrency": 5,
  "proxyConfiguration": {}
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "Show HN"
    ],
    "proxyConfiguration": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("ayeeyee/hackernews-showhn-founder-lead-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["Show HN"],
    "proxyConfiguration": {},
}

# Run the Actor and wait for it to finish
run = client.actor("ayeeyee/hackernews-showhn-founder-lead-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "Show HN"
  ],
  "proxyConfiguration": {}
}' |
apify call ayeeyee/hackernews-showhn-founder-lead-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ayeeyee/hackernews-showhn-founder-lead-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XsiWeF04P5JAVNfFh/builds/Bb6mHJBTpUWVtYmPK/openapi.json
