# Nextdoor Marketplace Scraper (`parseforge/nextdoor-marketplace-scraper`) Actor

Scrape Nextdoor For Sale & Free listings by US city, neighborhood or listing URL: title, price, description, photos, neighborhood, expiry and interest count. No login. Export to CSV, JSON, Excel or XML.

- **URL**: https://apify.com/parseforge/nextdoor-marketplace-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.20 / 1,000 listing scrapeds

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?

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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🏷️ Nextdoor Marketplace Scraper

> 🚀 **Export Nextdoor For Sale & Free listings by city in seconds.** One run on "San Antonio, TX" reached 1,353 neighborhood pages and 661,471 live listings without an account.

The Nextdoor Marketplace Scraper collects the public For Sale & Free listings that Nextdoor shows to visitors: the city page, every neighborhood page Nextdoor lists for that city, each listing's public detail record and the "nearby listings" rail on every listing. Give it a US city as "City, ST", a nextdoor.com city, neighborhood or listing URL, and it returns one clean row per listing. No login, no cookies, no browser.

Every row carries 24 fields: photo, title, URL, id, price (text and number), currency, free and sold flags, the full description, neighborhood, city, state, a combined location, when it was posted, when it expires, the category id, how many neighbors marked themselves interested, every photo, the seller avatar and which surface the listing came from.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Resellers and vintage shops | Spot free and underpriced furniture, tools and electronics by neighborhood the hour they are posted |
| Market and pricing analysts | Track asking prices and free-versus-paid ratios across neighborhoods and cities |
| Real estate and relocation teams | Read neighborhood activity (moving sales, bulk furniture disposals) as a turnover signal |
| Data journalists and researchers | Build hyperlocal secondhand-economy datasets across 51 US states |

### 📋 What the Nextdoor Marketplace Scraper does

> 💡 **Why it matters:** Nextdoor's Marketplace feed sits behind a login, but its SEO pages do not. A city page lists six featured listings and links to every neighborhood in the city; each neighborhood page lists six more; each listing exposes a public detail record and twenty nearby listings. This Actor walks that graph for you.

1. Resolves each city ("Austin, TX") or URL you give it to Nextdoor's public city, neighborhood or listing page.
2. Reads the six listings on the city page, then the six on each of the city's neighborhood pages (858 in Austin, 1,353 in San Antonio), at four pages in parallel.
3. Fetches every listing's public detail record: all photos, expiry, category, interested count, seller neighborhood.
4. When you ask for more than the pages hold, keeps going through each listing's nearby rail (ten free and ten for-sale listings per hop) until Max Items is reached or the area runs dry.
5. Deduplicates on the listing id, filters to free or for-sale if you ask, and pushes one flat row per listing.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
|---|---|
| 🖼 imageUrl | First photo of the listing |
| 📌 title | Listing title |
| 🔗 url | Public listing URL on nextdoor.com |
| 🆔 id | Listing id (UUID) |
| 💵 priceText | Price as shown, e.g. `$200` or `Free` |
| 🔢 price | Price as a number (0 for free items) |
| 💱 currency | ISO currency code, `USD` on the US site |
| 🎁 isFree | `Yes` when the item is given away |
| ✅ isSold | `Yes` when the seller marked it sold |
| 📝 description | Full listing text |
| 🏘 neighborhood | Seller's Nextdoor neighborhood |
| 🏙 city | City |
| 🗺 state | State code |
| 📍 location | `Neighborhood, City, ST` in one column |
| 🕓 postedAgo | Nextdoor's own age label, e.g. `3 hr ago` or `2w+` |
| ⏳ expiresAt | ISO date when the listing expires (30 days after posting) |
| 🏷 categoryId | Nextdoor category id of the listing |
| 👀 interestedCount | Neighbors who tapped "I'm interested" |
| 📷 photoCount | Number of photos |
| 🖼 photos | Every photo URL |
| 👤 sellerAvatarUrl | Seller avatar (Nextdoor shows visitors the default avatar for most sellers) |
| 🧭 source | `city-page`, `neighborhood-page`, `nearby` or `listing-url` |
| 🕒 scrapedAt | ISO timestamp of the row |
| ❌ error | `null` on data rows; the message on error rows |

Three real rows from a run on 2026-09-07:

