Skip to content

logiover/github-activity-stream

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Activity Stream — Commits, Pull Requests, Issues & Releases API (No API Key)

Apify Actor No API key Pay per result Export

This is a documentation & usage guide. The scraper itself runs on the Apify platform — open it here and click Try for free.

Stream public GitHub activity — commits, pull requests, issues, releases and user events — for any repo, org or user, normalized into one flat schema. Every event becomes a structured row with type, repo, actor, title, state, additions/deletions, labels, tag name and URL, time-windowed and paginated so a single run returns thousands of events. Built for AI coding agents, dependency monitors and release trackers that need fresh developer activity — not stale training-set snapshots. No login, no browser, no API key required (an optional token simply raises throughput).

The GitHub Activity Stream actor merges the separate GitHub activity endpoints — commits, PRs, issues, releases and public events — into a single clean stream you can export to JSON, CSV or Excel. Instead of stitching endpoints together, juggling pagination and rate limits, you pick a mode (repo, org, user, bulk), set a since date for delta runs, and get one normalized dataset ready for dashboards, alerts, RAG pipelines or an AI agent's context window.


✨ What you get

One row per activity event, normalized across all types:

Field Type Description
repo string owner/repo slug the event belongs to
type string commit, pull, issue, release, or a GitHub event name (PushEvent…) in user mode
number integer PR / issue number (null for commits & releases)
title string PR / issue title, release name, or first-line commit message
action string Event action for user-mode events (opened, closed…); null otherwise
state string open / closed for PRs & issues; null for commits
actor string Author / actor username
createdAt string Creation timestamp (ISO 8601)
updatedAt string Last-updated timestamp (ISO 8601)
additions integer Lines added (pull requests only)
deletions integer Lines removed (pull requests only)
commits integer Commit count in the PR (pull requests only)
labels array Label names (PRs & issues)
merged boolean Whether the PR was merged (pull requests only)
isPrerelease boolean Whether the release is a pre-release (releases only)
tagName string Release tag, e.g. 1.21.0 (releases only)
url string Canonical GitHub URL for the event
scrapedAt string Scrape timestamp (ISO 8601)

💡 Use cases

  • Weekly dev-summary agent — run repo mode with since: <7 days ago>; let an LLM turn commits/PRs/releases into a "shipped this week" digest.
  • Release tracking — watch releases for a dependency org (kubernetes, vercel), alert on new versions and draft upgrade notes.
  • Security-commit detection — filter commit/PR titles for security|cve|vuln|fix|patch to surface security work before it hits an advisory feed.
  • Dependency-health scoring — pull issue counts, label distribution and PR merge velocity to score a repo's maintenance health before adopting it.
  • Contributor monitoring — track a key maintainer's public events (user mode) to spot activity shifts or bus-factor risk.
  • Org-wide radar — scan an entire org's repos (org mode) to map where work is actually happening.
  • RAG over dev activity — embed commit messages and PR titles into a vector store and answer "when did X get fixed?" with citations to the exact commit.

🚀 Quick start (four ways)

1. Apify Console (no code)

  1. Open the actor: apify.com/logiover/github-activity-stream.
  2. Click Try for free. An empty input returns recent activity for a popular default repo.
  3. Pick a mode and its target (a microsoft/vscode slug, an org like kubernetes, or a user like torvalds), optionally set a since date, then Start.
  4. Open the Output tab and Export to JSON, CSV, Excel, XML or JSONL. Use the By type view to pivot on commit/PR/issue/release.

2. Apify CLI

npm install -g apify-cli
apify login
apify call logiover/github-activity-stream \
  --input='{"mode":"repo","repos":["microsoft/vscode"],"since":"2026-06-29","maxPerType":200}'

See examples/cli.md.

3. API / cURL

curl -X POST "https://api.apify.com/v2/acts/logiover~github-activity-stream/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"repo","repos":["facebook/react"],"eventTypes":["releases"],"since":"2026-06-01"}'

Runs the actor and returns dataset items in one call. See examples/api-curl.md.

4. apify-client (JavaScript & Python)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/github-activity-stream').call({
  mode: 'repo', repos: ['microsoft/vscode'], since: '2026-06-29', maxPerType: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/github-activity-stream").call(run_input={
    "mode": "repo", "repos": ["microsoft/vscode"], "since": "2026-06-29", "maxPerType": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["type"], item["repo"], item["title"])

Full snippets in examples/javascript.md and examples/python.md.

📥 Input

Pick a mode and give it a target. Everything else is optional — leave since empty for full history (capped by maxPerType), or set it for a delta window.

Field Type Default Description
mode select repo repo (one repo, highest volume), org (all of an org's public repos), user (a user's public events), bulk (many repos in one run).
repos array [] owner/repo slugs for repo and bulk mode, e.g. microsoft/vscode, facebook/react.
org string GitHub organization slug for org mode, e.g. kubernetes, vercel.
user string GitHub username for user mode, e.g. torvalds.
eventTypes array (select) all Which types to collect: commits, pulls, issues, releases. Fewer = faster.
since string ISO date (YYYY-MM-DD or full ISO). Only events after this date. Empty = full history.
maxPerType integer 200 Cap per event type per repo (1–1000).
maxOrgRepos integer 20 Cap on repos to scan in org mode (1–200).
ghToken string Optional GitHub Personal Access Token — raises the rate limit for heavy use. Public scope is enough.
useApifyProxy boolean true Route through the Apify datacenter proxy (IP rotation).

