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
8
Monthly active users
5 hours ago
Last modified
Categories
Features
Share
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.
What data can you extract from Nextdoor?
Fields vary by row type.
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, as English codes (see FAQ) | {} |
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. 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.
Neighborhood: neighborhood
Fill neighborhood, or select this mode with a city to use its first neighborhood.
Business profiles: pages
Use pageSlug or paste public /pages/ URLs into detailUrls. Replace the example slug below with an actual page slug.
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.
Topic catalog: taxonomy
Select this mode to list topic names and identifiers.
City catalog: cities
Select this mode for the US city catalog.
Free classifieds: free-finds
Select this mode for public free-finds identifiers and sold flags.
Organization contacts: about
Select this mode for Nextdoor's public organization contacts.
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.
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.
- No account setup on Nextdoor. 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. - The Apify Free plan includes $5.00 in monthly usage credit (about 1,666 rows at
$0.003per row).
Example: one input delivering 3 rows on the Free plan at 1024 MB costs 3 × $0.003 + $0.005 = $0.014, assuming one start.
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."
- 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."
- Agent execution note: Set
maxResultsbetween5and20on exploratory tool calls to keep responses compact, and readRUN_SUMMARYandINPUT_REPORTfrom the default key-value store to inspect normalized inputs and delivered row counts.
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.
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.
Why are some fields empty?
A business may publish a phone but no email. With hideAddress: true, street, unit, full address, and precise coordinates are withheld.
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.
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. If a run stops with "New runs are paused until the live proxy configuration is confirmed.", start it again later. Before 13 November 2026 this message, some run warnings and the about row note contained Chinese; the message began with "\u5b9e\u65f6\u4ee3\u7406\u914d\u7f6e\u5c1a\u672a\u5b8c\u6210\u5bf9\u8d26" (JSON-escaped).
Why do leadAbsences reasons look different from earlier runs?
From November 2026 the reasons are English codes. Earlier runs returned Chinese-language labels; the table shows which new code each one became. List rows: pages-card, neighborhood, city, topic, classified. Card rows: pages rows with inlineEnriched: true.
| Field | Earlier label (JSON-escaped) | New value |
|---|---|---|
address.street, geo on pages rows with hideAddress: true | "hideAddress<note>" or "\u672c\u7ad9\u65e0<evidence>" | gated (<note>) |
phones, emails, name, address.street on other pages rows | "\u672c\u7ad9\u65e0<evidence>" or "\u8be6\u60c5<note>" | Not on source: <evidence>; not_collected (<note>) when only the SSR fallback was read; not_on_list_page (<note>) on card rows |
person on pages rows | "\u672c\u7ad9\u65e0<evidence>" | Not on source: <evidence> when the profile page was read; not_verified (<note>) when only GraphQL or the SSR fallback was read; not_on_list_page (<note>) on card rows |
hours on pages rows | "\u8be5\u5546\u5bb6<note>" or "SSR Business<note>" | Not on source: <evidence> when GraphQL hours were read; otherwise not_collected (<note>), or not_on_list_page (<note>) on card rows |
socials on pages rows; phones on profile-page pages rows; phones, emails, address.street on about rows | "\u672c\u7ad9\u65e0<evidence>" or "SSR Business<note>" | not_verified (<note>) |
emails on pages rows; person on about rows | "\u672a\u91c7\u96c6\uff08<note>\uff09" or "\u9886\u5bfc\u5728<note>" | not_collected (<note>) |
emails, person on directory rows; address.street, person on list rows | "\u672a\u91c7\u96c6" | not_collected |
emails on list rows | "\u5217\u8868\u65e0\u7ebf\u7d22" | not_on_list_page |
name, phones, address.street on directory rows; phones, name, title, price on list rows | "\u76ee\u5f55\u5361<note>" or "\u5217\u8868<note>" or "GQL-only<note>" or "\u514d\u8d39\u680f<note>" or "\u8be5\u6761<note>" | not_on_list_page (<note>) |
phones on topic index rows and city catalog rows | "\u7d22\u5f15\u65e0\u7ebf\u7d22<note>" or "\u57ce\u5e02\u76ee\u5f55\u884c<note>" | not_on_index_page (<note>) |
phones, emails, address.street, person on topic catalog rows | "\u672c\u7ad9\u65e0<evidence>", "\u5217\u8868\u65e0\u7ebf\u7d22" or "\u672a\u91c7\u96c6" | not_queried (<note>) |
claimed on pages rows | "\u672a\u8ba4\u9886<note>" or "\u5e73\u53f0<note>" | No longer written; read the claimed field |
Before 13 November 2026:
Not on sourcecould also appear with a source answer or field missing or unreadable (nownot_verified (<note>)).- Profile-page
phonesandaboutemailswereNot on source: <evidence>. topiccatalog rows hadnot_on_list_pageforemailsandnot_collectedforaddress.streetandperson.- The
personevidenceBusiness owner is only a UserProfile id or null, no nameis nowdetail page SSR Business owner is null or has an empty name.
Limitations
- 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
- HomeStars Scraper
- AlloVoisins Scraper
- Angi Scraper
- Jiffy On Demand Scraper
- Care.com Scraper
- Email Validator
- Phone Number Validator
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.