{
  "openapi": "3.0.1",
  "info": {
    "title": "Product Hunt Scraper (/w EMAILS)",
    "description": "Scrapes Product Hunt's launches for a specific date. Extracts the product names, descriptions, makers info (name + links), and emails.",
    "version": "0.0",
    "x-build-id": "unrlLO2bi2f0IsRfW"
  },
  "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",
        "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. Leave blank to request all available items, or set a positive cap such as `25` when you want a smaller starter run.",
            "default": 0
          },
          "scrapeMode": {
            "title": "Scrape mode",
            "enum": [
              "cached",
              "fallback",
              "fresh"
            ],
            "type": "string",
            "description": "🧊 Choose how saved rows and fresh fetches are used. `cached` uses saved Product Hunt rows only and warns when a page has nothing reusable. `fallback` starts with saved rows and then fetches the missing rows now. `fresh` ignores saved Product Hunt rows and fetches every requested row now. If `Scrape website enrichment?` is on, the actor can still add fresh website details to rows it already found.",
            "default": "fallback"
          },
          "shouldIncludePromotedListings": {
            "title": "Include promoted listings?",
            "type": "boolean",
            "description": "📣 Include sponsored Product Hunt placements from the same page when you want paid launches too. Off by default, so runs stay organic unless you opt in.",
            "default": false
          },
          "shouldScrapeComments": {
            "title": "Scrape comments?",
            "type": "boolean",
            "description": "💬 Scrape all available Product Hunt comment pages for each discovered product. Off by default because it adds more Product Hunt page work.",
            "default": false
          },
          "shouldScrapeReviews": {
            "title": "Scrape reviews?",
            "type": "boolean",
            "description": "⭐ Scrape Product Hunt reviews when available. Off by default because it adds deeper Product Hunt enrichment.",
            "default": false
          },
          "shouldScrapeBuiltWith": {
            "title": "Scrape built-with tools?",
            "type": "boolean",
            "description": "🧰 Scrape the Product Hunt `Built With` section when it exists. Off by default because it requires deeper product-page extraction.",
            "default": false
          },
          "shouldScrapeLaunches": {
            "title": "Scrape past launches?",
            "type": "boolean",
            "description": "🚀 Scrape the product's visible Product Hunt launch history. Off by default because it adds deeper launch research.",
            "default": false
          },
          "shouldScrapeWebsite": {
            "title": "Scrape website enrichment?",
            "type": "boolean",
            "description": "🌐 Fetch the external website's title, description, visible text, and emails. Off by default. Even when the Product Hunt row comes from saved data, this can still add fresh website details for that row.",
            "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 `endDate` 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. If you use this section, leave every other target section empty."
          },
          "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-52`. Add `endWeek` 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. It may fall in a later year, for example `2027-02`. If you use this section, leave every other target section empty."
          },
          "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-11`. Add `endMonth` 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. It may fall in a later year, for example `2027-02`. If you use this section, leave every other target section empty."
          },
          "startYear": {
            "title": "Start year",
            "minimum": 1000,
            "maximum": 9999,
            "type": "integer",
            "description": "🕰️ Yearly pages only. Enter one Product Hunt year such as `2026`. Add `endYear` only when you want an inclusive yearly range."
          },
          "endYear": {
            "title": "End year (optional)",
            "minimum": 1000,
            "maximum": 9999,
            "type": "integer",
            "description": "🕰️ Yearly pages only. Optional inclusive end year. Leave blank to scrape one year. If you use this section, leave every other target section empty."
          },
          "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]+)*$"
            }
          },
          "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 and resolves to Product Hunt's live `open-source` route. Topic pages do not support date ranges.",
            "items": {
              "type": "string",
              "minLength": 1,
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}