# NSW Development Application Lead API (`s1syphus9/nsw-development-application-leads`) Actor

Find and score NSW development application lead signals from the NSW Planning Portal for trades, consultants, and property-service suppliers.

- **URL**: https://apify.com/s1syphus9/nsw-development-application-leads.md
- **Developed by:** [Wesley Luong](https://apify.com/s1syphus9) (community)
- **Categories:** Lead generation, Business, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 matched nsw development leads

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### NSW Development Application Lead API

Find and score NSW development application lead signals from the NSW Planning Portal. This Actor turns public planning activity into trade- and consultant-specific sales leads for builders, solar installers, demolition contractors, architects, certifiers, and property-service suppliers.

It is built as an intelligence API, not a raw page scraper: each returned application includes a lead score, timing stage, match reasons, location fields, and a recommended next step.

### Data source

This Actor uses the public NSW Planning Portal Application Tracker surface:

- Application Tracker: `https://www.planningportal.nsw.gov.au/map`
- Public tracker API observed from the NSW Planning Portal: `https://api.apps1.nsw.gov.au/eplanning/data/v0/DAApplicationTracker`
- NSW open data page: `https://www.planningportal.nsw.gov.au/opendata/dataset/online-da-data-api`

The NSW open data page describes the Online DA Data API as a feed of applications lodged on the NSW Planning Portal since January 2019, updated daily. This Actor uses the public tracker endpoint exposed by the Planning Portal page and does not require an API key.

### Who it is for

Use this Actor if you sell into projects triggered by development applications:

- solar and battery installers;
- demolition and strip-out contractors;
- architects and building designers;
- certifiers and planning consultants;
- builders, renovators, and refurbishment contractors;
- landscaping, fencing, roofing, and trade suppliers;
- property-data, CRM, and lead-generation workflows.

### Input

The default input is tuned for solar/battery installers watching recent NSW applications:

```json
{
  "daysBack": 14,
  "applicationStatus": "ALL",
  "statuses": ["Under Assessment", "On Exhibition", "Approved"],
  "keywords": ["dwelling", "alterations", "additions", "new structure", "multi-dwelling", "commercial", "industrial", "roof"],
  "leadProfile": {
    "trade": "solar-installers",
    "capabilities": ["solar", "battery", "roof", "residential", "commercial", "industrial"],
    "targetCouncils": []
  },
  "maxResults": 20,
  "minLeadScore": 55,
  "pageSize": 4000,
  "maxPages": 1
}
````

### Output

Each dataset item contains:

```json
{
  "planningPortalApplicationNumber": "CDC-318554",
  "title": "Multi-dwelling housing,Alterations or additions to an existing building or structure at 3 133-137 NORTH STEYNE MANLY 2095",
  "councilName": "Northern Beaches Council",
  "status": "Under Assessment",
  "developmentType": "Multi-dwelling housing,Alterations or additions to an existing building or structure",
  "applicationType": "Complying Development Certificate Application",
  "lodgementDate": "2026-06-30",
  "address": "3 133-137 NORTH STEYNE MANLY 2095",
  "suburb": "North Steyne Manly",
  "postcode": "2095",
  "latitude": -33.89,
  "longitude": 151.106,
  "source": "NSW Planning Portal Application Tracker",
  "sourceUrl": "https://www.planningportal.nsw.gov.au/map",
  "intelligence": {
    "leadScore": 80,
    "trade": "solar-installers",
    "leadStage": "assessment",
    "matchReasons": ["Trade/profile match: dwelling, alterations, roof"],
    "concerns": [],
    "recommendedNextStep": "Review roof/site suitability and prepare solar or battery outreach."
  }
}
```

### Suggested presets

The repository includes starter presets:

- `presets/solar-installers.json`
- `presets/demolition-contractors.json`
- `presets/architects-designers.json`

### Pricing

Suggested phase-1 Apify pay-per-event pricing:

- Primary event: `development-lead-matched`
- Suggested launch price: `$0.05` per matched development lead

Empty searches and applications filtered out before being returned are not charged as matched leads.

### Limitations

- The public tracker endpoint returns a compact set of fields: application number, council, status, development type, application type, lodgement/determination date, address, and coordinates.
- It does not currently return applicant names, project cost, documents, or contact details.
- It does not provide legal, planning, procurement, or sales advice.
- Source pages and public endpoints can change and may require maintenance.

### Disclaimer

This Actor is not affiliated with, endorsed by, or operated by the NSW Government or NSW Planning Portal. It uses publicly accessible planning data and is intended for lead research and workflow automation only. Always verify important project details on official council or NSW Planning Portal sources before acting.

# Actor input Schema

## `daysBack` (type: `integer`):

Relative date window used when explicit lodgement dates are not provided.

## `lodgementDateFrom` (type: `string`):

Optional YYYY-MM-DD lower bound for lodged applications. Overrides daysBack.

## `lodgementDateTo` (type: `string`):

Optional YYYY-MM-DD upper bound for lodged applications. Defaults to today.

## `applicationStatus` (type: `string`):

Status sent to the NSW Planning Portal API. Use ALL for broad source retrieval, then filter with statuses.

## `statuses` (type: `array`):

Statuses to keep after retrieval.

## `councils` (type: `array`):

Optional council name filters such as Northern Beaches Council or Lake Macquarie City Council.

## `suburbs` (type: `array`):

Optional suburb filters inferred from the returned address.

## `postcodes` (type: `array`):

Optional NSW postcode filters inferred from the returned address.

## `keywords` (type: `array`):

Opportunity words to match across development type, application type, status, council, and address.

## `leadProfile` (type: `object`):

Supplier/trade profile used for lead scoring.

## `maxResults` (type: `integer`):

Maximum number of matched development application leads returned after filtering and scoring.

## `minLeadScore` (type: `integer`):

Only return development application leads with this score or higher.

## `pageSize` (type: `integer`):

Records requested per NSW Planning Portal API page. The live default uses one large page for recent applications.

## `maxPages` (type: `integer`):

Maximum API pages to fetch from the source.

## Actor input object example

```json
{
  "daysBack": 14,
  "applicationStatus": "ALL",
  "statuses": [
    "Under Assessment",
    "On Exhibition",
    "Approved"
  ],
  "councils": [],
  "suburbs": [],
  "postcodes": [],
  "keywords": [
    "dwelling",
    "alterations",
    "additions",
    "new structure",
    "multi-dwelling",
    "commercial",
    "industrial",
    "roof"
  ],
  "leadProfile": {
    "trade": "solar-installers",
    "capabilities": [
      "solar",
      "battery",
      "roof",
      "residential",
      "commercial",
      "industrial"
    ],
    "targetCouncils": []
  },
  "maxResults": 20,
  "minLeadScore": 55,
  "pageSize": 4000,
  "maxPages": 1
}
```

# Actor output Schema

## `matchedDevelopmentLeads` (type: `string`):

Dataset items returned by the Actor. Each item is one matched NSW development application lead with lead score, stage, match reasons, and source links.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("s1syphus9/nsw-development-application-leads").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("s1syphus9/nsw-development-application-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call s1syphus9/nsw-development-application-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=s1syphus9/nsw-development-application-leads",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "NSW Development Application Lead API",
        "description": "Find and score NSW development application lead signals from the NSW Planning Portal for trades, consultants, and property-service suppliers.",
        "version": "0.1",
        "x-build-id": "bKz66qjMdeQF7YUjh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/s1syphus9~nsw-development-application-leads/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-s1syphus9-nsw-development-application-leads",
                "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/s1syphus9~nsw-development-application-leads/runs": {
            "post": {
                "operationId": "runs-sync-s1syphus9-nsw-development-application-leads",
                "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/s1syphus9~nsw-development-application-leads/run-sync": {
            "post": {
                "operationId": "run-sync-s1syphus9-nsw-development-application-leads",
                "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": {
                    "daysBack": {
                        "title": "Days back",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Relative date window used when explicit lodgement dates are not provided.",
                        "default": 14
                    },
                    "lodgementDateFrom": {
                        "title": "Lodgement date from",
                        "type": "string",
                        "description": "Optional YYYY-MM-DD lower bound for lodged applications. Overrides daysBack."
                    },
                    "lodgementDateTo": {
                        "title": "Lodgement date to",
                        "type": "string",
                        "description": "Optional YYYY-MM-DD upper bound for lodged applications. Defaults to today."
                    },
                    "applicationStatus": {
                        "title": "Source application status",
                        "type": "string",
                        "description": "Status sent to the NSW Planning Portal API. Use ALL for broad source retrieval, then filter with statuses.",
                        "default": "ALL"
                    },
                    "statuses": {
                        "title": "Returned statuses",
                        "type": "array",
                        "description": "Statuses to keep after retrieval.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "Under Assessment",
                            "On Exhibition",
                            "Approved"
                        ]
                    },
                    "councils": {
                        "title": "Councils",
                        "type": "array",
                        "description": "Optional council name filters such as Northern Beaches Council or Lake Macquarie City Council.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "suburbs": {
                        "title": "Suburbs",
                        "type": "array",
                        "description": "Optional suburb filters inferred from the returned address.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "postcodes": {
                        "title": "Postcodes",
                        "type": "array",
                        "description": "Optional NSW postcode filters inferred from the returned address.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "array",
                        "description": "Opportunity words to match across development type, application type, status, council, and address.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "dwelling",
                            "alterations",
                            "additions",
                            "new structure",
                            "multi-dwelling",
                            "commercial",
                            "industrial",
                            "roof"
                        ]
                    },
                    "leadProfile": {
                        "title": "Lead profile",
                        "type": "object",
                        "description": "Supplier/trade profile used for lead scoring.",
                        "default": {
                            "trade": "solar-installers",
                            "capabilities": [
                                "solar",
                                "battery",
                                "roof",
                                "residential",
                                "commercial",
                                "industrial"
                            ],
                            "targetCouncils": []
                        }
                    },
                    "maxResults": {
                        "title": "Maximum returned leads",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of matched development application leads returned after filtering and scoring.",
                        "default": 20
                    },
                    "minLeadScore": {
                        "title": "Minimum lead score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only return development application leads with this score or higher.",
                        "default": 55
                    },
                    "pageSize": {
                        "title": "Page size",
                        "minimum": 1,
                        "maximum": 4000,
                        "type": "integer",
                        "description": "Records requested per NSW Planning Portal API page. The live default uses one large page for recent applications.",
                        "default": 4000
                    },
                    "maxPages": {
                        "title": "Maximum pages",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum API pages to fetch from the source.",
                        "default": 1
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
