Government

How to Look Up Any Tax Assessment Record in New York State by Coordinate

How to Look Up Any Tax Assessment Record in New York State by Coordinate

I was studying the various data services available and discovered a handy little website put out by the state for public use to find out tax assessment records for all counties in New York State.

https://gisservices.its.ny.gov/arcgis/rest/services/NYSTaxAssessmentLookup/GPServer/TaxAssessment/execute

Required Fields:

Y = Latitude

X = Longitude

SpatialReference = 4326 if you want to use latitude and longitude

Kind of a handy endpoint, for your use. It returns a json string. You can also automate the process by using a GET or POST request. For example to pull the tax record for a point at Cole Hill State Forest and get the data back as a JSON text string.

https://gisservices.its.ny.gov/arcgis/rest/services/NYSTaxAssessmentLookup/GPServer/TaxAssessment/execute?X=-74.10192&Y=42.59518&SpatialReference=4326&env%3AoutSR=&env%3AprocessSR=&returnZ=false&returnM=false&returnTrueCurves=false&returnFeatureCollection=false&context=&f=json

Here is what that URL will output it when you request it.

{"results":[{"paramName":"OBJECTID","dataType":"GPString","value":"30986"},
{"paramName":"COUNTY_NAME","dataType":"GPString","value":"Albany"},
{"paramName":"MUNI_NAME","dataType":"GPString","value":"Berne"},
{"paramName":"SWIS","dataType":"GPString","value":"012000"},
{"paramName":"PARCEL_ADDR","dataType":"GPString","value":"Willsie Rd"},
{"paramName":"PRINT_KEY","dataType":"GPString","value":"90.-1-14"},
{"paramName":"SBL","dataType":"GPString","value":"09000000010140000000"},
{"paramName":"CITYTOWN_NAME","dataType":"GPString","value":"Berne"},
{"paramName":"CITYTOWN_SWIS","dataType":"GPString","value":"012000"},
{"paramName":"LOC_ST_NBR","dataType":"GPString","value":"Null"},
{"paramName":"LOC_STREET","dataType":"GPString","value":"Willsie Rd"},
{"paramName":"LOC_UNIT","dataType":"GPString","value":"Null"},
{"paramName":"LOC_ZIP","dataType":"GPString","value":"Null"},
{"paramName":"PROP_CLASS","dataType":"GPString","value":"941"},
{"paramName":"ROLL_SECTION","dataType":"GPString","value":"3"},
{"paramName":"LAND_AV","dataType":"GPString","value":"579885"},
{"paramName":"TOTAL_AV","dataType":"GPString","value":"579885"},
{"paramName":"FULL_MARKET_VAL","dataType":"GPString","value":"982856"},
{"paramName":"YR_BLT","dataType":"GPString","value":"Null"},
{"paramName":"FRONT","dataType":"GPString","value":"0"},
{"paramName":"DEPTH","dataType":"GPString","value":"0"},
{"paramName":"SQ_FT","dataType":"GPString","value":"0"},
{"paramName":"ACRES","dataType":"GPString","value":"506.28"},
{"paramName":"SCHOOL_CODE","dataType":"GPString","value":"012001"},
{"paramName":"SCHOOL_NAME","dataType":"GPString","value":"Berne-Knox-Westerlo"},
{"paramName":"SEWER_TYPE","dataType":"GPString","value":"1"},
{"paramName":"SEWER_DESC","dataType":"GPString","value":"None"},
{"paramName":"WATER_SUPP","dataType":"GPString","value":"1"},
{"paramName":"WATER_DESC","dataType":"GPString","value":"None"},
{"paramName":"UTILITIES","dataType":"GPString","value":"3"},
{"paramName":"UTILITIES_DESC","dataType":"GPString","value":"Electric"},
{"paramName":"BLDG_STYLE","dataType":"GPString","value":"Null"},
{"paramName":"BLDG_STYLE_DESC","dataType":"GPString","value":"Null"},
{"paramName":"HEAT_TYPE","dataType":"GPString","value":"Null"},
{"paramName":"HEAT_TYPE_DESC","dataType":"GPString","value":"Null"},
{"paramName":"FUEL_TYPE","dataType":"GPString","value":"Null"},
{"paramName":"FUEL_TYPE_DESC","dataType":"GPString","value":"Null"},
{"paramName":"SQFT_LIVING","dataType":"GPString","value":"Null"},
{"paramName":"NBR_KITCHENS","dataType":"GPString","value":"Null"},
{"paramName":"NBR_FULL_BATHS","dataType":"GPString","value":"Null"},
{"paramName":"NBR_BEDROOMS","dataType":"GPString","value":"Null"},
{"paramName":"USED_AS_CODE","dataType":"GPString","value":"Null"},
{"paramName":"USED_AS_DESC","dataType":"GPString","value":"Null"},
{"paramName":"AG_DIST_CODE","dataType":"GPString","value":"Null"},
{"paramName":"AG_DIST_NAME","dataType":"GPString","value":"Null"},
{"paramName":"PRIMARY_OWNER","dataType":"GPString","value":"NYS Reforestation Land"},
{"paramName":"MAIL_ADDR","dataType":"GPString","value":"112 State St Rm 810"},
{"paramName":"PO_BOX","dataType":"GPString","value":"Null"},
{"paramName":"MAIL_CITY","dataType":"GPString","value":"Albany"},
{"paramName":"MAIL_STATE","dataType":"GPString","value":"NY"},
{"paramName":"MAIL_ZIP","dataType":"GPString","value":"12207"},
{"paramName":"ADD_OWNER","dataType":"GPString","value":"Null"},
{"paramName":"ADD_MAIL_ADDR","dataType":"GPString","value":""},
{"paramName":"ADD_MAIL_PO_BOX","dataType":"GPString","value":"Null"},
{"paramName":"ADD_MAIL_CITY","dataType":"GPString","value":"Null"},
{"paramName":"ADD_MAIL_STATE","dataType":"GPString","value":"Null"},
{"paramName":"ADD_MAIL_ZIP","dataType":"GPString","value":"Null"},
{"paramName":"BOOK","dataType":"GPString","value":"Null"},
{"paramName":"PAGE","dataType":"GPString","value":"Null"},
{"paramName":"GRID_EAST","dataType":"GPString","value":"561180"},
{"paramName":"GRID_NORTH","dataType":"GPString","value":"945822"},
{"paramName":"MUNI_PARCEL_ID","dataType":"GPString","value":"0120001026"},
{"paramName":"SWIS_SBL_ID","dataType":"GPString","value":"01200009000000010140000000"},
{"paramName":"SWIS_PRINT_KEY_ID","dataType":"GPString","value":"01200090.-1-14"},
{"paramName":"ROLL_YR","dataType":"GPString","value":"2019"},
{"paramName":"SPATIAL_YR","dataType":"GPString","value":"2019"},
{"paramName":"OWNER_TYPE","dataType":"GPString","value":"2"},
{"paramName":"NYS_NAME","dataType":"GPString","value":"New York State- DEC"},
{"paramName":"NYS_NAME_SOURCE","dataType":"GPString","value":"1-2-SA-a"},
{"paramName":"DUP_GEO","dataType":"GPString","value":"Null"},
{"paramName":"CALC_ACRES","dataType":"GPString","value":"498.300342"},
{"paramName":"ServiceMessage","dataType":"GPString","value":"Match found for entered X:-74.10192 & Y:42.59518."}],"messages":[]}

