Product Hunt — today's top launches
v1PublishedProduct Hunt's top launches today — rank, name, tagline, votes, url.
›Author's sample data
| launches |
|---|
›Publisher
0 subscribersEvery day at 8:30 AM0 runs in 14d · published 24h ago
›Versions
managed by authorv1importedapprovedcurrent24h ago
Schedulesdeploy to enable
Run this collector on a cadence — daily, hourly, your call.
API endpointdeploy to unlock
POST to run it on demand and get fresh data in the response.
Activitydeploy to track
0 subscriber runs in the last 14 days.
How this script collects data
import Firecrawl from "@mendable/firecrawl-js";
const apiKey = process.env.FIRECRAWL_API_KEY;
if (!apiKey) { console.error("FIRECRAWL_API_KEY is not set"); process.exit(1); }
const firecrawl = new Firecrawl({ apiKey });
async function main() {
const schema = {
type: "object",
properties: {
launches: {
type: "array",
items: {
type: "object",
properties: {
rank: { type: "number" }, name: { type: "string" }, tagline: { type: "string" },
votes: { type: "number" }, url: { type: "string" },
},
required: ["rank", "name"],
},
},
},
required: ["launches"],
};
const result = await firecrawl.scrape("https://www.producthunt.com", {
formats: [{ type: "json", prompt: "Extract today's top product launches in order.", schema }],
});
const data = (result as { json?: { launches?: unknown[] } }).json ?? { launches: [] };
const out = { launches: (data.launches ?? []).slice(0, 10) };
process.stdout.write(JSON.stringify(out));
}
main().catch((err) => { console.error(err); process.exit(1); });
Build prompt
Today's top Product Hunt launches with rank, name, tagline, votes, and url