Parsing GitHub Activity of Crypto Projects: Metrics and API

Repository activity of crypto projects changes daily, and manual collection quickly becomes outdated. We set up turnkey data collection for crypto projects: metrics, commit history, and ready-made interfaces for your analytics. Data completeness grows without an increase in the number of requests, and reporting no longer depends on manual exports.

Blockchain Development Services

Frequently Asked Questions

Latest works

  • Development of a web application for FEEDME
    Development of a web application for FEEDME
    1376
  • Development of an online store for the company FURNORO
    Development of an online store for the company FURNORO
    1350
  • B2B Advance company logo design
    B2B Advance company logo design
    798
  • Development of a web application for Enviok
    Development of a web application for Enviok
    1088
  • AIDER company logo development
    AIDER company logo development
    1034
  • CRM development for Chasseurs
    CRM development for Chasseurs
    1130

Why scraping GitHub yields fragmented data about crypto projects

The public API returns not development history, but a current snapshot of a repository: a list of branches, latest commits, and pull request status.

Authorship, dates, and the size of changes for older edits have to be pulled page by page, and any missed request leaves a gap in repository activity that cannot later be filled.

Rate limits turn this into a race. Without a token with an expanded quota and while watching secondary search limits, collection across a hundred projects stops halfway: some repositories get a full profile, while others get only the tail of recent weeks. Commit metrics for projects with different collection start dates are then incomparable.

The second problem is topology. A commit from a fork, mirror, or CI bot looks the same in the output as work by a core developer: rebase and squash rewrite authorship, force-push removes a branch from the common graph, and dependency updates generate hundreds of service commits.

Until such events are labeled separately, the activity graph spikes exactly when the team fixes the build or migrates the repository.

Incomplete history combined with branch merging yields numbers that cannot be used to compare projects with each other — yet these are exactly what estimates are most often built on.

We examine how this is solved: which collection scheme yields a reproducible activity profile and how to separate development from service noise.

What managed collection of repository activity provides

A well-established collection answers three questions: how much history we see, how fresh the numbers are, and what happens when the external source stops returning data. Each answer is measured, not felt.

Completeness of commit and release history

The collector goes through not only the main branch, but also tags, release branches, merges, authorship, and dates — the picture is built from all significant references in the repository on GitHub.

If you traverse only the tip, the metric will show a lull where work is actually happening in a maintenance branch. The output is a dataset where both one-off spikes and a steady maintenance rhythm are visible.

Data freshness and update lag

Updates run on a schedule with an overlap window: the last day is rebuilt, so late edits and rewritten history are not lost. The delay between an event and its appearance in the data mart is hours, not weeks: developer churn is visible before it is written about in reviews.

Headroom on request limits removes the main risk. When the quota is exhausted, collection does not stop but runs at a lower frequency; the queue catches up on missed data without gaps in the series.

Dataset quality no longer depends on one successful pass — metrics are comparable across projects and over time.

Approaches to GitHub scraping: traversal, webhooks, incremental sampling

Data extraction from GitHub is done in three modes, and they do not replace each other: full traversal gives history completeness, incremental sampling gives low-cost regular updates, and change notifications give freshness.

The choice depends on whether the full project history or only the delta since the last collection is needed.

Data collection mode When it fits Data source limitations
Full traversal Initial history load, reconciliation of gaps after a failure Longest, hits request limits
Incremental sampling Scheduled metric updates: delta by dates or cursor Requires storing state and replaying the window
Change notifications Reaction within minutes: commits, releases, issues, comments Requires a public endpoint; event delivery is not guaranteed

When which mode is advantageous

We run full traversal once when onboarding a project and repeat it selectively when a gap is visible in the metrics. Incremental sampling becomes the main mode: it fetches only changed areas and removes most of the load. Notifications complement it where latency, not completeness, matters.

Rate limit limitations and ways to work around them

The number of requests per hour is limited; burst request series and limits on fetching large pages trigger separately.

We wrap this as follows: reduce frequency, cache responses and request only what changed, spread the load across multiple tokens, pause and retry on failure — collection continues without hitting a wall.

Stages of implementing data collection about crypto projects

The order of work almost does not depend on the specific project: first source inventory, then the storage model, then reconciliation where activity is already known manually.

We arrange the implementation stages so that each step leaves a verifiable artifact — an export, a schema, a calculation. Then discrepancies are caught at the beginning, when rework costs hours, not weeks.

  1. Source audit: which events are available (commits, pull requests, discussions, releases, repository copies) and what the GitHub API returns given rate limits.
  2. Data schema: entities “project”, “repository”, “participant”, “event”, keys and duplicate merge rules, unified time, raw responses alongside calculated tables.
  3. Project directories: a canonical list with repository, token, and team linkage, handling renames, code migrations, and mirrors, manual edits with history.
  4. Loader: incremental collection by cursor, retries on failures, duplicate-free writes, run log with duration and volume.
  5. Metric calculation: activity by authors, share of unique participants, regularity and commit streaks, aggregation windows, separate rules for bots.
  6. Validation on reference projects: compare with manual counting for projects with known activity, investigate a discrepancy greater than a few percent down to the cause.
  7. Solution handover: regulations for updating directories, documentation on the data schema, instructions for adding projects, joint review with your team.

The data schema and directories remain with you: new metrics and sources are added without rebuilding the entire pipeline.

What we hand over: configurations, schemas, regulations

All artifacts are transferred to the customer's repository along with access rights — nothing remains on our side, and maintenance does not depend on us. By delivery, the collection pipeline works autonomously, and its state is visible without reading code.

