{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Scraper (with Emails)",
    "description": "Scrape Product Hunt launches, leaderboards, categories, and topics. Extract product names, taglines, upvotes, ranks, makers, reviews, comments, and emails. Export as JSON, CSV, Excel.",
    "version": "1.2",
    "x-build-id": "7IWzakVdk5anTDeEo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parsebird~product-hunt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parsebird-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/parsebird~product-hunt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parsebird-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/parsebird~product-hunt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parsebird-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": {
          "maxNbItemsToScrape": {
            "title": "Maximum items across the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap applied across the whole Product Hunt run, even when the input resolves to multiple pages. Category and topic runs keep following Product Hunt pagination until this cap is satisfied or no more pages exist. Set to 0 to request all available items.",
            "default": 0
          },
          "shouldIncludePromotedListings": {
            "title": "Include promoted listings?",
            "type": "boolean",
            "description": "Include sponsored Product Hunt placements from the same page. Off by default so runs stay organic unless you opt in.",
            "default": false
          },
          "shouldScrapeOnlyFeaturedLaunches": {
            "title": "Featured launches only?",
            "type": "boolean",
            "description": "Keep only Product Hunt launches from the featured feed for the selected target. Off by default so runs include the full eligible leaderboard, category, or topic page.",
            "default": false
          },
          "shouldScrapeListingDetails": {
            "title": "Scrape listing details? (comments, reviews, built-with, launches)",
            "type": "boolean",
            "description": "Enrich each product with comments, reviews, built-with tools, and launch history from its Product Hunt listing page. Charged as a detail-scraped event.",
            "default": false
          },
          "shouldScrapeWebsite": {
            "title": "Scrape website enrichment? (emails, title, description)",
            "type": "boolean",
            "description": "Fetch each product's external website and extract title, description, visible text, and public email addresses. Uses a three-pass strategy (main page, contact pages, deep links) for thorough email discovery. Charged as an email-enrichment event only when at least one email is found.",
            "default": false
          },
          "startDate": {
            "title": "Start date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Daily pages only. Enter one Product Hunt daily date in YYYY-MM-DD format. Add End date only when you want an inclusive daily range."
          },
          "endDate": {
            "title": "End date (optional)",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Daily pages only. Optional inclusive end date in YYYY-MM-DD format. Leave blank to scrape one day."
          },
          "startWeek": {
            "title": "Start week",
            "pattern": "^\\d{4}-(0[1-9]|[1-4]\\d|5[0-3])$",
            "type": "string",
            "description": "Weekly pages only. Enter one Product Hunt week in YYYY-WW format such as 2026-25. Add End week only when you want an inclusive weekly range."
          },
          "endWeek": {
            "title": "End week (optional)",
            "pattern": "^\\d{4}-(0[1-9]|[1-4]\\d|5[0-3])$",
            "type": "string",
            "description": "Weekly pages only. Optional inclusive end week in YYYY-WW format. Leave blank to scrape one week."
          },
          "startMonth": {
            "title": "Start month",
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Monthly pages only. Enter one Product Hunt month in YYYY-MM format such as 2026-06. Add End month only when you want an inclusive monthly range."
          },
          "endMonth": {
            "title": "End month (optional)",
            "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
            "type": "string",
            "description": "Monthly pages only. Optional inclusive end month in YYYY-MM format. Leave blank to scrape one month."
          },
          "startYear": {
            "title": "Start year",
            "minimum": 2013,
            "maximum": 9999,
            "type": "integer",
            "description": "Yearly pages only. Enter one Product Hunt year such as 2026. Add End year only when you want an inclusive yearly range."
          },
          "endYear": {
            "title": "End year (optional)",
            "minimum": 2013,
            "maximum": 9999,
            "type": "integer",
            "description": "Yearly pages only. Optional inclusive end year. Leave blank to scrape one year."
          },
          "categorySlugs": {
            "title": "Category slugs",
            "uniqueItems": true,
            "type": "array",
            "description": "Category pages only. Add one Product Hunt category slug per row, for example ai-code-editors. Category pages do not support date ranges.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "default": []
          },
          "topicSlugs": {
            "title": "Topic slugs",
            "uniqueItems": true,
            "type": "array",
            "description": "Topic pages only. Add one Product Hunt topic slug per row, for example developer-tools or open-source. The legacy alias opensource is also accepted.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            },
            "default": []
          },
          "productHuntPageUrls": {
            "title": "Product Hunt page URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Add daily, weekly, monthly, yearly, category, or topic page URLs. Product, post, search, home, and other Product Hunt URLs are rejected before scraping.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings for accessing Product Hunt. Datacenter proxies work reliably for most runs. Switch to residential if you encounter blocks.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "SHADER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}