SIPCOT Industrial Park Land API
Yes. The LandLens industrial park API reads the state industrial promotion corporation's own park register four ways: whether a point falls inside a park plot, whether a survey number (with its village) does, the parks in a district or matching a name with their plot counts, allotted and vacant plots and extent, and one park's plots with their status, recorded allottee, product and extent. About 140 parks and 9,100 plots are held. It costs nothing. Nothing found means nothing matched in this register, not that the land is free of industrial use.
https://verified.realestate/api/v1/tools/industrial_park- Price
- Free
- Source
- The state industrial corporation's park register
- Coverage
- About 140 parks and 9,100 plots
- Answers in
- Usually under a second
Example
curl -X POST https://verified.realestate/api/v1/tools/industrial_park \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"parks","district":"Kancheepuram"}'
{
"ok": true,
"status": "ok",
"data": {
"found": true,
"status": "listed",
"park_count": 13,
"parks": [
{
"park_id": "Sriperumbudur",
"park": "Sriperumbudur Industrial Complex",
"district": "Kancheepuram",
"taluk": "Sriperumbudur",
"extent_acres": 2184.97,
"plots": 246,
"allotted_plots": 144,
"vacant_plots": 2,
"vacant_acres": 6.08,
"villages": 10,
"has_boundary": true,
"has_plot_list": true
},
{
"park_id": "Irungattukottai",
"park": "Irungattukottai - DTA",
"district": "Kancheepuram",
"taluk": "Sriperumbudur",
"extent_acres": 996.86,
"plots": 235,
"allotted_plots": 200,
"vacant_plots": 0,
"villages": 5,
"has_boundary": true,
"has_plot_list": true
}
],
"note": "A park with no plot list holds an outline only, so its plots cannot be listed; say that rather than reporting it as empty."
},
"credits_charged": 0
}
A real answer from the API, trimmed to two of the 13 parks.
What it returns
One call. mode decides the answer; status says what was found.
| Field | What it holds |
|---|---|
status | in_park (the land meets a park plot), not_found (read, nothing matched), unavailable (the register could not be read), or listed for a park list. |
point and survey: plots[] | Each plot the land meets: park, park_id, plot_no, plot_status, recorded_allottee, product, survey_number, village, taluk and extent_acres. |
parks: parks[] | Each park: park_id, park, district, taluk, extent_acres, plots, allotted_plots, vacant_plots, vacant_acres, villages, has_boundary and has_plot_list. |
park: plots and summary | One park's plots with their status, allottee and extent, filtered by status if asked. |
caveat | What not_found means, or that a recorded allottee is not a title. |
Inputs
The JSON body of the POST is the arguments. Send mode, then what that mode needs: lat and lng, or survey_number and village, or district or search, or park.
| Argument | Type | What to send |
|---|---|---|
moderequired |
string: point, survey, parks, park | point (a map point), survey (a survey number in a village), parks (a list) or park (one park). |
lat |
number | For point: latitude in decimal degrees. |
lng |
number | For point: longitude in decimal degrees. |
survey_number |
string | For survey: as the record prints it, e.g. 178/1C. |
village |
string | For survey: the revenue village name. Required. |
district |
string | For survey, narrows the match; for parks, filters the list. |
taluk |
string | For survey: taluk name, narrows the search. |
search |
string | For parks: part of a park name. |
park |
string | For park: the park_id from a parks list. |
status |
string | For park: only plots in this status, e.g. Vacant or Allotted, as the list prints it. |
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/industrial_park \
-H "Authorization: Bearer $LANDLENS_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"parks","district":"Kancheepuram"}'
import os, requests
r = requests.post(
"https://verified.realestate/api/v1/tools/industrial_park",
headers={"Authorization": f"Bearer {os.environ['LANDLENS_KEY']}"},
json={
"mode": "parks",
"district": "Kancheepuram"
},
timeout=20,
)
body = r.json()
print(body["status"], body["credits_charged"], body["data"])
const res = await fetch("https://verified.realestate/api/v1/tools/industrial_park", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LANDLENS_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"mode": "parks",
"district": "Kancheepuram"
}),
});
const body = await res.json();
console.log(body.status, body.credits_charged, body.data);
Is survey 178/1C in my village inside a SIPCOT park? And which SIPCOT parks in Kancheepuram still have vacant plots?
Your AI checks the park register and lists the parks. It is free.
Responses
Every answer has the same envelope. What status can say for this call:
| status | What it means |
|---|---|
ok | The register was read: in_park, not_found, or a list or park came back. |
not_found | The register could not be read (unavailable), a park list matched nothing, the point is outside Tamil Nadu, or the inputs for the mode were missing. Nothing is concluded. |
invalid_args | mode was missing. Nothing ran. |
free_limit_reached | The account has used its free calls for the hour or the day. retry_after says how many seconds to wait; paid calls keep working. |
Where the data comes from
The park register the State Industries Promotion Corporation of Tamil Nadu publishes on its map server: park outlines, the plots inside them with their status and allottee, and the revenue parcels beneath them.
139 park outlines, 9,124 plots and 19,048 revenue parcels, read in September 2026. Some parks' layers are refused by the server and hold no rows. Other industrial estates, private parks and SEZs are not in this register.
Our copy was read in September 2026 and is reviewed about twice a year. A plot allotted since then shows its earlier status.
A point is tested against the plot polygons. A survey number is matched within its village (and taluk and district when sent), because a bare survey number repeats across the state. A park that fails to load at the source is recorded as unavailable, never as empty.
Who uses it
Land buyers
Check whether a survey number on offer lies inside a SIPCOT park before paying for it.
Manufacturers and consultants
Find the parks in a district with vacant plots and their extent.
Analysts
Read park occupancy, allotted against vacant plots, across districts.
Limits and good practice
- not_found means nothing matched in this register. It is not proof the land is not industrial: some parks' layers are refused at the source, and other estates, private parks and SEZs are not here.
- A recorded allottee is what the register prints, not a title. Confirm against the land record.
- A park with no plot list holds an outline only.
- Some register fields arrive malformed; check a park's name and extent before relying on them.
Pricing
The industrial park check costs nothing. Free calls have their own allowance per hour and per day, counted across every key and connected app on the account. 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 to check whether land is in a SIPCOT park?
Yes. Send mode point with the latitude and longitude, or mode survey with the survey number and village. status says in_park, not_found or unavailable.
Can I find vacant SIPCOT plots?
Yes. mode parks lists vacant plots and acres per park; mode park with status Vacant lists the plots themselves.
Does it cover SIDCO estates and private parks?
No. It reads the state industrial promotion corporation's own parks only.
How much does it cost?
It costs nothing, within the account's free call allowance.
Updated 22 Oct 2026 · OpenAPI description