{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Launches Scraper",
    "description": "Collect Product Hunt launches from leaderboards, category or topic pages, and supported Product Hunt URLs. Review names, dates, ranks, votes, categories, media, and product details in structured rows. Leave the launch limit empty to collect all available launches until the source is exhausted.",
    "version": "7.0",
    "x-build-id": "0czVH6FQFvErcHEzx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/maximedupre~product-hunt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-maximedupre-product-hunt-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/maximedupre~product-hunt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-maximedupre-product-hunt-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/maximedupre~product-hunt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-maximedupre-product-hunt-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "target"
        ],
        "properties": {
          "maxNbItemsToScrape": {
            "title": "Maximum rows to save",
            "minimum": 0,
            "type": "integer",
            "description": "Leave this blank or enter 0 to save all available rows until Product Hunt has no more results for this choice. Enter a positive number to stop after that many saved rows."
          },
          "target": {
            "title": "Find products and launches from",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "yearly",
              "category",
              "topic",
              "pageUrls"
            ],
            "type": "string",
            "description": "Choose one Product Hunt source for this run. For Product Hunt URLs or slugs, add product slugs or complete product, launch detail, or leaderboard URLs."
          },
          "startDate": {
            "title": "Start date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "First daily leaderboard date in YYYY-MM-DD. Leave both dates blank to scrape today's California-time leaderboard. To scrape a range of days, also fill in the end date."
          },
          "endDate": {
            "title": "End date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Optional last date in an inclusive daily range, in YYYY-MM-DD. Leave blank to scrape only the start date."
          },
          "startWeek": {
            "title": "Start week",
            "pattern": "^\\d{4}-(0[1-9]|[1-4]\\d|5[0-3])$",
            "type": "string",
            "description": "First Product Hunt leaderboard week in YYYY-WW, such as 2026-52. Add an end week for an inclusive range."
          },
          "endWeek": {
            "title": "End week",
            "pattern": "^\\d{4}-(0[1-9]|[1-4]\\d|5[0-3])$",
            "type": "string",
            "description": "Optional last week in an inclusive range, in YYYY-WW. Leave blank to scrape only the start week."
          },
          "startMonth": {
            "title": "Start month",
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "First Product Hunt leaderboard month in YYYY-MM, such as 2026-11. Add an end month for an inclusive range."
          },
          "endMonth": {
            "title": "End month",
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Optional last month in an inclusive range, in YYYY-MM. Leave blank to scrape only the start month."
          },
          "startYear": {
            "title": "Start year",
            "minimum": 1000,
            "maximum": 9999,
            "type": "integer",
            "description": "First Product Hunt leaderboard year, such as 2026. Add an end year for an inclusive range."
          },
          "endYear": {
            "title": "End year",
            "minimum": 1000,
            "maximum": 9999,
            "type": "integer",
            "description": "Optional last year in an inclusive range. Leave blank to scrape only the start year."
          },
          "categorySlugs": {
            "title": "Category slugs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add one Product Hunt category slug per row, such as ai-code-editors. To find a slug, copy the last part of a category page URL, such as producthunt.com/categories/ai-code-editors.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "topicSlugs": {
            "title": "Topic slugs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add one Product Hunt topic slug per row, such as developer-tools. To find a slug, copy the last part of a topic page URL, such as producthunt.com/topics/developer-tools. The old opensource slug is also accepted and uses the open-source page.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "productHuntPageUrls": {
            "title": "Product Hunt URLs or slugs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add one complete Product Hunt product, launch, or leaderboard URL, or one product slug per row. Use the Category or Topic choice for category and topic pages. A product slug is the part after /products/ in a product URL, such as cursor in https://www.producthunt.com/products/cursor.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "title": "Page URL or product slug",
                  "type": "string",
                  "description": "Enter a complete Product Hunt product, launch, or leaderboard URL, or a product slug. Category and topic URLs belong under their own choices.",
                  "minLength": 1,
                  "pattern": "^\\s*(?:[a-z0-9]+(?:-[a-z0-9]+)*|[Hh][Tt][Tt][Pp][Ss]://[Ww]{3}\\.[Pp][Rr][Oo][Dd][Uu][Cc][Tt][Hh][Uu][Nn][Tt]\\.[Cc][Oo][Mm](?::0*443)?/(?:products/[^/?#\\x00-\\x1f\\x7f]+(?:/launches/[^/?#\\x00-\\x1f\\x7f]+)?|leaderboard/(?:daily/\\d{4}/\\d{1,2}/\\d{1,2}(?:/all)?|weekly/\\d{4}/\\d{1,2}(?:/all)?|monthly/\\d{4}/\\d{1,2}(?:/all)?|yearly/\\d{4}(?:/all)?))(?:/+)?(?:[?#][\\s\\S]*)?)\\s*$",
                  "editor": "textfield"
                }
              }
            }
          },
          "minUpvotes": {
            "title": "Minimum upvotes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep products with at least this many current Product Hunt upvotes. Leave blank for no lower limit."
          },
          "maxUpvotes": {
            "title": "Maximum upvotes",
            "minimum": 0,
            "type": "integer",
            "description": "Keep products with no more than this many current Product Hunt upvotes. Leave blank for no upper limit."
          },
          "sortBy": {
            "title": "Order results by",
            "enum": [
              "ranking",
              "newest",
              "votes"
            ],
            "type": "string",
            "description": "Choose ranking, newest launch first, or most current upvotes first. Leave blank to keep the order of the selected Product Hunt pages."
          },
          "shouldIncludePromotedListings": {
            "title": "Include promoted listings?",
            "type": "boolean",
            "description": "Keep promoted products from Product Hunt leaderboard pages, category pages, or topic pages. This does not filter Product Hunt product URLs, product slugs, or launch URLs you enter under Product Hunt URLs or slugs.",
            "default": false
          },
          "shouldScrapeOnlyFeaturedLaunches": {
            "title": "Featured launches only?",
            "type": "boolean",
            "description": "Keep only featured launches from daily, weekly, monthly, or yearly leaderboards, including leaderboard URLs in Product Hunt URLs or slugs. Category pages, topic pages, product URLs or slugs, and launch URLs are not filtered by this setting.",
            "default": false
          },
          "shouldCollectProductDetailsAndEmails": {
            "title": "Find public email addresses?",
            "type": "boolean",
            "description": "Look for public email addresses linked to each Product Hunt product. Product Hunt product titles, descriptions, and website links are collected whether this is on or off. A saved product or launch with at least one public email adds one email charge.",
            "default": false
          },
          "maxEmailsPerProduct": {
            "title": "Emails per product",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many public email addresses for each product, where available. Enter 0 to get all of them. This works only when public email lookup is on.",
            "default": 5
          },
          "shouldIncludeComments": {
            "title": "Include launch comments?",
            "type": "boolean",
            "description": "Add the comment threads of each saved launch, with their replies.",
            "default": false
          },
          "maxCommentsPerLaunch": {
            "title": "Comment threads per launch",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many comment threads for each launch, where available. Enter 0 to get all threads. This works only when launch comments are on.",
            "default": 20
          },
          "shouldIncludeReviews": {
            "title": "Include product reviews?",
            "type": "boolean",
            "description": "Add the Product Hunt reviews of each saved product.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many reviews for each product, where available. Enter 0 to get all reviews. This works only when product reviews are on.",
            "default": 20
          },
          "shouldIncludeLaunches": {
            "title": "Include product launches?",
            "type": "boolean",
            "description": "Add the list of Product Hunt launches of each saved product.",
            "default": false
          },
          "maxLaunchesPerProduct": {
            "title": "Launches per product",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many launches for each product, where available. Enter 0 to get all launches. This works only when product launches are on.",
            "default": 10
          },
          "shouldIncludeTeam": {
            "title": "Include makers and team?",
            "type": "boolean",
            "description": "Add the makers and launch team members of each saved product.",
            "default": false
          },
          "maxTeamMembersPerProduct": {
            "title": "Team members per product",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many makers and team members for each product, where available. Enter 0 to get all of them. This works only when makers and team are on.",
            "default": 20
          },
          "shouldIncludeBuiltWith": {
            "title": "Include built-with tools?",
            "type": "boolean",
            "description": "Add the tools that each saved product's team reviewed on Product Hunt, with their name, link, tagline, and thumbnail.",
            "default": false
          },
          "maxBuiltWithPerProduct": {
            "title": "Built-with tools per product",
            "minimum": 0,
            "type": "integer",
            "description": "Get up to this many built-with tools for each product, where available. Enter 0 to get all of them. This works only when built-with tools are on.",
            "default": 20
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}