Pipeline Radar API: approved but not yet registered supply
Yes. The LandLens Pipeline Radar API returns the supply that is approved but not yet on the project register: planning permissions and layout approvals issued by CMDA, DTCP and panchayats, matched by approval number to the project filings, so it can say which approvals no filing quotes yet (the pipeline), which are registered, and which are only a possible match. You get counts by month, district and authority, the approvals table with extent and documents, the largest layouts by district, and land acquisition notices as a signal. Windows run from 6 to 60 months. It is part of LandLens Intelligence on the enterprise plan and costs nothing per call.
https://verified.realestate/api/v1/tools/intel_pipeline- Price
- Free
- Source
- CMDA, DTCP and panchayat approval registers
- Coverage
- All districts, windows up to 60 months
- Answers in
- Usually under a second
Example
curl -X POST https://verified.realestate/api/v1/tools/intel_pipeline \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district":"Tiruvallur","window":12,"kind":"layout"}'
{
"ok": true,
"status": "ok",
"data": {
"found": true,
"view": "approvals",
"filters": {
"district": "Tiruvallur",
"district_not_on_register": null,
"window": "Last 12 months (from 2025-11-01)",
"register": "Every authority",
"kind": "Layouts",
"months_since": "any",
"status": "Not yet registered",
"q": ""
},
"figures": {
"cmda": 0,
"building": 0,
"layout": 257,
"layout_with_extent": 0,
"layout_sqm": 0,
"other": 0,
"matched": 87,
"possible": 0,
"pipeline": 170,
"total": 257,
"pipeline_layout_sqm": 0,
"layout_acres": 0,
"pipeline_layout_acres": 0,
"pipeline_share": 0.6614785992217899
},
"months": [
{
"key": "2026-08",
"label": "Aug 26",
"cmda": 0,
"building": 0,
"layout": 18,
"pipeline": 16
},
{
"key": "2026-09",
"label": "Sep 26",
"cmda": 0,
"building": 0,
"layout": 0,
"pipeline": 0
},
{
"key": "2026-10",
"label": "Oct 26",
"cmda": 0,
"building": 0,
"layout": 0,
"pipeline": 0
}
],
"as_of": {
"cmda_read_to": "2026-09-29",
"dtcp_and_panchayat_read_to": "2026-08-20",
"approvals_matched_at": "2026-10-22 04:20:44",
"register_read_at": "2026-10-22 04:01:29",
"projects": 27175,
"cmda_permissions_without_a_date": 28408
},
"page_url": "https://verified.realestate/landlens/intel/pipeline?window=12&district=Tiruvallur&kind=layout",
"export_url": "https://verified.realestate/landlens/intel/pipeline/export.xlsx?window=12&district=Tiruvallur&kind=layout",
"approvals": {
"rows": [
{
"id": 150279,
"register": "ppa",
"authority": "Town Panchayat",
"kind": "layout",
"category": "Layout approval",
"approved_on": "2026-08-20",
"months_since": 2,
"district": "Tiruvallur",
"extent_sqm": null,
"extent_acres": null,
"extent_as_filed": null,
"status": "none",
"ambiguous_count": 0,
"matched_key": null,
"rera_id": null,
"project": null,
"number": "145/2025/a1",
"other_number": "Application 31A6HDH6",
"applicant": null,
"place": null,
"documents": [
{
"label": "Approval letter",
"url": "https://verified.realestate/planning-permissions/tiruvallur-31a6hdh6-2026-tp/document/approval-letter"
},
{
"label": "Approved plan",
"url": "https://verified.realestate/planning-permissions/tiruvallur-31a6hdh6-2026-tp/document/approved-plan"
}
],
"facts": null,
"purpose": null,
"survey_numbers": null
},
{
"id": 110040,
"register": "ppa",
"authority": "DTCP",
"kind": "layout",
"category": "Layout approval",
"approved_on": "2026-08-19",
"months_since": 2,
"district": "Tiruvallur",
"extent_sqm": null,
"extent_acres": null,
"extent_as_filed": null,
"status": "none",
"ambiguous_count": 0,
"matched_key": null,
"rera_id": null,
"project": null,
"number": "SWP/DTCP/TVLR/LAYOUT No: 171/2026",
"other_number": "Application QSBKIEIH",
"applicant": null,
"place": null,
"documents": [
{
"label": "Approval letter",
"url": "https://verified.realestate/planning-permissions/tiruvallur-qsbkieih-2026/document/approval-letter"
},
{
"label": "Approved plan",
"url": "https://verified.realestate/planning-permissions/tiruvallur-qsbkieih-2026/document/approved-plan"
}
],
"facts": null,
"purpose": null,
"survey_numbers": null
}
],
"paging": {
"page": 1,
"per_page": 25,
"total": 170,
"pages": 7
}
},
"note": "status none means no filing quotes this approval number; matched names the filing; possible means part of the number agrees. Approvals outside the Chennai Metropolitan Area carry no unit counts."
},
"credits_charged": 0
}
A real answer from the API, trimmed for length: the last three months and two of the 25 approvals are shown. Links are shown on the live host.
What it returns
view picks the answer: the approvals table (default), the layouts by district, or the acquisition signals.
| Field | What it holds |
|---|---|
figures | Counts in the window: cmda, building, layout, matched, possible, pipeline and total, layout extent in square metres and acres, and pipeline_share. |
months[] | Per month: CMDA permissions, building and layout approvals, and how many of them are still pipeline. |
approvals.rows[] | approvals view: register, authority, kind, category, approved_on, months_since, district, extent, status (none, matched or possible), rera_id and project when matched, number, the application number, applicant, place, purpose, survey numbers and document links. |
by_district, largest, totals | layouts view: layouts and their extent by district, and the largest layouts. |
acquisition_notices_by_district | signals view: land acquisition notices by district, a signal of where land is changing hands for public works. |
as_of | The date each approval register is read to, and when the match last ran. |
page_url, export_url | The same view in LandLens. export_url downloads it in a signed-in browser only. |
Ways to call it
One tool, three views.
Approvals
The default: approvals in the window, filtered by register, kind, age and match status, 25 to a page.
{"district": "Tiruvallur","window": 12,"kind": "layout"}
Layouts
Layout approvals by district, with the largest.
{"district": "Coimbatore","view": "layouts"}
Signals
Land acquisition notices for the district.
{"district": "Kancheepuram","view": "signals"}
Inputs
The JSON body of the POST is the arguments. Every input is optional. With none, all districts over 24 months, approvals no filing quotes yet.
| Argument | Type | What to send |
|---|---|---|
district |
string | One district, as the register spells it; omit for all. |
window |
integer: 6, 12, 24, 36, 60 | Months back from today; default 24. |
register |
string: all, cmda, ppa | all (default), cmda (Chennai region) or ppa (DTCP and panchayats). |
kind |
string: all, building, layout | all (default), building or layout. |
months_since |
string: 0-6, 6-12, 12-24, 24+ | Only approvals this old: 0-6, 6-12, 12-24 or 24+ months. |
status |
string: pipeline, matched, possible, all | pipeline (default: no filing quotes the approval), matched (a filing does), possible (a partial match), all. |
q |
string | Approval number, applicant or place to search for. |
view |
string: approvals, layouts, signals | approvals (default): the table; layouts: layouts by district and the largest; signals: acquisition notices for the district. |
sort |
string: approved, months, extent, district, category | Table order; default approved (newest first). |
dir |
string: asc, desc | |
page |
integer | Table page, 25 rows each. |
Code
Set LANDLENS_KEY to your key. In an AI app, connect https://verified.realestate/mcp once and ask in plain words instead. In Postman, download this API's collection, import it (File, Import) and set apiKey.
curl -X POST https://verified.realestate/api/v1/tools/intel_pipeline \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"district":"Tiruvallur","window":12,"kind":"layout"}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/intel_pipeline",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"district": "Tiruvallur",
"window": 12,
"kind": "layout"
},
timeout=30,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/intel_pipeline", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"district": "Tiruvallur",
"window": 12,
"kind": "layout"
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
How many layouts were approved in Tiruvallur in the last 12 months that no project filing quotes yet?
Your AI reads the pipeline for the district and gives the count, the months and the approvals.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
ok | The view was read. |
not_found | The approvals have not been matched to the filings yet. message says so. |
scope_denied | HTTP 403, nothing charged. The account behind the credential does not hold the enterprise plan (reason enterprise_plan, with plan_url), Intelligence is paused on the account (access_paused), or the day's allowance of rows read over the API is used (row_limit, with retry_after). |
Where the data comes from
The CMDA planning permission register for the Chennai Metropolitan Area and the state planning permission register for DTCP, town panchayat and rural panchayat approvals, matched to the filings on the Tamil Nadu real estate project register. Land acquisition notices come from the state gazette and the National Highways Act notifications.
All 38 districts. CMDA permissions for the Chennai Metropolitan Area; DTCP and panchayat approvals for the rest of the state from 2022.
The approvals are matched to the filings every night. as_of gives the date each approval register is read to and when the match last ran.
An approval is matched when a filing quotes its number, and possible when only part of the number agrees. Not registered means no filing quotes the number; it is not proof the project was never registered. Extent is as the approval states it.
Who uses it
Developers and land teams
See what competitors have had approved near a site before any of it is launched.
Plot sellers and layout promoters
Track the layouts coming up in a district, and the largest of them.
Research desks
Measure the approved pipeline by month and district as a lead indicator of supply.
Limits and good practice
- Not registered means no filing quotes the approval number. It is not proof the project was never registered, and smaller buildings do not need to register at all.
- Approvals outside the Chennai Metropolitan Area carry no unit counts, and many state approvals carry no extent; those count in the number but not in the acres.
- The registers are read to the dates in as_of. An approval issued after that date is not in the answer yet.
- Acquisition notices are a signal of public works, not a finding about any one parcel. For one survey number use acquisition_notice.
Pricing
Pipeline Radar costs nothing per call. LandLens Intelligence is part of the enterprise plan: the plan is the only requirement, and a credential on an account without it is refused with nothing charged. Credits come from the same LandLens wallet as the chat and the minis. How billing works.
Free calls have an hourly and daily allowance. For more than that, or a platform built on these registers, we set up limits and a plan to match.
Questions
Is there an API for upcoming real estate supply in Tamil Nadu?
Yes, this one. It returns planning permissions and layout approvals that no project filing quotes yet, by month and district, as JSON over HTTPS or MCP.
How much does it cost?
No credits. It needs the LandLens enterprise plan; without it the call answers scope_denied with the plan page and nothing is charged.
What does "possible" mean?
Part of the approval number agrees with a number a filing quotes, but not all of it. Read both before treating it as a match.
Can I search for one approval?
Yes. q takes an approval number, applicant or place. ppa_approval and cmda_register search the registers themselves in more detail.
Updated 22 Oct 2026 · OpenAPI description