# GitHub Issues Scraper (`parseforge/github-issues-scraper`) Actor

Pull issue details from any public GitHub repository. Extract issue number, title, body, labels, assignees, state, created and updated dates, author, comments count, and linked pull requests. Ideal for tracking project progress, triaging bug reports, or analyzing open-source contribution patterns.

- **URL**: https://apify.com/parseforge/github-issues-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.62 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### 🐛 GitHub Issues Scraper

> **Export GitHub Issues in seconds.** Give it a repository URL, get a clean dataset of issue titles, numbers, state, labels, assignees, and more, ready as CSV, JSON, Excel, or XML.

This actor collects issue data from any public GitHub repository. It extracts dozens of fields including title, number, state, labels, assignees, comments count, and timestamps. It accesses the GitHub Issues page via a stealth browser to ensure all data is rendered, even for repositories with JavaScript-heavy pages.

The actor supports two modes: a quick preview mode (free users limited to 10 items) and a full scrape mode for paid users, with a maximum of 1,000,000 issues. You can filter by repository URL and set the maximum number of issues to scrape. The actor automatically handles pagination to collect all issues up to the limit.

| Who it's for | What they do with it |
|---|---|
| Developers, project managers, QA engineers, open source maintainers, data analysts, researchers | Track bug reports, monitor feature requests, analyze issue trends, export issues for reporting, migrate issues to another system, audit repository health |

