ActorStack.dev

How to scrape Nextdoor business listings without an account

A complete walkthrough: how Nextdoor exposes business data to signed-out visitors, how to select cities and categories, what a first run costs, and how to read the 34 fields you get back.

By Oswaldo Carabano9 min read
A suburban residential street of detached houses with cars parked along the kerb.
Photo: Robert So on Pexels

Short answer

You can scrape Nextdoor business listings without an account because Nextdoor serves its category directory and business pages to signed-out visitors. Pick a city slug in `city-name--state` format, pick one or more of the 54 categories the city exposes, cap the run with `maxBusinessesPerCity`, and you get 34 fields per business plus the neighbor recommendations written about it. A first run of 50 businesses in one city costs under $0.50.

Key points

  • Nextdoor's public surface covers business listings, neighbor recommendations and city demographics. Anything else — private groups, member feeds, direct messages — requires a login and is out of reach by design.
  • Discovery works by city and category, not by keyword: free-text business search is behind Nextdoor's login.
  • City slugs follow Nextdoor's own format, `city-name--state`, lowercase, with a two-letter state code and a double hyphen.
  • The category directory is ordered by distance and continues into neighbouring towns once the city runs out, so the per-city cap is a locality control as much as a cost control.
  • Measured over 741 businesses, phone numbers came back on 93.9% and websites on 77.2%; opening hours on only 57.4%.
On this page9 sections

Nextdoor is one of the few local-business sources that publishes contact details, neighbor commentary and neighbourhood demographics on the same platform. It is also one of the few that does not require an account to read any of them — as long as you stay on the surface it serves to signed-out visitors, which is exactly what this guide covers.

What Nextdoor actually exposes to a signed-out visitor

Three things, and they map onto three separate datasets rather than one wide table:

  • Business listings. Name, categories, phone, email, website, address with ZIP, coordinates, opening hours, verification status, image gallery and Nextdoor's own summary of what neighbors say.
  • Neighbor recommendations. Free-text posts about a business, with the author anonymized to a first name and last initial. No star ratings — Nextdoor does not have them.
  • City profiles. Residents, average income and age, homeowner percentage, Nextdoor's own safety, friendliness and affordability scores, all 54 business categories it tracks, and up to 852 neighborhoods.

Everything else needs a login: private groups, member feeds, direct messages and — the one that catches people out — free-text business search. That last restriction shapes the whole workflow, because it means discovery has to run through the category directory instead of a search box.

Why avoiding the login matters more than it sounds

Most Nextdoor scrapers ask you to paste session cookies from a logged-in browser. It works the day you set it up. Then the cookies expire, the run fails, and the only remedy is to paste new ones — which means every pipeline built that way has a failure date that nobody wrote down.

Reading only the signed-out surface removes that failure mode entirely: there is no credential, so there is nothing to go stale. It also means the scraper is not acting as anybody's account, which is a materially different position both technically and legally. The cost is real and worth stating: you will never reach logged-in content this way, and you should not trust a tool that claims to reach it without credentials.

Step 1 — find the city slug

Nextdoor identifies a city as city-name--state: lowercase, single hyphens inside the name, then a double hyphen, then the two-letter state code. San Clemente, California is san-clemente--ca.

The double hyphen is the part people get wrong, and a single one is the most common reason a run comes back empty. There is a full reference for the format including how punctuation is handled, but for a first run: open the city page in a browser and copy the slug out of the URL.

Step 2 — choose categories

Nextdoor publishes 54 business categories per city — Dentist, Plumber, Electrician, and so on. Leaving the list empty sweeps all of them; naming two or three keeps the run focused and cheap.

When you name several, the per-city cap is split evenly between them, and whatever a small category cannot fill is handed back to the others. Ask for plumbers and dentists with a cap of 200 and you get roughly a hundred of each rather than two hundred dentists — which is what a naive implementation would give you, because dentists are usually the deeper list.

Step 3 — set the caps that control cost and locality

maxBusinessesPerCity is doing two jobs at once, and only one of them is obvious.

The obvious one is cost: at $0.008 per business, a cap of 50 is a run under fifty cents. The less obvious one is locality. Nextdoor's category directory is ordered by distance and keeps going into neighbouring towns once the requested city runs out, so a cap set far above what a city plausibly holds does not get you more of that city — it gets you the surrounding region.

If you need strictly one municipality, set onlyRequestedCity: true. Filtering then happens during discovery, so a dropped business is never charged and the run stops paging once the city is exhausted instead of burning through the region to fill a quota.

Step 4 — run it and read the output

A first input that does something useful and costs under fifty cents:

input.json
{
  "cities": ["san-clemente--ca"],
  "categories": ["Dentist", "Plumber"],
  "maxBusinessesPerCity": 50,
  "onlyRequestedCity": true,
  "includeRecommendations": true,
  "includeCityData": true
}

The main dataset comes back as one row per business, with that business's recommendations nested inside it. City rows, posts and failures go to their own datasets — cities, posts, errors — so the business table never has rows where most columns are blank.

Two ready-made views project the main dataset differently: Businesses gives one row each, and Recommendations lifts the nested rows to the top level with the business attached as context. That is worth knowing before you write a flattening step of your own.

What is actually filled in, measured

A field existing in the schema is not the same as it having a value. These percentages were counted over 741 distinct businesses across 5 cities and 12 categories:

FieldFilled
phone_number93.9%
categories84.2%
website_url77.2%
email62.6%
hours_open_status57.4%
recommendations_summary47.4%
description46.6%
gallery_urls44.5%

An earlier version of this table, measured on 30 businesses, put opening hours at 77%. At n=741 it came out at 57.4%, and the lower figure is the published one. Anything not on the list is not promised — including address_postal_code, which is present but derived by the Actor, because Nextdoor exposes no ZIP field anywhere in its schema.

What a run costs

Pay per delivered result: $0.008 per business, $0.008 per city, $0.002 per recommendation, $0.001 per post, and $0.00001 to start. Error rows are never charged, and charges apply per row as it is produced rather than in a lump at the end — so an aborted run bills only for what it actually gave you.

The input above works out at roughly 50 businesses ($0.40), around 125 recommendations ($0.25) and one city ($0.008): about 66 cents. Scaling to a full sweep of one mid-sized city across all 54 categories is a decision to make after you have seen the data, not before.

Four mistakes that waste a run

  1. A single hyphen before the state code. san-clemente-ca is not a city. The run completes and returns nothing.
  2. Treating recommendations as reviews. Half of them are neighbors asking for a provider. If you are computing sentiment, filter on kind first — the measured breakdown is here.
  3. Setting the cap to a large round number. 1,000 businesses in a town of 30,000 people mostly buys you the next four towns over.
  4. Raising concurrency. Five runs clean; ten triggers a roughly four-minute cooldown, which costs more time than the parallelism saves.

Frequently asked questions

Do I need a Nextdoor account to scrape business listings?
No. Business pages, the category directory and city data are served to signed-out visitors. Only content behind the login — private groups, member feeds, direct messages and free-text business search — requires an account, and none of it is reachable by this method.
What is a Nextdoor city slug?
Nextdoor identifies a city as `city-name--state`: lowercase, words joined by single hyphens, a double hyphen, then the two-letter state code. San Clemente, California is `san-clemente--ca`.
How many businesses can one city return?
As many as the city holds, and then more from neighbouring towns, because the directory is distance-ordered. In San Clemente, CA, results 1-75 were 96-100% local and everything past 76 was regional overflow: the city holds roughly 72 dentists.
Can I scrape Nextdoor by keyword instead of by category?
Not without a login. Nextdoor gates free-text business search, so public discovery runs through the category directory. If you already know which businesses you want, you can pass their URLs directly instead.

Sources

Every URL below was requested and returned a page on the date shown.

  1. Operator claimchecked 18 Aug 2026
    Nextdoor Business & Reviews Scraper — Actor README and input schemaActorStack / Apify Store
  2. Site declarationchecked 18 Aug 2026
    nextdoor.com/robots.txtNextdoor
  3. Operator claimchecked 18 Aug 2026
    Nextdoor for BusinessNextdoor
  4. Platform docschecked 18 Aug 2026
    Dataset storageApify
  5. Platform docschecked 18 Aug 2026
    Actors — Apify platform documentationApify
Close-up of a plumber's hands fitting a radiator pipe with a wrench.
NextdoorGuide

Local lead generation

Which Nextdoor fields are usable for outreach, what the fill rates mean for a target list of a given size, and how to avoid building a list that is 40% dead ends.

8 min
A row of residential mailboxes on posts in front of a wooden fence and trees.
NextdoorReference

Nextdoor city slugs

Nextdoor identifies a city as `city-name--state`. The rule sounds trivial and breaks on saints, hyphens and states that share a city name — here is the exact format and how to confirm a slug before spending a run on it.

5 min
A desk with stacked legal reference books, loose documents and a newspaper.
NextdoorExplainer

Is it legal?

The interesting question is not "is scraping legal" but which specific data creates which specific obligation. Public business contact details and neighbor posts are not the same thing.

7 min