I found this handy enough, I wrote short PHP script that I can execute as needed to pull up property data and output it into a CSV spreadsheet format for bringing up in OpenOffice Calc. If you enter more then two words, it searches by address, otherwise it uses the first and second parameters as coordinates.

if ($argc > 2) {
	$address = "";
	for ($i = 1; $i <= $argc; $i++) 
		$address .= "$argv[$i] ";
		
	$address = urlencode($address);
	
	$json = file_get_contents("https://gisservices.its.ny.gov/arcgis/rest/services/Locators/Street_and_Address_Composite/GeocodeServer/findAddressCandidates?Street=&City=&State=&ZIP=&SingleLine={$address}&outFields=&maxLocations=1&matchOutOfRange=true&langCode=&locationType=&sourceCountry=&category=&location=&distance=&searchExtent=&outSR=4326&magicKey=&f=pjson");
	$coord = json_decode($json);
	
	$lat = $coord->candidates[0]->location->y;
	$lng = $coord->candidates[0]->location->x;
}

else {
	$lat = $argv[1];
	$lng = $argv[2];
}

if ($lng > 0) $lng *= -1;

$json = file_get_contents("https://gisservices.its.ny.gov/arcgis/rest/services/NYSTaxAssessmentLookup/GPServer/TaxAssessment/execute?X={$lng}&Y={$lat}&SpatialReference=4326&env%3AoutSR=&env%3AprocessSR=&returnZ=false&returnM=false&returnTrueCurves=false&returnFeatureCollection=false&context=&f=json");

