{
  "openapi": "3.0.1",
  "info": {
    "title": "Nextdoor Scraper",
    "description": "Scrape local business recommendations, neighborhood posts, and community data from Nextdoor. Get authentic local insights and recommendations that aren't available on other platforms.",
    "version": "2.5",
    "x-build-id": "9iObMtgFowIR99U1P"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alizarin_refrigerator-owner~nextdoor-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alizarin_refrigerator-owner-nextdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/alizarin_refrigerator-owner~nextdoor-scraper/runs": {
      "post": {
        "operationId": "runs-sync-alizarin_refrigerator-owner-nextdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/alizarin_refrigerator-owner~nextdoor-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-alizarin_refrigerator-owner-nextdoor-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "sessionCookies": {
            "title": "Session Cookies (JSON): RECOMMENDED, most reliable path",
            "type": "string",
            "description": "Your Nextdoor session cookies as a JSON array. This is the path that reliably returns real data. How to get it: (1) install the free Cookie-Editor browser extension, (2) log into nextdoor.com in that browser, (3) open Cookie-Editor on the Nextdoor tab, click Export, choose 'JSON', (4) paste the whole array here. Pair with the neighborhoods field below. Unlocks recommendations, posts, businesses, and events. Cookies expire, so re-export if you see a login-wall error."
          },
          "neighborhoods": {
            "title": "Neighborhoods",
            "type": "array",
            "description": "Neighborhood slugs to scrape in authenticated mode. Required with sessionCookies. Example: 'miami-beach-fl'. Find the slug in any Nextdoor URL: nextdoor.com/neighborhood/SLUG/",
            "items": {
              "type": "string"
            }
          },
          "scrapeType": {
            "title": "Scrape Type",
            "enum": [
              "recommendations",
              "posts",
              "businesses",
              "events"
            ],
            "type": "string",
            "description": "What to scrape in authenticated mode. Only used with sessionCookies.",
            "default": "recommendations"
          },
          "cookieStorageKey": {
            "title": "Cookie Storage Key",
            "type": "string",
            "description": "Key-Value Store key from the Cookie Manager actor (e.g. 'nextdoor-john'). When set, cookies load automatically from the shared KV store, so you do not have to paste sessionCookies by hand. Run the Cookie Manager actor first to capture and store your cookies."
          },
          "cookieKvStoreName": {
            "title": "Cookie KV Store Name",
            "type": "string",
            "description": "Name of the Key-Value Store where Cookie Manager saves sessions. Default: 'cookie-sessions'. Only change this if you set a custom store name in Cookie Manager.",
            "default": "cookie-sessions"
          },
          "autoRefreshCookies": {
            "title": "Auto-refresh expired sessions",
            "type": "boolean",
            "description": "When the Nextdoor session hits a login wall, automatically call the Cookie Manager actor in refresh mode to log back in and continue. Requires cookieStorageKey plus refreshEmail and refreshPassword below.",
            "default": false
          },
          "cookieManagerActorId": {
            "title": "Cookie Manager Actor ID",
            "type": "string",
            "description": "Actor to call for session refresh. Default: 'cookie-manager'. Use your own username-scoped ID if you renamed it (e.g. 'yourname/cookie-manager').",
            "default": "cookie-manager"
          },
          "refreshEmail": {
            "title": "Nextdoor Login Email (for auto-refresh)",
            "type": "string",
            "description": "Nextdoor account email, used only when auto-refreshing an expired session via the Cookie Manager actor."
          },
          "refreshPassword": {
            "title": "Nextdoor Login Password (for auto-refresh)",
            "type": "string",
            "description": "Nextdoor account password, used only when auto-refreshing an expired session via the Cookie Manager actor. Stored encrypted."
          },
          "businessPageUrls": {
            "title": "Business Page URLs (no auth, best-effort)",
            "type": "array",
            "description": "Direct Nextdoor /pages/ URLs to scrape without logging in. Best-effort only: Nextdoor now login-walls most public pages, so this often returns nothing. Use Mode 3 (session cookies) for reliable results. Example: https://nextdoor.com/pages/motz-plumbing-north-miami-fl/",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search Terms (no auth, best-effort)",
            "type": "array",
            "description": "Business types to look up via Google (e.g. 'plumber', 'electrician'). Requires the city field. Discovers /pages/ URLs, then scrapes them. Best-effort only and often returns nothing. Use Mode 3 (session cookies) for reliable results.",
            "items": {
              "type": "string"
            }
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "City and state for Google discovery (e.g. 'Miami, FL', 'Austin, TX'). Required when using searchTerms."
          },
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "Filter results by keyword (e.g. 'plumber', 'pizza'). Applied to all modes."
          },
          "category": {
            "title": "Business Category",
            "enum": [
              "all",
              "home_services",
              "restaurants",
              "automotive",
              "health",
              "pets",
              "education",
              "shopping",
              "professional_services"
            ],
            "type": "string",
            "description": "Filter by business category (authenticated mode).",
            "default": "all"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of items to return (default: 100).",
            "default": 100
          },
          "onlyNewSince": {
            "title": "Only new posts since last run",
            "type": "boolean",
            "description": "For continuous monitoring (authenticated posts/events mode). Remembers post IDs and the newest timestamp per neighborhood between runs, so each scheduled run emits only posts that appeared since the previous run. The first run emits everything and seeds the baseline.",
            "default": false
          },
          "seenStateKvStoreName": {
            "title": "Monitor State KV Store Name",
            "type": "string",
            "description": "Named Key-Value Store that holds the per-neighborhood high-water mark used by 'Only new posts since last run'. Default: 'nextdoor-monitor-state'. Keep this stable across scheduled runs so dedup persists.",
            "default": "nextdoor-monitor-state"
          },
          "maxNeighborhoodsPerRun": {
            "title": "Max Neighborhoods Per Run",
            "minimum": 0,
            "type": "integer",
            "description": "Cap how many neighborhoods are scanned in a single run (0 = no cap). Keeps each scheduled run light when monitoring many neighborhoods.",
            "default": 0
          },
          "includeComments": {
            "title": "Include Comments",
            "type": "boolean",
            "description": "Extract comments and replies on posts (authenticated mode, slower).",
            "default": false
          },
          "minRecommendations": {
            "title": "Minimum Recommendations",
            "minimum": 0,
            "type": "integer",
            "description": "Only include businesses with at least this many recommendations.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. RESIDENTIAL is recommended for Nextdoor and is the default for authenticated scraping."
          },
          "demoMode": {
            "title": "Demo Mode (returns FAKE sample data)",
            "type": "boolean",
            "description": "Off by default. When ON, the actor returns fake sample businesses (e.g. 'Mike's Plumbing') so you can test your integration wiring without real credentials. It does NOT return real Nextdoor data. Leave this OFF and provide session cookies (Mode 3) to scrape real data.",
            "default": false
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "URL to POST results to when scraping completes (Zapier, Make, n8n, or a custom endpoint)."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}