# Product Hunt Launches Scraper – Daily Top, No Login (`cliqtomedia/product-hunt-launches`) Actor

Scrape Product Hunt daily leaderboards for any day or period: name, tagline, votes, comments, rank, topics, website and public maker names. Filter by topic and minimum votes. No login, no API token.

- **URL**: https://apify.com/cliqtomedia/product-hunt-launches.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (community)
- **Categories:** Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 launches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Get Product Hunt daily leaderboards for any day or period up to 31 days: one row per launch with name, tagline, votes, comments, daily rank, topics, website and public makers. No login and no API token.

Add how many days to read (or a date range), click **Start**, and you get the launches in a dataset you can export to JSON, CSV or Excel. A typical run (yesterday's top 20) takes about 10–25 seconds and costs about $0.02.

![Product Hunt Launches Scraper: pick days and topics, read the daily leaderboard, get clean rows with rank, votes, website and makers](https://api.apify.com/v2/key-value-stores/18uXBuzl2UbfP1HVm/records/hero.png)

### Table of contents

- [What it does](#what-it-does)
- [Quick start](#quick-start)
- [Input](#input)
- [Output](#output)
- [Pricing](#pricing)
- [Use cases](#use-cases)
- [Scheduling](#scheduling)
- [API, export and integrations](#api-export-and-integrations)
- [Limits and partial results](#limits-and-partial-results)
- [Moving from another Product Hunt scraper](#moving-from-another-product-hunt-scraper)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Support](#support)

### What it does

The Actor reads the public Product Hunt daily leaderboard for each day you choose. Days follow Product Hunt's calendar (Pacific Time). For each launch it saves one dataset row. With details on (default), it also opens the launch page and adds the product website, makers, hunter, description and pricing type.

You can keep only some launches: by topic (for example `artificial-intelligence` or `Marketing`) and by a minimum number of votes.

Data comes from [Product Hunt](https://www.producthunt.com/). This Actor is not made by or connected to Product Hunt.

#### Good fit

- **Marketers:** a daily list of new tools in your niche, with website and tagline, for newsletters, competitor watch or partner outreach.
- **Investors:** the top launches of a week or month with votes, comments and rank, to spot early products.
- **Sales:** new products with their website and public maker names, as a starting list for lead research.

#### Not a fit / limits

- The Actor does not collect emails, phone numbers or other private contact data. Makers have only public name, username and profile URL.
- No comments text, reviews, followers or maker profiles.
- Up to 31 days in one run. For a longer period, run it again with the next dates.
- Votes and ranks are live numbers. They can change after the launch day. Today's leaderboard (`daysBack: 0`) is not final.
- Only Product Hunt launches. No other launch sites.

### Quick start

1. Open the **Input** tab.
2. Keep **Days back** (`daysBack`) = `1`. This reads yesterday's final leaderboard.
3. Keep **Max launches** (`maxItems`) = `20`, or set your own number.
4. Optional: add **Topics** (`topics`), for example `artificial-intelligence`.
5. Click **Start**.
6. Open the **Output** tab and check the **Launches** view: `rank`, `name`, `votesCount`, `website`.

Expected result: up to 20 rows from yesterday's featured leaderboard, best rank first.

### Input

#### Input fields

| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `daysBack` | Days back | integer | no | default `1`, prefill `1` | 0–31 | Reads N full days before today. `0` = today (live, not final). Ignored when `dateFrom` or `dateTo` is set. | `7` | Best for daily schedules: no dates to edit. |
| `dateFrom` | From date | string | no | none | `YYYY-MM-DD`, not in the future | First day of the period. Alone, it reads one day. | `2026-10-01` | Use for a fixed past period. |
| `dateTo` | To date | string | no | none | `YYYY-MM-DD`, ≥ `dateFrom`, period ≤ 31 days | Last day, included. Alone, it reads one day. | `2026-10-07` | |
| `featuredOnly` | Featured launches only | boolean | no | `true` | true / false | `true`: the featured launches (usually 10–60 a day). `false`: all launches of the day (often several hundred). | `false` | Keep `true` unless you need small launches too. |
| `topics` | Topics | array of strings | no | empty | up to 20 names or slugs, any case | Keeps launches with at least one of these topics. Empty = all topics. | `["artificial-intelligence", "Marketing"]` | Use the slug from the topic page URL. |
| `minVotes` | Minimum votes | integer | no | `0` | ≥ 0 | Keeps launches with `votesCount` ≥ this number. | `100` | Makes runs faster: the Actor stops a day early when votes drop below it. Product Hunt sorts by votes, so a very low value (under 10) can rarely skip a launch. |
| `includeDetails` | Include website and makers | boolean | no | `true` | true / false | `true`: one extra request per launch for `website`, `makers`, `hunter`, `description`, `pricingType`. `false`: leaderboard fields only. | `false` | Turn off when you need only votes and ranks: much faster for big runs. |
| `maxItems` | Max launches | integer | no | default `100`, prefill `20` | 1–10,000 | Stops after this many rows in total. Newest day first. | `500` | Each row is one paid result. |

Empty input (`{}`) reads yesterday with up to 100 rows. Wrong dates (future date, `dateFrom` after `dateTo`, more than 31 days) stop the run at once with `INVALID_INPUT`, before any source request and without row charges.

#### Interacting settings

| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
| --- | --- | --- | --- | --- | --- |
| Both set | `daysBack` | `dateFrom` / `dateTo` | Dates win, `daysBack` is ignored | `daysBack: 7`, `dateFrom: 2026-10-01` → only 2026-10-01 | none |
| Filter + cap | `topics` / `minVotes` | `maxItems` | Filters first, then the cap counts saved rows | 7 days, `topics: ["saas"]`, `maxItems: 50` | You pay only for saved rows |
| All launches + filter with few matches | `featuredOnly: false` | `topics` | The Actor still reads every leaderboard page of every day | 31 days, a rare topic | Many pages: see [Pricing](#pricing) |
| Vote filter | `minVotes` | any | The leaderboard is sorted by votes, so the Actor stops a day after a full page below `minVotes` | `minVotes: 50` | Fewer pages, lower cost |
| No details | `includeDetails: false` | `topics` | Topic filter uses the topics shown on the leaderboard (up to 3 per launch) | | Faster; `website`, `makers` are `null` |

#### Input examples

##### Yesterday's top 20 (prefill)

```json
{
  "daysBack": 1,
  "maxItems": 20
}
```

Expected behavior: reads one leaderboard page and opens each launch page.
Expected output: up to 20 launches with `rank`, `name`, `votesCount`, `website`, `makers`.
Cost note: about $0.02.

##### AI launches with 100+ votes in one week

```json
{
  "dateFrom": "2026-10-05",
  "dateTo": "2026-10-11",
  "topics": ["artificial-intelligence"],
  "minVotes": 100,
  "maxItems": 200
}
```

Expected behavior: reads 7 days, keeps AI launches with at least 100 votes.
Expected output: launches with `topics` containing "Artificial Intelligence" and `votesCount` ≥ 100.

### Output

Each dataset row is one launch from one leaderboard day. Rows go from the newest day to the oldest, and by rank inside a day.

#### Output example

```json
{
  "name": "ngram 2.0",
  "tagline": "Create explainers, screencasts, and AI avatar videos",
  "url": "https://www.producthunt.com/products/ngram/launches/ngram-2-0-2",
  "productUrl": "https://www.producthunt.com/products/ngram",
  "website": "https://www.ngram.com",
  "votesCount": 269,
  "launchDayVotesCount": 248,
  "votesHidden": false,
  "commentsCount": 42,
  "rank": 2,
  "weeklyRank": 3,
  "monthlyRank": 35,
  "topics": ["Education", "Artificial Intelligence", "Video"],
  "topicSlugs": ["education", "artificial-intelligence", "video"],
  "makers": [{ "name": "…", "username": "…", "profileUrl": "https://www.producthunt.com/@…" }],
  "hunter": { "name": "…", "username": "…", "profileUrl": "https://www.producthunt.com/@…" },
  "description": "Turn ideas, documents, and recordings into narrated videos…",
  "pricingType": "free_options",
  "featured": true,
  "launchDate": "2026-10-12",
  "launchedAt": "2026-10-12T07:01:00.000Z",
  "thumbnail": "https://ph-files.imgix.net/ff626e36-21c0-49e6-9937-f794c9825256.png",
  "postId": "1266889",
  "slug": "ngram-2-0-2",
  "productSlug": "ngram",
  "detailsStatus": "ok",
  "source": "Product Hunt (https://www.producthunt.com/)",
  "fetchedAt": "2026-10-14T03:40:18.334Z"
}
```

This is one row from a run for 2026-10-12. The description is shortened and maker names are hidden here. `null` means Product Hunt did not give this value or details were off. It is never used instead of `0`.

#### Output fields

| Field | Meaning | Type | Can be empty? | Example / enum | Notes |
| --- | --- | --- | --- | --- | --- |
| `name` | Launch name | string | no | `ngram 2.0` | |
| `tagline` | One-line tagline | string | yes | `Create explainers, screencasts, and AI avatar videos` | |
| `url` | Product Hunt launch page | string | no | `https://www.producthunt.com/products/ngram/launches/ngram-2-0-2` | |
| `productUrl` | Product Hunt product page | string | yes | `https://www.producthunt.com/products/ngram` | |
| `website` | Product website | string | yes | `https://www.ngram.com` | `null` when details are off or there is no link |
| `votesCount` | Upvotes now | integer | yes | `269` | `null` when Product Hunt does not return it; never `0` for missing |
| `launchDayVotesCount` | Upvotes at the end of the launch day | integer | yes | `248` | |
| `votesHidden` | The maker hides the vote count | boolean | no | `false` | |
| `commentsCount` | Number of comments | integer | yes | `42` | |
| `rank` | Daily leaderboard rank | integer | yes | `2` | `null` for launches without a rank |
| `weeklyRank`, `monthlyRank` | Weekly and monthly rank | integer | yes | `3`, `35` | |
| `topics` | Topic names | array | no (can be `[]`) | `["Education", "Artificial Intelligence", "Video"]` | All topics with details, up to 3 without |
| `topicSlugs` | Topic slugs | array | no | `["education", "artificial-intelligence", "video"]` | |
| `makers` | Makers: public name, username, profile URL | array | yes | `[{"name": "…", "username": "…", "profileUrl": "…"}]` | `[]` = none listed; `null` = details not read |
| `hunter` | Who posted the launch | object | yes | `{"name": "…", "username": "…", "profileUrl": "…"}` | |
| `description` | Launch description | string | yes | `Turn ideas, documents, and recordings into narrated videos…` | HTML entities decoded; email addresses replaced with `[email removed]` |
| `pricingType` | Pricing set by the maker | string | yes | `free`, `free_options`, `payment_required` | |
| `featured` | Featured by Product Hunt | boolean | no | `true` | |
| `launchDate` | Leaderboard day (Pacific Time) | string | no | `2026-10-12` | |
| `launchedAt` | Launch time, UTC | string | yes | `2026-10-12T07:01:00.000Z` | |
| `thumbnail` | Thumbnail image URL | string | yes | `https://ph-files.imgix.net/….png` | |
| `postId`, `slug`, `productSlug` | Product Hunt IDs | string | `productSlug` yes | `1266889`, `ngram-2-0-2`, `ngram` | Use `postId` to remove duplicates between runs |
| `detailsStatus` | Did the details load? | string | no | `ok`, `not_found`, `skipped` | `not_found` = the launch page no longer exists; the row keeps leaderboard fields |
| `source` | Data source | string | no | `Product Hunt (https://www.producthunt.com/)` | |
| `fetchedAt` | When the row was read, UTC | string | no | `2026-10-14T03:40:18.334Z` | |

#### Output entities and surfaces

| Situation | Where | Result shape | User action |
| --- | --- | --- | --- |
| Normal run | Dataset, view **Launches**; `RUN_SUMMARY` status `COMPLETE` or `CAPPED` | Launch rows | Export or use the fields |
| No launches on these days | `RUN_SUMMARY` status `NOT_FOUND`, run SUCCEEDED | Empty dataset | Check the dates (Product Hunt started in 2013) |
| Filters removed everything | `RUN_SUMMARY` status `NO_RESULTS`, run SUCCEEDED | Empty dataset | Use a wider topic or a lower `minVotes` |
| Some data could not be read | `RUN_SUMMARY` status `PARTIAL` with `reason` | Saved rows; some rows may have `website`/`makers` = `null` | Read `message` and `warnings`; run again for missing days |
| Source error, nothing saved | `RUN_SUMMARY` status `ERROR` with `errorCode`, run FAILED | Empty dataset | Run again later; if `SOURCE_QUERY_CHANGED`, open an issue |

`RUN_SUMMARY` (in the run's key-value store) has `status`, `reason`, `errorCode`, `message`, the normalized input, counts (days, pages, rows saved, filtered out, cut by `maxItems`), one line per day and request statistics.

### Pricing

#### Pricing unit

You pay per event:

| Event | When | Price |
| --- | --- | ---: |
| Actor start | Once per run (per GB of memory; default 256 MB = 1 event) | $0.001 |
| Leaderboard page | Each leaderboard page read (up to 20 launches) | $0.0005 |
| Launch | Each row saved to the dataset | $0.001 (FREE plan) → $0.00085 (GOLD and higher) |

Launch price by Apify plan: FREE $0.001, BRONZE $0.00095, SILVER $0.0009, GOLD and higher $0.00085. Website and makers (`includeDetails`) do not cost extra.

A run with no rows still pays for the start and the pages it read. An empty day or a filter with no matches on one day costs about $0.0015. Invalid input costs only the $0.001 start event: no pages or rows are charged. If you set a maximum charge for the run, the Actor stops at that limit and keeps the saved rows (`PARTIAL`, reason `CHARGE_LIMIT`).

#### Cost examples (FREE plan prices)

| Scenario | Input scope | Rows | Pages | Approx. charge | Stop/cap behavior |
| --- | --- | ---: | ---: | ---: | --- |
| 10 launches | `daysBack: 1`, `maxItems: 10` | 10 | 1 | $0.012 | Stops at 10 rows |
| Yesterday's top 20 (prefill) | `daysBack: 1`, `maxItems: 20` | 20 | 1 | $0.022 | Stops at 20 rows |
| One week, featured | `daysBack: 7`, `maxItems: 100` | 100 | up to 14 | $0.11 | Stops at 100 rows |
| One busy day, all launches | `featuredOnly: false`, `maxItems: 1000` | 1,000 | ~50 | $1.03 | Stops at 1,000 rows |
| Empty day or no matches | 1 day | 0 | 1 | $0.0015 | SUCCEEDED, `NOT_FOUND` / `NO_RESULTS` |
| 31 days, all launches, rare topic | `featuredOnly: false`, 31 days, `topics` | 0–few | ~1,400–1,600 | $0.70–0.80 + rows | Reads every page; set a charge limit |

### Use cases

| Buyer job | Input path | Output entity | Key fields | Next integration |
| --- | --- | --- | --- | --- |
| Daily digest of new tools | `daysBack: 1`, `topics` | Launch | `name`, `tagline`, `website`, `topics` | Schedule + export to Sheets or Slack |
| Top launches of a week for deal flow | `dateFrom`, `dateTo`, `minVotes` | Launch | `rank`, `votesCount`, `commentsCount`, `weeklyRank` | CSV / Excel |
| Lead list of new products | `daysBack: 7`, `topics` | Launch | `website`, `makers`, `productUrl` | Your CRM via API |
| Full day, also non-featured | `featuredOnly: false` | Launch | `featured`, `rank`, `votesCount` | Dataset API |

### Scheduling

To get new launches every day, create an [Apify schedule](https://docs.apify.com/platform/schedules) with this input and run it once a day, after midnight Pacific Time:

```json
{
  "daysBack": 1,
  "maxItems": 100
}
```

Each run reads the last full day, so you do not edit dates. The Actor does not compare runs: each run is a full snapshot of that day. Use `postId` to remove duplicates if your periods overlap.

### API, export and integrations

- **Export:** from the Output tab as JSON, CSV, Excel, XML or HTML.
- **API:** start the Actor with the Apify API, then read the dataset items. `postId` is a stable key.
- **No-code:** connect the dataset to Google Sheets, Slack, Make, Zapier or n8n with [Apify integrations](https://docs.apify.com/platform/integrations).

#### Use with AI agents (MCP)

- MCP server with only this Actor: `https://mcp.apify.com?tools=cliqtomedia/product-hunt-launches` (see [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)).
- Smallest useful input: `{"daysBack": 1, "maxItems": 20}`.
- Key output fields: `name` (launch), `rank` (daily place), `votesCount` (current votes), `website` (product site), `topics` (topic names).
- A typical call takes 10–25 seconds and costs about $0.02. Limits: 31 days and 10,000 rows per run; `INVALID_INPUT` explains a wrong date in `RUN_SUMMARY.message`.

### Limits and partial results

- Up to 31 days and 10,000 rows per run; up to 150 leaderboard pages per day.
- Speed: about 1 leaderboard page per second; details add about 0.5 seconds per row.
- Default timeout is 30 minutes. 31 days with all launches and details may need more: set timeout to 3600 seconds. When time runs out, the Actor saves what it has and ends with `PARTIAL`, reason `DEADLINE`.
- `PARTIAL` means some data was not read, but the saved rows are correct. `RUN_SUMMARY.reason` says why: `DEADLINE` (time limit), `CHARGE_LIMIT` (your maximum charge), `REQUEST_CAP` (internal request limit) or `SOURCE_ERROR` (Product Hunt failed after retries).
- Rows from a `PARTIAL` run can have `website` and `makers` = `null` when details were not read. `detailsStatus` shows this for each row.

### Moving from another Product Hunt scraper

If you already use a dataset from another Product Hunt scraper, these renames are often enough:

| Common field elsewhere | Field here | Note |
| --- | --- | --- |
| `upvotesCount` | `votesCount` | Same number (live votes) |
| `dayRank` | `rank` | |
| `weekRank`, `monthRank` | `weeklyRank`, `monthlyRank` | |
| `thumbnailUrl` | `thumbnail` | |
| `tags` | `topics` | Here: all topics with details, not only one |
| `website.url` | `website` | Here: a plain string |
| `team` | `makers` + `hunter` | Here: only the launch makers and the hunter, public fields only |

`name`, `tagline`, `url`, `commentsCount` and `launchDate` have the same names.

### Troubleshooting

#### The dataset is empty

Symptom: the run SUCCEEDED but there are no rows.
Likely reason: `RUN_SUMMARY.status` is `NO_RESULTS` (filters removed all launches) or `NOT_FOUND` (no launches on these days).
Check: `RUN_SUMMARY.counts.launchesListed` and `filteredOut`.
Action: use a topic slug from the Product Hunt topic page, lower `minVotes`, or choose other dates.

#### Ranks have gaps (for example 1, 2, 4)

Symptom: a rank number is missing in a day.
Likely reason: Product Hunt removed or hid that launch, or the place is an ad. The Actor skips ads and counts them in `RUN_SUMMARY.skippedFeedTypes`.
Action: nothing to fix; the other rows are complete.

#### Some rows have `website` and `makers` = `null`

Symptom: leaderboard fields are filled, details are empty.
Likely reason: `includeDetails` is off (`detailsStatus: skipped`), the launch page no longer exists (`not_found`), or the run was `PARTIAL`.
Action: check `detailsStatus` and `RUN_SUMMARY.warnings`; run that day again if needed.

#### The run ended with `PARTIAL` and reason `DEADLINE`

Symptom: not all days were read.
Likely reason: a long period with all launches and details needs more than the run timeout.
Action: set timeout to 3600 seconds, or split the period into smaller runs.

### FAQ

#### Do I need a Product Hunt account or API token?

No. The Actor reads public leaderboard pages. You do not add a login, cookie or token.

#### Why are votes different from the Product Hunt page?

Votes are live. They change during the day and a little after it. `launchDayVotesCount` keeps the number from the end of the launch day. `fetchedAt` shows when the row was read.

#### Does it give maker emails?

No. Only public name, username and profile URL. Emails in descriptions are replaced with `[email removed]`.

#### Are all launches of a day included?

With `featuredOnly: true`, you get the featured launches. With `featuredOnly: false`, you get all launches on the daily leaderboard, except ads.

### Support

For bugs, questions or feature requests, open an issue in the **Issues** tab. Include the run ID, your input (without private data) and the `RUN_SUMMARY` message. Do not send tokens or private data.

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/product-hunt-launches/changelog.md

# Actor input Schema

## `daysBack` (type: `integer`):

How many full days before today to read, e.g. 1 = yesterday's final leaderboard, 7 = the last 7 days. 0 = today's live leaderboard (votes still change). Ignored when dateFrom or dateTo is set. Good for daily schedules: no dates to edit.

## `dateFrom` (type: `string`):

First leaderboard day, YYYY-MM-DD (Pacific Time), e.g. 2026-10-01. Use with dateTo for a period of up to 31 days; alone it reads that one day.

## `dateTo` (type: `string`):

Last leaderboard day, YYYY-MM-DD, not in the future. Alone it reads that one day.

## `featuredOnly` (type: `boolean`):

On (default): the launches Product Hunt features on the daily leaderboard, usually 10–60 a day. Off: also the non-featured launches of the day, often several hundred.

## `topics` (type: `array`):

Keep launches tagged with any of these Product Hunt topics, by name or slug, e.g. Artificial Intelligence, developer-tools, Marketing. Up to 20. Empty = all topics.

## `minVotes` (type: `integer`):

Keep launches with at least this many upvotes (current count). 0 = no vote filter. The Actor stops reading a day once votes fall below this value; under 10 it can rarely skip a launch.

## `includeDetails` (type: `boolean`):

On (default): one extra request per launch for website, makers, hunter, description and pricing. Off: leaderboard fields only (name, tagline, votes, rank, topics); faster, and those fields are null.

## `maxItems` (type: `integer`):

Stop after this many launch rows in total (1–10000). Newest day first. Each row is one paid result.

## Actor input object example

```json
{
  "daysBack": 1,
  "featuredOnly": true,
  "minVotes": 0,
  "includeDetails": true,
  "maxItems": 20
}
```

# Actor output Schema

## `launches` (type: `string`):

Launch rows with votes, rank, topics, website and makers.

## `runSummary` (type: `string`):

Status, reason, per-day counts and request statistics.

# 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 = {
    "daysBack": 1,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/product-hunt-launches").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 = {
    "daysBack": 1,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/product-hunt-launches").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "daysBack": 1,
  "maxItems": 20
}' |
apify call cliqtomedia/product-hunt-launches --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cliqtomedia/product-hunt-launches"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/azjM1MuH5tOV17HSU/builds/psDteb3Yoo8crSne2/openapi.json