$prop = json_decode($json);

foreach ($prop->results as $line) {
	echo '"'.addslashes($line->paramName).'","'.addslashes($line->value).""n";
}

With this script, you can load a nice version of tax record in your favorite spreadsheet.

OBJECTID 30986
COUNTY_NAME Albany
MUNI_NAME Berne
SWIS 12000
PARCEL_ADDR Willsie Rd
PRINT_KEY 90.-1-14
SBL 9.00000001014E+018
CITYTOWN_NAME Berne
CITYTOWN_SWIS 12000
LOC_ST_NBR Null
LOC_STREET Willsie Rd
LOC_UNIT Null
LOC_ZIP Null
PROP_CLASS 941
ROLL_SECTION 3
LAND_AV 579885
TOTAL_AV 579885
FULL_MARKET_VAL 982856
YR_BLT Null
FRONT 0
DEPTH 0
SQ_FT 0
ACRES 506.28
SCHOOL_CODE 12001
SCHOOL_NAME Berne-Knox-Westerlo
SEWER_TYPE 1
SEWER_DESC None
WATER_SUPP 1
WATER_DESC None
UTILITIES 3
UTILITIES_DESC Electric
BLDG_STYLE Null
BLDG_STYLE_DESC Null
HEAT_TYPE Null
HEAT_TYPE_DESC Null
FUEL_TYPE Null
FUEL_TYPE_DESC Null
SQFT_LIVING Null
NBR_KITCHENS Null
NBR_FULL_BATHS Null
NBR_BEDROOMS Null
USED_AS_CODE Null
USED_AS_DESC Null
AG_DIST_CODE Null
AG_DIST_NAME Null
PRIMARY_OWNER NYS Reforestation Land
MAIL_ADDR 112 State St Rm 810
PO_BOX Null
MAIL_CITY Albany
MAIL_STATE NY
MAIL_ZIP 12207
ADD_OWNER Null
ADD_MAIL_ADDR
ADD_MAIL_PO_BOX Null
ADD_MAIL_CITY Null
ADD_MAIL_STATE Null
ADD_MAIL_ZIP Null
BOOK Null
PAGE Null
GRID_EAST 561180
GRID_NORTH 945822
MUNI_PARCEL_ID 120001026
SWIS_SBL_ID 1.20000900000001E+024
SWIS_PRINT_KEY_ID 01200090.-1-14
ROLL_YR 2019
SPATIAL_YR 2019
OWNER_TYPE 2
NYS_NAME New York State- DEC
NYS_NAME_SOURCE 1-2-SA-a
DUP_GEO Null
CALC_ACRES 498.300342
ServiceMessage Match found for entered X:-74.08836 & Y:42.59480.

Some Useful Investigative Open Data Resources

Usually when I want to research a New York organization I start at NY Open Government, which is a website put out by the NY Attorney General and brings together several open datasets.

NY Open Government: nyopengovernment.com

One way to find people’s addresses is to find them in the voter file. Voter Ref contains the voter files for several states, which can be handy for looking up people’s addresses, date of birth, party registration.

Voter Ref: voteref.com