👉 **Jump to:** [What it does](#📋-what-does-the-github-issues-scraper-do) · [Use cases](#🎯-what-can-you-do-with-github-data) · [Why choose this](#⭐-why-choose-this-github-scraper) · [Output](#📊-what-data-can-you-extract-from-github) · [Input](#⚙️-how-do-you-configure-the-github-issues-scraper) · [Pricing](#💰-how-much-does-it-cost-to-scrape-github) · [API](#🔌-use-it-as-an-api) · [FAQ](#❓-github-scraper-faq)

***

### 📋 What does the GitHub Issues Scraper do?

- **Preview mode**: Scrape up to 10 issues for free to test the output.
- **Full scrape**: Set maxItems up to 1,000,000 to export all issues from a repository.

[**Open the input and run it**](https://apify.com/parseforge/github-issues-scraper/input?fpr=vmoqkp). Paste a GitHub repository issues URL, set the maximum number of issues you need, and the first rows land in under a minute.

***

### 🎯 What can you do with GitHub data?

**1. 🐛 Track bug reports.** A QA engineer pastes the repository URL of their project, sets maxItems to 500, and gets a dataset of all open bugs with labels, assignees, and creation dates. They use this to prioritize fixes and assign tasks.

**2. 📊 Analyze feature requests.** A product manager scrapes all issues labeled 'enhancement' from a competitor's repository to understand user demands. They export to CSV and analyze trends.

**3. 🔄 Migrate issues to another platform.** A developer exports all issues from a GitHub repository to import into Jira or GitLab. They use the full scrape mode to get all fields, then transform the data.

***

### ⭐ Why choose this GitHub scraper

| ✅ | What you get |
|---|---|
| **Complete data** | All issue fields including labels, assignees, milestones, and comments count. |
| **Fast export** | Scrape thousands of issues in minutes, not hours. |
| **No coding** | No API tokens or GitHub credentials required. |

***

### 📊 What data can you extract from GitHub?

Export to CSV, Excel, JSON or XML from the Dataset tab, or pull them straight from the API.

| Field group | Included data |
|---|---|
| Identity | `url` |
| Content | `title`, `body` |
| Author and source | `authorAvatarUrl`, `author` |
| Engagement | `commentsCount` |
| Location | `state` |
| Time | `createdDate`, `updatedDate`, `closedDate`, `scrapedAt` |
| Other | `issueNumber`, `repositoryFullName`, `labels`, `assignees`, `linkedPullRequests`, `error` |

**Sample record**

```json
{
  "authorAvatarUrl": "https://avatars.githubusercontent.com/u/28902667?v=4",
  "issueNumber": 32995,
  "title": "DevTools: Allow searching by component name in Profiler trace",
  "url": "https://github.com/react/react/issues/32995",
  "state": "closed",
  "repositoryFullName": "facebook/react",
  "author": "hoxyq",
  "createdDate": "2025-04-23T18:53:27Z",
  "updatedDate": "2026-08-05T16:53:49Z",
  "closedDate": "2026-08-05T16:53:45Z",
  "body": "We should have a mechanism to look up a specific component in a specific commit.\n\nI don't think we should have an input, as on Components panel, we should rather listen to `cmd+f` shortcut and display an input in a collapsable view, similarly to what Chrome does. We should also display the number of components that satisfy search query and allow moving between them, like we do in Components panel.\n\nThe search will only consider components from a selected (current) commit, it should not search through every commits (whole trace).\n\n",
  "commentsCount": 6,
  "scrapedAt": "2026-08-11T17:36:31.833Z"
}
```

***

### ⚙️ How do you configure the GitHub Issues Scraper?

**A first run with the defaults**

```json
{
  "repositoryUrl": "https://github.com/facebook/react/issues",
  "maxItems": 10
}
```

**A larger pull**

```json
{
  "repositoryUrl": "https://github.com/facebook/react/issues",
  "maxItems": 200
}
```

Paste a GitHub repository issues URL, set the maximum number of issues you need, and the first rows land in under a minute.

***

### 💰 How much does it cost to scrape GitHub?

This Actor uses **pay-per-result** pricing: **$0.004 per result** collected. You are billed only for the results you receive; a run that returns nothing costs nothing.

| Run | Results | Cost |
|---|---|---|
| Quick check | 10 results (free tier) | **$0.00** |
| Small pull | 100 results | **~$0.50** |
| Standard job | 1,000 results | **~$5.00** |
| Large dataset | 10,000 results | **~$50.00** |

New Apify accounts include **$5 in free credit**. Prices drop on paid tiers, so the figures above are the ceiling rather than what a regular user pays. [Create a free account](https://console.apify.com/sign-up?fpr=vmoqkp).

***

### 🚀 How do you scrape GitHub?

1. **Sign up.** [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor.** Go to the [GitHub Issues Scraper](https://apify.com/parseforge/github-issues-scraper?fpr=vmoqkp) page.
3. **Set your input.** Paste a GitHub repository issues URL, set the maximum number of issues you need, and the first rows land in under a minute.
4. **Run it, then download.** Results appear in the Dataset tab as CSV, Excel, JSON or XML.

***

### 🔌 Use it as an API

Call it from anything that can send an HTTP request. This returns the dataset in the same response:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/parseforge~github-issues-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "repositoryUrl": "https://github.com/facebook/react/issues", "maxItems": 10 }'
```

**Node.js** (`npm install apify-client`):

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('parseforge/github-issues-scraper').call({ "repositoryUrl": "https://github.com/facebook/react/issues", "maxItems": 10 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parseforge/github-issues-scraper").call(run_input={ "repositoryUrl": "https://github.com/facebook/react/issues", "maxItems": 10 })
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

`$APIFY_TOKEN` is your Apify API token, from Settings in the console. Save a tested input as an Apify Task and attach a [schedule](https://docs.apify.com/platform/schedules) for recurring collection. Full reference: the [Apify API documentation](https://docs.apify.com/api/v2).

***

### 🤖 Use with AI agents via MCP

Give an AI agent live access to GitHub through the Model Context Protocol (MCP). Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/github-issues-scraper"
```

Then prompt the agent naturally to run the scraper and read back the results.

***

### 🧩 Integrate with any app

Connects to any cloud service through [Apify integrations](https://apify.com/integrations):

- [Make](https://docs.apify.com/platform/integrations/make): multi-step automations
- [Zapier](https://docs.apify.com/platform/integrations/zapier): 5,000+ apps
- [Slack](https://docs.apify.com/platform/integrations/slack): run notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte): pipe rows into a warehouse
- [GitHub](https://docs.apify.com/platform/integrations/github): trigger runs from commits
- [Google Drive](https://docs.apify.com/platform/integrations/drive): export straight to Sheets

***

### 🛠️ Troubleshooting

<details>
<summary><strong>I only got 10 issues even though I set maxItems to 100.</strong></summary>

Free accounts are limited to 10 items. Upgrade to a paid plan to scrape more.

</details>

<details>
<summary><strong>The scrape returned no data.</strong></summary>

Ensure the repository URL is correct and the repository is public. If the page requires login, the actor cannot access it.

</details>

<details>
<summary><strong>The output is missing some fields I expected.</strong></summary>

The actor extracts fields present on the page. Some fields like milestone may be empty if not used. Check the dataset after a run to see all available fields.

</details>

<details>
<summary><strong>The scrape is very slow.</strong></summary>

Large repositories with many issues take longer. Reduce maxItems or run during off-peak hours. Also check your internet connection.

</details>

<details>
<summary><strong>Something else</strong></summary>

[Open our contact form](https://tally.so/r/BzdKgA) or email parseforge@protonmail.com with the run ID, your input (secrets removed), what you expected, and what came back.

</details>

***

### ❓ GitHub scraper FAQ

<details>
<summary><strong>Do I need a GitHub API token?</strong></summary>

No, the actor scrapes the public web interface and does not require any API token or authentication.

</details>

<details>
<summary><strong>Can I scrape private repositories?</strong></summary>

No, the actor only works with public repositories. Private repositories require authentication which is not supported.

</details>

<details>
<summary><strong>How many issues can I scrape?</strong></summary>

Free accounts are limited to 10 issues. Paid users can scrape up to 1,000,000 issues per run.

</details>

<details>
<summary><strong>What fields are included in the output?</strong></summary>

The output includes issue number, title, state, labels, assignees, milestone, comments count, creation date, update date, and more. The exact fields appear after a run.

</details>

<details>
<summary><strong>Is the data up to date?</strong></summary>

Yes, the actor scrapes the live page at the time of the run. It does not cache old data.

</details>

<details>
<summary><strong>Can I filter by issue state (open/closed)?</strong></summary>

Currently the actor scrapes all issues visible on the default issues page. To filter by state, use the GitHub URL with query parameters like ?q=is%3Aissue+is%3Aopen.

</details>

<details>
<summary><strong>How long does a scrape take?</strong></summary>

A preview of 10 issues takes under a minute. Scraping 100,000 issues may take several minutes depending on the repository size.

</details>

<details>
<summary><strong>What output formats are available?</strong></summary>

You can download the dataset as CSV, JSON, Excel, or XML from the Apify storage.

</details>

<details>
<summary><strong>Can I scrape issues from multiple repositories in one run?</strong></summary>

No, each run targets a single repository URL. You can run the actor multiple times for different repositories.

</details>

<details>
<summary><strong>Does it handle pagination automatically?</strong></summary>

Yes, the actor automatically follows pagination to collect all issues up to your maxItems limit.

</details>

***

### 🔗 Related actors

- [parseforge/website-content-crawler](https://apify.com/parseforge/website-content-crawler?fpr=vmoqkp): Use this if you need to scrape the full content of GitHub issue pages, including comments and code snippets.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

***

🆘 **Need help?** [Open our contact form](https://tally.so/r/BzdKgA) or email parseforge@protonmail.com to report an issue, request a scraper, or discuss a custom data project.

***

> ⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by GitHub, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `repositoryUrl` (type: `string`):

URL of the GitHub repository issues page (e.g., https://github.com/facebook/react/issues)

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "repositoryUrl": "https://github.com/facebook/react/issues",
  "maxItems": 10
}
```

# Actor output Schema

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

Complete dataset of all scraped records.

# 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 = {
    "repositoryUrl": "https://github.com/facebook/react/issues",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/github-issues-scraper").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 = {
    "repositoryUrl": "https://github.com/facebook/react/issues",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/github-issues-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "repositoryUrl": "https://github.com/facebook/react/issues",
  "maxItems": 10
}' |
apify call parseforge/github-issues-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/github-issues-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/oHtlyfnPgf3bhYWM7/builds/Zy0wOVUTt6Q5BxdfA/openapi.json
