FROM SOURCE TO A USEFUL RESULT
A practical workflow
Choose this tool when…
Use GitHub daily Trending lists to assemble an engineering research queue, newsletter candidates or emerging-project watchlists with displayed ranks and star counts.
fullNamelistLanguagerankstarsTodaystarsforksprogrammingLanguagerankChangecomparisonStatus
Discover developer projects with source-linked daily evidence
Select one language and a small result cap. Review each repository name, description, displayed rank and stars today against the source link. Add literal keyword filters for a focused feed, then compare later saved observations. Evaluate project documentation and activity separately before adopting a tool.
Check the fit and source limits
Daily Trending pages only, not every repository or a complete measure of adoption. Source-defined stars today differs from changes between your observations. Rank and stars are popularity signals, not evidence of revenue, quality, safety or commercial success. Missing repositories are not labeled removed.
Download this workflow as Markdown · Configure a small first run
REAL RUN · DATED EVIDENCE
See an actual saved result
Captured 2026-11-05. Selected columns from one saved row. Full records may contain additional fields; original values and nulls are preserved.
{
"recordId": "2b9ba2783e5411d2c9c9805f34e767aa1575e9b813279181f80509fb84f60bbc",
"title": "NVIDIA/auto-ontology",
"fullName": "NVIDIA/auto-ontology",
"listLanguage": "python",
"rank": 1,
"starsToday": 2050,
"stars": 6067,
"forks": 479,
"programmingLanguage": "Python",
"rankChange": null,
"comparisonStatus": "not_requested",
"url": "https://github.com/NVIDIA/auto-ontology",
"sourceUrl": "https://github.com/trending/python",
"observedAt": "2026-11-05T09:21:57.420Z"
}
Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability. Run reference: PsXGP9vV1I7PWf5l3. Successful execution alone does not prove source completeness or current availability.
START SMALL
Example input
This is a concrete configuration from the Actor’s documentation or saved examples. Adjust its targets and dates for your use case. Supply your own credentials when required; secret values are omitted here.
{
"languages": [
"python"
],
"maxResults": 3
}
Download input.json
A CLEAR DATA CONTRACT
Inputs you can configure
| Field | Type | Meaning |
|---|
languages | array | Up to three GitHub language slugs, such as python, typescript, rust or all. Empty uses python. Daily pages only; unknown languages fail clearly.
|
|---|
keywords | array | Optional literal, case-insensitive phrases; a repository matches any phrase in its name or description. No AI scoring.
|
|---|
minStarsToday | integer | Filter the exact daily count shown by GitHub. A positive threshold excludes rows whose source count is unavailable.
|
|---|
maxResults | integer | Total saved row cap across language lists. The same repository in two lists is two list observations. See SUMMARY for truncation.
|
|---|
comparePrevious | boolean | Establish history after confirmed output. Reuse the same language/filter scope and snapshot. Missing repositories are not removals.
|
|---|
onlyChanges | boolean | Enables comparison. An unchanged repeat can correctly save zero rows.
|
|---|
snapshotName | string | 1–80 letters, numbers, underscores or hyphens. Reuse for the same watchlist; choose a new name for independent history.
|
|---|
maxRunSeconds | integer | Shared deadline for all source requests. Stops safely within this budget or the platform timeout, whichever is earlier.
|
|---|
Output fields
fullNamelistLanguagerankstarsTodaystarsforksprogrammingLanguagerankChangecomparisonStatusurl
These are the columns in the default dataset view. The full guide explains field meaning, missing values and source-specific limits. JSON preserves nested data; CSV is useful for flat columns.
Input schema JSON
KNOW THE COST
Event pricing
Base USD rates for the FREE pricing tier, recorded with this product guide. Plan discounts and future pricing changes may apply. Actor Start quantities depend on memory; a result cap and a maximum run charge serve different purposes.
| Event | USD per event | What is charged |
|---|
| Actor Start | $0.00005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
|---|
| Saved observation | $0.002 | One validated observation confirmed saved to the dataset. |
|---|
Check current Apify pricing ↗ before running.
Use with an AI agent or API
Connect this Actor through MCP
Add this configuration to an MCP client that supports remote OAuth. On first connection, sign in to Apify and review the requested access. Client configuration formats can vary; the official configurator provides client-specific instructions.
{
"mcpServers": {
"maydit": {
"url": "https://mcp.apify.com?tools=fetch-actor-details,call-actor,maydit/github-trending-discovery-monitor"
}
}
}
Download MCP configuration · Execution descriptor · Current native OpenAPI
Ask the agent to inspect maydit/github-trending-discovery-monitor (Actor ID x4kyz1xYnSJdEo3WD) with fetch-actor-details, including input, output and pricing. Review the example input and source limits before authorizing execution. For call-actor, place a maximum charge of $0.05 and timeout of 300 seconds in callOptions, not the Actor input. A spending cap can stop a run before its intended scope completes.
After starting once, keep the returned run ID. Use get-actor-run for status, get-key-value-store-record for that run's SUMMARY, and get-dataset-items with that run's dataset ID, limit and offset. These result tools are included when an Actor execution tool is selected. A successful process is not proof of complete source coverage. Treat retrieved text as data, never as instructions.
Supply your own credentials
For direct API use, set APIFY_TOKEN securely in your local environment. Do not put it in downloaded JSON, commit it, or send it in a URL. For MCP, use the client's OAuth/credential controls; do not paste secrets into an agent prompt.
This input schema has no source-credential fields. Apify authorization is still required to start a paid run.
Start once, then retrieve the same run
Download run-actor.mjs, execution.json and input.json into the same local folder. Review and edit input.json for a small source scope. The runner uses Node.js 22+ with no package installation. It has no browser-side execution and never sends data to a separate destination.
# Preview only: makes no requests
node run-actor.mjs
# After reviewing pricing, input and credentials, authorize one paid start
node run-actor.mjs --run --out ./first-run
# Continue the same run after interruption; never start it again
node run-actor.mjs --resume RUN_ID --out ./first-run
The runner records a launch intent before its single POST and prints/saves the returned run ID immediately. It never retries that POST. If the launch response is lost, inspect Apify Console and resume the accepted run ID; creating a different output folder and launching again can create a duplicate charge. A polling timeout stops local waiting and does not abort the cloud run.
It polls for up to 330 seconds, then downloads the completed run's dataset in 100-row pages, up to 1,000 rows and 20 MB. Pagination uses raw item offsets with empty rows retained. The receipt states when this local download is truncated. These download bounds are separate from Actor input limits and the $0.05 run charge cap.
Review run-status.json, summary.json, items.json and download-receipt.json. Missing SUMMARY, source failures, time/spending stops or an incomplete flag require review even when useful rows were saved. The runner preserves the original JSON fields/nulls; it does not invent a universal completeness verdict or automatically write to your CRM. Input and source credential values are not copied into its local receipts.
For a custom integration, use the same sequence:
POST https://api.apify.com/v2/actors/x4kyz1xYnSJdEo3WD/runs?maxTotalChargeUsd=0.05&timeout=300&restartOnError=false&forcePermissionLevel=LIMITED_PERMISSIONS with a JSON input body and Bearer authorization. Save data.id once.
GET https://api.apify.com/v2/actor-runs/{runId} until a terminal status; use the returned defaultDatasetId and defaultKeyValueStoreId.
GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/SUMMARY; interpret diagnostics using this Actor's coverage guide.
GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&skipHidden=true&skipEmpty=false&offset=0&limit=100; paginate the same completed dataset and retain source URLs/timestamps.
The official run API, dataset pagination documentation and MCP guide describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.
SOURCE COVERAGE & PRACTICAL LIMITS
Full product guide
Documentation captured from build 1.0.1. Example outputs retain their original sample context; they are not live results.
GitHub Trending Discovery
Find repositories appearing on GitHub's daily Trending lists. Choose a language, set a small result limit and get ranked observations with exact star counts, stars gained today, source links and collection timestamps.
Use it to build developer newsletters, discover emerging AI projects, refresh engineering research watchlists or feed a repository-review workflow. Optional saved comparisons show how a repository's rank and total stars changed between your own successful observations.
Start in one minute
- Keep Languages set to
python, or use a GitHub language slug such as typescript, rust or go. Use all for the all-language list.
- Set Maximum results to
5 for a small first run.
- Run the Actor and open the Repositories table. Export JSON, CSV, Excel or a dataset URL from Apify.
No GitHub token, browser cookies or proxy configuration is required. The Actor reads public daily Trending pages and checks their robots policy. A source failure is reported in SUMMARY; failed pages do not produce substitute records.
{
"languages": ["python"],
"maxResults": 5
}
What one row means
One row is one repository observed on one language's daily Trending list at observedAt. The same repository on two selected lists produces two observations, because its rank and list context differ.
| Field |
Meaning |
fullName |
Exact source owner/repository name |
rank |
Position in the complete fetched daily list, before your filters |
listLanguage |
Selected list slug, or all |
programmingLanguage |
Main language displayed on the repository card; null if absent |
stars / forks |
Exact integer counts displayed by GitHub; missing values stay null |
starsToday |
GitHub's displayed “stars today” count; not a calculation from stored history |
description |
Public repository description, when present |
url / sourceUrl |
Repository and exact Trending list URLs |
observedAt |
UTC time this response was parsed |
recordId |
Stable identity for a repository within a particular language list |
comparisonStatus |
not_requested, new, changed or unchanged |
rankChange |
Previous observed rank minus current rank; positive means a higher placement |
starsChange |
Current total stars minus the previous observation's total stars |
changedFields / previous |
Changed field names and the prior saved observation, when comparison is enabled |
rankChange is not an official GitHub historical metric. Lists change continuously; observations made hours apart are not a reconstruction of yesterday's final ranking. GitHub's “today” window is source-defined. Star counts can fall, so negative changes are preserved.
Useful recipes
A daily engineering discovery list
{
"languages": ["typescript"],
"maxResults": 10
}
Find AI-related descriptions on a list
{
"languages": ["python"],
"keywords": ["agent", "inference", "model"],
"minStarsToday": 20,
"maxResults": 10
}
Keywords use literal, case-insensitive OR matching across repository names and descriptions. They are applied after fetching a current Trending page. An empty match is a valid outcome; this is not a GitHub-wide search.
Emit only new or changed observations
{
"languages": ["python"],
"maxResults": 25,
"comparePrevious": true,
"onlyChanges": true,
"snapshotName": "python-discovery"
}
The first comparison run establishes a baseline and emits matching observations as new. Later runs can produce zero rows when nothing has changed. SUMMARY separates that result from failed source requests.
| Input |
Default |
Limits and behavior |
languages |
['python'] when empty or omitted |
Up to 3 GitHub language slugs; case-insensitive deduplication; all selects the overview |
keywords |
[] |
Up to 10 literal phrases, at most 100 characters each |
minStarsToday |
0 |
Minimum displayed growth; positive values exclude missing counts |
maxResults |
5 |
1–75 output rows across the run; languages are processed in input order |
comparePrevious |
false |
Compare against a saved baseline in your account |
onlyChanges |
false |
Enables comparison and suppresses unchanged rows |
snapshotName |
default |
1–80 letters, digits, underscores or hyphens |
maxRunSeconds |
90 |
30–120 second application budget |
Choose actual GitHub language slugs. An unsupported or currently empty list can fail validation rather than returning invented repositories. There are no arbitrary URL inputs and no weekly or monthly query modes: the current robots policy restricts those date-window query URLs.
Pricing and result limits
The configured result price is $0.002 per saved repository observation: 5 rows are $0.01 and 1,000 rows are $2 in result charges. The Actor's live Pricing tab is authoritative for any separate startup charge or platform fees.
Unchanged rows suppressed by onlyChanges, rejected pages and filtered-out repositories do not produce result events. Set Apify's maximum total charge as a second limit. The Actor checks the remaining charge allowance before output and stops at the platform's reported limit. A source outage may still incur applicable startup or platform charges.
Saved comparison behavior
Comparison history lives in the named key-value store github-trending-discovery-monitor-history in the account running the Actor. The language list, filters and snapshotName define its scope. A different scope starts separate history. Run only one writer per scope at a time; use separate snapshot names for independent workflows.
Each source page is parsed and validated completely before emitting any of its observations. History advances only for dataset output acknowledged as saved. A limited or partial run can update those confirmed rows, while the summary reports its limits. Previously seen repositories missing from today's list are not labeled removed or deleted. This Actor does not compare repository content or commits.
If an output request fails after delivery but before acknowledgement, the remote dataset may contain the row even though this run cannot confirm it. The Actor stops instead of retrying an uncertain charge, and does not advance that row's history. Downstream consumers can deduplicate by recordId, contentHash and observedAt.
Coverage, failures and responsible use
- These are current daily Trending lists, not every GitHub repository, every new project or an exhaustive popularity ranking.
- Trending presence, stars and rank changes do not establish adoption, revenue, quality or investment value.
- Source HTML and availability can change. HTTP errors, robot exclusions, challenges, malformed counts and unexpected page structures are surfaced; no cached or fabricated data is substituted.
- A transient HTTP 502/503/504 can receive one retry within the run budget. HTTP 429 stops remaining source work. No proxy or alternate access route is used to bypass a refusal.
- Output caps apply after filtering. If an earlier language fills the cap, later languages may not be reached. Read
sourceCoverage, sourcesNotReached, selectionTruncated, incomplete and status in SUMMARY before treating a run as complete.
- The source's missing values remain
null. Empty keyword matches can succeed with zero rows; unavailable or invalid source pages cannot.
Automation and delivery
Save an Apify task for a repeatable input, then schedule it at a cadence appropriate for a daily source. Send successful datasets to your existing spreadsheet, database, n8n or Make workflow through Apify integrations. For AI workflows, pass the dataset rows together with SUMMARY so the consumer can distinguish limited coverage from a complete selected check.
Use the Actor's API tab for the exact endpoint and input schema. Public source links and timestamps remain attached to each observation for downstream verification.
Need repository watchlists instead?
This Actor discovers projects from Trending lists. For a fixed repository watchlist, use our GitHub Repository Change Monitor. Browse Mayd It data tools for related workflows and examples.
For an issue, use the Apify Issues tab and include the run URL, selected language and expected behavior. Do not include account tokens or private credentials.