Install
openclaw skills install @browseract-cli/producthunt-launchesScrape Product Hunt daily/weekly/monthly/yearly leaderboard launches with full product details, maker profiles, and website contact info. Use when user mentions Product Hunt, producthunt, PH scraper, product hunt launches, product hunt leaderboard, scrape product hunt, product hunt data, PH daily launches, product hunt upvotes, product hunt maker info, extract product hunt, product hunt today, top products product hunt, product hunt archive, PH products, product hunt email extraction, product hunt contact info, producthunt.com scraping, get product hunt launches, product hunt API alternative. Also applies to: startup launch monitoring, new product discovery, maker/founder contact enrichment, product hunt lead generation, daily product hunt digest, competitive product tracking.
openclaw skills install @browseract-cli/producthunt-launchesInput: date/period parameters → Output: structured product launch data with maker profiles and website contact info
All process output to user (progress updates, process notifications) follows the user's language.
Extract complete product launch data from Product Hunt leaderboard pages, enriched with maker profile information and product website contact details.
solve-captcha or wait for auto-passIf browser-act has been confirmed available in the current session → skip this step.
Invoke browser-act via Skill tool to load usage. If installation or configuration issues arise, follow its guidance to resolve then retry.
Product Hunt uses Cloudflare protection. On first navigation:
wait stable --timeout 15000 then check title againsolve-captchaThis Skill's operational boundary = what the user can manually do in their browser. It only reads data already displayed to the user on the page, never bypassing authentication or access controls. JS code is encapsulated in Python files under the
scripts/directory, invoked viaeval "$(python scripts/xxx.py)".$(...)is bash syntax; use the bash tool for execution.
Navigate to the target leaderboard URL first, then extract:
eval "$(python scripts/extract-leaderboard.py)"
URL patterns (navigate to the appropriate one before extraction):
https://www.producthunt.com/leaderboard/daily/{YYYY}/{M}/{DD}/allhttps://www.producthunt.com/leaderboard/weekly/{YYYY}/{week-number}/allhttps://www.producthunt.com/leaderboard/monthly/{YYYY}/{M}/allhttps://www.producthunt.com/leaderboard/yearly/{YYYY}/allReplace all with featured for featured-only products.
Output example:
[
{
"rank": 1,
"name": "Product Name",
"tagline": "Short product description",
"categories": ["Productivity", "AI"],
"thumbnail": "https://ph-files.imgix.net/...",
"upvotes": 135,
"comments": 42,
"url": "https://www.producthunt.com/products/product-slug",
"slug": "product-slug"
}
]
Navigate to the launch page URL first (https://www.producthunt.com/products/{slug}/launches/{launch-slug}), then extract:
eval "$(python scripts/extract-launch-detail.py)"
To find the launch URL from a product page: navigate to https://www.producthunt.com/products/{slug} and look for links matching /products/{slug}/launches/{launch-slug}.
Output example:
{
"name": "Product Name",
"tagline": "Short product tagline",
"description": "Full product description from OG meta",
"categories": ["Productivity", "Social Media"],
"images": ["https://ph-files.imgix.net/gallery1.png", "https://ph-files.imgix.net/gallery2.png"],
"websiteUrl": "https://product-website.com/?ref=producthunt",
"upvotes": 135,
"launchDate": "2025-05-27T07:26:33-07:00",
"makers": [{"href": "/@username", "name": "Maker Name"}],
"ogImage": "https://ph-files.imgix.net/og-image.png"
}
Navigate to maker profile URL (https://www.producthunt.com/@{username}), then extract:
eval "$(python scripts/extract-maker-profile.py)"
Output example:
{
"name": "Maker Name",
"slug": "@username",
"headline": "Creating SaaS Products",
"aboutText": "Bio text about the maker",
"links": ["https://twitter.com/username", "https://linkedin.com/in/username"],
"followers": 22,
"url": "https://www.producthunt.com/@username"
}
Navigate to the product website URL, wait for load, then extract:
eval "$(python scripts/extract-website-content.py)"
Alternatively, use stealth-extract for faster extraction without a browser session:
stealth-extract {website-url} --content-type markdown then parse the markdown for email patterns.
Output example:
{
"title": "Product Website Title",
"url": "https://product-website.com",
"email": "contact@product-website.com",
"allEmails": ["contact@product-website.com", "support@product-website.com"],
"websiteRawText": "Full visible text content of the website..."
}
Complete pipeline replicating the full Product Hunt scraper workflow:
wait stable → eval "$(python scripts/extract-leaderboard.py)"https://www.producthunt.com/products/{slug} → find launch link → navigate to launch page
b. wait stable → eval "$(python scripts/extract-launch-detail.py)" → get full details + maker links + website URLscrapeMakers is enabled) For each unique maker from step 2:
a. Navigate to https://www.producthunt.com/{maker.href} → wait stable → eval "$(python scripts/extract-maker-profile.py)"scrapeWebsite is enabled) For each product website URL from step 2:
a. Navigate to website URL → wait stable → eval "$(python scripts/extract-website-content.py)"Final output example per product:
{
"date": "2026-06-10T00:00:00Z",
"launchDate": "2026-06-10T07:01:04Z",
"url": "https://www.producthunt.com/products/product-slug",
"name": "Product Name",
"shortDescription": "Short tagline",
"description": "Full description text",
"categories": ["Productivity", "AI"],
"maker": {
"makerHref": "https://www.producthunt.com/@username",
"name": "Maker Name",
"slug": "@username",
"url": "https://www.producthunt.com/@username",
"links": ["https://twitter.com/maker", "https://linkedin.com/in/maker"],
"aboutText": "Maker bio text"
},
"websiteUrl": "https://product-website.com",
"images": ["https://ph-files.imgix.net/image1.png"],
"upvotes": 135,
"website": {
"title": "Product Website",
"url": "https://product-website.com",
"email": "hello@product-website.com",
"websiteRawText": "Full page text content..."
}
}
No pagination required for daily/weekly leaderboard: All products for a given day load on a single page (typically 15-50 products per day). No infinite scroll or "load more" button exists.
Yearly leaderboard: May contain many products. Apply topNProducts filter to limit. All visible products are rendered on the single page.
result count >= 1 (at least one product extracted from leaderboard)name, tagline, upvotes, url present for every productwebsiteUrl or maker present for enriched itemssolve-captcha on first visit/all URL path (used by older scrapers) now returns 404; use /leaderboard/daily/ path insteadPath: browser-act-skill-forge-memories/producthunt-scraper-producthunt-launches.memory.md (working directory is determined by the Agent running the Skill)
Before execution: If the file exists, read it first — it records unexpected situations encountered during past executions (e.g., a strategy has become ineffective); adjust strategy order accordingly.
After execution: If an unexpected situation is encountered (strategy became ineffective, page redesigned, anti-scraping upgraded, better path discovered), append a line:
{YYYY-MM-DD}: {what happened} → {conclusion}
Normal execution does not write to the file.