# Nextdoor Business Scraper (`maximedupre/nextdoor`) Actor

Collect public Nextdoor business profiles and city-page data. Search one area with a business category or keyword, or submit public page URLs, then save structured details, links, and quality status.

- **URL**: https://apify.com/maximedupre/nextdoor.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.10 / 1,000 business profiles

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

### 🏘️ Turn public Nextdoor pages into local data

For local researchers, analysts, and data teams, Nextdoor Business Scraper collects public Nextdoor business and city pages without source credentials. It saves structured business details, city metadata, community links, quality status, and source URLs so you can review local information in one dataset.

Use it to:

- Collect public city-page details with **[Nextdoor City Scraper](https://apify.com/maximedupre/nextdoor/examples/nextdoor-city-scraper)**.
- Find businesses in one area by category or keyword with **[Nextdoor Business Search](https://apify.com/maximedupre/nextdoor/examples/nextdoor-business-search)**.
- Build a structured directory from public business pages with **[Nextdoor Business Directory](https://apify.com/maximedupre/nextdoor/examples/nextdoor-business-directory)**.
- Turn a known public business page into structured fields with **[Nextdoor Business Scraper](https://apify.com/maximedupre/nextdoor/examples/nextdoor-business-scraper)**.
- Save source-linked rows from public Nextdoor pages with **[Nextdoor Scraper](https://apify.com/maximedupre/nextdoor/examples/nextdoor-scraper)**.

#### 📍 Business and city data in each row

The dataset has one row for each first eligible business or city page result. It keeps the source URL and a quality status. Business rows can include identity, public contact details, categories, a neighbor summary, location, hours, images, claim status, and topics. City rows can include place details, resident counts, statistics, FAQs, neighborhoods, directories, groups, resources, and linked public pages when selected. Fields are omitted when the source does not show them.

When a business is found through discovery, `discoveredFrom` keeps the one submitted URL, keyword, or category that first led to the saved row.

#### ▶️ Run a public page collection

**Business pages**

Submit one or more public Nextdoor business page URLs for known businesses.

**Business search**

Enter one area and one business category or keyword to find public businesses.

**City pages**

Submit one or more public Nextdoor city page URLs. Turn on Follow linked public pages to follow public neighborhood, business-directory, and resource pages linked from each city page. This can add results and may take longer.

Only fields for the selected target are used. The Actor reads publicly reachable pages and does not need Nextdoor credentials. An inaccessible page does not create a row. A saved page can have a `qualityStatus` of `standard`, `partial`, or `restricted`.

For a shorter run, set Maximum items to a positive number. Leave it empty to collect all available results until the source is exhausted.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Required. Choose `businessPages` for direct business URLs, `businessDiscovery` for one area and category or keyword, or `cityPages` for city URLs. Only fields for the selected target are used. |
| `businessPageUrls` | array of objects | Public Nextdoor business page URLs for `businessPages`. Add one or more objects with a `url` field. |
| `businessPageUrls[].url` | string | One public Nextdoor business page URL. |
| `businessDiscoveryArea` | string | One city, town, or neighborhood for `businessDiscovery`. |
| `businessDiscoveryQuery` | string | One business category or keyword for the selected area, such as `plumber` or `coffee shop`. |
| `cityPageUrls` | array of objects | Public Nextdoor city page URLs for `cityPages`. Add one or more objects with a `url` field. |
| `cityPageUrls[].url` | string | One public Nextdoor city page URL. |
| `followLinkedPages` | boolean | For `cityPages`, follow public neighborhood, business-directory, and resource pages linked from each city page. This can add results and may take longer. |
| `businessRecordFilter` | string | Optional keyword or category filter for business records from any target. It runs after the pages are collected. |
| `maxItems` | integer | Optional limit for a run that can return many items. Leave it empty to collect all available results until the source is exhausted. |

**Successful input**

This example is copied from a successful current-beta run.

```json
{
  "target": "businessPages",
  "businessPageUrls": [
    {
      "url": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/"
    }
  ],
  "followLinkedPages": false,
  "maxItems": 1
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Link to public business and city data saved by this run. |

**Business result fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | `business` for a business row. |
| `sourceUrl` | string | Public Nextdoor page for the result. |
| `qualityStatus` | string | Quality of the saved public result: `standard`, `partial`, or `restricted`. |
| `discoveredFrom` | string | The one submitted URL, keyword, or category that first led to this result through discovery. This field is optional. |
| `business` | object | Public details for the business. |
| `business.businessId` | string | Stable Nextdoor identifier for the business when shown. |
| `business.name` | string | Public business name. |
| `business.phone` | string | Public business phone number when shown. |
| `business.categories` | array of strings | Public business categories shown by Nextdoor. |
| `business.neighborSummary` | string | Nextdoor's public summary of what neighbors say about the business. |
| `business.email` | string | Public business email address when shown. |
| `business.website` | string | Public business website when shown. |
| `business.address` | string | Public business address when shown. |
| `business.location` | object | Public map coordinates when shown. |
| `business.location.latitude` | number | Public latitude of the business. |
| `business.location.longitude` | number | Public longitude of the business. |
| `business.hours` | array of objects | Public opening-hours entries when shown. |
| `business.hours[].day` | string | Day covered by the opening-hours entry. |
| `business.hours[].openTime` | string | Opening time for the day when shown. |
| `business.hours[].closeTime` | string | Closing time for the day when shown. |
| `business.hours[].isClosed` | boolean | Whether the business is closed on the day. |
| `business.imageUrls` | array of strings | Public image URLs shown on the business profile. |
| `business.isClaimed` | boolean | Whether the business profile is claimed by its owner when shown. |
| `business.topics` | array of strings | Public topics linked to the business profile. |

**Business result example**

This is one complete public business row from a successful current-beta run.

```json
{
  "resultType": "business",
  "sourceUrl": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/",
  "qualityStatus": "standard",
  "business": {
    "name": "Near & Best Plumber",
    "businessId": "business_51653264",
    "phone": "+13102548035",
    "categories": [
      "Water heater service",
      "Plumber",
      "Plumbing fixture",
      "Drainage service"
    ],
    "topics": [
      "Water heater service",
      "Plumber",
      "Plumbing fixture",
      "Drainage service"
    ],
    "neighborSummary": "Near & Best Plumber emerges as a trusted choice for those actively seeking a recommended professional for plumbing needs. Within discussions focused on finding “someone you know and trust,” this business stands out as a reliable option for drainage service, plumbing fixtures, and water heater service. Its positioning reflects the kind of confidence people look for when asking their networks for a dependable plumber. Near & Best Plumber fits the profile of a go-to resource for essential home services, aligning with the growing demand for trustworthy, high-quality plumbing expertise.",
    "imageUrls": [
      "https://us1-photo.nextdoor.com/business_logo/09/6b/096beefd4197a329bce4cf34b9991b60.jpg",
      "https://us1-photo.nextdoor.com/business_cover/e8/ea/e8ea23545d5447ef6be7bb38d29ad2a2.jpg"
    ]
  }
}
```

**City result fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | `city` for a city-page row. |
| `sourceUrl` | string | Public Nextdoor page for the result. |
| `qualityStatus` | string | Quality of the saved public result: `standard`, `partial`, or `restricted`. |
| `discoveredFrom` | string | The one submitted URL, keyword, or category that first led to this result when discovery applies. This field is optional. |
| `city` | object | Public details for the city page. |
| `city.name` | string | Public city or local-area name. |
| `city.region` | string | State, province, or other region for the city. |
| `city.country` | string | Country for the city. |
| `city.description` | string | Public description of the city page. |
| `city.residentCount` | integer | Number of residents shown on the city page. |
| `city.statistics` | object | Public city statistics shown on the page. |
| `city.statistics.medianHouseholdIncome` | number | Public median household income. |
| `city.statistics.medianHomeValue` | number | Public median home value. |
| `city.statistics.medianAge` | number | Public median age for residents. |
| `city.statistics.homeOwnershipRate` | number | Public share of homes owned by their residents. |
| `city.statistics.averageCommuteMinutes` | number | Public average commute time in minutes. |
| `city.faqs` | array of objects | Public questions and answers from the city page. |
| `city.faqs[].question` | string | Public question. |
| `city.faqs[].answer` | string | Public answer. |
| `city.faqs[].url` | string | Public page URL for the question and answer when shown. |
| `city.neighborhoods` | array of objects | Public neighborhood links from the city page. |
| `city.neighborhoods[].name` | string | Public neighborhood name. |
| `city.neighborhoods[].url` | string | Public neighborhood page URL. |
| `city.neighborhoods[].description` | string | Public neighborhood description when shown. |
| `city.businessDirectories` | array of objects | Public business-directory links from the city page. |
| `city.businessDirectories[].name` | string | Public business-directory name. |
| `city.businessDirectories[].url` | string | Public business-directory page URL. |
| `city.businessDirectories[].description` | string | Public business-directory description when shown. |
| `city.localGroups` | array of objects | Public local-group summaries and links from the city page. |
| `city.localGroups[].name` | string | Public local-group name. |
| `city.localGroups[].summary` | string | Public summary of the local group when shown. |
| `city.localGroups[].url` | string | Public local-group URL when shown. |
| `city.resources` | array of objects | Public resource links from the city page. |
| `city.resources[].name` | string | Public resource name. |
| `city.resources[].url` | string | Public resource page URL. |
| `city.resources[].description` | string | Public resource description when shown. |
| `city.linkedPages` | array of objects | Public pages followed from the city page when Follow linked public pages is on. |
| `city.linkedPages[].pageType` | string | Page type: `neighborhood`, `businessDirectory`, `localGroup`, or `resource`. |
| `city.linkedPages[].title` | string | Public title of the followed page when shown. |
| `city.linkedPages[].url` | string | Public URL of the followed page. |
| `city.linkedPages[].description` | string | Public description of the followed page when shown. |
| `city.linkedPages[].summary` | string | Public summary found on the followed page when shown. |

**City result example**

This shortened public city row is from a successful current-beta run. The `"..."` values mark omitted public arrays or entries from the same row.

```json
{
  "resultType": "city",
  "sourceUrl": "https://nextdoor.com/city/biscayne-park--fl/",
  "qualityStatus": "standard",
  "city": {
    "name": "Biscayne Park",
    "region": "Florida",
    "country": "US",
    "description": "Biscayne Park, FL is a peaceful, tree-lined town known for its friendly community. It's a safe, family-friendly place where Nextdoor Neighbors appreciate the beautiful surroundings and abundant birdlife. It's also notably dog-friendly, making it a haven for pet owners.",
    "residentCount": 3878,
    "faqs": [
      {
        "question": "What do people in Biscayne Park like to do for fun?",
        "answer": "Nextdoor Neighbors in Biscayne Park rate their top interests as yoga, home improvement & diy, walking, travel, gardening & landscape, biking & cycling, dogs, volunteering, cooking, and seeing live music."
      },
      "..."
    ],
    "neighborhoods": [
      {
        "name": "Biscayne Park",
        "url": "https://nextdoor.com/neighborhood/biscaynepark--biscayne-park--fl/"
      }
    ],
    "localGroups": "...",
    "resources": [
      {
        "name": "Things to do with kids in Biscayne Park",
        "url": "https://nextdoor.com/resources/things-to-do-with-kids/biscayne-park--fl/"
      }
    ],
    "linkedPages": "..."
  }
}
```

#### 💳 Pricing

**Events**

Pay-per-event charges apply to saved public rows. The current events are:

| Buyer-facing event | When it is charged | Price |
| --- | --- | --- |
| Business profile | One public business profile saved to the dataset. | $0.0081 |
| City metadata | One public city page's metadata saved to the dataset. | $0.0081 |

Each event is counted only when the matching public row is saved. Setup work and no-result work do not create either event.

#### 🔌 Integrations

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

**Dataset access**

Use the output dataset link to inspect or export saved rows, or read the dataset through the Apify API.

#### ❓ FAQ

##### What happens when a public page is not accessible?

An inaccessible page does not create a row. A saved page can have `qualityStatus` set to `standard`, `partial`, or `restricted`, so check that field before using it.

##### Can I follow pages linked from a city page?

Yes. Turn on `followLinkedPages` for a city-page run. Public neighborhood, business-directory, and resource pages linked from each city page can appear in `city.linkedPages`. This can add results and may take longer.

##### How do I choose a target?

Use Business pages for known public business URLs, Business search for one area and one business category or keyword, and City pages for public city URLs. Only fields for the selected target are used.

##### Can I collect all available results?

Yes. Leave `maxItems` empty to collect all available results until the source is exhausted. Set a positive value when you want the run to stop sooner.

##### What if the same business is found more than once?

The first eligible occurrence of the same source business is saved. Later matches from another submitted URL, keyword, or category are ignored. `discoveredFrom` describes only the first saved match.

##### Which business and city fields are optional?

Nextdoor may not show every field. Phone, email, website, address, location, hours, images, claim status, city statistics, and page links appear only when the public source exposes them. The Actor does not invent missing values.

##### Does it need a Nextdoor login or source API key?

No. It reads publicly reachable Nextdoor pages without buyer-supplied source credentials. Private or login-walled content is outside the Actor's scope.

##### Does it collect private posts, comments, or recommendations?

No. This Actor is for public business and city pages. Private or login-walled content such as neighborhood feeds, posts, events, comments, and individual recommendations or reviews is outside its scope.

##### Can one run mix several independent searches?

Choose one target per run. Business search accepts one area and one category or keyword. Run it again for another independent search.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~nextdoor/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Google Maps List Scraper: 30+ Fields Per Place](https://apify.com/maximedupre/google-maps-shared-list-scraper): Compare public place addresses, categories, ratings, and source links with Nextdoor business rows.
- [Yellow Pages Scraper](https://apify.com/maximedupre/yellowpages-scraper): Add public US directory listings, contacts, addresses, ratings, and hours to local business research.
- [Business Address Scraper](https://apify.com/maximedupre/business-address-scraper): Check physical addresses shown on a business website and keep source evidence.
- [Facebook Reviews Scraper](https://apify.com/maximedupre/facebook-reviews-scraper): Compare public Facebook Page recommendations with Nextdoor neighbor summaries.
- [Yelp Business Review Scraper](https://apify.com/maximedupre/yelp-business-reviews): Add public Yelp review text and ratings to broader customer feedback research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose direct business pages, business search by area and category or keyword, or city pages.

## `businessPageUrls` (type: `array`):

Add one or more public Nextdoor business page URLs. Use this field when Target is Business pages.

## `businessDiscoveryArea` (type: `string`):

Enter one city, town, or neighborhood when Target is Businesses by area and category or keyword.

## `businessDiscoveryQuery` (type: `string`):

Enter one business category or keyword for the selected area. For example, use plumber or coffee shop.

## `cityPageUrls` (type: `array`):

Add one or more public Nextdoor city page URLs. Use this field when Target is City pages.

## `followLinkedPages` (type: `boolean`):

When enabled, follow public neighborhood, business-directory, and resource pages linked from each city page. This can add results and may take longer.

## `businessRecordFilter` (type: `string`):

Optional keyword or category filter for business records from any target. It runs after the pages are collected.

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

Optional limit for a run that can return many items. Leave it empty to collect all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "businessPages",
  "businessPageUrls": [
    {
      "url": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/"
    }
  ],
  "followLinkedPages": false,
  "maxItems": 1
}
```

# Actor output Schema

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

Link to public business and city data saved by this run.

# 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 = {
    "target": "businessPages",
    "businessPageUrls": [
        {
            "url": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/"
        }
    ],
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/nextdoor").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 = {
    "target": "businessPages",
    "businessPageUrls": [{ "url": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/" }],
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/nextdoor").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 '{
  "target": "businessPages",
  "businessPageUrls": [
    {
      "url": "https://nextdoor.com/pages/near-best-plumber-west-hollywood-ca/"
    }
  ],
  "maxItems": 1
}' |
apify call maximedupre/nextdoor --silent --output-dataset

```

## MCP server setup

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

```

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/eb4C1mknVkF7FwsGl/builds/fIWR2Xju04xrJJaoq/openapi.json
