# StackOverflow Scraper · Questions, Answers, Tags & Users (`reapx/stackoverflow-scraper`) Actor

Stack Overflow Scraper (StackOverflow Scraper) to scrape questions, answers, tags, user profiles, and developer Q\&A datasets across Stack Overflow and Stack Exchange sites. Filter by tag, query, score, date, and accepted answers. No login or API key required.

- **URL**: https://apify.com/reapx/stackoverflow-scraper.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** Developer tools, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 item returneds

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

## StackOverflow Scraper (Stack Overflow Scraper) · Questions, Answers & Tags

**Stack Overflow Scraper** and **StackOverflow scraper** to extract questions, answers, tags and user profiles through the public Stack Exchange API. No login, no cookies, no headless browser, and no API key needed for normal runs. Run it empty and you get the most recently active questions; add a tag, a score floor or a date window and you get exactly the slice you want.

### Stack Overflow Scraper data output

| Dataset | One row per | Keyed by |
| --- | --- | --- |
| **Questions** | Question, with score, views, answer count, tags and author | `questionId` |
| **Answers** | Answer, with score, accepted flag and its question | `answerId` |
| **Tags** | Tag, with how many questions carry it | `tagName` |
| **Users** | User profile, with reputation and badge counts | `userId` |

Optionally attach **the full body text** of each post, and **every answer to each question**  -
highest score first, with author, accepted flag and body.

Five named dataset views ship with it: **Questions**, **Answers**, **Tags**, **Users** and
**Unanswered & gaps**.

### How to scrape Stack Overflow questions and answers

1. Pick **what to scrape**. Leave everything else empty for the most recently active questions.
2. Filter by **tag**, **title text**, **full-text search**, **score**, **answers**, **accepted status** or a **date window**.
3. Turn on **Include the full body text** and **Include answers with each question** if you need the content, not just the metadata.
4. Set **Max items**. You are charged once per item returned, so that is your cost cap.

### Filters

- **Tagged with all of** and **Not tagged with** - exact Stack Overflow tag names
- **Full-text search** and **Title contains** - the latter is far more precise
- **Minimum score**, **minimum answers**
- **Has an accepted answer**, **Unanswered only**, **Closed questions only**
- **Author user ID** - everything one person asked
- **Date window** - a rolling "last N days" or explicit from/to dates
- **Tag name contains**, **display name contains**, **minimum reputation**
- **Stack Exchange site** - any site key, not just Stack Overflow

### What you can build with it

- **Developer pain-point research** - `unansweredOnly` on your library's tag shows exactly where docs fail.
- **Technology trend tracking** - scrape tags monthly and diff `questionCount` to see what is growing.
- **Support-content mining** - top-voted questions plus answers for a tag is a ready-made FAQ corpus.
- **Competitive intelligence** - question volume and sentiment across rival tools' tags.
- **RAG and fine-tuning corpora** - question and answer bodies with a stable id and a CC licence field on every row.
- **Expert identification** - top users by reputation in a tag, for recruiting or developer relations.
- **Answer-quality analysis** - accepted vs highest-scoring answers, and how long acceptance took.

### Input configuration

Every field is optional. The prefilled values below are what runs if you press Start without changing anything.

#### What to scrape

Leave every filter below empty and the run returns the most recently active Stack Overflow questions.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `dataset` | string | `questions`, `answers`, `tags`, `users` | Which Stack Exchange collection to read. Each returns a different kind of row, keyed by its own Stack Exchange identifier. Prefilled with `"questions"`. |
| `site` | string | free text | Which site to read. Defaults to Stack Overflow; any Stack Exchange site key works, e.g. serverfault, superuser, askubuntu, math, unix, dba. Prefilled with `"stackoverflow"`. |

#### How much to fetch

Volume and ordering. You pay per item returned, so this decides the price of the run.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `maxItems` | integer | 1 to 2500 | Hard cap on how many rows the run returns. This is also your cost cap: you are charged once per item returned. The API serves at most 2,500 items for one query. Prefilled with `100`. |
| `sortBy` | string | one of 8: `activity`, `votes`, `creation`, `relevance`, ... | Ordering. Questions accept activity, votes, creation and relevance; answers accept activity, votes and creation; tags accept popular, activity and name; users accept reputation, creation, name and modified. An unsupported value falls back to the dataset's default. Prefilled with `"activity"`. |
| `order` | string | `desc`, `asc` | Descending gives the highest or newest first. Prefilled with `"desc"`. |

