{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Scraper",
    "description": "Collect Product Hunt launches from daily and past leaderboards, category or topic pages, and supported URLs. Export ranks, engagement, teams, media, and optional extra data.",
    "version": "0.0",
    "x-build-id": "ttjWJihRlDiCPH8Fc"
  },
  "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": {
          "target": {
            "title": "Target",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "yearly",
              "category",
              "topic",
              "pageUrls"
            ],
            "type": "string",
            "description": "Choose the Product Hunt page group to scrape. Fill in only the matching Target options section. Fields in all other sections are ignored."
          },
          "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 blank to scrape today's California-time leaderboard. Add an end date to include each day in a past date range."
          },
          "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.",
            "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 or open-source. The legacy alias opensource is also accepted.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          },
          "productHuntPageUrls": {
            "title": "Product Hunt page URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add supported Product Hunt daily, weekly, monthly, yearly, category, or topic page URLs, one per row. Product-detail, post, search, home, and other URLs are rejected.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "maxNbItemsToScrape": {
            "title": "Maximum items",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum launches to save across the run. Enter 0 to collect all available inventory from the selected pages.",
            "default": 0
          },
          "shouldIncludePromotedListings": {
            "title": "Include promoted listings?",
            "type": "boolean",
            "description": "Include listings that Product Hunt clearly marks as promoted. Off by default for organic-only output.",
            "default": false
          },
          "shouldScrapeOnlyFeaturedLaunches": {
            "title": "Featured launches only?",
            "type": "boolean",
            "description": "Keep only launches in Product Hunt's featured feed. Off keeps all eligible launches.",
            "default": false
          },
          "shouldScrapeComments": {
            "title": "Scrape comments?",
            "type": "boolean",
            "description": "Collect available Product Hunt comments for each launch. Off by default because this makes the run much slower.",
            "default": false
          },
          "shouldScrapeReviews": {
            "title": "Scrape reviews?",
            "type": "boolean",
            "description": "Collect available Product Hunt reviews for each launch. Off by default because this makes the run much slower.",
            "default": false
          },
          "shouldScrapeBuiltWith": {
            "title": "Scrape built-with tools?",
            "type": "boolean",
            "description": "Collect Product Hunt's Built With data when available. Off by default because this makes the run much slower.",
            "default": false
          },
          "shouldScrapeLaunches": {
            "title": "Scrape launch history?",
            "type": "boolean",
            "description": "Collect the product's visible Product Hunt launch history. Off by default because this makes the run much slower.",
            "default": false
          },
          "shouldScrapeWebsite": {
            "title": "Scrape website enrichment?",
            "type": "boolean",
            "description": "Visit each product website for its title, description, visible text, and public emails when found. Off by default because this makes the run much slower. Email enrichment is charged only when at least one email is saved.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}