Tip — always set since for monitoring. For a recurring digest, set since to your last run time so each run is a clean delta. Commits are the highest-volume (and slowest) type — trim eventTypes to ["releases"] or ["pulls","releases"] when you don't need them.

Example inputs

Org-wide scan (monitor an ecosystem):

{ "mode": "org", "org": "kubernetes", "maxOrgRepos": 15, "eventTypes": ["pulls", "releases"], "since": "2026-06-01" }

User public activity:

{ "mode": "user", "user": "torvalds", "maxPerType": 100 }

Bulk multi-repo release watch:

{ "mode": "bulk", "repos": ["facebook/react", "vercel/next.js", "microsoft/typescript"], "eventTypes": ["releases"], "since": "2026-06-01" }

📤 Output

One row per activity event, streamed to the dataset. Example pull-request record:

{
  "repo": "microsoft/vscode",
  "type": "pull",
  "number": 210543,
  "title": "Fix terminal rendering on macOS",
  "action": null,
  "state": "closed",
  "actor": "user123",
  "createdAt": "2026-06-28T10:00:00Z",
  "updatedAt": "2026-07-01T15:00:00Z",
  "additions": 142,
  "deletions": 38,
  "commits": 3,
  "labels": ["bug", "terminal"],
  "merged": true,
  "isPrerelease": null,
  "tagName": null,
  "url": "https://github.com/microsoft/vscode/pull/210543",
  "scrapedAt": "2026-07-06T12:00:00.000Z"
}

A release row carries type: "release", tagName: "1.21.0" and isPrerelease: false; a commit row carries type: "commit" with the first-line message as title. PR-only stats (additions, deletions, commits, merged) are null on non-PR rows.

🔌 Integrations & automation

  • Schedules — run daily or weekly with since set to your interval for clean delta digests.
  • Webhooks — push new events to your API, database or Slack the moment a run finishes.
  • Google Sheets — sync activity rows into a spreadsheet for lightweight dashboards.
  • Amazon S3 / storage — archive event streams for historical dev-activity analysis.
  • Zapier / Make / n8n / Pipedream — build release-alert and dependency-monitoring pipelines with no code.
  • AI agents (MCP) — wrap it as an MCP tool so a coding agent passes a repo + time window and receives normalized activity, with no GitHub API juggling.

📦 Export formats

Download or stream results as CSV, JSON, JSONL, Excel (XLSX), or XML from the Apify Console or via the API.

❓ FAQ

How do I get GitHub commits/PRs/releases without an API key?

Open the GitHub Activity Stream on Apify, click Try for free, pick a repo and run it. No GitHub login or API key is required by default; an optional token only raises throughput for heavy workloads.

Is the GitHub Activity Stream free?

Start on Apify's free tier. Pricing is pay-per-result — you pay per saved event, and runs that yield zero events (deleted/empty/private repo) are free. See the Pricing tab on the actor page.

How much activity can I get in one run?

Thousands of events. Big repos yield hundreds of commits/PRs alone; org mode multiplies that across up to maxOrgRepos repos. Commits, issues and PRs go as far back as maxPerType and since allow; releases return all of them.

How do I export GitHub activity to CSV or JSON?

Run the actor, open Output, click Export, and choose CSV, JSON, JSONL, XLSX or XML — or pull it via the Apify API and dataset endpoints.

Is this a GitHub API alternative?

Yes. GitHub exposes each object type (commits, PRs, issues, releases, events) as a separate endpoint with its own pagination and schema. This actor is a GitHub activity API alternative that merges them into one normalized schema and handles pagination for you.

What's the difference between the modes?

repo pulls one repo's full activity (highest volume). org scans an org's public repos. user returns a user's public events. bulk processes many repos in a single run.

How far back can I go?

Commits, issues and PRs: as far as repo history goes, capped by maxPerType. Releases: all of them. User events are limited by GitHub itself to roughly the last 90 days of public activity.

Why don't commit rows have additions/deletions?

GitHub's commit-list response doesn't include per-commit line stats. Pull-request rows do carry additions, deletions and commits. For per-commit stats, post-process by fetching the specific commit URLs.

Does it work for private repos?

No — it targets public monitoring using unauthenticated public endpoints (or a token's public scope). Private-repo access would require a token with full repo scope, which is outside this actor's design.

Can AI agents call it directly?

Yes — that's the primary design target. Wrap it in an MCP server or Apify tool integration; the agent passes a repo and a time window and receives normalized activity, with no rate-limit handling on its side.

🔗 Related actors

Browse the full suite at apify.com/logiover.


📄 Documentation only — this repository contains no scraper source code. The Actor runs on the Apify platform. ▶️ Run it: https://apify.com/logiover/github-activity-stream

Licensed under the MIT License · © 2026 logiover

About

Stream GitHub commits, PRs, issues & releases for any repo/org/user — no API key. Export CSV/JSON/Excel via Apify.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors