How to Find and Capture GitHub Trending Repositories
Find GitHub Trending repositories, filter them by language and time, save candidates, search beyond Trending, and capture dated snapshots.

Direct answer: Open github.com/trending, choose Repositories, select a programming language or Any, choose a daily, weekly or monthly window, and inspect the projects that match your interests. Star useful repositories and place them in a list for later review. When the Trending page is too broad, use GitHub repository search or gh search repos with language, topic, creation-date, push-date, license, owner and star filters. If you need a reproducible record, save the URL, filters and access date, then capture the page as an image or PDF.
This guide explains the complete workflow, including how to distinguish programming-language and spoken-language filters, how to save projects, how to search beyond the Trending list, how to automate discovery with the GitHub CLI, and how to capture a dated snapshot for documentation.
1. Open GitHub Trending
Go to github.com/trending. The page currently provides repository and developer views. Choose Repositories when you are looking for projects to read, evaluate or try. Choose Developers when you want to discover people whose work is attracting attention.
The live page also includes a spoken-language control. This is separate from the programming-language filter: programming language describes the code, while spoken language describes repository text such as the README or project description. Record both filters when you save a result.
2. Filter the list without losing context
Time window
GitHub’s published explanation describes daily, weekly and monthly Trending buckets. A daily view is useful for a quick scan of projects receiving attention now. Weekly and monthly views give you a wider pool to investigate. The explanation was published in 2013 and updated in 2019, so verify the controls and labels shown on the live page before documenting them as current behavior.
Programming language
Use the programming-language filter when you want repositories primarily written in a particular language. Select Any for cross-language discovery. GitHub’s historical explanation says the filter is based on a repository’s primary language and that an unknown-language category exists when GitHub’s language library cannot identify one. Treat that as a description of GitHub’s published model, not a guarantee that every current edge case behaves the same way.
Spoken language
Use the spoken-language control when the language of project documentation matters. Do not substitute it for the programming-language filter. For example, a Python project may have an English, Japanese or Spanish README.
| Choice | Use it when | What to record |
|---|---|---|
| Daily | You want a current snapshot | Access date and UTC time |
| Weekly | You want a broader set of active projects | Week window and filters |
| Monthly | You are surveying sustained interest | Month window and filters |
| Programming language | You need a technology-specific list | Selected language or Any |
| Spoken language | Documentation language affects your review | Selected spoken language |
Trending results change. If you publish a list or use one in a report, include the access date, time zone, and selected filters. Do not present a captured ranking as permanent.
3. Evaluate a repository before saving it
Open a candidate’s repository page instead of relying only on its Trending row. Check the README, examples, installation instructions, license, recent commits, open issues and release history. Look at the project’s stated scope and whether its dependencies fit your environment.
GitHub’s historical description of Trending mentions the owner and repository name, primary language, description, a star control and contributors as listing cues. The current page can change, so use those as evaluation prompts rather than assuming every row has the same layout.
A high position or a sudden increase in stars does not prove quality, security, maintenance or suitability. GitHub’s published explanation says its historical signals included stars, forks, commits, follows and pageviews, with weight given to how recently events happened. That is an attributed historical description, not a disclosed specification of the current ranking algorithm. The same article quotes its author, Jon Rohan: “It’s not just about total numbers, but also how recently the events happened.”
4. Save promising projects with stars and lists
Click Star on a repository to make it easier to find again. GitHub says stars can also help surface related content in your personal dashboard. To organize saved projects, open your starred repositories page and create lists such as Read later, Try locally or Research for project X.
GitHub’s documentation says lists can be searched, sorted and filtered, and that you can add starred repositories to them from the Starred dropdown. The documentation labels lists as public preview and subject to change. Keep a separate note with the reason you saved a project if that context matters; the cited documentation does not establish a note field attached to each star.
- Open the repository page and select Star.
- Open your starred repositories page.
- Create or choose a list with a clear purpose.
- Add the repository to that list.
- Periodically remove projects that no longer match your goal.
5. Search beyond the Trending page
Trending is a discovery surface, not a complete query language. GitHub repository search lets you express a specific question with qualifiers:
| Qualifier | Example | Purpose |
|---|---|---|
language: |
language:rust |
Match a primary programming language |
topic: |
topic:observability |
Focus on a topic |
created: |
created:>2026-01-01 |
Find recently created repositories |
pushed: |
pushed:>2026-09-01 |
Find repositories with recent pushes |
stars: |
stars:>500 |
Set a star threshold |
license: |
license:mit |
Filter by license identifier |
For example, search for recently updated TypeScript observability projects with:
language:TypeScript topic:observability pushed:>2026-09-01
GitHub explains that the pushed qualifier reflects the most recent commit made on any branch. Combine qualifiers gradually so you can see which condition removes a candidate.
6. Automate a repeatable scan with GitHub CLI
Install and authenticate the GitHub CLI, then use gh search repos. This command supports filters for language, license, owner, topic, stars, creation date and update date. It can emit JSON for scripts. The manual states that the default maximum is 30 results; set an explicit limit when you need more or fewer.
gh search repos \
--language rust \
--topic observability \
--pushed '>2026-09-01' \
--stars '>100' \
--limit 50 \
--json fullName,description,stargazersCount,updatedAt,url
Save the output with the date and query so a later reader can reproduce your intent:
mkdir -p github-scans
gh search repos --language python --pushed '>2026-09-01' --limit 30 \
--json fullName,description,stargazersCount,updatedAt,url \
> github-scans/python-$(date -u +%Y-%m-%d).json
Do not use gh repo list as a Trending command. Its documented purpose is listing repositories owned by a user or organization. Use gh search repos for structured repository discovery.
7. Capture a dated Trending snapshot
A screenshot is useful when you need to show exactly what the page looked like at a particular time. Before capturing, write down the URL, repository or developer view, programming language, spoken language, time window and access date. A full-page capture preserves the visible list; an element capture can focus on the result area.

