{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt – Products, Launches, Makers & Reviews",
    "description": "Extract producthunt.com data including products, launches, keyword search results, maker profiles, reviews, categories, media, social links, product websites, and optional public contact emails.",
    "version": "0.1",
    "x-build-id": "OzwvirQSXIsDjf6QH"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~product-hunt-launches-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-product-hunt-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/abotapi~product-hunt-launches-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-product-hunt-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/abotapi~product-hunt-launches-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-product-hunt-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": "Input mode",
            "enum": [
              "url",
              "keyword"
            ],
            "type": "string",
            "description": "Select URL list for fixed Product Hunt pages or Keyword search for generated search pages.",
            "default": "keyword"
          },
          "startUrls": {
            "title": "Product Hunt URLs",
            "type": "array",
            "description": "Paste Product Hunt homepage, search, leaderboard, topic, collection, product, or maker profile URLs. Listing pages expand into product records.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchTerms": {
            "title": "Keyword search terms",
            "type": "array",
            "description": "Product Hunt keywords to search. Each term is converted to a Product Hunt search URL and expanded into product rows.",
            "items": {
              "type": "string"
            }
          },
          "searchSort": {
            "title": "Keyword search sort",
            "enum": [
              "relevance",
              "popular",
              "newest"
            ],
            "type": "string",
            "description": "Sort applied to generated keyword search URLs.",
            "default": "relevance"
          },
          "searchCategories": {
            "title": "Keyword categories",
            "type": "array",
            "description": "Restrict generated keyword searches to one or more common Product Hunt categories. Leave empty to search all categories.",
            "items": {
              "type": "string",
              "enum": [
                "ai-coding-agents",
                "vibe-coding",
                "ai-code-editors",
                "llms",
                "ai-chatbots",
                "ai-infrastructure",
                "prompt-engineering-tools",
                "productivity",
                "ai-workflow-automation",
                "lead-generation",
                "marketing-automation",
                "design-creative",
                "video-editing",
                "design-resources",
                "graphic-design-tools",
                "social-networking",
                "professional-networking",
                "finance",
                "accounting",
                "fundraising-resources",
                "investing",
                "no-code-platforms",
                "figma-plugins",
                "static-site-generators",
                "automation",
                "engineering-development"
              ],
              "enumTitles": [
                "AI Coding Agents",
                "Vibe Coding Tools",
                "AI Code Editors",
                "LLMs",
                "AI Chatbots",
                "AI Infrastructure Tools",
                "Prompt Engineering Tools",
                "Productivity",
                "AI Workflow Automation",
                "Lead generation software",
                "Marketing automation platforms",
                "Design & Creative",
                "Video editing",
                "Design resources",
                "Graphic design tools",
                "Social Networking",
                "Professional networking platforms",
                "Finance",
                "Accounting software",
                "Fundraising resources",
                "Investing",
                "No-code Platforms",
                "Figma Plugins",
                "Static site generators",
                "Automation tools",
                "Engineering & Development"
              ]
            },
            "default": []
          },
          "searchCategorySlugs": {
            "title": "Custom keyword category slugs",
            "type": "array",
            "description": "Advanced: Product Hunt category slugs not listed above, for example ai-engineer. Combined with Keyword categories.",
            "items": {
              "type": "string"
            }
          },
          "enrichEmails": {
            "title": "Find contact emails on product websites",
            "type": "boolean",
            "description": "When enabled, the Actor checks each product website for public contact emails. Disable for faster Product Hunt-only metadata.",
            "default": true
          },
          "includeReviews": {
            "title": "Include product reviews",
            "type": "boolean",
            "description": "Include review summaries that are publicly present on Product Hunt product pages.",
            "default": true
          },
          "outputReviewsAsRows": {
            "title": "Output reviews as separate rows",
            "type": "boolean",
            "description": "When enabled, each extracted review is also saved as its own dataset row after the product row.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum embedded or separate review rows per product. Leave empty for a compact default; set 0 to omit review details while keeping review counts."
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Hard cap on total dataset rows. This is the only finite default cap.",
            "default": 20
          },
          "maxSearchResultsPerTerm": {
            "title": "Max search candidates per keyword",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum search candidates scanned per keyword before record-level filters are applied. Leave empty to scan enough candidates to satisfy Max items."
          },
          "minReviewsCount": {
            "title": "Minimum reviews",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep product rows with at least this many Product Hunt reviews. Leave empty for no review-count filter."
          },
          "minFollowersCount": {
            "title": "Minimum followers",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep product rows with at least this many Product Hunt followers. Leave empty for no follower-count filter."
          },
          "websiteRequired": {
            "title": "Require product website",
            "type": "boolean",
            "description": "Only keep products that expose an external website URL.",
            "default": false
          },
          "socialLinkRequired": {
            "title": "Require social or source link",
            "type": "boolean",
            "description": "Only keep products that expose at least one external social or source-code link.",
            "default": false
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large crawl without returning or charging for rows already collected there. Use this after an interrupted run, or when continuing a big pull across another run. For recurring monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those products returned (and billed). Maker and review rows are never suppressed by this mode. State is kept separately for each search/URL and filter/enrichment setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL and filter/enrichment settings — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search/URL set — not when Max items or Max search candidates capped it, or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is optional for light runs. If Product Hunt rate-limits your run, enable proxy or choose Residential."
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}