# GitHub Issues & Pull Requests Scraper (`fetch_cat/github-issues-pull-requests-scraper`) Actor

Export public GitHub issues and pull requests from repositories or search queries, with body excerpts, labels, authors, comment counts and timestamps.

- **URL**: https://apify.com/fetch_cat/github-issues-pull-requests-scraper.md
- **Developed by:** [Fetch Cat](https://apify.com/fetch_cat) (community)
- **Categories:** Developer tools, Automation, Business
- **Features:** Limited permissions
- **Stats:** 30 total users, 23 monthly users, 96.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.02 / 1,000 github issue or pull requests

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Extract public GitHub issues and pull requests from repository names, repository URLs, or GitHub search queries. Export titles, body excerpts, labels, authors, comment counts, reactions and timestamps to CSV, Excel or JSON for support triage, product research and engineering analysis.

This GitHub issues and pull requests scraper collects public metadata, not full comment threads or code-review discussions. Small searches work without a GitHub token.  GitHub rate limits and its 1,000-match limit per search still apply.

### Quick start

1. Add a repository such as `microsoft/vscode`.
2. Choose the state and whether to include issues, pull requests, or both.
3. Start with a small `maxItems` value, then export the dataset.

```json
{
  "repositories": ["microsoft/vscode"],
  "state": "open",
  "includeIssues": true,
  "includePullRequests": false,
  "maxItems": 20
}
```

Repository inputs are processed first, followed by search queries, until the shared row limit is reached. Results within each search are requested by most recently updated first. The combined dataset is not globally sorted across sources. Duplicate issue URLs are saved only once within the run.

Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.

https://youtu.be/1OW8gOqlZbY?t=25

### Ready-to-run examples

Choose a public example to see its settings before starting a run:

- [Track API rate limit problems](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/examples/github-api-rate-limit-issues)
- [Track dependency update pull requests](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/examples/github-dependency-update-prs)
- [Track Apify SDK for JavaScript issues](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/examples/github-apify-sdk-js-open-issues)

### What you get

One row per saved public issue or pull request, with repository identity, record URL and available title, body excerpt, labels, authors, counts and timestamps. The body excerpt is limited to 1,000 characters. Full comment threads, review discussions and code diffs are outside this metadata export.

### Who is it for?

- **Support and developer-relations teams** reviewing recurring public bugs or questions.
- **Product researchers** comparing source-linked feature requests and integration problems.
- **Engineering analysts** organizing returned issue and pull-request activity.
- **Data teams** preparing metadata for their own classification or search workflows.

### How you can use the data

- **Prepare a public issue-triage sheet.** Use the existing VS Code open-issue recipe with a small total cap. Keep `repository`, `number`, `url`, `title`, `bodyExcerpt`, `labels` and `updatedAt` together, then read full threads at their source before deciding on follow-up.
- **Review a focused React bug sample.** Use the existing query-only recipe with the repository prefill cleared. Keep the effective source query with each row and perform grouping or classification in your own tools.
- **Compare closed pull-request metadata.** Use the existing Node.js and Apify repositories recipe with issues off. A missing mergedAt does not establish that a pull request was unmerged, because that field is populated only when supplied by the search response.
- **Narrow later exports with date context.** Use since when appropriate, remembering it becomes an inclusive UTC calendar-date filter only if the query lacks both updated and created qualifiers. Compare URLs across your own exports rather than expecting cross-run deduplication or alerts.

### Input settings

Use repository inputs, search queries, or both. Neither list is globally required: if both resolve to empty lists, the Actor uses `microsoft/vscode`. Clear the form's repository prefill if you want a query-only run.

| Setting / JSON key | Default | Behavior |
| --- | --- | --- |
| Repositories / `repositories` | Form prefill: `microsoft/vscode` | Up to 100 public `owner/name` values or GitHub repository URLs. |
| Search queries / `searchQueries` | Empty | Up to 100 GitHub issue-search queries. Combined with repository searches. |
| State / `state` | `open` | `open`, `closed`, or `all`. A contradictory state in a query fails.  `all` adds no state filter and leaves any query state qualifier intact. |
| Include issues / `includeIssues` | `true` | Save issue records. At least one include option must be enabled. |
| Include pull requests / `includePullRequests` | `true` | Save pull request records. These options also filter returned records when a query specifies its own type. |
| Maximum records / `maxItems` | `20` | Total saved-row limit across all sources, from 1 to 10,000. Each search can yield at most 1,000 matches. |
| Labels / `labels` | Empty | Up to 50 label filters appended to searches. |
| Updated since / `since` | Unset | A date or ISO timestamp converted to a UTC calendar date. Adds an inclusive updated-date filter only if the query contains neither `updated:` nor `created:`. |
| GitHub token / `githubToken` | Unset | Optional secret token for higher API rate limits. Use it only for public-data searches. Do not post tokens in support requests. |

#### Example inputs

For a query-only search of public bug reports:

```json
{
  "repositories": [],
  "searchQueries": ["repo:facebook/react is:issue label:bug"],
  "state": "open",
  "includeIssues": true,
  "includePullRequests": false,
  "maxItems": 20
}
```

For closed pull requests across two repositories:

```json
{
  "repositories": ["nodejs/node", "apify/apify-sdk-js"],
  "state": "closed",
  "includeIssues": false,
  "includePullRequests": true,
  "maxItems": 20
}
```

Input-field help describes filter interactions in more detail. A narrower query is usually more useful than a large result limit.

### Output data

Each row represents one public issue or pull request. The following is an illustrative field shape, not a record from a real run:

```json
{
  "repository": "owner/repository",
  "type": "issue",
  "number": 1,
  "title": "Illustrative issue title",
  "bodyExcerpt": null,
  "state": "open",
  "url": "https://github.com/owner/repository/issues/1",
  "authorLogin": null,
  "labels": [],
  "commentsCount": 0,
  "mergedAt": null
}
```

| Field | Meaning |
| --- | --- |
| `repository`, `number`, `type` | Repository, record number, and `issue` or `pull_request`. |
| `title`, `bodyExcerpt` | Title and whitespace-normalized body excerpt, limited to 1,000 characters. Missing body is `null`. |
| `state`, `url`, `apiUrl` | Open/closed state, public record URL and API record URL. |
| `authorLogin`, `authorProfileUrl` | Author username and profile link when available. |
| `labels`, `assignees`, `milestone` | Label names, assigned usernames and milestone title. |
| `commentsCount`, `reactions` | Comment count and reaction counts, not comment text. Reactions include `total`, `plusOne`, `minusOne`, `laugh`, `hooray`, `confused`, `heart`, `rocket` and `eyes`. |
| `createdAt`, `updatedAt`, `closedAt`, `mergedAt` | Available timestamps. `mergedAt` is populated only when supplied in the search response. It may be `null` even for a merged pull request. |
| `sourceQuery`, `sourceRepository`, `scrapedAt` | Effective search, originating repository input (`null` for raw searches), and collection timestamp. |

Unavailable optional values remain `null` or empty arrays. Use `url` to read the full thread on GitHub.

#### Download your results

Open your run's dataset, choose **Export** and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.

See [Apify's download and export guide](https://docs.apify.com/storage/dataset#apify-console) for the available formats and field options.

### Pricing

Pay-per-event pricing uses a one-time `start` charge and an `item` event for each public issue or pull request saved. The start charge can apply when no records are found or a later request fails. There are no separate paid error or status dataset rows.

Use a small total cap and specific repositories or queries. See the [live Pricing tab](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/pricing) for current rates and applicable discounts.

### Tips for best results

- **Start with one repository or narrow query.** A large cap cannot remove GitHub's per-search match limit.
- **Clear repository prefill for query-only collection.** Repository inputs are processed first and share the row cap with queries.
- **Keep type and state choices consistent.** At least one record type is required, and contradictory query-state settings fail.
- **Inspect date qualifiers before using since.** Existing updated or created qualifiers take precedence over that added filter.
- **Read source URLs and summary flags before assuming coverage.** Capped or incomplete searches need interpretation rather than a completeness claim.

### Limits and caveats

This Actor is for public repositories. An optional GitHub token supports higher public API rate limits rather than a private-repository export promise. Full comment threads, review discussions and diffs are not collected, and optional fields can be null or empty.

GitHub limits each search to 1,000 matches and can report incomplete results. Repository inputs run before queries within the shared row cap. Each search requests most recently updated order, while the combined dataset is not globally sorted across sources. Duplicate issue URLs are saved once per run.

RUN_SUMMARY reports saved counts, query counts, incomplete and capped queries, and completion status. A cap flag is evidence of possible truncation rather than exhaustive coverage. Saved records can remain after a time-limit stop or a later error, while the run can still fail.

A completed valid no-match search succeeds empty. When GitHub explicitly rejects a single repository as missing or inaccessible, that query is skipped with `unavailable_or_unknown` in `RUN_SUMMARY.emptyQueries`; other repositories continue and useful rows are retained. This does not establish whether a repository is private or deleted. Searches yielding no usable rows report `no_matches_or_filtered`. Invalid queries, authentication or rate-limit errors and unexpected responses are not proof of no matches. Persistent rate-limit responses fail with guidance. Narrow the request or wait for reset rather than interpreting a failed lookup as no records.

The since date is converted to an inclusive UTC calendar date and is added only when neither an updated nor a created qualifier is present. It does not provide cross-run deduplication or notifications. A null mergedAt does not prove an unmerged pull request.

### Automation and integrations

#### Save your settings for next time

Once you have an input that works for you, [save it as an Apify task](https://docs.apify.com/actors/running/tasks). This keeps your settings together so you can use them again without filling in the form from scratch.

#### Run on a schedule

Need fresh results regularly? You can [schedule the Actor or a saved task](https://docs.apify.com/actors/running/schedules) to run at a time that suits you.

Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.

#### Send results to your other tools

Use **n8n, Make or Zapier** to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the [Apify integration guides](https://docs.apify.com/integrations) for your chosen tool.

For a custom connection, an [Apify webhook](https://docs.apify.com/integrations/webhooks) can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.

### API usage

Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.

The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its `defaultDatasetId` to fetch the results.

For setup instructions, see Apify's [JavaScript client guide](https://docs.apify.com/api/client/js), [Python client guide](https://docs.apify.com/api/client/python) and [Actor runs API reference](https://docs.apify.com/api/v2/acts-runs-post).

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~github-issues-pull-requests-scraper/runs' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  --data @- <<'JSON'
{
  "repositories": [
    "microsoft/vscode"
  ],
  "state": "open",
  "includeIssues": true,
  "includePullRequests": false,
  "maxItems": 20
}
JSON
```

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/github-issues-pull-requests-scraper').call({
  "repositories": [
    "microsoft/vscode"
  ],
  "state": "open",
  "includeIssues": true,
  "includePullRequests": false,
  "maxItems": 20
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/github-issues-pull-requests-scraper').call(run_input={'repositories': ['microsoft/vscode'], 'state': 'open', 'includeIssues': True, 'includePullRequests': False, 'maxItems': 20})
print(client.dataset(run['defaultDatasetId']).list_items().items)
```

### MCP and AI agents

You can ask your AI assistant to collect data with **GitHub Issues & Pull Requests Scraper** and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.

Connect your assistant through the [Apify MCP server](https://mcp.apify.com/). MCP gives your assistant a way to find this scraper, run it and read the results. Follow the [official setup and sign-in guide](https://docs.apify.com/mcp) for your app.

#### Easier setup with an Apify plugin

If you use a supported coding assistant, the [official Apify plugin](https://docs.apify.com/agents/plugins) can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.

#### Use Apify AI in Console

Prefer to keep everything in Apify? Open [Apify AI in Console](https://docs.apify.com/account/apify-ai) and ask it to find Fetch Cat's **GitHub Issues & Pull Requests Scraper**. You can describe the data you want and ask questions about the results.

Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.

#### Choose your assistant

- **Claude and Claude Code (Anthropic):** [Apify setup guide](https://docs.apify.com/integrations/claude).
- **ChatGPT and Codex (OpenAI):** [Apify setup guides](https://docs.apify.com/integrations/openai).
- **Grok Bot (xAI):** [Apify plugin guide](https://docs.apify.com/integrations/grok-bot).
- **Gemini CLI (Google):** [MCP server setup guide](https://geminicli.com/docs/tools/mcp-server/). Use the server URL below with the HTTP configuration supported by Gemini CLI.

#### Connect just this scraper

To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/github-issues-pull-requests-scraper"
    }
  }
}
```

Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.

#### Use Apify's general server

Already connected to the general Apify MCP server at `https://mcp.apify.com`? You can use it to find this scraper without adding another server. Ask your assistant to use **GitHub Issues & Pull Requests Scraper** by Fetch Cat, or give it the identifier `fetch_cat/github-issues-pull-requests-scraper`.

Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.

#### Example requests

- “Use Fetch Cat’s GitHub Issues & Pull Requests Scraper to collect up to 5 open issues from microsoft/vscode with pull requests excluded. Show titles, labels, update times and source URLs for manual triage.”
- “Collect at most 5 open React bug reports using repo:facebook/react is:issue label:bug, with repository prefill cleared. Keep body excerpts and source queries beside the links, without retrieving full comment threads.”
- “Retrieve up to 5 closed pull-request records across nodejs/node and apify/apify-sdk-js with issues excluded. Show source links and available timestamps without treating a missing merged time as proof that the request was unmerged.”

Normal Apify charges apply. Check the [live Pricing tab](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/pricing) before asking your assistant to run a larger batch.

### Pay with x402

If your AI agent has a funded wallet, it can pay for Apify usage through [x402](https://docs.apify.com/integrations/x402). This experimental option lets an agent use Apify without a conventional account.

[Apify AGI](https://agi.apify.com/) provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.

Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.

Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.

#### Other ways for agents to pay

Apify also supports **MPP** for prepaid access through AGI and **Skyfire** for eligible Actors. If your agent already uses one of these, see the [agentic payment guide](https://docs.apify.com/agents/payments) to choose the right setup.

### FAQ

#### Can I export GitHub issues and pull requests without a token?

Yes, for small public searches within GitHub's unauthenticated rate limits. A token is optional and does not guarantee unlimited requests.

#### Does this return full comments or review discussions?

No. It returns body excerpts, comment counts and reaction counts. It does not fetch comment threads, diffs or review discussions.

#### Why are my results empty or fewer than expected?

Check the query in GitHub search, the state, both include options, labels and date filters. Search caps, inaccessible targets or incomplete GitHub results can reduce coverage. Inaccessibility alone does not establish whether a repository is private or deleted.

#### Can I monitor changes or export to a spreadsheet?

Export datasets as CSV, Excel or JSON, or connect them to your own workflow. Repeated monitoring requires an independently configured Apify schedule or integration. The Actor itself does not send alerts or remember all prior exports.

#### Is this an official GitHub API or a replacement for full GitHub access?

No. It is an independent public-metadata export tool built around GitHub search. Use GitHub's own tools or APIs for private data, full discussions or capabilities outside this contract.

### Related Actors

- [GitHub Profile Scraper](https://apify.com/fetch_cat/github-profile-scraper) — Enrich public author profiles.
- [GitHub Repositories Search Scraper](https://apify.com/fetch_cat/github-repositories-search-scraper) — Discover repositories before collecting their issues.
- [GitHub Trending Scraper](https://apify.com/fetch_cat/github-trending-scraper) — Find projects with current public interest.
- [GitHub Contributor Email Scraper](https://apify.com/fetch_cat/github-contributor-email-scraper) — Research publicly listed contributor contacts.
- [Stack Exchange Questions Scraper](https://apify.com/fetch_cat/stack-exchange-questions-scraper) — Explore adjacent public developer questions.

### Support and feedback

For custom additions or integrations, email <hello@fetchcat.dev>.

Found an error or have a feature request? [Open an issue](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/issues) with the run URL, a non-sensitive input example and what you expected.

Need help sharing it? See [Apify’s guide to sharing a run when reporting an issue](https://docs.apify.com/account/collaboration/general-resource-access#automatically-sharing-runs-via-actor-issues). Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.

Tried this scraper? We'd love to hear how it worked for you. [Leave a review](https://apify.com/fetch_cat/github-issues-pull-requests-scraper/reviews) to help others choose the right tool and help us improve it. Your feedback means a lot to us.

Made with care for curious people, AI agents and the possibilities in data. ♥

# Changelog

This Actor's version history is a separate document: https://apify.com/fetch_cat/github-issues-pull-requests-scraper/changelog.md

# Actor input Schema

## `repositories` (type: `array`):

Public GitHub repositories in owner/name form or as repository URLs, up to 100. The form prefills microsoft/vscode; clear it for a query-only run. If both source lists are empty or omitted, runtime uses microsoft/vscode. Repositories run before raw search queries, sharing maxItems.

## `searchQueries` (type: `array`):

Optional raw GitHub issue search queries, for example: repo:microsoft/vscode is:issue label:bug. Repository and query inputs are combined into one run.

## `state` (type: `string`):

Default open. Choose open, closed, or all. A contradictory state qualifier in a raw query is rejected. All adds no state filter; any state already in the query still applies.

## `includeIssues` (type: `boolean`):

Save issue records (default true). At least one of Include issues and Include pull requests must be enabled. This also filters returned records when a raw query specifies its own type.

## `includePullRequests` (type: `boolean`):

Save pull request records (default true). At least one include option must be enabled. This also filters returned records when a raw query specifies its own type.

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

Total saved-row limit across repositories and search queries, default 20, from 1 to 10000. GitHub limits each search to 1000 matches; raising this limit does not guarantee more matches. Repository inputs are processed first.

## `labels` (type: `array`):

Up to 50 label filters appended to repository and raw query searches, for example bug or good first issue. Existing label qualifiers remain in raw queries; added labels further narrow matching.

## `since` (type: `string`):

Use YYYY-MM-DD or an ISO date string, converted to a UTC calendar date. Adds an inclusive updated-date filter unless a raw query already contains updated: or created:. It does not remove records already exported in earlier runs.

## `githubToken` (type: `string`):

Optional GitHub personal access token for higher API rate limits. Public data works without a token for small runs.

## Actor input object example

```json
{
  "repositories": [
    "microsoft/vscode"
  ],
  "searchQueries": [],
  "state": "open",
  "includeIssues": true,
  "includePullRequests": true,
  "maxItems": 20,
  "labels": [],
  "since": ""
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "repositories": [
        "microsoft/vscode"
    ],
    "searchQueries": [],
    "labels": [],
    "since": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/github-issues-pull-requests-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 = {
    "repositories": ["microsoft/vscode"],
    "searchQueries": [],
    "labels": [],
    "since": "",
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/github-issues-pull-requests-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 '{
  "repositories": [
    "microsoft/vscode"
  ],
  "searchQueries": [],
  "labels": [],
  "since": ""
}' |
apify call fetch_cat/github-issues-pull-requests-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fetch_cat/github-issues-pull-requests-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/Sr5MKDJMKMcsmcXme/builds/SVwLsEoClMcwucFBt/openapi.json
