# GitHub Issues Scraper (`incontrovertible_gate/github-issues-actor`) Actor

Scrape issues from any public GitHub repo - no API token needed. Get titles, authors, labels, dates & more. Perfect for competitor analysis, market research & lead generation. Fast, reliable, 25 issues/sec.

- **URL**: https://apify.com/incontrovertible\_gate/github-issues-actor.md
- **Developed by:** [Netsrac](https://apify.com/incontrovertible_gate) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **Stats:** 19 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 per issue scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## 🔍 GitHub Issues Scraper

> **Extract issues from any public GitHub repository - No API token required!**

The fastest way to scrape GitHub issues for competitor analysis, market research, lead generation, and project monitoring.

***

### ⚡ Features

✅ **No Authentication** - Works instantly, no GitHub token needed
✅ **Fast & Efficient** - 25 issues per request, minimal compute usage
✅ **Structured Data** - Clean JSON output ready for analysis
✅ **Keyword Filtering** - Find specific issues that matter to you
✅ **Pagination Built-in** - Scrape hundreds of issues automatically

***

### 🎯 Use Cases

#### 🕵️ Competitor Intelligence

Monitor competitor repositories to discover what features users want and what bugs frustrate them.

#### 📊 Market Research

Find real user problems by tracking issues across repos in your industry.

#### 💰 Lead Generation

Identify frustrated users who might be ready to switch to your solution.

#### 🔔 Project Monitoring

Track your own repos for new bug reports and feature requests.

***

### 📥 Input Example

```json
{
  "repoUrl": "n8n-io/n8n",
  "issueState": "open",
  "maxItems": 100,
  "keywords": ["bug", "error"]
}
```

#### Input Parameters

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `repoUrl` | String | Yes | Repository in `owner/repo` format or full GitHub URL |
| `issueState` | Enum | No | `open`, `closed`, or `all` (default: `open`) |
| `maxItems` | Number | No | Max issues to scrape (default: 50, max: 1000) |
| `keywords` | Array | No | Filter issues containing these keywords |

***

### 📤 Output Example

```json
[
  {
    "number": 22226,
    "title": "Outlook Create Event Node is not working correctly!",
    "url": "https://github.com/n8n-io/n8n/issues/22226",
    "author": "AppsyStudios",
    "createdAt": "2025-11-24T11:25:43Z",
    "updatedAt": "2025-11-24T11:26:00Z",
    "state": "OPEN",
    "labels": [
      "status:in-linear",
      "triage:pending"
    ],
    "milestone": null,
    "repository": "n8n-io/n8n"
  },
  {
    "number": 22207,
    "title": "Telegram trigger not working, need urgent help",
    "url": "https://github.com/n8n-io/n8n/issues/22207",
    "author": "nikavkloosterman-pixel",
    "createdAt": "2025-11-24T03:21:31Z",
    "updatedAt": "2025-11-24T11:18:06Z",
    "state": "OPEN",
    "labels": [
      "status:in-linear",
      "triage:pending"
    ],
    "milestone": null,
    "repository": "n8n-io/n8n"
  }
]
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `number` | Number | Issue number |
| `title` | String | Issue title |
| `url` | String | Direct link to the issue |
| `author` | String | GitHub username who created the issue |
| `createdAt` | String | ISO 8601 timestamp when issue was created |
| `updatedAt` | String | ISO 8601 timestamp of last update |
| `state` | String | `OPEN` or `CLOSED` |
| `labels` | Array | List of label names |
| `milestone` | String | Milestone name (or null) |
| `repository` | String | Repository in `owner/repo` format |

***

### 🔗 Integrations

Export your scraped data to:

- **Google Sheets** - Analyze in spreadsheets
- **Slack** - Get notified of new issues
- **Airtable** - Build a searchable database
- **Zapier / Make / n8n** - Automate workflows
- **Webhooks** - Send to any endpoint
- **Email** - Daily/weekly digests

***

### 💡 Pro Tips

#### Monitor Competitors

```json
{
  "repoUrl": "competitor/their-product",
  "issueState": "open",
  "maxItems": 200,
  "keywords": ["slow", "expensive", "bug", "broken", "alternative"]
}
```

#### Track Feature Requests

```json
{
  "repoUrl": "facebook/react",
  "issueState": "open",
  "maxItems": 100,
  "keywords": ["feature", "request", "enhancement", "proposal"]
}
```

#### Find Frustrated Users

```json
{
  "repoUrl": "vercel/next.js",
  "issueState": "open",
  "maxItems": 50,
  "keywords": ["help", "urgent", "blocker", "critical"]
}
```

***

### ⚙️ Performance

| Metric | Value |
|--------|-------|
| Issues per page | 25 |
| Requests per minute | 30 (rate limited) |
| Memory usage | ~256-512 MB |
| Avg. time per 100 issues | ~8 seconds |

***

### 📞 Support

- 🐛 [Report Issues](https://console.apify.com/actors/2drPwKahckYnFoed4/issues)
- 💬 Questions? Contact us on Apify

***

### 🏷️ Keywords

github scraper, github issues, repository scraper, issue tracker, bug tracker, competitor analysis, market research, lead generation, open source monitoring, developer tools, github api alternative, no authentication scraper

***

**Made with ❤️ using [Crawlee](https://crawlee.dev) and [Apify SDK](https://docs.apify.com/sdk/js/)**

# Actor input Schema

## `repoUrl` (type: `string`):

GitHub repository URL or owner/repo format (e.g., 'facebook/react' or 'https://github.com/facebook/react')

## `issueState` (type: `string`):

Filter issues by state

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

Maximum number of issues to scrape

## `keywords` (type: `array`):

Only return issues containing these keywords in title or body. Leave empty for all issues.

## Actor input object example

```json
{
  "repoUrl": "facebook/react",
  "issueState": "open",
  "maxItems": 50,
  "keywords": []
}
```

# 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 = {
    "repoUrl": "facebook/react"
};

// Run the Actor and wait for it to finish
const run = await client.actor("incontrovertible_gate/github-issues-actor").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 = { "repoUrl": "facebook/react" }

# Run the Actor and wait for it to finish
run = client.actor("incontrovertible_gate/github-issues-actor").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 '{
  "repoUrl": "facebook/react"
}' |
apify call incontrovertible_gate/github-issues-actor --silent --output-dataset

```

## MCP server setup

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

```

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/2drPwKahckYnFoed4/builds/LEeDzDq1dvorbUYIH/openapi.json