Documentation and update regulations

  • Collection configurations: list of sources, initial load depth, run schedule, project exclusion rules.
  • Data schema: description of tables, keys, and relationships between commits, releases, participants, and version tags.
  • Update regulations: polling frequency, behavior when GitHub response structure changes, procedure for onboarding a new project.
  • Deployment documentation: how to bring up the pipeline from scratch and migrate it to other capacity without code changes.
  • Analyst instructions: where activity metrics are stored and how to build custom queries.

Monitoring and alerts

  • Checks for source availability and remaining request limits — the signal arrives before the export starts falling behind.
  • Freshness control: if the latest record is older than the expected window, a notification triggers.
  • Collection status panel: how many projects were processed per run, where failures occurred, how data volume changed.
  • Error log with request context, so the cause of a failure can be found without contacting us.

Basic scenarios — restarting a run, adding a project, troubleshooting a failure — the customer handles independently. The maintenance team takes on the rest.

Case: how data completeness grew with the same request volume

The client is a crypto project analytics platform: investors look at team activity in repositories and make decisions based on it.

Data was collected by regular GitHub scraping, but the snapshot covered only 61% of required organizations — some projects looked “dead” despite live commits, and analysts corrected reports manually.

What it was before

Traversal ran over a flat repository directory: only the main branch, no forks or mirrors, without accounting for team moves to a new organization.

When rate limits triggered, the job failed entirely, and the next pass started only the next day — gaps of 2-3 days appeared in history, and period aggregates were calculated by last commit date instead of daily sums. The request failure rate stayed at 4.2%, and each failure had to be recovered manually.

What it became after

Collection was rebuilt to traverse by organizations with pagination and cursor persistence — an interrupted pass resumes from the same place, not from the beginning.

We added branch and fork parsing, an intermediate metadata store to avoid querying the source twice for the same thing, and request retries with increasing delay.

Coverage completeness grew from 61% to 94%, the failure rate dropped to 0.3%, and the number of source requests — that same request volume — increased by only 8%.

Full history rebuild decreased from 6 hours to 40 minutes, and the analytics summary no longer has projects with zero activity despite live commits.

How does collection via API differ from parsing project pages?

The GitHub API returns data in structured form: the field schema is documented, the response comes in machine-readable format, and request limits are known in advance.

For regular metric collection, this provides predictable load and low maintenance cost — the connector is written once and lives until the project itself changes the schema or access rules.

Page parsing works where there is no API or it does not return everything: contribution graph, participant list, monthly activity history.

The approach is more flexible, but relies on someone else's site markup — any change on the project side breaks parsing silently, returning zeros instead of an error.

Therefore such a source requires constant supervision: reference pages under tests, verification of control values, alerting when the event count drops.

The main selection criterion is not the speed of the first export, but source reliability and resilience to changes on the project side.

Source When it fits Limitations
API Standard metrics: commits, releases, participants, dependencies Strict request limits, some fields closed
Webhooks Need events at the moment of occurrence, without polling delay Require a public endpoint and protection against duplicates
Page parsing Aggregates and snapshots not available in the API Breaks when markup changes, monitoring required

We take the API as the basis, and page parsing as an auxiliary layer with convergence checks: if values diverge, an alert fires, and the metric does not go into the report.

Describe which project indicators are needed in the output — we will return with an estimate of source scope and a collection plan.

Technical doubts: limits, duplicates, historical data

We also recover project activity history retroactively: the public API returns paginated snapshots of commits, merges, and participants; daily snapshots and archives fill gaps where the output hits the depth limit.

Collection hits not access, but request frequency and data noise: without distribution over the window and caching of retries, the nightly run is lost entirely. Below are objections that come before kickoff.

Can you restore history for past periods?

Yes, but with varying accuracy. The deeper the period, the higher the chance that the output will not return data — we fill in with daily snapshots and archives, so on older sections the metric is reliable at the level of weeks, not hours.

How do you count contribution if a commit landed in several branches?

The key is the change hash plus parent: merges, repeated snapshots, and moves between branches collapse; a branch is not counted as a separate contribution. Otherwise activity is inflated many times over and the project ranking is distorted.

What to do with closed repositories?

They are publicly unavailable, so the report uses indirect signs — release tags and activity in related open mirrors. The share of closed work is marked as unknown, not as zero: otherwise a live project looks frozen.

Don't bots and mirrors distort the picture?

They do if not separated. We filter automatic commits and mirrors by author, regularity, and change type; we keep a separate list and show it broken down by repository.

Let's discuss your project data collection task

To return with an estimate and work plan, we need a minimum of inputs from you — usually we go through them in the first call.

The more specific the list of projects and questions for the data, the more accurate the estimate of effort and timelines: no need to budget for uncertainty.

  • List of projects and repositories: organizations, mirrors, and forks that should be included or, conversely, excluded.
  • Data sources: public GitHub via API, mirrors on other platforms, your internal tables and exports.
  • Metric set: commit frequency, number of active contributors, merges, closed issues, releases, response speed to issues.
  • History depth and period: from what date to collect, whether a one-time export or scheduled regular updates are needed.
  • Output format: tables, database, transfer to your system, ready-made summaries and charts for reports.
  • Quality requirements: how to filter out bots and inflated activity, what to do with renamed and archived repositories.
  • Access and limitations: tokens with required permissions, source request limits, acceptable load on your services.
  • Rules for storing and updating collected data, the person responsible for acceptance of the result on your side.

After that, we return with a timeline estimate, a stage-by-stage work plan, and a description of what you will get in the output. If some inputs are not ready yet — we will discuss which clarifications are critical and which can be resolved during the project.