#### Question filters

These apply when you are scraping questions.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `query` | string | free text | Free-text search across question titles and bodies. Pair it with sort "Best match" for relevance ranking. |
| `titleContains` | string | free text | Match text in the question title only, which is far more precise than a body search. |
| `tagged` | list | one value per line | Only questions carrying every one of these tags. Use the exact Stack Overflow tag spelling, e.g. python, pandas, machine-learning. |
| `notTagged` | list | one value per line | Exclude questions carrying any of these tags. |
| `minScore` | integer | free text | Only items at or above this vote score. Requires sort "Votes / score", which is how the API applies a floor. |
| `minAnswers` | integer | 1 to any | Only questions with at least this many answers. |
| `acceptedOnly` | true/false | checkbox | Only questions where the asker accepted an answer - the solved set. |
| `unansweredOnly` | true/false | checkbox | Only questions with no answers and nothing accepted - where the gaps are. |
| `closedOnly` | true/false | checkbox | Only questions the community has closed. |
| `user` | integer | free text | Only questions asked by this Stack Exchange user ID. |

#### Tag and user filters

These apply when you are scraping tags or users.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `tagNameContains` | string | free text | Only tags whose name contains this text. Applies when scraping tags. |
| `userNameContains` | string | free text | Only users whose display name contains this text. Applies when scraping users. |
| `minReputation` | integer | free text | Only users at or above this reputation. Requires sort "Reputation". |

#### Dates

All dates are YYYY-MM-DD. Stack Overflow data runs back to 2008.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `lastNDays` | integer | 1 to 20000 | Rolling window on the creation date. Ignored if you set an explicit "From date". |
| `dateFrom` | string | free text | Earliest creation date, YYYY-MM-DD. |
| `dateTo` | string | free text | Latest creation date, YYYY-MM-DD. |

#### Output detail

Extra columns. These change the row size and the runtime, not the price.

| Field | Type | Accepts | What it does |
| --- | --- | --- | --- |
| `includeBody` | true/false | checkbox | Add the question or answer body as both plain text and original HTML. Off by default to keep rows small. |
| `includeAnswers` | true/false | checkbox | Attach every answer to each question row, highest score first, with author and accepted flag. Applies when scraping questions. Costs one extra request per 100 questions. |
| `apiKey` | string | free text | Optional and free from stackapps.com/apps/oauth/register. Without one, Stack Exchange allows 300 requests per day per IP; with one, 10,000. Only needed for very large or frequent runs. |

### Pricing

Pay per event. The primary event is **Item returned** (`item-returned`), charged at **$0.002 per event** on the free plan, falling to $0.0008 on the highest tier.

Charged once per complete question, answer, tag or user row written to the default dataset. A throttled or unreachable API, a rejected query and a search that matches nothing are never charged.

Minimum charge cap per run: $0.002.

Tiered discounts apply automatically on every paid Apify plan. Platform usage is absorbed by the Actor, so the per-event price is the whole price.

### Usage examples

#### The prefilled run, which is what Start does with nothing changed

```json
{
  "dataset": "questions",
  "site": "stackoverflow",
  "maxItems": 100,
  "sortBy": "activity",
  "order": "desc"
}
```

#### Filter by stack exchange site

```json
{
  "dataset": "questions",
  "site": "serverfault",
  "maxItems": 100,
  "sortBy": "activity",
  "order": "desc"
}
```

#### Filter by sort by

```json
{
  "dataset": "questions",
  "site": "stackoverflow",
  "maxItems": 100,
  "sortBy": "votes",
  "order": "desc"
}
```

#### Filter by full-text search

```json
{
  "dataset": "questions",
  "site": "stackoverflow",
  "maxItems": 100,
  "sortBy": "activity",
  "order": "desc",
  "query": "async await deadlock"
}
```

#### Filter by title contains

```json
{
  "dataset": "questions",
  "site": "stackoverflow",
  "maxItems": 100,
  "sortBy": "activity",
  "order": "desc",
  "titleContains": "memory leak"
}
```

### Output example

One row, exactly as the actor wrote it to the dataset:

```json
{
  "itemId": "22343224",
  "itemType": "question",
  "site": "stackoverflow",
  "scrapedAt": "2026-08-03T04:01:45Z",
  "questionId": 22343224,
  "title": "What's the difference between tilde(~) and caret(^) in package.json?",
  "link": "https://stackoverflow.com/questions/22343224/whats-the-difference-between-tilde-and-caret-in-package-json",
  "score": 5611,
  "viewCount": 2158729,
  "answerCount": 23,
  "isAnswered": true,
  "hasAcceptedAnswer": true,
  "acceptedAnswerId": 22345808,
  "tags": [
    "node.js",
    "npm",
    "package.json",
    "caret",
    "semantic-versioning"
  ],
  "createdAt": "2014-03-12T06:02:21Z",
  "lastActivityAt": "2025-05-14T10:28:46Z",
  "ownerUserId": 1154350,
  "ownerDisplayName": "Fizer Khan"
}
```

That row carries 21 fields in total; 18 are shown.

#### Fields on every row

| Field | Type | What it is |
| --- | --- | --- |
| `acceptRate` | integer | Percentage of the user’s questions with an accepted answer. Present on: users. |
| `acceptedAnswerId` | integer | Id of the accepted answer, when there is one. Present on: questions. |
| `answerCount` | integer | How many answers the question has. Present on: questions. |
| `answerId` | integer | Numeric Stack Overflow answer id. Present on: answers. |
| `answers` | list | Answers to the question, highest score first, each with id, score, accepted flag and author. Present only when Include answers with each question is on. Present on: questions. |
| `answersFetched` | integer | How many answers were attached to this question row. Present on: questions. |
| `bodyHtml` | string | Post body as the original HTML. Present only when Include the full body text is on. Present on: answers, questions. |
| `bodyText` | string | Post body as plain text, HTML stripped. Present only when Include the full body text is on. Present on: answers, questions. |
| `bronzeBadges` | integer | Bronze badge count. Present on: users. |
| `contentLicense` | string | Creative Commons licence the content is published under. Present on: answers, questions. |
| `createdAt` | string | UTC ISO 8601 timestamp the item was created. Present on: answers, questions, users. |
| `displayName` | string | User display name. Present on: users. |
| `goldBadges` | integer | Gold badge count. Present on: users. |
| `hasAcceptedAnswer` | true/false | Whether the asker accepted an answer. Present on: questions. |
| `hasSynonyms` | true/false | Whether the tag has registered synonyms. Present on: tags. |
| `isAccepted` | true/false | Whether this answer was accepted by the asker. Present on: answers. |
| `isAnswered` | true/false | Whether Stack Overflow considers the question answered. Present on: questions. |
| `isClosed` | true/false | Whether the question has been closed. Present on: questions. |
| `isModeratorOnly` | true/false | Whether only moderators may apply the tag. Present on: tags. |
| `isRequired` | true/false | Whether the tag is required on this site. Present on: tags. |
| `itemId` | string | Stack Exchange identifier for the thing this row describes - question id, answer id, user id or tag name. Stable and how the row is addressed downstream. |
| `itemType` | string | Which kind of Stack Exchange object this row is. |
| `lastAccessAt` | string | UTC ISO 8601 timestamp the user was last active. Present on: users. |
| `lastActivityAt` | string | UTC ISO 8601 timestamp of the most recent activity. Present on: answers, questions. |
| `link` | string | Canonical link to the question, answer, tag or user profile. |
| `location` | string | Self-reported location on the profile. Present on: users. |
| `ownerDisplayName` | string | Display name of the author. Present on: answers, questions. |
| `ownerReputation` | integer | Reputation of the author at scrape time. Present on: answers, questions. |
| `ownerUserId` | integer | Stack Exchange user id of the author. Present on: answers, questions. |
| `questionCount` | integer | How many questions carry the tag. Present on: tags. |
| `questionId` | integer | Numeric Stack Overflow question id. Present on: answers, questions. |
| `reputation` | integer | Total reputation. Present on: users. |
| `reputationChangeMonth` | integer | Reputation gained in the last month. Present on: users. |
| `reputationChangeYear` | integer | Reputation gained in the last year. Present on: users. |
| `score` | integer | Net votes on the post. Present on: answers, questions. |
| `scrapedAt` | string | UTC ISO 8601 timestamp of this run. |
| `silverBadges` | integer | Silver badge count. Present on: users. |
| `site` | string | Stack Exchange site key the row came from. |
| `tagName` | string | The tag itself, as Stack Overflow spells it. Present on: tags. |
| `tags` | list | Tags on the question, reusable as the Tagged with all of input. Present on: questions. |
| `title` | string | Question title, HTML entities decoded. Present on: questions. |
| `userId` | integer | Numeric Stack Exchange user id. Present on: users. |
| `userType` | string | Account type, e.g. registered or moderator. Present on: users. |
| `viewCount` | integer | How many times the question has been viewed. Present on: questions. |
| `websiteUrl` | string | Self-reported website on the profile. Present on: users. |