```json
[
  {
    "imageUrl": "https://us1-photo.nextdoor.com/post_photos/59/65/596525f1b218641d63bff9b4db60a3fb.jpeg",
    "title": "Assorted Garage Sale Items",
    "url": "https://nextdoor.com/for_sale_and_free/a07fa683-f98a-4bac-859f-2e4115927723/",
    "id": "a07fa683-f98a-4bac-859f-2e4115927723",
    "priceText": "Free",
    "price": 0,
    "currency": "USD",
    "isFree": "Yes",
    "isSold": "No",
    "description": "Includes storage drawers, garden tools, and more. Free pls don't message 3101 foster ln",
    "neighborhood": "Allandale North",
    "city": "Austin",
    "state": "TX",
    "location": "Allandale North, Austin, TX",
    "postedAgo": "3 hr ago",
    "expiresAt": "2026-10-07T16:59:20.779Z",
    "categoryId": "104619",
    "interestedCount": 0,
    "photoCount": 1,
    "photos": ["https://us1-photo.nextdoor.com/post_photos/59/65/596525f1b218641d63bff9b4db60a3fb.jpeg"],
    "sellerAvatarUrl": "https://d33c41ebahvfs6.cloudfront.net/static/nextdoorv2/images/avatars/avatar-default-200-e7a671944bf1702b59e5f69d0d97242d.png",
    "source": "city-page",
    "scrapedAt": "2026-09-07T20:27:30.493Z",
    "error": null
  },
  {
    "imageUrl": "https://us1-photo.nextdoor.com/post_photos/63/65/636592e086c35f3ca048c05684643df6.jpeg",
    "title": "Free - Black Dresser with Six Drawers w/ Nightstand",
    "url": "https://nextdoor.com/for_sale_and_free/afa81f38-5e0d-4ebb-bf4f-1d3497622567/",
    "id": "afa81f38-5e0d-4ebb-bf4f-1d3497622567",
    "priceText": "Free",
    "price": 0,
    "currency": "USD",
    "isFree": "Yes",
    "isSold": "No",
    "description": "Elegant black dresser with decorative patterns and silver handles.\n\nIn great shape, drawers work perfectly.\n\nFirst come first served!   On the curb.\n\n11125 Amesite Trl, ATX 78726",
    "neighborhood": "Canyon Creek",
    "city": "Austin",
    "state": "TX",
    "location": "Canyon Creek, Austin, TX",
    "postedAgo": "3 hr ago",
    "expiresAt": "2026-10-07T16:55:01.155Z",
    "categoryId": "77891",
    "interestedCount": 0,
    "photoCount": 3,
    "photos": [
      "https://us1-photo.nextdoor.com/post_photos/63/65/636592e086c35f3ca048c05684643df6.jpeg",
      "https://us1-photo.nextdoor.com/post_photos/a4/26/a42637b9805483e0d82f8e08fe78d360.jpeg",
      "https://us1-photo.nextdoor.com/post_photos/99/b2/99b20eeba9a92cd5a59ae6bf720c7a65.jpeg"
    ],
    "sellerAvatarUrl": "https://d33c41ebahvfs6.cloudfront.net/static/nextdoorv2/images/avatars/avatar-default-200-e7a671944bf1702b59e5f69d0d97242d.png",
    "source": "city-page",
    "scrapedAt": "2026-09-07T20:27:30.497Z",
    "error": null
  },
  {
    "imageUrl": "https://us1-photo.nextdoor.com/post_photos/b1/10/b110ac3c11aa8205ab0b9a62dd3fd500.jpeg",
    "title": "Baby Jogger Double Stroller",
    "url": "https://nextdoor.com/for_sale_and_free/7443c17f-9680-4a8b-bcab-649a18a551a7/",
    "id": "7443c17f-9680-4a8b-bcab-649a18a551a7",
    "priceText": "Free",
    "price": 0,
    "currency": "USD",
    "isFree": "Yes",
    "isSold": "No",
    "description": "Well Used Baby Jogger double stroller in good condition.  Works great.",
    "neighborhood": "Rosedale",
    "city": "Austin",
    "state": "TX",
    "location": "Rosedale, Austin, TX",
    "postedAgo": "1 hr ago",
    "expiresAt": "2026-10-07T18:32:00.296Z",
    "categoryId": "77887",
    "interestedCount": 0,
    "photoCount": 4,
    "photos": ["https://us1-photo.nextdoor.com/post_photos/b1/10/b110ac3c11aa8205ab0b9a62dd3fd500.jpeg", "..."],
    "sellerAvatarUrl": "https://d33c41ebahvfs6.cloudfront.net/static/nextdoorv2/images/avatars/avatar-default-200-e7a671944bf1702b59e5f69d0d97242d.png",
    "source": "nearby",
    "scrapedAt": "2026-09-07T20:41:12.108Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- **No login, ever.** It reads only what Nextdoor serves to visitors and search engines, so nothing expires and no account is at risk.
- **City to neighborhood depth.** One city name fans out to every neighborhood page Nextdoor lists for it, plus the nearby rail on each listing.
- **Full detail on every row.** Every photo, the expiry date, the interested count and the seller's neighborhood come from the listing's public detail record, not from a card.
- **Honest ceilings, stated up front.** Six listings per city page, six per neighborhood page, twenty per nearby hop, and no seller names for visitors. The Actor reports the true total per page so you always know your coverage.
- **Cheap to run.** Plain HTTP with a real Chrome TLS fingerprint and a datacenter proxy. No 4 GB browser.

### 📈 How it compares to alternatives

| | Nextdoor Marketplace Scraper | Nextdoor business scrapers on the Store | Build it in-house | By hand |
|---|---|---|---|---|
| Scope | For Sale & Free listings by city, neighborhood or URL | Business pages, recommendations, city facts. No listings | Whatever you build | Scrolling |
| Login | None | None | Your account at risk | Your account |
| Depth per run | City page + every neighborhood page + nearby rails, up to 1,000,000 rows | n/a | You solve the graph walk | Six per page |
| Fields | 24 per listing, all photos, expiry, interest count | n/a | Yours to maintain | Copy-paste |
| Seller identity | Not public on Nextdoor for visitors (stated, not hidden) | n/a | Same limit | Same limit |
| Region | United States (Nextdoor serves other countries on separate domains) | US, UK, CA | Same | Same |
| When Nextdoor changes | Maintained for you | Varies | You fix it | You re-learn the page |
| Cost | Pay per result | Pay per result | Engineering time | Analyst hours |

### 🚀 How to use

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Nextdoor Marketplace Scraper](https://apify.com/parseforge/nextdoor-marketplace-scraper?fpr=vmoqkp).
3. Type one or more cities as "City, ST" (for example `Austin, TX`), or paste nextdoor.com city, neighborhood or listing URLs.
4. Set **Max Items**, pick **All listings**, **Free items only** or **For sale only**, and click **Start**.
5. Export the dataset as CSV, Excel, JSON or XML from the **Dataset** tab, or read it from the API.

A run that pulls 200 for-sale listings across San Antonio:

```json
{
  "locations": ["San Antonio, TX"],
  "maxItems": 200,
  "listingType": "for-sale",
  "includeDetails": true,
  "expandNearby": true,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}
