# NeighborhoodScout Scraper: US Home Values, Crime & Schools (`recordsdata/neighborhoodscout-scraper`) Actor

Scrape NeighborhoodScout area market data for US states, cities, neighborhoods and schools: median home value, rent, appreciation, demographics, crime rates and school ratings. 93 fields, public pages only, no login. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/recordsdata/neighborhoodscout-scraper.md
- **Developed by:** [RecordsData](https://apify.com/recordsdata) (community)
- **Categories:** Real estate, Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $22.00 / 1,000 area records

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?

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

![RecordsData](https://api.apify.com/v2/key-value-stores/AAm3a1h3Z9nYfrvh9/records/banner?v=3)

## 🏘️ NeighborhoodScout Scraper: US Home Values, Crime & Schools

> **NeighborhoodScout Scraper exports the public market data of neighborhoodscout.com as structured rows: median home value, rent, price appreciation, demographics, crime rates and school ratings for US states, cities, neighborhoods and single schools. Export CSV, Excel, JSON or XML with no login, no API key and no proxy.**

The NeighborhoodScout Scraper by RecordsData turns the area pages of NeighborhoodScout into a dataset you can sort, filter and join. On 2026-10-26 the site's sitemap listed 51 states (District of Columbia included), 18,593 city places, 73,599 neighborhoods and 99,425 schools. A city row carries up to 63 columns, for example Worcester, MA: median home value $448,579, average rent $2,784, 5-year appreciation 53.72 percent, crime index 13, violent crime rate 5.87 per 1,000 residents. The dataset has 93 columns across the four record types. Every row is a place, not a property for sale.

### 🎯 What does the NeighborhoodScout scraper do?

- Scrapes **state, city, neighborhood and school pages** of neighborhoodscout.com and labels each row with `recordType`.
- Returns **real estate figures**: median home value, average market rent, housing units, homeownership and vacancy rate, share of single-family homes, share of homes built before 1940, and the mix of home values, ages, types and sizes.
- Returns **price appreciation** over the latest quarter, 1, 5 and 10 years and since 2000, with the site's 1 to 10 scores against the state and the nation.
- Adds **demographics**: population, median household and per capita income, poverty, education, jobs by industry, race and ethnicity, ancestry, languages, age groups and foreign-born share.
- Adds **crime**: the 1 to 100 crime index, violent and property crime counts and rates, state and national comparison, crimes per square mile, the odds of becoming a victim and the breakdown by offense.
- Adds **schools**: public school districts with ratings, the first schools of a city, and one full profile per school: address, grades, type, enrollment, teachers, students per teacher, rating against the state and the nation, enrollment by grade and group, test scores.
- Reads places from **URLs, "City, ST" names, state codes or the whole country**. A state or a city expands into its cities, neighborhoods or schools using the site's sitemap.
- Filters by **name keyword, median home value range, minimum population and minimum school rating**.

### 📊 NeighborhoodScout data: which fields do you get?

Every row is one place. A missing value means the site does not state it: the key is left out and never filled with a placeholder.

| Field | Columns per row | Main fields |
|---|---|---|
| `city`, `state` rows | up to 63 (state rows 52) | `medianHomeValue`, `averageRent`, `population`, `homeownershipRate`, `vacancyRate`, `appreciation1YearPct`, `appreciation5YearPct`, `crimeIndex`, `violentCrimeRate`, `propertyCrimeRate`, `medianHouseholdIncome`, `povertyRate`, `collegeGraduatePct`, `employmentIndustries`, `raceEthnicity`, `schoolDistricts`, `schools` |
| `neighborhood` rows | 25 to 26 | `name`, `zipCode`, `medianHomeValue`, `averageRent`, `vacancyRate`, `settingType`, `homeValuePercentileState`, `homeValuePercentileUs`, `incomePercentileUs`, `childPovertyRate`, `ancestry`, `languages`, `commuteDriveAlonePct` |
| `school` rows | 29 to 30 | `name`, `address`, `district`, `schoolType`, `gradesServed`, `studentsEnrolled`, `classroomTeachers`, `studentsPerTeacher`, `qualityVsState`, `qualityVsUs`, `enrollmentByGrade`, `enrollmentByGroup`, `testScores` |
| All rows (common) | 7 | `recordType`, `areaId`, `url`, `stateCode`, `dataUpdatedAt`, `sourceSite`, `scrapedAt` |

Fill rates on 56 live rows from six searches on 2026-10-26: city and state rows carry every column the site shows (offense breakdown on 12 of 13 cities). Neighborhood rows: price, vacancy, income rank and child poverty 100 percent, rent 95 percent, homes built before 1940 only 27 percent. School rows: address, enrollment and teachers 100 percent, ratings and test scores 94 percent.

### 🧾 NeighborhoodScout example: what does a real result look like?

A real city row (default settings, 2026-10-26; each list is shortened to two items):

```json
{
  "recordType": "city",
  "areaId": "ma/worcester",
  "url": "https://www.neighborhoodscout.com/ma/worcester",
  "name": "Worcester",
  "state": "Massachusetts",
  "stateCode": "MA",
  "zipCodes": ["01602", "01603"],
  "medianHomeValue": 448579,
  "averageRent": 2784,
  "housingUnits": 79501,
  "population": 211286,
  "homeValueLevelState": "Very Low",
  "homeValueLevelNation": "High",
  "homeownershipRate": 39.7,
  "vacancyRate": 7.4,
  "appreciation1YearPct": 2.68,
  "appreciation5YearPct": 53.72,
  "appreciation10YearPct": 114,
  "appreciationRates": [{ "period": "Last 12 Months", "from": "2024 Q4", "to": "2025 Q4", "totalPercent": 2.68, "annualPercent": 2.68, "scoreVsState": 3, "scoreVsUs": 4 }],
  "povertyRate": 19.6,
  "medianHouseholdIncome": 70102,
  "perCapitaIncome": 37221,
  "collegeGraduatePct": 35.2,
  "raceEthnicity": [{ "group": "White", "percent": 48.6 }, { "group": "Hispanic or Latino (Of Any Race)", "percent": 25.3 }],
  "crimeIndex": 13,
  "violentCrimeCount": 1240,
  "propertyCrimeCount": 3678,
  "violentCrimeRate": 5.87,
  "propertyCrimeRate": 17.41,
  "violentCrimeOneIn": 170,
  "schoolDistricts": [{ "name": "Worcester", "qualityVsState": 2, "qualityVsUs": 4 }],
  "schools": [{ "schoolId": "251323002197", "name": "Belmont Street Community School", "district": "Worcester", "address": "170 Belmont Street", "gradesServed": "PK-6" }],
  "dataUpdatedAt": "2026-03-31T14:42:18.000Z",
  "sourceSite": "neighborhoodscout.com",
  "scrapedAt": "2026-10-27T04:33:42.521Z"
}
```

How to read the numbers: prices and income are US dollars, rates are percent, and crime rates are per 1,000 residents. `crimeIndex` runs from 1 to 100 and **100 is the safest** (Worcester at 13 is safer than 13 percent of US cities). The `...Percentile...` fields on neighborhood rows are the share of neighborhoods with a lower value: `homeValuePercentileUs` 48 means the median home value is higher than in 48 percent of US neighborhoods. `studentsPerTeacher` is computed as `studentsEnrolled` divided by `classroomTeachers`. Dates are ISO 8601 in UTC.

### 🚀 How to scrape NeighborhoodScout in 4 steps

1. Create a free account at [console.apify.com](https://console.apify.com) and open this Actor.
2. Type places as `Worcester, MA`, a state code such as `TX`, or paste neighborhoodscout.com URLs of a state, city, neighborhood or school. Leave places empty to walk the whole country in alphabetical order.
3. Pick the record types (state, city, neighborhood, school), switch the demographics, crime and school modules on or off, set **Max Items** and press Start. A 3-city run finishes in about 7 seconds.
4. Download the dataset as CSV, Excel, JSON or XML, or read it through the Apify API.

To list every neighborhood of a city, give the city and choose the `neighborhood` record type. Austin, TX has 258 neighborhoods and Houston, TX has 777 schools.

### NeighborhoodScout scraper input

The form has 18 fields. The main ones:

| Field | Type | Default | Meaning |
|---|---|---|---|
| `locations` | array | empty | Places such as `Worcester, MA` or a state code like `TX`; empty means the whole country |
| `startUrls` | array | empty | neighborhoodscout.com addresses of a state, city, neighborhood or school |
| `states` | array | empty | Whole states expanded through the sitemap |
| `recordTypes` | array | `["city"]` | `state`, `city`, `neighborhood`, `school` |
| `maxItems` | integer | 10 in the prefill | Maximum rows (free plans: 10) |
| `includeDemographics`, `includeCrime`, `includeSchools` | boolean | `true`, `true`, `false` | Modules added to city and state rows |
| `nameKeyword` | string | empty | Name contains |
| `minMedianHomeValue`, `maxMedianHomeValue` | integer | none | Median home value range in USD |
| `minPopulation`, `minSchoolRating` | integer | none | Population and school rating 1 to 10 |
| `includeContactDetails` | boolean | `false` | Public school phone numbers |
| `onlyNew`, `stateKey`, `resetSeen` | boolean, string | `false` | Monitor mode controls |
| `maxRunSeconds` | integer | 3600 | Run time limit |

A minimal example run:

```json
{
  "locations": ["Worcester, MA", "Austin, TX"],
  "recordTypes": ["city"],
  "includeDemographics": true,
  "includeCrime": true,
  "maxItems": 50
}
```

### 🔒 What is public on NeighborhoodScout and what is not?

NeighborhoodScout sells full neighborhood reports, so the Actor only reads what any visitor sees without an account:

- **Public and returned:** state and city pages (real estate, demographics, crime, schools), the narrative overview of each neighborhood, and every school profile.
- **Behind the subscription and not returned:** the detailed real estate, crime and demographics tabs of single neighborhoods. A neighborhood row therefore holds the headline numbers from its public overview (value, rent, vacancy, income rank, child poverty, ancestry, language, commute), not a full report.
- **Never requested:** zip code pages, because the site's robots.txt excludes them. Zip codes still appear as `zipCodes` on city rows and `zipCode` on neighborhood and school rows.
- **City school lists** show the first 10 schools of a city. Choose the `school` record type to get every school with a full profile. State pages carry no school data.

### 📈 How does NeighborhoodScout Scraper compare with alternatives? (read on 2026-10-29)

No Actor in the Apify Store targets neighborhoodscout.com: a search for "NeighborhoodScout" returned no dedicated rival, so there is no field-by-field comparison to make. The nearest references are other neighborhood-data sources, shown only as a price and coverage guide (their prices were read from the Store API on 2026-10-27).

| Option | Price per 1,000 results | Data |
|---|---|---|
| RecordsData NeighborhoodScout Scraper | $22.00 area rows, $12.57 school rows, add-ons $9.43 | 93 columns, four record types, whole country through the sitemap, only-new mode |
| lexis-solutions AreaVibes scraper | $4.90 | areavibes.com pages, 16 fields, no NeighborhoodScout figures |
| lexis-solutions CrimeGrade scraper | $10.00 | crimegrade.org crime grades, 8 fields |
| parseforge Niche places-to-live scraper | $12.00 per place plus $4.00 per section | niche.com, 37 fields |
| Manual browsing of neighborhoodscout.com | Staff time | One place per page, no export |

The 1 to 10 appreciation scores, the home value percentiles and the 1 to 100 crime index come from NeighborhoodScout only, so the others cannot replace it. They are cheaper per row because they carry fewer fields.

### How much does the NeighborhoodScout Scraper cost?

Pay per event, no monthly fee. Rates are in USD per result on the Free tier. Five events exist:

| Event | Charged for | Rate per result | Per 1,000 |
|---|---|---|---|
| `area-record` | One state, city or neighborhood row | $0.022 | $22.00 |
| `school-record` | One school profile | $0.01257 | $12.57 |
| `demographics-data` | Add-on on a city or state row when the demographics module returns data | $0.00943 | $9.43 |
| `crime-data` | Add-on when the crime module returns data | $0.00943 | $9.43 |
| `school-district-data` | Add-on when the school districts module returns data | $0.00943 | $9.43 |

Worked examples per 1,000 results: city rows with the default modules (demographics and crime) cost $22.00 + $9.43 + $9.43 = $40.86; adding school districts brings it to $50.29; city rows with every module off cost $22.00; school profiles cost $12.57. Error rows, empty searches and rows skipped by monitoring are charged $0.

### 💼 NeighborhoodScout scraper use cases

- **Real estate investors**: rank cities by `appreciation5YearPct`, `homeownershipRate` and `vacancyRate`, and screen markets by `medianHomeValue` against `averageRent`.
- **Market analysts and researchers**: build a state or city panel of prices, income, poverty and crime, and refresh it on a schedule.
- **Relocation and housing platforms**: add neighborhood value ranks, crime index and school ratings to a place page.
- **Education analysts**: collect school ratings, enrollment and test scores.

### Monitor new places and repricing

Switch on **Only new rows (monitor mode)** and schedule the Actor. It remembers the places already delivered in a store of your own account and returns only unseen ones, so a repeat run with nothing new costs nothing.

### 🔌 NeighborhoodScout scraper API, MCP and integrations

Run it from any language through the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/RecordsData~neighborhoodscout-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"locations":["Worcester, MA","Austin, TX"],"recordTypes":["city"],"includeCrime":true,"maxItems":50}'
```

Connect it to Make, Zapier or n8n with the standard Apify integrations.

#### NeighborhoodScout scraper MCP for AI agents

An AI agent (Claude, Cursor, or any MCP client) can call the Actor through the Apify MCP server at `https://mcp.apify.com?tools=RecordsData/neighborhoodscout-scraper`.

Example agent prompt: "Which Massachusetts cities have a median home value above 900,000 dollars? Return the first 10 with their crime index."

### ⚖️ Is it legal to scrape NeighborhoodScout? Limits and responsible use

The Actor reads only pages that NeighborhoodScout shows to every visitor, without logging in and without a key, at about two requests per second. It skips the paths that the site's robots.txt closes and never touches the paid reports. It returns facts about places, not about private persons. School phone numbers are public institution numbers and are only output when you switch on **Include school phone numbers**. Check the site terms before republishing commercially. You are responsible for deciding that your use of the data fits those terms and the law that applies to you.

### Frequently Asked Questions

#### How do I scrape NeighborhoodScout?

Open the Actor, type places such as `Worcester, MA` or a state code, pick the record types, set **Max Items** and press Start. When the run ends, download one row per place as CSV, Excel, JSON or XML, or read it through the Apify API. No proxy, login or key is needed, and a run of 3 cities finishes in about 7 seconds.

#### Is it legal to scrape NeighborhoodScout?

The Actor reads only pages shown to every visitor, without logging in, at about two requests per second, and skips the paths that robots.txt closes. Check the site terms before republishing commercially. You decide whether your use complies where you work, and you can ask the site owner for permission when unsure.

#### How much does a run cost?

Billing is per event: $0.022 per state, city or neighborhood row, $0.01257 per school profile, and $0.00943 for each add-on module that returns data (demographics, crime, school districts). A default city row with demographics and crime costs $0.04086, so 1,000 of them cost $40.86. Error rows and empty searches are never charged.

#### Does it need a proxy or an account?

No. It reads the public pages with plain requests, three at a time and about two per second. Test runs from the Apify cloud made 12 requests with none refused, retried or throttled. It needs no login and no API key, which keeps a 3-result run near 7 seconds.

#### How many places does NeighborhoodScout cover?

On 2026-10-26 the sitemap listed 51 states, 18,593 city places, 73,599 neighborhoods and 99,425 schools. Not every city place carries real estate figures (Adak, AK is one): a place without figures is skipped without a charge when found through the sitemap, and returns one free error row when you name it yourself.

#### What does the crime index mean?

`crimeIndex` is the site's 1 to 100 score where 100 is the safest. A score of 13 means the city is safer than 13 percent of US cities. The counts and rates next to it, such as `violentCrimeRate` per 1,000 residents, come from the same page, so you can compare cities of different size on equal terms.

#### Why do neighborhood rows have fewer fields than city rows?

The detailed neighborhood tabs (real estate, crime, demographics) are part of NeighborhoodScout's paid report, so the Actor never fetches them. A neighborhood row holds the headline numbers from the public overview: 25 to 26 columns against up to 63 for a city. City and state rows are complete.

#### How do I get only the new places every day?

Turn on **Only new rows** and schedule the Actor with the Apify scheduler. It remembers the places already delivered for the same search in a store of your own account and skips them without charge. Use **Forget previously seen rows** to start over, or a **Monitor name** to keep several searches apart.

### Support

Questions, a missing field or a feature request: write to contact.punkrecordsdata@gmail.com or open the Issues tab of the Actor.

> **⚠️ Disclaimer:** independent tool, not affiliated with NeighborhoodScout, Location, Inc. or Cotality; only publicly available data.

Last updated: 2026-10-29

# Actor input Schema

## `locations` (type: `array`):

One place per line, for example "Worcester, MA" (city), "Shrewsbury Street, Worcester, MA" (neighborhood) or "MA" (state). Capitals and accents do not matter. A place the site does not have returns one free error row.

## `startUrls` (type: `array`):

Pages you already have, for example neighborhoodscout.com/ma/worcester or neighborhoodscout.com/ma/worcester/shrewsbury-street. A neighborhood or school link returns that one row; a state or city link follows Record types below. Zip code pages are not supported.

## `states` (type: `array`):

Pick states to scan completely, for example Massachusetts. You get every city, neighborhood or school of the state, depending on Record types below. Leave empty if you named places above.

## `recordTypes` (type: `array`):

What to return for the states and cities you scan. City: home values, rent, appreciation, ownership. State: same figures per state. Neighborhood: value, rent, vacancy, income. School: rating, enrollment, test scores. Places you name directly are always returned. Example: City.

## `includeDemographics` (type: `boolean`):

Adds population, income, poverty, education, jobs, race, ancestry, languages and age mix to state and city rows. Billed as the demographics-data event per row.

## `includeCrime` (type: `boolean`):

Adds the 1 to 100 crime index, violent and property crime rates per 1,000 residents and comparison with the state and nation to state and city rows. Billed as the crime-data event per row.

## `includeSchools` (type: `boolean`):

Adds each city's school districts with a 1 to 10 quality score and the first schools listed. Cities only. Billed as the school-district-data event per row. For every school of a city use Record types: School.

## `includeContactDetails` (type: `boolean`):

Adds the public phone a school publishes on its profile. Only affects School rows. Off by default.

## `nameKeyword` (type: `string`):

Keep only cities and neighborhoods whose name contains this text, for example "park" or "heights". Applies to scans of whole states or cities; places you name directly are never filtered.

## `minMedianHomeValue` (type: `integer`):

Only areas with a median home value of at least this many US dollars, for example 250000.

## `maxMedianHomeValue` (type: `integer`):

Only areas with a median home value of at most this many US dollars, for example 600000.

## `minPopulation` (type: `integer`):

Only states and cities with at least this many residents, for example 50000. Neighborhoods are not filtered by it.

## `minSchoolRating` (type: `integer`):

Only schools rated at least this value against their state (10 is best), for example 7. School rows only.

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

Maximum rows delivered and charged, for example 10. Free Apify plans are capped at 10 rows per run (preview); paid plans can go up to 1,000,000.

## `maxRunSeconds` (type: `integer`):

Stop after this many seconds and return what was gathered, so a wide scan never runs unbounded. The site is read at about two pages per second.

## `onlyNew` (type: `boolean`):

Skip places this same search already returned in an earlier run and do not charge for them. Max rows then means N new rows. State is kept in a key-value store named neighborhoodscout-seen in your account.

## `stateKey` (type: `string`):

Optional name to run two monitors with the same settings, for example "texas-cities". Leave empty to derive it from your places and filters.

## `resetSeen` (type: `boolean`):

Clear the saved list for this monitor before the run, so every row counts as new again.

## Actor input object example

```json
{
  "locations": [
    "Worcester, MA",
    "Austin, TX",
    "Abbeville, AL"
  ],
  "startUrls": [],
  "states": [],
  "recordTypes": [
    "city"
  ],
  "includeDemographics": true,
  "includeCrime": true,
  "includeSchools": false,
  "includeContactDetails": false,
  "nameKeyword": "",
  "maxItems": 10,
  "maxRunSeconds": 3600,
  "onlyNew": false,
  "stateKey": "",
  "resetSeen": false
}
```

# Actor output Schema

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

Key fields per row

## `fullData` (type: `string`):

Complete dataset with all fields

# 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 = {
    "locations": [
        "Worcester, MA",
        "Austin, TX",
        "Abbeville, AL"
    ],
    "startUrls": [],
    "states": [],
    "recordTypes": [
        "city"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("recordsdata/neighborhoodscout-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 = {
    "locations": [
        "Worcester, MA",
        "Austin, TX",
        "Abbeville, AL",
    ],
    "startUrls": [],
    "states": [],
    "recordTypes": ["city"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("recordsdata/neighborhoodscout-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 '{
  "locations": [
    "Worcester, MA",
    "Austin, TX",
    "Abbeville, AL"
  ],
  "startUrls": [],
  "states": [],
  "recordTypes": [
    "city"
  ],
  "maxItems": 10
}' |
apify call recordsdata/neighborhoodscout-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordsdata/neighborhoodscout-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/hm11PcUpDxZbogPn3/builds/9ieO7GuTqJMW1xAsx/openapi.json