5 named dataset views ship with it: **Questions**, **Answers**, **Tags**, **Users**, **Unanswered & gaps**. They drive the Output tab in Console and the Output block on the Actor's `.md` page.

### FAQ

#### How do I scrape Stack Overflow questions?

Run this actor with no input and it returns the most recently active questions. Everything comes
from `api.stackexchange.com`, the official Stack Exchange API.

#### Do I need an API key or a login?

Not for normal runs. Stack Exchange allows 300 requests per day per IP anonymously, and this
actor pulls 100 items per request. For very large or frequent jobs, register a free key at
stackapps.com and paste it into the optional **Stack Apps API key** field to raise the limit to
10,000 requests per day.

#### How do I get all questions for a tag?

Put the tag into **Tagged with all of** - for example `python` - and set **Max items**. Add more
tags to require all of them at once, which is how Stack Overflow's own tag intersection works.

#### How do I find unanswered questions?

Turn on **Unanswered only**. You get questions with no answers and nothing accepted, which is the
fastest way to find gaps in a library's documentation or support coverage.

#### Can I get the answers as well as the questions?

Yes. Turn on **Include answers with each question** and each row gains an `answers` array,
highest score first, with author, accepted flag and - if body text is on - the answer text. It
costs one extra API request per 100 questions.

#### How do I get the highest-voted questions?

Set **Sort by** to "Votes / score" and optionally a **Minimum score**. The score floor only works
with that sort, which is how the API applies it.

#### Can I scrape other Stack Exchange sites?

Yes. Change **Stack Exchange site** to any site key - `serverfault`, `superuser`, `askubuntu`,
`math`, `unix`, `dba` and so on. Every filter works the same way.

#### How many items can one run return?

Up to 2,500 for a single query, which is the API's own paging ceiling. Split larger jobs into date
windows and run each one.

#### What licence does the content carry?

Every question and answer row includes `contentLicense` - normally CC BY-SA. Attribution
requirements apply when you republish the text.

#### Can an AI agent call this actor?

Yes. Every input and output field carries a title, description and example, and every row is
addressed by its Stack Exchange `itemId`, so an agent can fill the input and chain the output
without extra prompting.

***

Unofficial - not affiliated with Stack Overflow. Collects public data only. reapx.
Contact reapxdev@proton.me.

### The full published archive