```

Keep the Apify proxy on with the US country. Nextdoor answers only from US networks (its DNS and CDN refuse other countries), and a datacenter proxy is enough.

### 💼 Business use cases

#### 🛋️ Source inventory for resale

A vintage furniture seller runs the Actor every morning on three cities with **Free items only**, sorts by `postedAgo`, and drives to the listings with the highest `interestedCount` first.

#### 📈 Price secondhand goods by neighborhood

A pricing analyst pulls 5,000 for-sale rows a week, groups `price` by `neighborhood` and `categoryId`, and feeds median asking prices into a resale pricing model.

#### 🏠 Read neighborhood turnover

A real estate team watches for "moving", "everything must go" and bulk furniture listings in `description` and maps them by `location` to find blocks where owners are about to sell.

#### 🧹 Route junk removal and donation pickups

A hauling company filters free bulky items (`isFree` = Yes, furniture categories) by `expiresAt` and schedules pickups in neighborhoods with clusters of listings.

### 🔌 Automating Nextdoor Marketplace Scraper

- **Make / Zapier:** trigger a run on a schedule, then send new rows to Google Sheets, Slack or a CRM.
- **Slack:** post the rows with `isFree` = Yes and `postedAgo` under two hours to a sourcing channel.
- **Airbyte:** load every run's dataset into your warehouse and track prices over time.
- **GitHub Actions:** call the Actor from a workflow and commit the CSV to a data repo.
- **Google Drive:** export each run to a dated CSV with the Apify Google Drive integration.

### 🌟 Beyond business use cases

- **Research:** measure the free-versus-paid share of the secondhand economy across US cities.
- **Personal:** watch your own neighborhood for a free couch, a bike or garden tools.
- **Non-profit:** find donated furniture and appliances for families you serve, sorted by expiry.
- **Experimentation:** train a classifier on `title` and `description` to predict `categoryId`.

### 🤖 Ask an AI assistant about this scraper

Give an AI agent live access to Nextdoor listings through the Model Context Protocol:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/nextdoor-marketplace-scraper"
```

Then ask in plain language, for example "find free desks posted today in Austin, TX and list them with their neighborhoods".

### ❓ Frequently Asked Questions

#### 🔐 Do I need a Nextdoor account?

No. The Actor reads the pages Nextdoor serves to visitors and search engines. No login, cookies or API key.

#### 🧭 Which locations can I scrape?

Any US city Nextdoor has a page for, written as "City, ST" (multi-word cities work: "San Antonio, TX"). You can also paste a nextdoor.com city, neighborhood or listing URL. Nextdoor runs other countries on separate domains, which this Actor does not cover.

#### 📏 How many listings can one run return?

