# Krakt Radar (`kurtholes/ai-launch-radar`) Actor

One deduplicated, momentum-scored feed of new AI launches: GitHub trending AI repos, Hugging Face trending models/spaces, Show HN AI posts and new arXiv cs.AI/LG/CL papers.

- **URL**: https://apify.com/kurtholes/ai-launch-radar.md
- **Developed by:** [Kurt Holes](https://apify.com/kurtholes) (community)
- **Categories:** AI, Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 item 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/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

## Krakt Radar: AI launches from GitHub, Hugging Face, Hacker News & arXiv

One run gives you a single, deduplicated feed of what's new and moving in AI:

- **GitHub**: repositories from github.com/trending, plus new AI repos from the GitHub Search API, filtered by AI keywords
- **Hugging Face**: trending models and Spaces (official Hub API)
- **Hacker News**: "Show HN" posts that match AI keywords (official Algolia HN API)
- **arXiv**: newest papers in cs.AI, cs.LG and cs.CL (official arXiv API, with the requested 3-second delay between calls)

Every item gets a **momentum score (0-100)**. Items that show up on more than one source are linked, so you can see when a project launches on GitHub, gets posted to HN and trends on Hugging Face at the same time.

### Who it's for

AI newsletter writers, VCs and scouts, devrel and competitive-intel teams, and anyone building an "AI news" agent or dashboard. Schedule it daily with **Only new items** on and you get just the new items each day.

### Input

| Field | Default | Notes |
|---|---|---|
| `sources` | all four | `github`, `huggingface`, `hackernews`, `arxiv` |
| `period` | `daily` | `daily`, `weekly`, `monthly` |
| `keywords` | built-in AI list | Applied to GitHub and HN. If you set custom keywords, they apply to all sources. |
| `maxItems` | 100 | Total items returned (each one is billed) |
| `maxItemsPerSource` | 50 | Fetch cap per source |
| `onlyNew` | false | Skips items returned by earlier runs that used the same `stateKey` |
| `stateKey` | `default` | Use one key per schedule |
| `minMomentumScore` | 0 | Drops items scoring below this |
| `breakoutAlerts` | true | Marks multi-source items as breakouts (billed as an extra event) |
| `githubToken` | – | Optional. Raises the GitHub Search API rate limit. |

### Output (one row per item)

`source`, `kind` (repository/model/space/show_hn/paper), `id`, `title`, `url`, `description`, `author`, `metricName`, `metric` (stars/likes/points/authors), `metricDelta` (GitHub stars in period, HF trending score), `metricChangeSinceLastRun`, `publishedAt`, `tags`, `momentumScore`, `crossSourceHits`, `crossSources`, `isBreakout`, `isNew`, `scrapedAt`. Source-specific extras: `downloads` (HF), `comments` and `hnUrl` (HN), `codeUrl` (arXiv).

A `RUN_SUMMARY` record in the default key-value store shows, for each source, whether it succeeded, the method used and the item counts.

### How the momentum score works

Within each source, items are ranked by that source's own signal:

- GitHub: stars gained in the period
- Hugging Face: trending score
- Hacker News: points + 0.5 × comments
- arXiv: recency

The rank is scaled to 0-85 (0-60 for arXiv, which has no engagement signal). Each additional source the item appears on adds +15. An item is a **breakout** when it appears on 2+ sources and scores ≥ 65. Cross-source matching uses repo and model names and the links in posts and abstracts. It is heuristic and doesn't happen on most days.

### Pricing

Pay per event:

- **Item**: $0.002 per item returned
- **Breakout**: $0.01 extra per item flagged as a breakout (turn off with `breakoutAlerts: false`)

The Actor respects your maximum cost per run and stops cleanly when it reaches it.

### Reliability and limits

- If one source fails, the others still return data. The failure is recorded in `RUN_SUMMARY` and in the status message.
- GitHub trending is read from the public HTML page. If its layout changes, the Actor falls back to the GitHub Search API automatically.
- Uses only public data and official APIs where they exist. No logins, no proxies.
- Hugging Face Spaces have no description field, so their `description` is the SDK name.
- arXiv publishes in daily batches. On weekends, the "daily" window falls back to the latest batch.

Data belongs to its respective sources. Follow GitHub's, Hugging Face's, Y Combinator's (HN) and arXiv's terms when you reuse it.

# Actor input Schema

## `sources` (type: `array`):

Which sources to scan.

## `period` (type: `string`):

Time window for trending/new items.

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

An item is kept if its title, description or tags contain any keyword (case-insensitive). Leave empty to use the built-in AI keyword list. arXiv and Hugging Face items are AI by definition and are filtered only if you set custom keywords.

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

Maximum number of items in the output (all sources combined). Each item is billed.

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

Cap on items fetched from each source before merging.

## `onlyNew` (type: `boolean`):

Skip items returned by previous runs that used the same state key. Useful for scheduled daily runs.

## `stateKey` (type: `string`):

Name of the key-value store record used to remember items for 'Only new items'. Use different keys for different schedules.

## `minMomentumScore` (type: `integer`):

Drop items whose momentum score (0-100) is below this value.

## `githubToken` (type: `string`):

Only used for the GitHub Search API fallback, to raise rate limits. Not required.

## `breakoutAlerts` (type: `boolean`):

Flag items seen on 2+ sources with momentum >= 65 as breakouts. Each breakout is billed as an extra 'breakout' event. Turn off to pay only per item.

## Actor input object example

```json
{
  "sources": [
    "github",
    "huggingface",
    "hackernews",
    "arxiv"
  ],
  "period": "daily",
  "keywords": [],
  "maxItems": 100,
  "maxItemsPerSource": 50,
  "onlyNew": false,
  "stateKey": "default",
  "minMomentumScore": 0,
  "breakoutAlerts": true
}
```

# Actor output Schema

## `items` (type: `string`):

No description

# 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("kurtholes/ai-launch-radar").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("kurtholes/ai-launch-radar").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 '{}' |
apify call kurtholes/ai-launch-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kurtholes/ai-launch-radar"
        }
    }
}
```

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/6Z9pBBtf9iGpJXT2w/builds/Gl2cXiwYneo0uaByM/openapi.json
