Nextdoor Scraper - Public Businesses & Neighborhoods
Pricing
from $2.20 / 1,000 results
Nextdoor Scraper - Public Businesses & Neighborhoods
Extract public Nextdoor business profiles and neighborhood directories in the US, UK, and Canada, including published phones, emails, websites, and addresses. Pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
30
Total users
10
Monthly active users
a day ago
Last modified
Categories
Features
Share
Nextdoor Scraper
Extract public Nextdoor business and neighborhood data in the United States, United Kingdom, and Canada as rows you can export.
- Business names, published phones, emails, websites, addresses, and license IDs.
- City and neighborhood directories, topic catalogs, and limited free-finds data.
- Batch public URLs or choose a city and business category.
- Pay $3.00 per 1,000 rows on the Free plan, plus a start fee.
What does Nextdoor Scraper do?
Nextdoor Scraper collects public business profiles and directories for local research, business catalogs, and coverage comparisons. It does not log in, read private feeds, or send messages. This is an unofficial tool, not affiliated with Nextdoor.
- Business discovery:
topicsor its aliasbusiness-searchfinds categories;neighborhoodfinds linked businesses. - Profiles:
pagesreads a business slug;detailUrlsaccepts several public URLs. - Location discovery:
cityexplores a city;find-neighborhoodlists cities in a state or region. - Catalogs:
taxonomylists topics;citieslists the US city catalog;free-findsreturns limited classified identifiers. - Organization contacts:
aboutreads Nextdoor's public organization contact pages, not local merchant leads.
enrichDetails is on by default. It adds available business details to discovery results, not a separate set of comment rows. Check kind: a business profile, directory card, neighborhood, or catalog entry each counts as one row.
What data can you extract from Nextdoor?
Fields vary by row type. Missing contact details stay empty; a row is not a promise of a phone number or email.
Common fields
| Field | Description | Example |
|---|---|---|
id | Business, topic, classified, or other row identifier | business_123 |
kind | Row type | pages |
name | Source display name, when supplied | Example Business |
url | Source page URL | https://nextdoor.com/pages/example-business/ |
market | Selected market | us |
scrapedAt | Collection time in UTC | 2026-10-24T00:00:00+00:00 |
Business profiles: pages
| Field | Description | Example |
|---|---|---|
phones | Published phone entries | [{"value":"+1 555 0100","type":"phone","e164":null}] |
emails | Published email entries | [{"value":"name@example.com","type":"email"}] |
web.website | Published website | https://example.com |
address | Street and locality, subject to privacy flags | {"locality":"Oakland","country":"US"} |
licenseId | License identifier, when supplied | EXAMPLE-123 |
openingHours | Weekly operating hours | [{"dayOfWeek":"Monday","opens":"09:00","closes":"17:00"}] |
claimed | Claim indicator: true, false, or unknown | null |
hasContact | Contact presence indicator, not proof of ownership | true |
hideAddress | Whether precise location must be withheld | true |
leadAbsences | Reasons fields are missing; messages may be Chinese | {} |
Directory cards: directory
| Field | Description | Example |
|---|---|---|
topic | Requested category | plumber |
phones | Phone shown on the directory card | [] |
Linked business cards: pages-card
| Field | Description | Example |
|---|---|---|
slug | Public business page slug; name may be absent | example-business |
Neighborhood rows: neighborhood
| Field | Description | Example |
|---|---|---|
slug | Neighborhood identifier | rockridge--oakland--ca |
city | City associated with the neighborhood, when supplied | oakland--ca |
City rows: city
| Field | Description | Example |
|---|---|---|
state | State or region | CA |
neighborhoodCount | Neighborhood count, when supplied | 12 |
Topic rows: topic
| Field | Description | Example |
|---|---|---|
topicIds | Topic identifiers | [123] |
namePlural | Plural topic label, when supplied | Plumbers |
parentId | Parent topic identifier | 10 |
Free-finds rows: classified
| Field | Description | Example |
|---|---|---|
legacyClassifiedId | Classified identifier | 123456 |
isSold | Source sold flag | false |
neighborhood | Origin neighborhood reference | {"id":"123","city":"Oakland","state":"CA"} |
Organization contacts: about
| Field | Description | Example |
|---|---|---|
emails | Published organization contact entries, not merchant contacts | [{"value":"name@example.com","type":"email"}] |
How to scrape Nextdoor
- Open Nextdoor Scraper in Apify Console.
- Select
autoforsearchType, then fill a target such asqueryand acity. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- Open the dataset and download the rows.
Empty {} starts the Oakland (oakland--ca) example with at most 3 rows and enrichment enabled. It is a billed example, not a free preview. The form also starts with 3 rows. With auto, a target field selects the mode; explicitly chosen catalog modes need no target.
Category directory: topics / business-search
Fill query with a category such as plumber and city with a city slug. Without query, this mode lists the city's topic index rather than businesses. business-search means the same directory, not generic search.
Neighborhood: neighborhood
Fill neighborhood, or select this mode with a city to use its first neighborhood. Keep enrichment enabled for available business profiles; otherwise results may be link cards.
Business profiles: pages
Use pageSlug or paste public /pages/ URLs into detailUrls. Replace the example slug below with an actual page slug. URLs take precedence over other targets even when the selected mode is city.
City discovery: city
Fill city. With enrichDetails: false, get neighborhood identity rows. With the default true, the Actor looks for linked business profiles; it falls back to neighborhood rows if none are collected.
State or region: find-neighborhood
Fill state, for example wa or england, and select the matching market. Results are city rows, not merchant contact lists.
Topic catalog: taxonomy
Select this mode to list topic names and identifiers. No business query is required.
City catalog: cities
Select this mode for the US city catalog. Other markets can return no rows.
Free classifieds: free-finds
Select this mode for public free-finds identifiers and sold flags. Titles, prices, and seller contacts are not available from this mode.
Organization contacts: about
Select this mode for Nextdoor's public organization contacts. These are not customer-support promises or local business leads.
What to fill in
| Field | What to enter | Default |
|---|---|---|
searchType | auto or a mode described above | auto; form prefills city |
city | City slug, such as oakland--ca | oakland--ca when needed and omitted |
state | State or region for find-neighborhood | or when omitted |
neighborhood | Neighborhood slug | First city neighborhood in that mode |
pageSlug | Public business page slug | Empty |
detailUrls | Array of public Nextdoor /pages/ or /city/ URLs | Empty |
query | Category such as plumber or bakery | Empty |
market | us, gb, ca; fr has limited coverage; au unavailable | us |
enrichDetails | Add available business profile details | true |
maxResults | Maximum rows per input, from 1 to 200 | 70; form prefills 3 |
maxPages | Directory pages for topics, from 1 to 50 | 1 |
Auto-selected category directory:
{"query":"plumber","city":"hillsboro--or","maxResults":3}
Topics:
{"searchType":"topics","query":"bakery","city":"oakland--ca","maxResults":3}
Business-search alias:
{"searchType":"business-search","query":"plumber","city":"hillsboro--or","maxResults":3}
Neighborhood:
{"searchType":"neighborhood","city":"ajax--on","market":"ca","maxResults":3}
Business profile:
{"searchType":"pages","pageSlug":"example-business","maxResults":1}
City:
{"searchType":"city","city":"oakland--ca","enrichDetails":false,"maxResults":3}
State index:
{"searchType":"find-neighborhood","state":"wa","maxResults":3}
Topic catalog:
{"searchType":"taxonomy","maxResults":3}
City catalog:
{"searchType":"cities","market":"us","maxResults":3}
Free finds:
{"searchType":"free-finds","market":"us","maxResults":3}
Organization contacts:
{"searchType":"about","maxResults":3}
maxItemsandlimitare aliases ofmaxResults.- Unknown fields alone do not fail input handling: close misspellings can be corrected; other names are ignored with a note.
- Missing required targets stop collection with an error such as
INVALID_INPUT: pageSlug — searchType pages needs pageSlug or detailUrls. No rows are charged; the start fee still applies. Some invalid optional values are ignored or adjusted instead. INPUT_REPORTin the run's key-value store records filled, inferred, corrected, and ignored fields. Incompatible targets use this priority:detailUrls,pageSlug,query,neighborhood,city,state. Compatible pairs, such as category and city, stay together.
Output example
Illustrative profile row; names and contact details below are placeholders, not collected leads.
{"id": "business_123","kind": "pages","name": "Example Business","slug": "example-business","url": "https://nextdoor.com/pages/example-business/","market": "us","phones": [{"value": "+1 555 0100", "type": "phone", "e164": null}],"emails": [{"value": "name@example.com", "type": "email"}],"web": {"website": "https://example.com", "socials": []},"address": {"street": null, "locality": "Oakland", "region": "CA", "country": "US"},"claimed": null,"hasContact": true,"leadAbsences": {}}
Export the dataset as JSON, CSV, Excel, XML, RSS, or an HTML table. RUN_SUMMARY records the row count and warnings; ERROR_SUMMARY contains details for handled failures.
Why use this Nextdoor scraper?
- Pay per delivered row. No row fee for a page that produces no dataset row.
- Usable partial results. Available partial results can be delivered when collection ends early. Rows already written remain in the dataset; an abrupt stop does not guarantee delivery of unwritten rows.
- Missing data stays visible. Empty contact fields and
leadAbsenceshelp distinguish a directory entry from a contact-rich profile. - Several URLs per run. Submit a list through
detailUrlsrather than starting each URL separately. - No account setup on Nextdoor. No Nextdoor login or cookies are required. You do not need to set up proxies.
How much does it cost to scrape Nextdoor?
Pricing is pay-per-event: $0.005 per start event, plus the price per delivered row. Platform usage is included in these prices.
| Apify plan | Price per row | Price per 1,000 rows |
|---|---|---|
| Free | $0.003 | $3.00 |
| Starter | $0.003 | $3.00 |
| Scale | $0.0026 | $2.60 |
| Business | $0.0022 | $2.20 |
| Platinum | $0.002 | $2.00 |
| Diamond | $0.0016 | $1.60 |
Start billing uses one event per GB of allocated memory, with a minimum of one. Default memory is 1024 MB, so a normal start costs $0.005.
maxResultsapplies to each detail URL or single search input. Default: 70; larger requests are collected in parts of 70, up to the input limit of 200. All row types count together.- The Free Apify plan is capped at 200 rows per run and 10 total runs of this Actor.
- Maximum cost per run (
maxTotalChargeUsdin the API) caps the whole run's charges. Set enough to cover the start and desired rows.
Example: one input delivering 3 rows on the Free plan at 1024 MB costs 3 × $0.003 + $0.005 = $0.014, assuming one start. A run delivering zero rows has no row charge, but still has the start fee.
What happens when the run timeout is too short
A short timeout can trigger an automatic pause rather than a failure. The status message says "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." The run temporarily appears as ABORTED.
When results are ready, the same run resumes and delivers to the same dataset, finishing as SUCCEEDED if collection succeeds. Previously delivered rows are skipped, not delivered or charged twice. Delivery may report "Resumed: delivering N rows." No manual restart is needed for this pause.
- Automatic pauses are limited to 3 per run. Keep the default timeout of 3600 seconds to reduce the need for them.
- Synchronous endpoints (
run-sync,run-sync-get-dataset-items) wait at most 300 seconds and may return an empty dataset during a pause. For longer runs, start asynchronously and read the dataset afterSUCCEEDED, or use a success webhook.
Use with AI agents and the API
Apify MCP server (Claude, ChatGPT, Cursor, VS Code)
Add this remote server to an MCP-capable client:
https://mcp.apify.com?tools=lentic_clockss/nextdoor-scraper
Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; the agent reads rows with get-dataset-items. Ensure that dataset-reading tool is also available in your client.
For clients without remote-server support, use npx @apify/actors-mcp-server --tools lentic_clockss/nextdoor-scraper with APIFY_TOKEN set.
Example prompt: "Use Nextdoor Scraper to find up to 3 plumbers in Hillsboro, Oregon, using city hillsboro--or. Return published contacts and note missing fields."
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/nextdoor-scraper").call(run_input={"query": "plumber", "city": "hillsboro--or", "maxResults": 3})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/nextdoor-scraper').call({query: 'plumber', city: 'hillsboro--or', maxResults: 3});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For HTTP, send the input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~nextdoor-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. Read results with GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json after completion.
Integrations
Use the Actor's Integrations tab for Google Sheets, Make, Zapier, n8n, Slack, Airtable, or webhooks. Use Apify Schedules for repeated runs.
FAQ
Is it legal to scrape Nextdoor?
Public access is not blanket permission for every use. You are responsible for Nextdoor's terms, applicable data-protection law, and a lawful basis for processing personal data.
Why did my run end as ABORTED?
Check its status message. The automatic-pause message above means the run will resume when results are ready. A manual abort or unrelated failure is not that pause.
How many results can I get?
Request 1–200 rows per input, subject to source availability, directory pages, your cost cap, and Free-plan limits. maxResults is a ceiling, not a guaranteed count.
Why are some fields empty?
Neighborhood rows are not business contacts. A business may publish a phone but no email. With hideAddress: true, street, unit, full address, and precise coordinates are withheld. claimed can be unknown even when hasContact is true.
Does it work in the UK and Canada?
Both have city and neighborhood support. Directory availability varies; if a UK category returns no rows, try neighborhood with enrichment. Use gb for the UK and ca for Canada.
What about France and Australia?
France has limited profile and location support, not the same public category or state directories. Australia is unavailable. Do not assume all modes work in every market.
Can I scrape private feeds or send messages?
No. Generic search, feeds, login, maps, and contact-form actions are outside this Actor's scope. No Nextdoor account is needed.
What if I get zero rows?
Check the selected mode, market, and target. Inspect INPUT_REPORT and RUN_SUMMARY. No matches or an unsupported scope can finish successfully with zero rows; handled failures have ERROR_SUMMARY.
Limitations
- Public data only; no private posts, messages, or authenticated feeds.
- Enrichment can return sparse cards instead of complete profiles. No contact coverage percentage is guaranteed.
- The city catalog is US-only. Free-finds exposes identifiers, not full listing content; other markets may return no rows.
jobHoursdescribes recruiting shifts, not operating hours. UseopeningHourswhere supplied.- Category searches have no date-window or automatic query-translation option.
Related scrapers
More local services and lead generation scrapers from the same publisher:
- Google Maps Scraper for Leads, CRM, and Reviews
- AlloVoisins Scraper
- Angi Scraper
- HomeStars Scraper
- Jiffy On Demand Scraper
- Care.com Scraper
- TaskRabbit Scraper
- Yelp Business Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request another field through the Issues tab of this Actor's page. Include the run ID and the input you used.