# How Contributor Counts Are Extracted for GitHub Repository Evaluation in interviewstreet/hiring-agent

> Learn how the hiring-agent extracts contributor counts from GitHub repositories using the REST API. Discover the method for aggregating commit statistics and evaluating contributions efficiently.

- Repository: [HackerRank/hiring-agent](https://github.com/interviewstreet/hiring-agent)
- Tags: how-to-guide
- Published: 2026-07-19

---

**The hiring-agent extracts contributor counts by querying the GitHub REST API contributors endpoint and measuring the length of the returned JSON array, then aggregates commit statistics by summing individual contribution counts.**

The interviewstreet/hiring-agent repository evaluates candidate GitHub projects by extracting quantitative metrics from the GitHub API. Understanding how contributor counts are extracted for GitHub repository evaluation reveals the data pipeline that powers the hiring score calculations.

## Fetching the Contributor List via the GitHub API

The extraction process begins in [`github.py`](https://github.com/interviewstreet/hiring-agent/blob/main/github.py) with the **`fetch_repo_contributors()`** function (lines 202‑210). This function constructs the GitHub REST API URL using the pattern `https://api.github.com/repos/{owner}/{repo_name}/contributors`.

It then delegates the HTTP request to the internal **`_fetch_github_api`** helper. When the response returns a **`status_code == 200`**, the function parses the JSON array containing contributor objects and returns it to the caller. Each object in this array represents a unique contributor to the repository.

## Counting Contributors in fetch_all_github_repos()

The system calculates the raw contributor count inside **`fetch_all_github_repos()`** (lines 39‑41). After receiving the contributor array from `fetch_repo_contributors()`, the code measures the length of the list:

```python
contributors_data = fetch_repo_contributors(username, repo_name)
contributor_count = len(contributors_data)

```

This integer is stored as `contributor_count` in the project metadata dictionary. This approach treats every entry returned by the GitHub API as one distinct contributor, providing a straightforward headcount metric for repository evaluation.

## Aggregating Contribution Statistics with fetch_contributions_count()

Beyond simple headcounts, the system analyzes commit activity through **`fetch_contributions_count()`** (lines 187‑199). This function iterates over the same contributor list returned by the API and performs two critical aggregations:

1. **Total commits**: Sums the `"contributions"` field from every contributor object to produce `total_contributions`
2. **Owner commits**: Identifies the repository owner within the list and records their specific contribution count as `user_contributions`

These values map to **`total_commit_count`** and **`author_commit_count`** respectively in the final project dictionary. The evaluator later uses these metrics to assess code ownership patterns and project maturity.

## Practical Implementation Example

The following snippet demonstrates how the extraction functions populate evaluation data:

```python
from github import fetch_all_github_repos

# Example: retrieve projects for a given GitHub profile URL

github_profile_url = "https://github.com/yourusername"
projects = fetch_all_github_repos(github_profile_url)

for proj in projects:
    print(f"Repo: {proj['name']}")
    print(f"  Contributors: {proj['contributor_count']}")
    print(f"  Owner commits: {proj['author_commit_count']}")
    print(f"  Total commits: {proj['total_commit_count']}")
    print("-" * 40)

```

Running this code prints each repository’s metrics as extracted by `fetch_repo_contributors()` and `fetch_contributions_count()` in [`github.py`](https://github.com/interviewstreet/hiring-agent/blob/main/github.py). The evaluator module consumes this data to compute final hiring scores.

## Summary

- **`fetch_repo_contributors()`** queries `https://api.github.com/repos/{owner}/{repo}/contributors` via the internal `_fetch_github_api` helper (lines 202‑210)
- **`fetch_all_github_repos()`** calculates `contributor_count` using `len(contributors_data)` (lines 39‑41)
- **`fetch_contributions_count()`** sums the `"contributions"` field to derive total commits and isolates the owner’s commit count (lines 187‑199)
- Resulting metrics are embedded in project dictionaries and consumed by [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py) for scoring

## Frequently Asked Questions

### Which GitHub API endpoint does hiring-agent use to extract contributor counts?

The system targets the **`/repos/{owner}/{repo}/contributors`** endpoint of the GitHub REST API. This endpoint returns a JSON array where each element represents a contributor, allowing the code to count entries and extract individual contribution statistics.

### How does the system differentiate between owner commits and total commits?

Inside `fetch_contributions_count()`, the function iterates through the contributor list and matches the contributor login against the repository owner. It sums all `"contributions"` values for the `total_commit_count` while specifically recording the matched owner’s value as `author_commit_count`.

### Where are the extracted contributor counts stored for evaluation?

The counts are stored as key-value pairs within the project dictionary generated by `fetch_all_github_repos()`. Specifically, the keys **`contributor_count`**, **`author_commit_count`**, and **`total_commit_count`** populate this structure, which [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py) later processes to generate hiring recommendations.

### What authentication method does hiring-agent use for GitHub API requests?

The source analysis references an internal `_fetch_github_api` helper function that handles API communication, though the specific authentication mechanism (such as Personal Access Tokens or OAuth) is not detailed in the examined code sections of [`github.py`](https://github.com/interviewstreet/hiring-agent/blob/main/github.py).