Browser automation is possible with Playwright or Puppeteer. The basic sequence is:
- Launch a browser.
- Navigate to the Trending URL.
- Wait for the repository rows to appear.
- Set a full-page or viewport screenshot.
- Store the filter metadata beside the image.
import { chromium } from 'playwright';
const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
await page.goto('https://github.com/trending?since=weekly&spoken_language_code=en', { waitUntil: 'networkidle' });
await page.screenshot({ path: 'github-trending-2026-09-29.png', fullPage: true });
await browser.close();
Browser scripts can be affected by consent banners, chat widgets, bot checks, timing changes and lazy-loaded content. Use an explicit wait for a stable selector when the page is not ready at network idle. Never claim that a screenshot proves a repository is safe or maintained; it records the page state only.
8. Or skip the browser setup
ScreenshotNeo provides a website screenshot API and MCP server. One GET request returns a PNG, JPEG, WebP or PDF. It can accept consent banners like a visitor and remove more than 60 known consent platforms, newsletter popups and chat widgets before capture. Bot checks, blank pages, timeouts, failed loads and cache hits are not billed, and the response identifies the result with X-Page-Verdict and X-Billed headers. Its MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

See the ScreenshotNeo API documentation for all options, including full-page or CSS-element capture, dark mode, device presets, retina scale, PDF paper size and margins, custom CSS and JavaScript, selector waits, network-idle waits, request blocking, headers, cookies, user agents, authorization, timezone, geolocation, transparent backgrounds, resizing, caching, signed links, asynchronous webhooks, bulk capture and usage reporting.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://github.com/trending -o github-trending.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://github.com/trending"}, timeout=90)
r.raise_for_status()
open("github-trending.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://github.com/trending' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('github-trending.webp', Buffer.from(await res.arrayBuffer()));
For a filtered page, pass the exact query string in the URL, encode it as one URL parameter, and record the same filters in your metadata. ScreenshotNeo supports caching with a TTL you choose, so repeated captures can avoid unnecessary work. It also supports bulk capture for up to 100 URLs per call when you are collecting several language or time-window pages.
Free accounts include 1,000 screenshots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing gives two months free, and every feature is available on every plan. Create a free ScreenshotNeo account and start with the filtered Trending URL you want to archive.
9. Troubleshooting
| Problem | Likely cause | Fix |
|---|---|---|
| The list changes between visits | Trending is live and time-sensitive | Record access date, time, view and every filter. |
| Programming and spoken language seem inconsistent | They are separate controls | Set both deliberately and document which one you used. |
| A repository is missing from a CLI result | A qualifier or default result limit excluded it | Remove filters one at a time and set an explicit --limit. |
gh returns an authentication error |
The CLI is not authenticated or lacks required access | Run gh auth login and retry. |
| Playwright captures a blank or partial page | Content has not rendered or is lazy-loaded | Wait for a result-row selector, scroll if needed, then capture. |
| ScreenshotNeo returns a non-image response | The page failed, timed out or triggered a bot check | Inspect X-Page-Verdict and X-Billed; adjust waits or headers and retry. |
| The capture includes a popup | The popup is not recognized or appears late | Use a selector wait or hide selector option; check the capture after changing timing. |
10. Performance, reliability and cost notes
- Repeatability: Store the full URL, filters, access date and capture tool version or API parameters.
- Page readiness: Network idle is not always enough; wait for the actual repository list when using a browser.
- Volume: Use CLI JSON for discovery and screenshots only for pages you need to show or archive.
- Caching: A chosen ScreenshotNeo TTL can reduce duplicate captures of an unchanged filtered page.
- Billing: ScreenshotNeo bills only clean shots. Failed loads, blank pages, bot checks, timeouts and cache hits cost nothing.
- Security: Do not put private tokens in a public URL or committed script. Use environment variables for API keys and redact sensitive headers in logs.
11. FAQ
How often does GitHub refresh Trending?
The historical GitHub explanation says data was calculated eight times a day. That is a dated published figure, not a confirmed current refresh guarantee.
How many repositories are shown?
The same historical article described a top-25 design. Check the live page before relying on a current result count.
Can I find a project that never appears on Trending?
Yes. Use repository search qualifiers or gh search repos for language, topic, dates, stars, owner and license.
Are starred repositories private?
Stars and lists follow GitHub’s account and list visibility rules. GitHub’s documentation describes lists as public preview and subject to change.
What should I include with a screenshot?
Save the capture date and time, source URL, repository or developer view, programming language, spoken language and time window.


