Product Hunt Launch Enrichment Monitor avatar

Product Hunt Launch Enrichment Monitor

Pricing

Pay per usage

Go to Apify Store
Product Hunt Launch Enrichment Monitor

Product Hunt Launch Enrichment Monitor

Monitors Product Hunt launches and enriches each visible launch with public website, pricing, contact, social, and outreach signal data.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Brian Keefe

Brian Keefe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Production-ready Apify Actor for startup scouts, agencies, VC analysts, recruiters, and B2B vendors who want structured launch rows from public Product Hunt pages plus light website enrichment from the launched product's own public site.

The actor uses only public HTML pages:

  • Product Hunt public pages when available
  • The product website homepage and common pricing/contact/about/team pages
  • No login
  • No private APIs
  • No anti-bot bypass behavior

What It Produces

One dataset row per launch with visible product and company signals:

  • name
  • tagline
  • topics
  • website
  • pricingUrl
  • contactLinks
  • socialLinks
  • launchUrl
  • launchDate
  • upvotesVisible
  • commentsVisible
  • makers
  • pitchTriggers
  • warnings

If Product Hunt blocks requests or its HTML changes, the actor returns warning rows instead of crashing.

Input

Use either:

  • date
  • startDate + endDate
  • productUrls

Optional filters:

  • category
  • query

Example:

{
"date": "2026-06-30",
"category": "Sales",
"query": "signal",
"productUrls": [
{ "url": "https://www.producthunt.com/posts/signalpad" }
],
"maxLaunches": 10,
"enrichWebsite": true,
"requestTimeoutSecs": 20
}

See examples/sample-input.json.

Output Example

[
{
"name": "SignalPad",
"tagline": "AI buyer signal tracking for GTM teams",
"topics": ["Sales", "Analytics"],
"website": "https://signalpad.test/",
"pricingUrl": "https://signalpad.test/pricing",
"contactLinks": [
"mailto:founders@signalpad.test",
"https://signalpad.test/contact"
],
"socialLinks": {
"linkedin": ["https://www.linkedin.com/company/signalpad"],
"x": ["https://x.com/signalpad"],
"twitter": [],
"facebook": [],
"instagram": [],
"youtube": [],
"tiktok": [],
"github": []
},
"launchUrl": "https://www.producthunt.com/posts/signalpad",
"launchDate": null,
"upvotesVisible": 412,
"commentsVisible": 38,
"makers": ["Alex Kim", "Priya Shah"],
"pitchTriggers": [
"Pricing page is public for packaging and competitor analysis",
"Direct email contact was exposed publicly"
],
"warnings": []
}
]

See examples/sample-output.json.

Commercial Use Cases

  • Track launches in a category and identify companies with accessible pricing and contact paths
  • Build founder/vendor prospecting lists from recent launches
  • Support VC scouting with structured launch, topic, maker, and website signals
  • Prepare outbound campaigns using public contact and social evidence only

Extraction Approach

  • Parses Product Hunt leaderboard/day pages for launch URLs
  • Parses Product Hunt product pages for visible title, tagline, topics, makers, website, and visible engagement counters
  • Optionally enriches the product website for public pricing/contact/social links
  • Generates pitchTriggers from public commercial signals

Limitations

  • Product Hunt HTML can change without notice
  • Some launches may not expose a website or visible maker names
  • JavaScript-heavy sites may hide links from simple HTML fetches
  • upvotesVisible and commentsVisible are extracted only when visible in fetched HTML
  • This actor intentionally avoids private APIs, login flows, and bypass behavior

Local Development

Install:

$npm install

Run tests:

$npm test

Run deterministic smoke:

$npm run smoke

Run locally with Apify storage:

$npm start

Apify Commands

Run through Apify CLI:

$npx --yes apify-cli run

Push after authentication:

export APIFY_TOKEN=<your Apify API token>
npx --yes apify-cli push

Deterministic Validation

Tests and smoke do not depend on live Product Hunt. They use local HTML fixtures and mocked fetch responses stored under tests/fixtures.