Every run of this Actor is published as a permanent, citable page on **[reapx.dev](https://reapx.dev/data/stackoverflow-scraper/)** —
one page per entity, built from the real rows of real runs, with the run IDs it came from named
on the page.

- **[stackoverflow scraper archive](https://reapx.dev/data/stackoverflow-scraper/)** — every entity this Actor has observed
- **[All reapx datasets](https://reapx.dev/data/)** — 20 sources, tens of thousands of pages
- **[llms.txt](https://reapx.dev/llms.txt)** · **[feed.json](https://reapx.dev/feed.json)** ·
  **[feed.xml](https://reapx.dev/feed.xml)** — the machine-readable index, for agents

Each archive page carries Dataset JSON-LD, a canonical URL and the identifiers used, so an agent
can resolve an entity without running anything. Nothing on those pages is estimated or modelled.

# Actor input Schema

## `dataset` (type: `string`):

Which Stack Exchange collection to read. Each returns a different kind of row, keyed by its own Stack Exchange identifier.

## `site` (type: `string`):

Which site to read. Defaults to Stack Overflow; any Stack Exchange site key works, e.g. serverfault, superuser, askubuntu, math, unix, dba.

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

Hard cap on how many rows the run returns. This is also your cost cap: you are charged once per item returned. The API serves at most 2,500 items for one query.

## `sortBy` (type: `string`):

Ordering. Questions accept activity, votes, creation and relevance; answers accept activity, votes and creation; tags accept popular, activity and name; users accept reputation, creation, name and modified. An unsupported value falls back to the dataset's default.

## `order` (type: `string`):

Descending gives the highest or newest first.

## `query` (type: `string`):

Free-text search across question titles and bodies. Pair it with sort "Best match" for relevance ranking.

## `titleContains` (type: `string`):

Match text in the question title only, which is far more precise than a body search.

## `tagged` (type: `array`):

Only questions carrying every one of these tags. Use the exact Stack Overflow tag spelling, e.g. python, pandas, machine-learning.

## `notTagged` (type: `array`):

Exclude questions carrying any of these tags.

## `minScore` (type: `integer`):

Only items at or above this vote score. Requires sort "Votes / score", which is how the API applies a floor.

## `minAnswers` (type: `integer`):

Only questions with at least this many answers.

## `acceptedOnly` (type: `boolean`):

Only questions where the asker accepted an answer - the solved set.

## `unansweredOnly` (type: `boolean`):

Only questions with no answers and nothing accepted - where the gaps are.

## `closedOnly` (type: `boolean`):

Only questions the community has closed.

## `user` (type: `integer`):

Only questions asked by this Stack Exchange user ID.

## `tagNameContains` (type: `string`):

Only tags whose name contains this text. Applies when scraping tags.

## `userNameContains` (type: `string`):

Only users whose display name contains this text. Applies when scraping users.

## `minReputation` (type: `integer`):

Only users at or above this reputation. Requires sort "Reputation".

## `lastNDays` (type: `integer`):

Rolling window on the creation date. Ignored if you set an explicit "From date".

## `dateFrom` (type: `string`):

Earliest creation date, YYYY-MM-DD.

## `dateTo` (type: `string`):

Latest creation date, YYYY-MM-DD.

## `includeBody` (type: `boolean`):

Add the question or answer body as both plain text and original HTML. Off by default to keep rows small.

## `includeAnswers` (type: `boolean`):

Attach every answer to each question row, highest score first, with author and accepted flag. Applies when scraping questions. Costs one extra request per 100 questions.

## `apiKey` (type: `string`):

Optional and free from stackapps.com/apps/oauth/register. Without one, Stack Exchange allows 300 requests per day per IP; with one, 10,000. Only needed for very large or frequent runs.

## Actor input object example

```json
{
  "dataset": "questions",
  "site": "serverfault",
  "maxItems": 100,
  "sortBy": "votes",
  "order": "desc",
  "query": "async await deadlock",
  "titleContains": "memory leak",
  "tagged": [
    "python",
    "pandas"
  ],
  "notTagged": [
    "homework"
  ],
  "minScore": 50,
  "minAnswers": 3,
  "acceptedOnly": true,
  "unansweredOnly": true,
  "closedOnly": true,
  "user": 22656,
  "tagNameContains": "script",
  "userNameContains": "jon",
  "minReputation": 100000,
  "lastNDays": 30,
  "dateFrom": "2026-01-01",
  "dateTo": "2026-12-31",
  "includeBody": true,
  "includeAnswers": true,
  "apiKey": "your-stack-apps-key"
}
```

# Actor output Schema

## `questions` (type: `string`):

One row per question with score, views, answers and tags.

## `answers` (type: `string`):

One row per answer with its score, accepted flag and question.

## `tags` (type: `string`):

Tag popularity across the site.

## `users` (type: `string`):

User profiles with reputation and badges.

## `unanswered` (type: `string`):

Questions with no accepted answer - where documentation gaps are.

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

Every record this run produced, with all fields and no view applied. Field-level titles, types, descriptions and examples are declared in the dataset schema.

# 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 = {
    "dataset": "questions",
    "site": "stackoverflow",
    "maxItems": 100,
    "sortBy": "activity",
    "order": "desc"
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/stackoverflow-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 = {
    "dataset": "questions",
    "site": "stackoverflow",
    "maxItems": 100,
    "sortBy": "activity",
    "order": "desc",
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/stackoverflow-scraper").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 '{
  "dataset": "questions",
  "site": "stackoverflow",
  "maxItems": 100,
  "sortBy": "activity",
  "order": "desc"
}' |
apify call reapx/stackoverflow-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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