Up to 1,000,000 rows. Each city page yields six listings, each neighborhood page six more (Austin lists 858 neighborhoods, San Antonio 1,353), and each listing's nearby rail adds up to twenty. The Actor stops at Max Items or when the area is exhausted.

#### 👤 Why is there no seller name?

Nextdoor shows visitors only the seller's neighborhood and a default avatar. Names and profiles are reserved for logged-in neighbors, so the Actor does not emit a column it cannot fill.

#### 🔎 Can I search by keyword or category?

Not on the public pages: Nextdoor's search and category filters need a login. Scrape a city, then filter `title`, `description` and `categoryId` in your sheet or pipeline.

#### 🎁 Can I get only free items or only items for sale?

Yes. Set **Listing type** to Free items only or For sale only. The filter is applied before rows are counted against Max Items.

#### 🕓 Is `postedAgo` an exact date?

It is Nextdoor's own label ("3 hr ago", "yesterday", "2w+"). `expiresAt` is exact: listings run for 30 days, so posting time is `expiresAt` minus 30 days.

#### 📷 Do I get every photo?

Yes, when **Full listing details** is on (the default). Card-only mode returns the cover photo only, in exchange for one fewer request per listing.

#### 🛡️ Do I need a proxy?

Yes, the Apify proxy with the US country, which is the default. Nextdoor refuses connections from outside the United States at the DNS and CDN level. Datacenter proxies are sufficient.

#### ⚠️ What do error rows look like?

A row with `url` and `error` only, for example an unsupported location or a listing that is no longer public. They are never charged.

#### 🔁 Are rows ever duplicated?

No. Listings are deduplicated on their id across city pages, neighborhood pages and nearby rails within a run.

#### ⏱️ How fast is it?

Around 60 fully detailed listings in under 15 seconds on a 512 MB run.

### 🔌 Integrate with any app

Run it from the [Apify API](https://docs.apify.com/api/v2), the JavaScript and Python [Apify clients](https://docs.apify.com/api/client/js), webhooks, schedules, or the integrations for Make, Zapier, Slack, Airbyte, GitHub and Google Drive.

### 🔗 Recommended Actors

- [Facebook Marketplace Scraper](https://apify.com/parseforge/facebook-marketplace-scraper?fpr=vmoqkp) for the same kind of local listings on Facebook.
- [Craigslist Scraper](https://apify.com/parseforge/craigslist-scraper?fpr=vmoqkp) for classifieds across Craigslist cities.
- [Skool Community Scraper](https://apify.com/parseforge/skool-scraper?fpr=vmoqkp) for community discovery data with the same output style.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Nextdoor, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with Nextdoor's terms of service and applicable data-protection laws.

# Actor input Schema

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

US cities to scrape as "City, ST", e.g. "Austin, TX" or "San Antonio, TX". Each city yields its featured listings plus the listings of every neighborhood Nextdoor lists for it (six per neighborhood page, hundreds of neighborhoods per large city).

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

Optional nextdoor.com URLs: a city page (https://nextdoor.com/city/austin--tx/), a neighborhood page (https://nextdoor.com/neighborhood/zyleroad--austin--tx/) or a listing (https://nextdoor.com/for\_sale\_and\_free/<id>/).

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `listingType` (type: `string`):

Keep every listing, only free items, or only items with a price.

## `includeDetails` (type: `boolean`):

Fetch each listing's public detail record to add every photo, the expiry date, the category id, the interested count and the seller's neighborhood (one extra request per listing). Turn off for a faster card-only export.

## `expandNearby` (type: `boolean`):

After the city and neighborhood pages, keep collecting through each listing's nearby listings until Max Items is reached or the area runs dry. For a neighborhood URL, also walks its nearby neighborhoods.

## `proxyConfiguration` (type: `object`):

Nextdoor only answers from US IP addresses (its DNS and CDN block other countries), so keep the Apify proxy on with the US country. Datacenter proxies are enough.

## Actor input object example

```json
{
  "locations": [
    "Austin, TX"
  ],
  "startUrls": [],
  "maxItems": 10,
  "listingType": "all",
  "includeDetails": true,
  "expandNearby": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Key listing fields: image, title, price, location and dates

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

Complete dataset with all 24 fields, including the description, every photo, the category id and the interested count

# 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": [
        "Austin, TX"
    ],
    "startUrls": [],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/nextdoor-marketplace-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": ["Austin, TX"],
    "startUrls": [],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/nextdoor-marketplace-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": [
    "Austin, TX"
  ],
  "startUrls": [],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}' |
apify call parseforge/nextdoor-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/nextdoor-marketplace-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/v9bhEO4uEBWBUZPzm/builds/qRpNmuTqci6h2zmee/openapi.json
