{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Scraper",
    "description": "Scrape Product Hunt launches from daily, weekly, monthly or yearly leaderboards, topics, categories and products: rank, name, tagline, description, upvotes, comments, launch date, website, topics, makers with X and LinkedIn, badges. Export via API, schedule runs, connect Make, Zapier or n8n.",
    "version": "0.1",
    "x-build-id": "jwxNKp6hSWzjtmf4n"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~product-hunt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-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/lergassy~product-hunt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-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/lergassy~product-hunt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-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",
        "properties": {
          "dates": {
            "title": "📅 Leaderboard dates",
            "type": "array",
            "description": "Give this, a date range, topics, categories or URLs. Each value is one leaderboard: 2026-10-21 (a day — or the week/month/year containing it, per \"Leaderboard\"), 2026-W42 (a week), 2026-10 (a month), 2026 (a year), or yesterday, today, last-week, last-month. Product Hunt days are US Pacific time.",
            "items": {
              "type": "string"
            }
          },
          "leaderboard": {
            "title": "📊 Leaderboard",
            "enum": [
              "daily",
              "weekly",
              "monthly",
              "yearly"
            ],
            "type": "string",
            "description": "Which leaderboard a plain date (2026-10-21) and the date range mean: the day itself, or the week / month / year that contains it. 2026-W42, 2026-10 and 2026 always mean a week, month and year.",
            "default": "daily"
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Optional range instead of single dates: every daily (or weekly / monthly / yearly, per \"Leaderboard\") leaderboard from this date to \"Date to\". At most 400 leaderboards per run."
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "End of the range (inclusive). Empty = today."
          },
          "topics": {
            "title": "🏷️ Topics",
            "type": "array",
            "description": "Topic slugs, names or URLs: artificial-intelligence, Developer Tools, producthunt.com/topics/fintech. With dates or a range: those leaderboards filtered to the topic. Without dates: the topic's top launches of all time by upvotes.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Category slugs or URLs, e.g. ai-agents or producthunt.com/categories/ai-agents. Returns the latest launch of every product in the category, sorted by \"Category sort\".",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "🔗 Product Hunt URLs",
            "type": "array",
            "description": "Any mix of Product Hunt pages: leaderboards (/leaderboard/daily/2026/10/21, add /all for non-featured), launches (/posts/slug or /products/x/launches/slug), products (/products/notion → all its launches), topics and categories. Bare launch slugs work too.",
            "items": {
              "type": "string"
            }
          },
          "featuredOnly": {
            "title": "⭐ Featured launches only",
            "type": "boolean",
            "description": "On: only launches Product Hunt featured on its homepage (what the leaderboard shows by default). Off: every launch of the period, featured or not. Product URLs always return all their launches.",
            "default": true
          },
          "minUpvotes": {
            "title": "💯 Minimum upvotes",
            "minimum": 0,
            "type": "integer",
            "description": "Only launches with at least this many upvotes. Launches below it are skipped and never charged."
          },
          "sortBy": {
            "title": "Sort leaderboards by",
            "enum": [
              "rank",
              "upvotes"
            ],
            "type": "string",
            "description": "Order of launches inside each leaderboard. Rank is Product Hunt's own order (Product of the Day #1, #2…).",
            "default": "rank"
          },
          "categorySort": {
            "title": "Category sort",
            "enum": [
              "recent_launches",
              "highest_rated",
              "trending",
              "most_followed",
              "best_rated",
              "most_recent"
            ],
            "type": "string",
            "description": "Order of products on category pages, the same choices as on producthunt.com/categories/…",
            "default": "recent_launches"
          },
          "maxItems": {
            "title": "Maximum launches",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many launches in total. Only delivered launches are charged.",
            "default": 1000
          },
          "maxPerSource": {
            "title": "Maximum launches per leaderboard / source",
            "minimum": 0,
            "type": "integer",
            "description": "Top N of every leaderboard, topic, category or product, e.g. 10 = the top 10 of each day. Empty or 0 = no per-source limit."
          },
          "includeWebsiteContacts": {
            "title": "📇 Add website contacts ($)",
            "type": "boolean",
            "description": "Paid add-on: visits each launch's website (home page plus contact / about / team pages) and adds the e-mails, phone numbers, social profiles and contact-form URL found there. Charged per launch only when at least one e-mail or phone was found. Makers' X and LinkedIn from Product Hunt are always included free.",
            "default": false
          },
          "maxContactPages": {
            "title": "Website pages to read per launch",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "For the contacts add-on: the home page plus up to this many minus one contact-like pages per website.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave as is: the Actor picks the cheapest proxy Product Hunt accepts and switches to residential by itself only when needed. If you choose proxy groups or your own proxy URLs, exactly those are used.",
            "default": {
              "useApifyProxy": true
            }
          },
          "includeRunSummary": {
            "title": "🧾 Add a free summary row at the end of the run",
            "type": "boolean",
            "description": "One extra free row at the end with the run's totals: rows delivered, free rows, what was charged and how much in US dollars. It carries type \"notice\", so a filter on the data rows skips it. Switch off if your pipeline cannot tolerate an extra row.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}