You can confirm the latest information on people’s voting registration and address by using the state board of election’s voter lookup. You will need their county, date of birth and zip code which you can get from Voter Ref.

NY Voter Lookup: voterlookup.elections.ny.gov

See Through NY has listings of many though not all government employees, which can be useful when you are trying to find information on government workers. No addresses here, but you can find salaries and who people work for in government. If you need bulk data, I wrote a scraping script.

See Through NY: seethroughny.net/payrolls

Another good way to gleam people’s addresses and the candidates they search is NYS Campaign Finance Search. If you think somebody might work for a candidate or campaign, you can search the campaign expenses section.

NYS Campaign Finance Search: publicreporting.elections.ny.gov

The FEC Campaign Search includes a contributor’s address and reported employer, which can provide useful information.

FEC Campaign Search: https://www.fec.gov/data/receipts/individual-contributions/

Every county in New York State is required to post their tax rolls to their website. Tax rolls can be usually found by searching on Google: “XXXX County Tax Rolls” without the quotes. Not only can you find all of the properties owned by a person that way, you can find their address, assessed value and other information. Often the county tax rolls include information on tax exemptions, such as the Guilderland Solar Exemption and Veterans STAR Reduction, which can help you find people who have solar on their homes or are Veterans. I wrote a script to convert the PDFs into Excel spreadsheets.

If you need to search a whole county or the even the state, you will want to get the full roll from NYS GIS. You don’t need mapping or GIS software to use the Shapefiles — Microsoft Excel and OpenOffice can natively open .DBF which contain the data tables. NYS GIS offers selected countys tax-maps as a Shapefile or GeoPackage too.

NYS GIS Parcels Program: https://gis.ny.gov/parcels/
NYS GIS Tax Parcels Centroid Points:
gis.ny.gov/gisdata/inventories/details.cfm?DSID=1300

In addition, most counties offer their tax maps as ArcGIS REST/Services that can be used in a GIS Program like QGIS. You can find them by searching on Google: “XXX County “REST/Services” parcel”.

How to download ArcGIS Rest/Services as KML Google Maps File: mappingsupport.com/p2/kmz_demo/How_to_download_arcgis_data_as_kmz.pdf

ArcPuller is a Great Way to Get this Data in R: andyarthur.org/youll-like-arcpullr.html

In addition, Joseph Elfelt maintains a list of many open government REST/Services:

PDF: https://mappingsupport.com/p/surf_gis/list-federal-state-county-
city-GIS-servers.pdf
txt file: https://mappingsupport.com/p/surf_gis/list-federal-state-county-city-GIS-servers.t
xt
csv file: https://mappingsupport.com/p/surf_gis/list-federal-state-county-city-GIS-servers.c
sv

An easier to read version can be found here: https://servers.cartobin.com/state/New%20York

Sometimes it’s useful to find what state contracts people have:

NY Open Book Contracts Search: wwe2.osc.state.ny.us/transparency/contracts/contractsearch.cfm

See how local governments like counties and cities send their money:

Local Government Reports: wwe2.osc.state.ny.us/transparency/LocalGov/LocalGovIntro.cfm

Many different data sets can be found on data.ny.gov

NPR

Louisiana now requires an ID or other proof of age to access porn websites : NPR

On websites showcasing adult-only content, verifying your age by typing your birthdate and clicking "Go" is deemed a simple process. But in Louisiana, that's no longer the case.

As of Jan. 1, 2023, people in Louisiana will need to present proof of their age, such as a government-issued ID, to visit and view pornographic websites like Pornhub, YouPorn and Redtube.

The controversial law, known as Act 440, requires adult websites to screen their visitors using "reasonable age verification." The new law applies to any websites whose content is at least 33.3% pornographic material that is "harmful to minors," according to the bill signed last June. The law doesn't specify how the 33.3% would be calculated.

"Any commercial entity that knowingly and intentionally publishes or distributes material harmful to minors on the internet from a website that contains a substantial portion of such material shall be held liable if the entity fails to perform reasonable age verification methods to verify the age of individuals attempting to access the material," the bill states.