{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Daily Launches Scraper",
    "description": "Product Hunt scraper without API key or login. A Product Hunt API alternative: export daily launches, votes and topics to CSV/JSON datasets.",
    "version": "1.0",
    "x-build-id": "KQ7IN16Oal5jVTmzk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~product-hunt-daily-launches-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-product-hunt-daily-launches-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/logiover~product-hunt-daily-launches-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-product-hunt-daily-launches-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/logiover~product-hunt-daily-launches-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-product-hunt-daily-launches-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",
        "properties": {
          "mode": {
            "title": "Scraping Mode",
            "enum": [
              "daily",
              "dateRange",
              "topic"
            ],
            "type": "string",
            "description": "daily = a single day's launches, dateRange = multiple days, topic = a topic/category leaderboard",
            "default": "daily"
          },
          "date": {
            "title": "Date (for daily mode)",
            "type": "string",
            "description": "Specific date to scrape in YYYY-MM-DD format. Leave empty for today."
          },
          "dateFrom": {
            "title": "Date From (for dateRange mode)",
            "type": "string",
            "description": "Start date in YYYY-MM-DD format."
          },
          "dateTo": {
            "title": "Date To (for dateRange mode)",
            "type": "string",
            "description": "End date in YYYY-MM-DD format."
          },
          "topic": {
            "title": "Topic / Category (for topic mode)",
            "enum": [
              "",
              "artificial-intelligence",
              "developer-tools",
              "productivity",
              "saas",
              "marketing",
              "design-tools",
              "no-code",
              "fintech",
              "web3",
              "social-media",
              "e-commerce",
              "analytics",
              "open-source",
              "chrome-extensions",
              "ios",
              "android",
              "games",
              "health-and-fitness",
              "education",
              "hardware",
              "podcasts",
              "user-experience",
              "crypto",
              "email",
              "customer-communication"
            ],
            "type": "string",
            "description": "Pick a Product Hunt topic to scrape its leaderboard. Leave empty to get recent launches across popular topics. Only used when Mode = Topic (or when it is the most reliable no-key path)."
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "VOTES",
              "NEWEST",
              "FEATURED_AT"
            ],
            "type": "string",
            "description": "How to sort the posts.",
            "default": "VOTES"
          },
          "maxPosts": {
            "title": "Max Posts",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of posts to scrape. Set 0 for unlimited.",
            "default": 500
          },
          "enrichDetails": {
            "title": "Enrich with makers & full description",
            "type": "boolean",
            "description": "No longer needed in no-key mode: makers and the long description are now read from the same launch page the Actor already fetches for votes and rank, so they are always included at no extra cost. Kept for backwards compatibility.",
            "default": false
          },
          "enrichLimit": {
            "title": "Enrichment limit (no-key mode)",
            "minimum": 0,
            "type": "integer",
            "description": "No-key mode only. How many launches to enrich from their own launch page. The topic/leaderboard listing carries only name, slug, comments, topics and thumbnail — votes, tagline, rank, makers and description all come from this step, so launches beyond this limit will be missing them. Set 0 to enrich every launch (slower).",
            "default": 60
          },
          "scrapeComments": {
            "title": "Scrape Comments (official API only)",
            "type": "boolean",
            "description": "Include top comments per post. Only used when API credentials are provided.",
            "default": false
          },
          "maxComments": {
            "title": "Max Comments per Post (official API only)",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum comments to fetch per post when scrapeComments is enabled and API credentials are provided.",
            "default": 20
          },
          "apiKey": {
            "title": "API Key (OPTIONAL — official API mode)",
            "type": "string",
            "description": "Optional. Leave empty to run without any key. If you DO supply Product Hunt API credentials, the actor switches to the official GraphQL API for richer data (makers, description, comments). Get a free key at https://www.producthunt.com/v2/oauth/applications"
          },
          "apiSecret": {
            "title": "API Secret (OPTIONAL — official API mode)",
            "type": "string",
            "description": "Optional. The API Secret from the same Product Hunt OAuth application as your API Key above."
          },
          "accessToken": {
            "title": "Access Token (OPTIONAL — alternative to Key+Secret)",
            "type": "string",
            "description": "Optional. Paste a pre-obtained Product Hunt Bearer / Developer Token to use the official API INSTEAD of apiKey + apiSecret."
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy used for the no-key web scrape. Defaults to Apify Residential (US), which works reliably. You can override the group/country here."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}