# Git Email Extractor (`rl1987/git-email-extractor`) Actor

Shallow-clones git repositories and extracts contributor emails (author & committer) from commit history. Give it a list of repo URLs, get back a flat dataset of names and emails per repo.

- **URL**: https://apify.com/rl1987/git-email-extractor.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 output rows

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Git Email Extractor do?

**Git Email Extractor** takes a list of git repository URLs, performs a shallow clone of each one, and scans the commit history for author and committer emails (including addresses mentioned in commit message trailers like `Co-authored-by`). Useful for mapping out contributors to open source projects, auditing internal repos, or lead-gen research on maintainers of a codebase.

### Why use Git Email Extractor?

- Quickly identify all contributors to a repository without cloning and grepping manually.
- Run against many repositories in one go via the Apify platform's API, scheduler, and integrations.
- Get structured, downloadable results (JSON/CSV/Excel) instead of parsing `git log` output by hand.

### How to use Git Email Extractor

1. Open the Actor's **Input** tab.
2. Add one or more git repository URLs (HTTPS clone URLs, e.g. `https://github.com/user/repo.git`).
3. Optionally adjust the **shallow clone depth** (how many recent commits to scan per repo).
4. Run the Actor and check the **Dataset** tab for results.

### Input

| Field | Type | Description |
|---|---|---|
| `repoUrls` | array of strings | Git repository URLs to clone and scan. |
| `cloneDepth` | integer | Number of most recent commits to fetch per repo (default `100`). Only commits within this depth are scanned. |

### Output

Example dataset items — one flat row per name/email pair found:

```json
[
  { "repoUrl": "https://github.com/apify/apify-sdk-python.git", "name": "Jane Doe", "email": "jane@example.com" },
  { "repoUrl": "https://github.com/apify/apify-sdk-python.git", "name": "John Smith", "email": "john@example.com" }
]
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field | Description |
|---|---|
| `repoUrl` | The repository URL the row was found in. |
| `name` | Display name associated with the email in the commit history. |
| `email` | The extracted email address. |

### Pricing / Cost estimation

Cost scales with the number of repos and the clone depth you set — cloning is the dominant cost, since email extraction itself is cheap local text processing. Use a smaller `cloneDepth` if you only need recent contributors.

### Tips

- Only public (or otherwise accessible) HTTPS repo URLs are supported — private repos requiring auth aren't handled.
- `noreply` addresses (e.g. GitHub's privacy emails) are filtered out automatically.
- Increase `cloneDepth` if a repo has many contributors further back in history you want to catch.

### FAQ, disclaimers, and support

Only scrape repositories you have the right to access and process. Respect the license and any usage terms of the target repositories. Found a bug or have a feature request? Open an issue on the Actor's Issues tab.

# Actor input Schema

## `repoUrls` (type: `array`):

List of git repository URLs to clone and scan for commit author/committer emails.

## `cloneDepth` (type: `integer`):

Number of most recent commits to fetch per repository (shallow clone). Only commits within this depth are scanned for emails.

## Actor input object example

```json
{
  "repoUrls": [
    "https://github.com/apify/apify-sdk-python.git"
  ],
  "cloneDepth": 100
}
```

# Actor output Schema

## `results` (type: `string`):

One row per unique email found per repository, with the associated display name.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "repoUrls": [
        "https://github.com/apify/apify-sdk-python.git"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/git-email-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "repoUrls": ["https://github.com/apify/apify-sdk-python.git"] }

# Run the Actor and wait for it to finish
run = client.actor("rl1987/git-email-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "repoUrls": [
    "https://github.com/apify/apify-sdk-python.git"
  ]
}' |
apify call rl1987/git-email-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=rl1987/git-email-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/5OiraI1lXn3aLEMmF/builds/xQBaSIzJ5vlnfynHJ/openapi.json
