# Emerging Launch Radar: GitHub Trending + Hacker News Momentum (`scrapemint/emerging-launch-radar-pipeline`) Actor

Find software products gaining real traction now. Chains GitHub trending velocity with Hacker News attention (optional Product Hunt), joins them per project, and scores momentum 0-100 into breakout / momentum / mention tiers. Core sources are token-free and antibot-free. Pay per scored project.

- **URL**: https://apify.com/scrapemint/emerging-launch-radar-pipeline.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 62.5% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## Emerging Launch Radar: GitHub Trending + Hacker News Momentum

Find software products gaining **real traction right now** by joining two independent public signals: **build-side velocity** (GitHub trending stars in period) and **attention-side demand** (Hacker News launch and front-page stories). The pipeline matches the same project across both, scores momentum 0 to 100, and tiers each one so you can act on it.

The core sources are **token-free and antibot-free**: GitHub trending HTML and the public Hacker News API. Product Hunt and domain WHOIS/MX enrichment are optional and off by default.

### What it does

1. **GitHub trending.** Pulls trending repos for your timeframes and languages and reads stars-in-period (the velocity signal), total stars, and forks.
2. **Hacker News.** Pulls Show HN launches and front-page stories (and any keyword searches you pass) with points and comment counts.
3. **Optional Product Hunt.** When enabled with your own Product Hunt developer token, joins launches in as a third corroborating source.
4. **Join.** Matches projects across sources first on canonical GitHub `owner/name`, then on registrable domain, then on a normalized product-name token.
5. **Optional domain enrichment.** Runs domain-intelligence on each project domain to attach registrar, domain age, and whether the domain has mail (MX), so rows are outreach-ready.
6. **Score and tier.** Combines per-platform momentum into a 0 to 100 score. Appearing on more than one platform is what separates a breakout from a single-source mention.

### Output

One row per project:

```json
{
  "project": "some-ai-framework",
  "url": "https://github.com/acme/some-ai-framework",
  "momentumScore": 81,
  "tier": "breakout",
  "platforms": ["github", "hn"],
  "crossPlatform": true,
  "description": "Open source framework for ...",
  "github": {
    "repo": "acme/some-ai-framework",
    "url": "https://github.com/acme/some-ai-framework",
    "language": "Python",
    "starsInPeriod": 1240,
    "starsTotal": 8600,
    "forks": 410,
    "timeframe": "daily"
  },
  "hackerNews": {
    "topPoints": 312,
    "totalComments": 140,
    "threadCount": 1,
    "threads": [{ "title": "Show HN: ...", "permalink": "https://news.ycombinator.com/item?id=...", "points": 312, "comments": 140 }]
  },
  "productHunt": null,
  "domain": "acme.com",
  "domainIntel": null,
  "scoredAt": "2026-06-05T00:00:00.000Z"
}
````

#### Tiers

- **breakout** — surfaces on two or more platforms with a combined momentum score of 65+. The strongest emerging-traction signal. First 3 breakout rows per run are free so you can validate output.
- **momentum** — score 40+ on a single platform, or any project on two or more platforms below the breakout bar.
- **mention** — cleared the noise gate on one platform but stayed below the momentum bar.

Projects below both the GitHub stars-in-period floor and the Hacker News points floor (with no Product Hunt votes) are dropped as noise and never charged.

### Input

| Field | Description |
| --- | --- |
| `keywords` | Optional. Narrows Hacker News (and Product Hunt) to these terms. Empty takes the whole trending list plus the HN feeds. |
| `githubTimeframes` | GitHub trending lists: `daily`, `weekly`, `monthly`. Default `["daily"]`. |
| `githubLanguages` | Optional language filters, e.g. `["python","rust"]`. |
| `hnFeeds` | HN feeds: `show`, `top`, `best`, `new`, `ask`, `jobs`. Default `["show","top"]`. |
| `hnMaxAgeHours` | Ignore HN stories older than this. Default 168 (one week). |
| `minStarsInPeriod` / `minHnPoints` | Noise gate floors. |
| `maxItemsPerSource` | Cap on rows pulled per source. |
| `includeProductHunt` + `productHuntToken` + `productHuntTopics` | Optional third source (your own token). |
| `includeDomainEnrichment` | Optional WHOIS + MX per project domain. |

### Pricing and nested cost

Priced per scored project: **mention $0.06**, **momentum $0.12**, **breakout $0.18** (first 3 breakout rows per run free).

This pipeline calls other actors, and **each child also bills you for its own usage** on top of the per-project events above:

- `github-trending-scraper` — per repo row (first 5 free per run)
- `hn-lead-monitor` — per Hacker News item
- `producthunt-launch-tracker` — per launch (only when Product Hunt is on)
- `domain-intelligence` — per domain lookup (only when domain enrichment is on)

Keep `maxItemsPerSource` modest and the optional stages off to control total run cost.

### Who it is for

- Developer tool and infrastructure sales teams sourcing companies the moment they get hot.
- Venture and angel scouts watching for cross-platform breakouts before they are obvious.
- Business development and partnerships teams tracking emerging projects in a category.

# Actor input Schema

## `keywords` (type: `array`):

Optional. Narrows the Hacker News search (and Product Hunt, if on) to these terms. Leave empty to take the whole GitHub trending list plus the HN feeds below. Examples: \["ai agent", "vector db", "devtool"].

## `githubTimeframes` (type: `array`):

Which GitHub trending lists to pull. daily catches the freshest movers; weekly/monthly are steadier.

## `githubLanguages` (type: `array`):

Optional language filters for GitHub trending, e.g. \["python", "typescript", "rust"]. Empty pulls all languages.

## `hnFeeds` (type: `array`):

Which HN feeds to pull. Valid: show (Show HN launches), top (front page), best, new, ask, jobs. Default show + top is the launch / traction signal.

## `hnMaxAgeHours` (type: `integer`):

Ignore HN stories older than this. 168 = one week of launches.

## `minStarsInPeriod` (type: `integer`):

A project with fewer stars-in-period than this AND below the HN points floor (and no Product Hunt votes) is dropped as noise.

## `minHnPoints` (type: `integer`):

HN points floor used by the same noise gate as above.

## `maxItemsPerSource` (type: `integer`):

Hard cap on rows pulled from each source per run. Controls total cost (each child also bills per row).

## `includeProductHunt` (type: `boolean`):

Optional third signal. When on AND you supply your own Product Hunt developer token below, launches are joined in as a corroborating source. Off keeps the run token-free.

## `productHuntToken` (type: `string`):

Your own Product Hunt developer token. Create one at https://www.producthunt.com/v2/oauth/applications. Only used when the toggle above is on.

## `productHuntTopics` (type: `array`):

Optional Product Hunt topic slugs to scan, e.g. \["developer-tools", "artificial-intelligence"].

## `includeDomainEnrichment` (type: `boolean`):

Optional. Runs domain-intelligence on each project's domain so rows carry registrar, domain age, and whether the domain has mail (MX) for outreach. Adds child cost.

## `proxyConfiguration` (type: `object`):

Optional Apify proxy passed to the child actors. GitHub and Hacker News do not require a proxy.

## Actor input object example

```json
{
  "keywords": [
    "ai",
    "developer tool"
  ],
  "githubTimeframes": [
    "daily"
  ],
  "githubLanguages": [],
  "hnFeeds": [
    "show",
    "top"
  ],
  "hnMaxAgeHours": 168,
  "minStarsInPeriod": 10,
  "minHnPoints": 10,
  "maxItemsPerSource": 150,
  "includeProductHunt": false,
  "productHuntTopics": [],
  "includeDomainEnrichment": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "keywords": [
        "ai",
        "developer tool"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/emerging-launch-radar-pipeline").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 = {
    "keywords": [
        "ai",
        "developer tool",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/emerging-launch-radar-pipeline").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 '{
  "keywords": [
    "ai",
    "developer tool"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapemint/emerging-launch-radar-pipeline --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapemint/emerging-launch-radar-pipeline",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Emerging Launch Radar: GitHub Trending + Hacker News Momentum",
        "description": "Find software products gaining real traction now. Chains GitHub trending velocity with Hacker News attention (optional Product Hunt), joins them per project, and scores momentum 0-100 into breakout / momentum / mention tiers. Core sources are token-free and antibot-free. Pay per scored project.",
        "version": "0.1",
        "x-build-id": "yg2Vdkdlxi1udnveg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~emerging-launch-radar-pipeline/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-emerging-launch-radar-pipeline",
                "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/scrapemint~emerging-launch-radar-pipeline/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-emerging-launch-radar-pipeline",
                "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/scrapemint~emerging-launch-radar-pipeline/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-emerging-launch-radar-pipeline",
                "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": {
                    "keywords": {
                        "title": "Keywords / topics",
                        "type": "array",
                        "description": "Optional. Narrows the Hacker News search (and Product Hunt, if on) to these terms. Leave empty to take the whole GitHub trending list plus the HN feeds below. Examples: [\"ai agent\", \"vector db\", \"devtool\"].",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "githubTimeframes": {
                        "title": "GitHub trending timeframes",
                        "type": "array",
                        "description": "Which GitHub trending lists to pull. daily catches the freshest movers; weekly/monthly are steadier.",
                        "default": [
                            "daily"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "githubLanguages": {
                        "title": "GitHub languages",
                        "type": "array",
                        "description": "Optional language filters for GitHub trending, e.g. [\"python\", \"typescript\", \"rust\"]. Empty pulls all languages.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "hnFeeds": {
                        "title": "Hacker News feeds",
                        "type": "array",
                        "description": "Which HN feeds to pull. Valid: show (Show HN launches), top (front page), best, new, ask, jobs. Default show + top is the launch / traction signal.",
                        "default": [
                            "show",
                            "top"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "hnMaxAgeHours": {
                        "title": "Hacker News max age (hours)",
                        "minimum": 24,
                        "maximum": 2160,
                        "type": "integer",
                        "description": "Ignore HN stories older than this. 168 = one week of launches.",
                        "default": 168
                    },
                    "minStarsInPeriod": {
                        "title": "Minimum GitHub stars in period",
                        "minimum": 0,
                        "type": "integer",
                        "description": "A project with fewer stars-in-period than this AND below the HN points floor (and no Product Hunt votes) is dropped as noise.",
                        "default": 10
                    },
                    "minHnPoints": {
                        "title": "Minimum Hacker News points",
                        "minimum": 0,
                        "type": "integer",
                        "description": "HN points floor used by the same noise gate as above.",
                        "default": 10
                    },
                    "maxItemsPerSource": {
                        "title": "Max items per source",
                        "minimum": 20,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on rows pulled from each source per run. Controls total cost (each child also bills per row).",
                        "default": 150
                    },
                    "includeProductHunt": {
                        "title": "Add Product Hunt source",
                        "type": "boolean",
                        "description": "Optional third signal. When on AND you supply your own Product Hunt developer token below, launches are joined in as a corroborating source. Off keeps the run token-free.",
                        "default": false
                    },
                    "productHuntToken": {
                        "title": "Product Hunt developer token",
                        "type": "string",
                        "description": "Your own Product Hunt developer token. Create one at https://www.producthunt.com/v2/oauth/applications. Only used when the toggle above is on."
                    },
                    "productHuntTopics": {
                        "title": "Product Hunt topics",
                        "type": "array",
                        "description": "Optional Product Hunt topic slugs to scan, e.g. [\"developer-tools\", \"artificial-intelligence\"].",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDomainEnrichment": {
                        "title": "Add domain WHOIS + MX enrichment",
                        "type": "boolean",
                        "description": "Optional. Runs domain-intelligence on each project's domain so rows carry registrar, domain age, and whether the domain has mail (MX) for outreach. Adds child cost.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify proxy passed to the child actors. GitHub and Hacker News do not require a proxy.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
