# Product Hunt Daily Scraper - Launches, Makers, Upvotes (`fetchcraft/producthunt-daily-scraper`) Actor

Scrape Product Hunt daily launches: product name, tagline, description, maker info, upvotes, comments, topic tags, and external URLs. Great for sales-trigger workflows, launch trackers, and competitive intelligence. $0.005 per product. Free preview.

- **URL**: https://apify.com/fetchcraft/producthunt-daily-scraper.md
- **Developed by:** [Emily Ward](https://apify.com/fetchcraft) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 launch returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## ProductHunt Daily Launches Scraper

**Pulls fresh ProductHunt launches via the public RSS feed. Resolves the ProductHunt tracking redirects to the real product URLs. Returns a clean dataset of leads ready to feed into the AI Sales Personalizer.**

Built as a companion to the Show HN Lead Scraper and the AI Sales Personalizer. Together they form a complete B2B lead pipeline across both major startup-discovery channels.

### Why this is useful

ProductHunt is the canonical daily feed of new product launches. Every day, 30 to 100 products go live, ranging from indie hacker side projects to YC startup launches. The audience self-selects to be discovered, which means cold outreach to these companies has a much higher reply rate than to cold lists.

This scraper:

- Pulls the latest 50 launches (configurable up to 200) from ProductHunt's official RSS feed
- Resolves the PH tracking redirect URLs to the actual product domains
- Returns title, tagline, real URL, maker name, post date
- Filters by include/exclude keywords on title or tagline

The output is CSV-ready for:

- **B2B SDR teams** targeting indie founders and early-stage startups
- **VC scouts** monitoring fresh launches in their thesis areas
- **Recruiters** finding companies in active growth mode (PH launches are often hiring signals)
- **Partnership and integration teams** looking for products with adjacent market fit
- **Content marketers** sourcing customer interview leads and case study candidates

### What you get back per launch

| Field | Description |
| --- | --- |
| `title` | Product name |
| `description` | The tagline submitted to ProductHunt |
| `url` | The actual product domain (after resolving PH redirect) |
| `domain` | Hostname extracted from the URL |
| `ph_url` | Link to the ProductHunt listing (for upvote count, comments) |
| `author` | The maker who posted the launch |
| `published_at` | When the launch went live |
| `ph_post_id` | ProductHunt's internal post ID |

### Pricing

- **Preview mode**: $0 (returns 10 results, no charges, use to verify)
- **Standard**: $0.01 per launch returned (charged via `lead_returned` event)

Typical campaigns:
- Daily 30-launch refresh: $0.30/day = $9/month
- Monthly 200-launch batch: $2
- 3-month retrospective (600 launches): $6

Compare to ProductHunt's official API (requires OAuth, rate-limited, only available on paid tier) or manual scraping (hours of work).

### How to use it

1. Click **Try for free** with `preview_mode` ticked.
2. (Optional) Set `include_keywords`: only launches mentioning specific terms ("ai, saas, developer").
3. (Optional) Set `exclude_keywords`: skip "crypto, web3, nft".
4. (Optional) Set `resolve_redirects` to false if you want to keep the PH tracking URLs (default ON, recommended).
5. Set `max_results`: how many launches to return.
6. Hit Start. Results stream into the dataset.

### The pipeline: combine with AI Sales Personalizer

This actor returns product URLs. The AI Sales Personalizer turns each URL into a personalized cold-outreach opener.

Pipeline:

1. Run **ProductHunt Daily Launches Scraper** weekly with `max_results: 100`. Get back 100 fresh product URLs.
2. Export the `url` column as CSV.
3. Feed CSV into **AI Sales Personalizer** with your seller pitch.
4. Get back 100 personalized openers.
5. Push to your sequencer (Smartlead, Lemlist, Instantly).

Total weekly cost: $1 (PH scrape) + $15 (100 personalizations at $0.15) = $16. For 100 freshly-launched B2B targets with personalized first-touch ready to go.

### Sister actors

Combine with the **Show HN Lead Scraper** for full coverage across the two major B2B discovery channels (HN + PH). Together they typically surface 200 to 500 fresh launches per week for under $5.

### What this actor does NOT do

- It does not extract upvote or comment counts (PH does not include these in the RSS feed; use the official PH API if you need them)
- It does not scrape full ProductHunt threads
- It does not personalize openers (use AI Sales Personalizer for that)
- It does not send emails (use your sequencer)

### Tips

1. **Run daily with `max_results: 30 to 50`** to maintain a fresh B2B pipeline.
2. **Use `include_keywords: "ai, saas"` for tech sellers**, or `"productivity, workflow"` for ops/PM tools, or `"developer, dev tool"` for infrastructure plays.
3. **Set `exclude_keywords` defensively**: "crypto, web3, nft, blockchain" skips low-fit prospects in most ICPs.
4. **Pair with the Show HN Lead Scraper** for double the discovery coverage.

### FAQ

**Q: Is this allowed by ProductHunt?**
The official PH RSS feed is public and indexable. We respect rate limits and identify ourselves via User-Agent.

**Q: Why use this instead of the official PH API?**
The official API requires OAuth, has rate limits, and gated higher tiers. The RSS feed is faster, simpler, and free.

**Q: Why are some `url` fields the PH redirect URL instead of the real product URL?**
Some PH redirects fail to resolve within the timeout (8 seconds). Toggle `resolve_redirects: false` to get the raw PH redirect URLs faster, or accept the few unresolved ones at default.

**Q: Refund policy?**
Standard Apify refund. Preview mode is always free.

### Tags

`leads` `lead-generation` `producthunt` `product-hunt` `b2b` `startup-discovery` `sales` `sdr` `outbound`

---

Built by Emily Ward, Sydney. Pairs natively with the AI Sales Personalizer and Show HN Lead Scraper actors.


### Integrations

This actor works out of the box with every Apify-supported integration:

- **API**: call via Apify API or any official SDK (Python, JavaScript, PHP, .NET). Returns a clean dataset URL.
- **Schedule**: set a daily, weekly, or custom cron cadence in Apify Console. Combine with `notification` for fresh feeds.
- **Webhooks**: wire `ACTOR.RUN.SUCCEEDED` to Slack, Discord, Zapier, Make, n8n, Pipedream, or any HTTPS endpoint.
- **MCP**: this actor is discoverable through Apify's hosted MCP server at `mcp.apify.com` for Claude, Cursor, Cline, Windsurf, and other MCP clients.
- **n8n / Make / Zapier**: native HTTP-Request integration. Trigger the actor on schedule, pipe results to Google Sheets, Airtable, your CRM, or any database.

### Try it free

Every Apify user gets **$5/month in free platform credits** (around 250 events at this actor's per-event price). Run preview mode first to confirm output shape before scaling.

New to Apify? [Sign up here](https://apify.com/sign-up?fpr=fetchcraft) to get free credits on signup.

### What's New

- 2026-06-03: Metadata, categories, and SEO refreshed. Latest version live on Apify Store.

### Last Updated

2026-06-03

# Actor input Schema

## `max_results` (type: `integer`):

Hard cap on results. The RSS feed returns about 50 recent launches at any time.
## `include_keywords` (type: `string`):

Only include launches whose title or tagline contains one of these terms. Example: "ai, saas, productivity"
## `exclude_keywords` (type: `string`):

Skip launches with these terms. Example: "crypto, web3, nft"
## `resolve_redirects` (type: `boolean`):

If true, follows ProductHunt's tracking redirects to extract the actual product URL. Recommended ON for cold-outreach use (you want the real domain, not a PH link).
## `preview_mode` (type: `boolean`):

If true, returns at most 10 results and does not charge. Use to verify the actor works.

## Actor input object example

```json
{
  "max_results": 50,
  "include_keywords": "",
  "exclude_keywords": "",
  "resolve_redirects": true,
  "preview_mode": false
}
````

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchcraft/producthunt-daily-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("fetchcraft/producthunt-daily-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call fetchcraft/producthunt-daily-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fetchcraft/producthunt-daily-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Product Hunt Daily Scraper - Launches, Makers, Upvotes",
        "description": "Scrape Product Hunt daily launches: product name, tagline, description, maker info, upvotes, comments, topic tags, and external URLs. Great for sales-trigger workflows, launch trackers, and competitive intelligence. $0.005 per product. Free preview.",
        "version": "0.1",
        "x-build-id": "eyOJstwmqE9wENGIL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetchcraft~producthunt-daily-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetchcraft-producthunt-daily-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/fetchcraft~producthunt-daily-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fetchcraft-producthunt-daily-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/fetchcraft~producthunt-daily-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fetchcraft-producthunt-daily-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": {
                    "max_results": {
                        "title": "Max launches to return",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Hard cap on results. The RSS feed returns about 50 recent launches at any time.",
                        "default": 50
                    },
                    "include_keywords": {
                        "title": "Title or description must contain (comma-separated, optional)",
                        "type": "string",
                        "description": "Only include launches whose title or tagline contains one of these terms. Example: \"ai, saas, productivity\"",
                        "default": ""
                    },
                    "exclude_keywords": {
                        "title": "Title or description must NOT contain (comma-separated, optional)",
                        "type": "string",
                        "description": "Skip launches with these terms. Example: \"crypto, web3, nft\"",
                        "default": ""
                    },
                    "resolve_redirects": {
                        "title": "Resolve redirect URLs to real product URLs",
                        "type": "boolean",
                        "description": "If true, follows ProductHunt's tracking redirects to extract the actual product URL. Recommended ON for cold-outreach use (you want the real domain, not a PH link).",
                        "default": true
                    },
                    "preview_mode": {
                        "title": "Preview mode (free, 10 results max)",
                        "type": "boolean",
                        "description": "If true, returns at most 10 results and does not charge. Use to verify the actor works.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
