{
  "data": {
    "id": "Gt2QpRfveJ3Ze6KsE",
    "actId": "GAAwZYbMvugYH1EkV",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-27T12:01:10.724Z",
    "finishedAt": "2026-10-27T12:01:25.084Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 14210,
      "runTimeSecs": 14.21,
      "computeUnits": 0.01578888888888889,
      "imageSizeBytes": 318725632
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Product Hunt Scraper Input\",\n  \"description\": \"Collect Product Hunt launches, products, comments and reviews without a Product Hunt account or API token.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"What to scrape\",\n      \"type\": \"string\",\n      \"description\": \"Pick the launch feed, a leaderboard period, a date range, a topic, a category, a keyword search, specific products, or specific launches.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"latest\",\n        \"leaderboard\",\n        \"dailyRange\",\n        \"topic\",\n        \"category\",\n        \"search\",\n        \"product\",\n        \"launch\"\n      ],\n      \"enumTitles\": [\n        \"Latest launches (today's full feed)\",\n        \"Leaderboard (daily, weekly, monthly or yearly)\",\n        \"Daily range (one or more days)\",\n        \"Topic launches\",\n        \"Category launches\",\n        \"Keyword product search\",\n        \"Specific products (latest launch)\",\n        \"Specific launches\"\n      ],\n      \"default\": \"latest\",\n      \"prefill\": \"latest\"\n    },\n    \"period\": {\n      \"title\": \"Leaderboard period\",\n      \"type\": \"string\",\n      \"description\": \"Used when mode is `leaderboard`. Daily = one day, weekly = ISO week, monthly = calendar month, yearly = calendar year.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"daily\",\n        \"weekly\",\n        \"monthly\",\n        \"yearly\"\n      ],\n      \"enumTitles\": [\n        \"Daily\",\n        \"Weekly\",\n        \"Monthly\",\n        \"Yearly\"\n      ],\n      \"default\": \"daily\",\n      \"prefill\": \"daily\"\n    },\n    \"date\": {\n      \"title\": \"Leaderboard date\",\n      \"type\": \"string\",\n      \"description\": \"Optional date for mode=leaderboard, in YYYY-MM-DD form. The daily period uses the exact day; weekly, monthly and yearly use that day's ISO week, month or year. Defaults to today.\",\n      \"editor\": \"textfield\"\n    },\n    \"from\": {\n      \"title\": \"From date\",\n      \"type\": \"string\",\n      \"description\": \"Optional first day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `to` date, or yesterday.\",\n      \"editor\": \"textfield\"\n    },\n    \"to\": {\n      \"title\": \"To date\",\n      \"type\": \"string\",\n      \"description\": \"Optional last day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `from` date, or yesterday.\",\n      \"editor\": \"textfield\"\n    },\n    \"topicSlugs\": {\n      \"title\": \"Topic slugs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Topics for mode=topic, e.g. `artificial-intelligence`, `developer-tools`, or a full `/topics/...` URL.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"categorySlugs\": {\n      \"title\": \"Category slugs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Categories for mode=category, e.g. `ai-code-editors`, `productivity`, or a full `/categories/...` URL.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"Keyword for mode=search, e.g. `notion`, `ai browser`, `invoice`. Product Hunt searches products, then the actor resolves each product's latest launch.\",\n      \"editor\": \"textfield\"\n    },\n    \"productSlugs\": {\n      \"title\": \"Product slugs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Products for mode=product, e.g. `notion`, `figma`, or full `https://www.producthunt.com/products/...` URLs. Each product's latest launch is returned.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"postIds\": {\n      \"title\": \"Launch slugs or URLs\",\n      \"type\": \"array\",\n      \"description\": \"Launches for mode=launch, e.g. `strawberry-1-0`, or full `https://www.producthunt.com/products/...?launch=...` URLs.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum records\",\n      \"type\": \"integer\",\n      \"description\": \"Stop after this many launch records. One record is one launch (comments and reviews stay attached to it).\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 3\n    },\n    \"maxPages\": {\n      \"title\": \"Maximum pages per source\",\n      \"type\": \"integer\",\n      \"description\": \"Page cap per feed, topic, category, search query, product history, comment thread or review feed. A full Product Hunt day is about 40-60 pages of 20 launches.\",\n      \"minimum\": 1,\n      \"maximum\": 60,\n      \"default\": 10,\n      \"prefill\": 1\n    },\n    \"maxComments\": {\n      \"title\": \"Maximum comments per launch\",\n      \"type\": \"integer\",\n      \"description\": \"Used when `includeComments` is on. Comments are read 20 threads per page, including replies, and capped at this number.\",\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"default\": 50,\n      \"prefill\": 20\n    },\n    \"maxReviews\": {\n      \"title\": \"Maximum reviews per product\",\n      \"type\": \"integer\",\n      \"description\": \"Used when `includeReviews` is on. Reviews are read 10 per page and capped at this number.\",\n      \"minimum\": 1,\n      \"maximum\": 200,\n      \"default\": 20,\n      \"prefill\": 10\n    },\n    \"includeDetails\": {\n      \"title\": \"Include launch and product details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch the full launch page for description, hunter, makers, media, website, pricing, ranks and review score. Turn off for a faster, lighter feed.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeComments\": {\n      \"title\": \"Include comments and replies\",\n      \"type\": \"boolean\",\n      \"description\": \"Attach the discussion thread (comments and nested replies) to each launch. Adds one or more requests per launch.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeReviews\": {\n      \"title\": \"Include product reviews\",\n      \"type\": \"boolean\",\n      \"description\": \"Attach Product Hunt's detailed reviews, ratings, pros and cons to each launch. Adds one request per 10 reviews.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeHistory\": {\n      \"title\": \"Include launch history\",\n      \"type\": \"boolean\",\n      \"description\": \"Attach every earlier launch from the same product, newest first.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"featuredOnly\": {\n      \"title\": \"Featured launches only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only launches that Product Hunt selected for the homepage.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. The actor works without a proxy; add one only if Product Hunt blocks your network or you need a specific location.\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": false\n      },\n      \"prefill\": {\n        \"useApifyProxy\": true\n      }\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Product Hunt Launch, Comment & Review Exporter\r\n\r\nCollect Product Hunt launches from the **full daily feed**, daily/weekly/monthly/yearly leaderboards, a topic, a category, a keyword search, a list of products, or a list of specific launches. No Product Hunt account, API token, cookie or browser is needed.\r\n\r\nEach row is one launch with votes, comments count, rank, hunter, makers, topics, media, website, pricing, review score, and an optional discussion thread, review list, and launch history.\r\n\r\n## Modes\r\n\r\n| Mode | What it returns |\r\n|---|---|\r\n| `latest` | Today's complete daily feed (falls back to yesterday while today's feed is still empty). Cursor-paginated: a busy day has roughly 700-950 launches, not just the visible top 20. |\r\n| `leaderboard` | One daily, weekly, monthly or yearly leaderboard, cursor-paginated. Pick the period and an optional date. |\r\n| `dailyRange` | Every launch on each day between `from` and `to`, deduplicated across days. |\r\n| `topic` | Products in a topic, resolved to each product's latest launch. |\r\n| `category` | Products in a category, resolved to each product's latest launch. |\r\n| `search` | Product Hunt product search for a keyword, resolved to each product's latest launch. |\r\n| `product` | One or more product slugs/URLs, returning each product's latest launch with full product data. |\r\n| `launch` | One or more launch slugs/URLs, returning those exact launches. |\r\n\r\nTurn on `includeDetails` for the full launch page (description, maker/hunter profiles, media, website, pricing, ranks, review score). Turn on `includeComments`, `includeReviews`, and `includeHistory` to attach the discussion thread, detailed reviews, and earlier launches from the same product.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | select | `latest` | `latest`, `leaderboard`, `dailyRange`, `topic`, `category`, `search`, `product`, or `launch`. |\r\n| `period` | select | `daily` | Leaderboard period: `daily`, `weekly`, `monthly`, `yearly`. |\r\n| `date` | string | — | Leaderboard date (`YYYY-MM-DD`). Weekly/monthly/yearly use that day's ISO week, month, or year. |\r\n| `from`, `to` | string | — | Inclusive day range for `dailyRange`. |\r\n| `topicSlugs` | array | `[]` | Topic slugs or `/topics/...` URLs. |\r\n| `categorySlugs` | array | `[]` | Category slugs or `/categories/...` URLs. |\r\n| `searchQuery` | string | – | Keyword for `search`. |\r\n| `productSlugs` | array | `[]` | Product slugs or product URLs. |\r\n| `postIds` | array | `[]` | Launch slugs or launch URLs. |\r\n| `maxItems` | integer | `50` | Record cap, 1-1000. |\r\n| `maxPages` | integer | `10` | Page cap per source, 1-60. A full day is about 40-60 pages of 20 launches. |\r\n| `maxComments` | integer | `50` | Comment cap per launch, 1-500. Threads are read 20 per page. |\r\n| `maxReviews` | integer | `20` | Review cap per product, 1-200. Reviews are read 10 per page. |\r\n| `includeDetails` | boolean | `true` | Fetch the full launch page. |\r\n| `includeComments` | boolean | `false` | Attach comments and nested replies. |\r\n| `includeReviews` | boolean | `false` | Attach detailed reviews, ratings, pros and cons. |\r\n| `includeHistory` | boolean | `false` | Attach the product's earlier launches. |\r\n| `featuredOnly` | boolean | `false` | Keep only homepage-featured launches. |\r\n| `proxyConfiguration` | object | off | Optional. The actor works without a proxy. |\r\n\r\nThe default prefill reads three latest launches with details on, comments/reviews/history off.\r\n\r\n## Output\r\n\r\nEvery launch row uses camelCase fields and omits empty values entirely (no `null`, no empty strings or arrays):\r\n\r\n- **Identity** — `id`, `slug`, `name`, `tagline`, `description`, `url`, `phUrl`, `sourceUrl`, `recordType`, `scrapedAt`\r\n- **Votes and discussion** — `votesCount`, `launchDayScore`, `commentsCount`, `reviewsCount`, `reviewsRating`\r\n- **Rank and timing** — `dailyRank`, `weeklyRank`, `monthlyRank`, `launchNumber`, `featured`, `featuredAt`, `createdAt`, `scheduledAt`, `updatedAt`, `launchState`, `isPromoted`\r\n- **People and taxonomy** — `hunter`, `makers`, `topics`, `topicDetails`\r\n- **Product** — `website`, `websiteDomain`, `pricingType`, `product` (id, slug, name, tagline, website, social links, categories, followers, reviews count/rating, first launch date)\r\n- **Media and badges** — `media` (image/video URL, dimensions, platform), `thumbnailUrl`, `badges`, `promo`\r\n- **Optional arrays** — `comments` (with nested `replies`), `reviews` (ratings, text, pros/cons, reviewer, source launch), `launchHistory`\r\n\r\n`phUrl` is the legacy short launch link (`/posts/<slug>`); `url` is the canonical Product Hunt product/launch link. `website` is the product's own site. `pricingType` is Product Hunt's value when present (`free`, `free_options`, `payment_required`) and otherwise a normalized `free`/`paid` from the product's structured data.\r\n\r\n## Examples\r\n\r\n### Full feed for one busy day\r\n\r\n```json\r\n{\r\n  \"mode\": \"dailyRange\",\r\n  \"from\": \"2026-10-25\",\r\n  \"to\": \"2026-10-25\",\r\n  \"maxItems\": 1000,\r\n  \"maxPages\": 60,\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n### Weekly AI leaderboard with comments\r\n\r\n```json\r\n{\r\n  \"mode\": \"leaderboard\",\r\n  \"period\": \"weekly\",\r\n  \"date\": \"2026-10-26\",\r\n  \"featuredOnly\": true,\r\n  \"maxItems\": 50,\r\n  \"includeComments\": true,\r\n  \"maxComments\": 40\r\n}\r\n```\r\n\r\n### Latest launches in a topic, with reviews\r\n\r\n```json\r\n{\r\n  \"mode\": \"topic\",\r\n  \"topicSlugs\": [\"artificial-intelligence\"],\r\n  \"maxItems\": 20,\r\n  \"includeDetails\": true,\r\n  \"includeReviews\": true,\r\n  \"maxReviews\": 20\r\n}\r\n```\r\n\r\n### One product with its launch history\r\n\r\n```json\r\n{\r\n  \"mode\": \"product\",\r\n  \"productSlugs\": [\"notion\"],\r\n  \"includeDetails\": true,\r\n  \"includeHistory\": true,\r\n  \"maxPages\": 5\r\n}\r\n```\r\n\r\n### Specific launches by URL\r\n\r\n```json\r\n{\r\n  \"mode\": \"launch\",\r\n  \"postIds\": [\r\n    \"https://www.producthunt.com/products/strawberry?launch=strawberry-1-0\"\r\n  ],\r\n  \"includeComments\": true,\r\n  \"maxComments\": 100\r\n}\r\n```\r\n\r\n## How it works\r\n\r\nThe actor uses Product Hunt's public frontend GraphQL endpoint with the same persisted queries the website loads, a desktop browser user agent, `X-Requested-With`, the Product Hunt timezone header, and `apollo-require-preflight`. It sends the full query document plus its sha256 persisted-query hash, so no token or cookie is ever involved.\r\n\r\nIf Product Hunt ships a new frontend build and a persisted hash stops matching, the actor refreshes the query document from the page's Apollo SSR payload, retries once, and then falls back to the page's embedded JSON state. A 200 response with an empty block is treated as a block or a source fault, never as a successful empty run.\r\n\r\nComments paginate 20 threads per page with reply cursors; reviews paginate 10 per page; launch history paginates 10 per page. Records are deduplicated by launch, comment, and review id.\r\n\r\n## Reliability and limits\r\n\r\n- Retries with backoff on 429/5xx/timeouts; a Cloudflare challenge produces a failed run with a clear status message instead of an empty dataset.\r\n- `maxItems`, `maxPages`, `maxComments`, and `maxReviews` are hard caps. A day with more launches than `maxItems` stops exactly at the cap.\r\n- Product Hunt's maker profile pages are protected by a challenge, so maker emails and social handles are not part of this dataset. Launch data includes maker names, usernames, headlines, avatars and follower counts when the source exposes them.\r\n- Funding amount and employee count are not reliably exposed by the public product pages and are omitted.\r\n- Very large launches can have hundreds of comments; raise `maxComments` up to 500 for those threads.\r\n- Topic/category/search results are products, so the actor resolves each product's latest launch. Older launches from the same product are available with `includeHistory`.\r\n- Search is product search (the same search the Product Hunt site uses), not a free-text search over historical launch descriptions.\r\n\r\n## FAQ\r\n\r\n**Do I need a Product Hunt account or API token?**\r\nNo. The actor reads the same public frontend data the website renders. There is nothing to sign up for.\r\n\r\n**Why do I get more than 20 launches per day?**\r\nThe visible leaderboard is a preview. The actor follows the cursor until the source is exhausted, which is normally 700-950 launches on a busy day.\r\n\r\n**Are comments and reviews included by default?**\r\nNo. They are opt-in because they add requests. Set `includeComments` and/or `includeReviews` to attach them to each launch record.\r\n\r\n**What happens if Product Hunt blocks the request?**\r\nThe actor retries, optionally rotates your proxy session if you supplied a proxy, and fails the run with a status message. It never reports a blocked or empty page as a successful empty dataset.\r\n\r\n**Can I get older launches?**\r\nYes: set a past `from`/`to` for `dailyRange`, pick a past leaderboard date, use `product` with `includeHistory`, or pass an old launch URL in `launch` mode.\r\n\r\n**Is this affiliated with Product Hunt?**\r\nNo. This is an independent, third-party exporter that reads Product Hunt's public web data. It is not affiliated with or endorsed by Product Hunt.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "product-hunt-launch-and-topic-data-exporter",
      "title": "Product Hunt Launch, Comment & Review Exporter",
      "description": "Export Product Hunt launches from the full daily feed, leaderboards, topics, categories, search, products or specific launches, with votes, ranks, makers, media, comments, replies and reviews.",
      "version": "2.2",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Product Hunt Launch, Comment & Review Exporter\r\n\r\nCollect Product Hunt launches from the **full daily feed**, daily/weekly/monthly/yearly leaderboards, a topic, a category, a keyword search, a list of products, or a list of specific launches. No Product Hunt account, API token, cookie or browser is needed.\r\n\r\nEach row is one launch with votes, comments count, rank, hunter, makers, topics, media, website, pricing, review score, and an optional discussion thread, review list, and launch history.\r\n\r\n## Modes\r\n\r\n| Mode | What it returns |\r\n|---|---|\r\n| `latest` | Today's complete daily feed (falls back to yesterday while today's feed is still empty). Cursor-paginated: a busy day has roughly 700-950 launches, not just the visible top 20. |\r\n| `leaderboard` | One daily, weekly, monthly or yearly leaderboard, cursor-paginated. Pick the period and an optional date. |\r\n| `dailyRange` | Every launch on each day between `from` and `to`, deduplicated across days. |\r\n| `topic` | Products in a topic, resolved to each product's latest launch. |\r\n| `category` | Products in a category, resolved to each product's latest launch. |\r\n| `search` | Product Hunt product search for a keyword, resolved to each product's latest launch. |\r\n| `product` | One or more product slugs/URLs, returning each product's latest launch with full product data. |\r\n| `launch` | One or more launch slugs/URLs, returning those exact launches. |\r\n\r\nTurn on `includeDetails` for the full launch page (description, maker/hunter profiles, media, website, pricing, ranks, review score). Turn on `includeComments`, `includeReviews`, and `includeHistory` to attach the discussion thread, detailed reviews, and earlier launches from the same product.\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | select | `latest` | `latest`, `leaderboard`, `dailyRange`, `topic`, `category`, `search`, `product`, or `launch`. |\r\n| `period` | select | `daily` | Leaderboard period: `daily`, `weekly`, `monthly`, `yearly`. |\r\n| `date` | string | — | Leaderboard date (`YYYY-MM-DD`). Weekly/monthly/yearly use that day's ISO week, month, or year. |\r\n| `from`, `to` | string | — | Inclusive day range for `dailyRange`. |\r\n| `topicSlugs` | array | `[]` | Topic slugs or `/topics/...` URLs. |\r\n| `categorySlugs` | array | `[]` | Category slugs or `/categories/...` URLs. |\r\n| `searchQuery` | string | – | Keyword for `search`. |\r\n| `productSlugs` | array | `[]` | Product slugs or product URLs. |\r\n| `postIds` | array | `[]` | Launch slugs or launch URLs. |\r\n| `maxItems` | integer | `50` | Record cap, 1-1000. |\r\n| `maxPages` | integer | `10` | Page cap per source, 1-60. A full day is about 40-60 pages of 20 launches. |\r\n| `maxComments` | integer | `50` | Comment cap per launch, 1-500. Threads are read 20 per page. |\r\n| `maxReviews` | integer | `20` | Review cap per product, 1-200. Reviews are read 10 per page. |\r\n| `includeDetails` | boolean | `true` | Fetch the full launch page. |\r\n| `includeComments` | boolean | `false` | Attach comments and nested replies. |\r\n| `includeReviews` | boolean | `false` | Attach detailed reviews, ratings, pros and cons. |\r\n| `includeHistory` | boolean | `false` | Attach the product's earlier launches. |\r\n| `featuredOnly` | boolean | `false` | Keep only homepage-featured launches. |\r\n| `proxyConfiguration` | object | off | Optional. The actor works without a proxy. |\r\n\r\nThe default prefill reads three latest launches with details on, comments/reviews/history off.\r\n\r\n## Output\r\n\r\nEvery launch row uses camelCase fields and omits empty values entirely (no `null`, no empty strings or arrays):\r\n\r\n- **Identity** — `id`, `slug`, `name`, `tagline`, `description`, `url`, `phUrl`, `sourceUrl`, `recordType`, `scrapedAt`\r\n- **Votes and discussion** — `votesCount`, `launchDayScore`, `commentsCount`, `reviewsCount`, `reviewsRating`\r\n- **Rank and timing** — `dailyRank`, `weeklyRank`, `monthlyRank`, `launchNumber`, `featured`, `featuredAt`, `createdAt`, `scheduledAt`, `updatedAt`, `launchState`, `isPromoted`\r\n- **People and taxonomy** — `hunter`, `makers`, `topics`, `topicDetails`\r\n- **Product** — `website`, `websiteDomain`, `pricingType`, `product` (id, slug, name, tagline, website, social links, categories, followers, reviews count/rating, first launch date)\r\n- **Media and badges** — `media` (image/video URL, dimensions, platform), `thumbnailUrl`, `badges`, `promo`\r\n- **Optional arrays** — `comments` (with nested `replies`), `reviews` (ratings, text, pros/cons, reviewer, source launch), `launchHistory`\r\n\r\n`phUrl` is the legacy short launch link (`/posts/<slug>`); `url` is the canonical Product Hunt product/launch link. `website` is the product's own site. `pricingType` is Product Hunt's value when present (`free`, `free_options`, `payment_required`) and otherwise a normalized `free`/`paid` from the product's structured data.\r\n\r\n## Examples\r\n\r\n### Full feed for one busy day\r\n\r\n```json\r\n{\r\n  \"mode\": \"dailyRange\",\r\n  \"from\": \"2026-10-25\",\r\n  \"to\": \"2026-10-25\",\r\n  \"maxItems\": 1000,\r\n  \"maxPages\": 60,\r\n  \"includeDetails\": true\r\n}\r\n```\r\n\r\n### Weekly AI leaderboard with comments\r\n\r\n```json\r\n{\r\n  \"mode\": \"leaderboard\",\r\n  \"period\": \"weekly\",\r\n  \"date\": \"2026-10-26\",\r\n  \"featuredOnly\": true,\r\n  \"maxItems\": 50,\r\n  \"includeComments\": true,\r\n  \"maxComments\": 40\r\n}\r\n```\r\n\r\n### Latest launches in a topic, with reviews\r\n\r\n```json\r\n{\r\n  \"mode\": \"topic\",\r\n  \"topicSlugs\": [\"artificial-intelligence\"],\r\n  \"maxItems\": 20,\r\n  \"includeDetails\": true,\r\n  \"includeReviews\": true,\r\n  \"maxReviews\": 20\r\n}\r\n```\r\n\r\n### One product with its launch history\r\n\r\n```json\r\n{\r\n  \"mode\": \"product\",\r\n  \"productSlugs\": [\"notion\"],\r\n  \"includeDetails\": true,\r\n  \"includeHistory\": true,\r\n  \"maxPages\": 5\r\n}\r\n```\r\n\r\n### Specific launches by URL\r\n\r\n```json\r\n{\r\n  \"mode\": \"launch\",\r\n  \"postIds\": [\r\n    \"https://www.producthunt.com/products/strawberry?launch=strawberry-1-0\"\r\n  ],\r\n  \"includeComments\": true,\r\n  \"maxComments\": 100\r\n}\r\n```\r\n\r\n## How it works\r\n\r\nThe actor uses Product Hunt's public frontend GraphQL endpoint with the same persisted queries the website loads, a desktop browser user agent, `X-Requested-With`, the Product Hunt timezone header, and `apollo-require-preflight`. It sends the full query document plus its sha256 persisted-query hash, so no token or cookie is ever involved.\r\n\r\nIf Product Hunt ships a new frontend build and a persisted hash stops matching, the actor refreshes the query document from the page's Apollo SSR payload, retries once, and then falls back to the page's embedded JSON state. A 200 response with an empty block is treated as a block or a source fault, never as a successful empty run.\r\n\r\nComments paginate 20 threads per page with reply cursors; reviews paginate 10 per page; launch history paginates 10 per page. Records are deduplicated by launch, comment, and review id.\r\n\r\n## Reliability and limits\r\n\r\n- Retries with backoff on 429/5xx/timeouts; a Cloudflare challenge produces a failed run with a clear status message instead of an empty dataset.\r\n- `maxItems`, `maxPages`, `maxComments`, and `maxReviews` are hard caps. A day with more launches than `maxItems` stops exactly at the cap.\r\n- Product Hunt's maker profile pages are protected by a challenge, so maker emails and social handles are not part of this dataset. Launch data includes maker names, usernames, headlines, avatars and follower counts when the source exposes them.\r\n- Funding amount and employee count are not reliably exposed by the public product pages and are omitted.\r\n- Very large launches can have hundreds of comments; raise `maxComments` up to 500 for those threads.\r\n- Topic/category/search results are products, so the actor resolves each product's latest launch. Older launches from the same product are available with `includeHistory`.\r\n- Search is product search (the same search the Product Hunt site uses), not a free-text search over historical launch descriptions.\r\n\r\n## FAQ\r\n\r\n**Do I need a Product Hunt account or API token?**\r\nNo. The actor reads the same public frontend data the website renders. There is nothing to sign up for.\r\n\r\n**Why do I get more than 20 launches per day?**\r\nThe visible leaderboard is a preview. The actor follows the cursor until the source is exhausted, which is normally 700-950 launches on a busy day.\r\n\r\n**Are comments and reviews included by default?**\r\nNo. They are opt-in because they add requests. Set `includeComments` and/or `includeReviews` to attach them to each launch record.\r\n\r\n**What happens if Product Hunt blocks the request?**\r\nThe actor retries, optionally rotates your proxy session if you supplied a proxy, and fails the run with a status message. It never reports a blocked or empty page as a successful empty dataset.\r\n\r\n**Can I get older launches?**\r\nYes: set a past `from`/`to` for `dailyRange`, pick a past leaderboard date, use `product` with `includeHistory`, or pass an old launch URL in `launch` mode.\r\n\r\n**Is this affiliated with Product Hunt?**\r\nNo. This is an independent, third-party exporter that reads Product Hunt's public web data. It is not affiliated with or endorsed by Product Hunt.\r\n",
      "input": {
        "title": "Product Hunt Scraper Input",
        "description": "Collect Product Hunt launches, products, comments and reviews without a Product Hunt account or API token.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "What to scrape",
            "type": "string",
            "description": "Pick the launch feed, a leaderboard period, a date range, a topic, a category, a keyword search, specific products, or specific launches.",
            "editor": "select",
            "enum": [
              "latest",
              "leaderboard",
              "dailyRange",
              "topic",
              "category",
              "search",
              "product",
              "launch"
            ],
            "enumTitles": [
              "Latest launches (today's full feed)",
              "Leaderboard (daily, weekly, monthly or yearly)",
              "Daily range (one or more days)",
              "Topic launches",
              "Category launches",
              "Keyword product search",
              "Specific products (latest launch)",
              "Specific launches"
            ],
            "default": "latest",
            "prefill": "latest"
          },
          "period": {
            "title": "Leaderboard period",
            "type": "string",
            "description": "Used when mode is `leaderboard`. Daily = one day, weekly = ISO week, monthly = calendar month, yearly = calendar year.",
            "editor": "select",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "yearly"
            ],
            "enumTitles": [
              "Daily",
              "Weekly",
              "Monthly",
              "Yearly"
            ],
            "default": "daily",
            "prefill": "daily"
          },
          "date": {
            "title": "Leaderboard date",
            "type": "string",
            "description": "Optional date for mode=leaderboard, in YYYY-MM-DD form. The daily period uses the exact day; weekly, monthly and yearly use that day's ISO week, month or year. Defaults to today.",
            "editor": "textfield"
          },
          "from": {
            "title": "From date",
            "type": "string",
            "description": "Optional first day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `to` date, or yesterday.",
            "editor": "textfield"
          },
          "to": {
            "title": "To date",
            "type": "string",
            "description": "Optional last day for mode=dailyRange, in YYYY-MM-DD form. Defaults to the `from` date, or yesterday.",
            "editor": "textfield"
          },
          "topicSlugs": {
            "title": "Topic slugs or URLs",
            "type": "array",
            "description": "Topics for mode=topic, e.g. `artificial-intelligence`, `developer-tools`, or a full `/topics/...` URL.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "categorySlugs": {
            "title": "Category slugs or URLs",
            "type": "array",
            "description": "Categories for mode=category, e.g. `ai-code-editors`, `productivity`, or a full `/categories/...` URL.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword for mode=search, e.g. `notion`, `ai browser`, `invoice`. Product Hunt searches products, then the actor resolves each product's latest launch.",
            "editor": "textfield"
          },
          "productSlugs": {
            "title": "Product slugs or URLs",
            "type": "array",
            "description": "Products for mode=product, e.g. `notion`, `figma`, or full `https://www.producthunt.com/products/...` URLs. Each product's latest launch is returned.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "postIds": {
            "title": "Launch slugs or URLs",
            "type": "array",
            "description": "Launches for mode=launch, e.g. `strawberry-1-0`, or full `https://www.producthunt.com/products/...?launch=...` URLs.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "maxItems": {
            "title": "Maximum records",
            "type": "integer",
            "description": "Stop after this many launch records. One record is one launch (comments and reviews stay attached to it).",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 3
          },
          "maxPages": {
            "title": "Maximum pages per source",
            "type": "integer",
            "description": "Page cap per feed, topic, category, search query, product history, comment thread or review feed. A full Product Hunt day is about 40-60 pages of 20 launches.",
            "minimum": 1,
            "maximum": 60,
            "default": 10,
            "prefill": 1
          },
          "maxComments": {
            "title": "Maximum comments per launch",
            "type": "integer",
            "description": "Used when `includeComments` is on. Comments are read 20 threads per page, including replies, and capped at this number.",
            "minimum": 1,
            "maximum": 500,
            "default": 50,
            "prefill": 20
          },
          "maxReviews": {
            "title": "Maximum reviews per product",
            "type": "integer",
            "description": "Used when `includeReviews` is on. Reviews are read 10 per page and capped at this number.",
            "minimum": 1,
            "maximum": 200,
            "default": 20,
            "prefill": 10
          },
          "includeDetails": {
            "title": "Include launch and product details",
            "type": "boolean",
            "description": "Fetch the full launch page for description, hunter, makers, media, website, pricing, ranks and review score. Turn off for a faster, lighter feed.",
            "default": true,
            "prefill": true
          },
          "includeComments": {
            "title": "Include comments and replies",
            "type": "boolean",
            "description": "Attach the discussion thread (comments and nested replies) to each launch. Adds one or more requests per launch.",
            "default": false,
            "prefill": false
          },
          "includeReviews": {
            "title": "Include product reviews",
            "type": "boolean",
            "description": "Attach Product Hunt's detailed reviews, ratings, pros and cons to each launch. Adds one request per 10 reviews.",
            "default": false,
            "prefill": false
          },
          "includeHistory": {
            "title": "Include launch history",
            "type": "boolean",
            "description": "Attach every earlier launch from the same product, newest first.",
            "default": false,
            "prefill": false
          },
          "featuredOnly": {
            "title": "Featured launches only",
            "type": "boolean",
            "description": "Keep only launches that Product Hunt selected for the homepage.",
            "default": false,
            "prefill": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The actor works without a proxy; add one only if Product Hunt blocks your network or you need a specific location.",
            "editor": "proxy",
            "default": {
              "useApifyProxy": false
            },
            "prefill": {
              "useApifyProxy": true
            }
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Product Hunt Launch, Comment and Review Exporter Output",
        "description": "One dataset row per Product Hunt launch, with product details, ranks, makers, media, optional comments/replies, optional reviews and optional launch history.",
        "properties": {
          "launches": {
            "type": "string",
            "title": "Product Hunt launches",
            "description": "Dataset containing launch records. Comments and reviews are nested arrays on the launch when enabled.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "products": {
            "type": "string",
            "title": "Product Hunt launches (legacy link)",
            "description": "Backward-compatible alias of the same launch dataset.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Product Hunt launches",
              "transformation": {
                "fields": [
                  "name",
                  "tagline",
                  "votesCount",
                  "commentsCount",
                  "reviewsCount",
                  "reviewsRating",
                  "dailyRank",
                  "featuredAt",
                  "topics",
                  "website",
                  "url"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "2.2.2",
    "imageDigest": "b2902c42605bf7057963e2c1184c4a75a2228b85b6de20d64173ece244731b0f",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.2"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01578888888888889
    }
  }
}