Connecticut Property Assessments - Statewide CAMA Roll avatar

Connecticut Property Assessments - Statewide CAMA Roll

Pricing

from $0.03 / 1,000 connecticut property assessment records

Go to Apify Store
Connecticut Property Assessments - Statewide CAMA Roll

Connecticut Property Assessments - Statewide CAMA Roll

Connecticut's statewide CAMA property roll (public open data, ~1.36M parcels, 153 municipalities): assessed and appraised values, owner and owner mailing address, structure attributes and the recorded sale. Filter by owner, city, town, state-use, valuation year or value.

Pricing

from $0.03 / 1,000 connecticut property assessment records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Categories

Share

Connecticut Property Assessments - Statewide CAMA Roll & Owner Records

Every Connecticut municipality's assessment roll in one place, straight from the State's own open data portal. ~1.36M parcel records across all 153 municipalities - Stamford to Killingly - with the same schema everywhere, which is what a per-town scraper cannot give you.

Low cost

From $0.00005 per record, down to $0.00003 at Gold. Pay only for the records you actually receive - the whole roll stays queryable, you are never billed for the scan behind it.

What you get

  • The value - assessed total, assessed building and land, appraised total and its split, and the prior year's assessment, so a change is visible without a second query
  • The owner - the owner name on the roll, plus the owner's mailing address, which is the field that makes out-of-town ownership visible
  • The property - the site address, map / block / lot / unit, town, ZIP, zone and state-use classification with its human label
  • The structure - year built and effective year built, living area, gross area, stories, rooms, bedrooms, baths, heating and cooling, exterior wall, roof, attic and basement type
  • The last sale - sale price, sale date, the grantor and grantee as recorded, and the book/page reference

Modes

  • rows (default) - property records matching your filters
  • aggregate - counts by town or by property city

Filters

Parcel id, map / block / lot / unit, owner name, property city, state, ZIP, street name, town id, state-use label (e.g. Single Family, Commercial, Vacant Land), building style, valuation year and minimum assessed value.

Example inputs

Out-of-state owners above a threshold - the mailing address is what makes this query possible.

{ "owner": "LLC", "minAssessedValue": 500000, "maxResults": 25 }

One municipality - each town sits on a single roll year (see the note below), so filtering by town alone is usually enough.

{ "townId": 26, "maxResults": 25 }

Condominiums in one city

{ "city": "Stamford", "stateUse": "Res. Condo", "maxResults": 25 }

Commercial parcels by value

{ "stateUse": "Commercial", "minAssessedValue": 1000000, "maxResults": 50 }

Example output

A condominium owned by an LLC - owner and city filtered:

{
"platform": "ct-cama",
"source": "ct-ogp-cama",
"corpus": "cama",
"recordKind": "property",
"mode": "rows",
"groupKey": "",
"groupCount": "",
"groupBy": "",
"pid": "10005",
"accountNumber": "002-7843",
"map": "2",
"block": "7843",
"lot": "",
"unit": "29-A3",
"townId": "135",
"propertyCity": "Stamford",
"propertyState": "",
"propertyZip": "",
"streetName": "SEATON ROAD",
"addressNumber": "224",
"owner": "JBC 1 LLC",
"mailingAddress": "196 SEATON ROAD #1",
"mailingCity": "STAMFORD",
"mailingState": "CT",
"mailingZip": "06902-3330",
"valuationYear": "2025",
"assessedTotal": "127480",
"appraisedTotal": "182120",
"stateUse": "105",
"stateUseDescription": "Res. Condo",
"styleDescription": "Condominium",
"yearBuilt": "1951",
"effectiveYearBuilt": "1994",
"livingArea": "775",
"grossArea": "775",
"stories": "1",
"totalRooms": "4",
"bedrooms": "2",
"baths": "1",
"heatFuel": "Oil",
"heatType": "Central Heat",
"salePrice": "",
"saleDate": "2020-11-02",
"saleGrantee": "JBC 1 LLC",
"saleGrantor": "OLIVEIRA JOAO T",
"bookPage": "12499/315",
"sourceUpdatedAt": "2026-09-11"
}

mode=aggregate, groupBy=propertyCity - one count row per municipality:

Stamford 38,444
Waterbury 34,659
Bridgeport 34,501
Norwalk 30,020
Danbury 28,871
Hartford 28,423

Notes on the data, from the source

  • There is no reliable unique parcel key, and pid is the corrupted one. pid and account_number are rendered in scientific notation by the source (a value comes back as the literal string 1.68812E+11), so every lot under one map/block collapses onto the same pid - a single pid covers up to 376 rows. pid is offered as a search key, never as a primary key, and it is not the default sort axis.
  • Sale dates are free text and 7.3% of them are 1900. The column mixes at least six formats (1/1/1900 12:00:00 AM, 1900-01-01, 1/1/1900 0:00, plain M/D/YYYY). 99,278 rows carry a 1900 sentinel and 19,218 are blank. Values are normalised to ISO where parseable and blanked when they are sentinels.
  • A recorded sale exists on 63.8% of rows (866,979). The rest carry a zero price, which is the source's way of saying no price was recorded - output as blank rather than 0.
  • There is no sale-price filter, deliberately. sale_price is a text column on this source, and every way of comparing it is broken: a numeric literal is rejected by the source, and a quoted one compares lexicographically - >= '500000' matches 178,300 rows while the 824,799 rows whose price has seven or more digits (all of them numerically over a million) do not match at all. Rather than ship a filter that silently returns the wrong set, the sale price is output-only; filter on it client-side.
  • Three source columns are near-empty and are not published: property_county (2.95%, and the values it does carry are dirty - case variants plus CT and bare ZIPs), the second mailing-address line (0.9%) and water frontage (3.7%). The roll's own "137 columns" is not a useful headline; this actor publishes the 73 that carry information (screened at build time; the runtime guard samples the core fields), and that is what is here.
  • Each municipality sits near its own roll year - valuationYear is not a statewide snapshot. Connecticut towns revalue on their own cycles: 85 towns are on 2026, 42 on 2025, the rest on revaluation years back to 2021, and nine towns carry more than one year in the table. Filtering valuationYear=2026 therefore returns 85 municipalities, not all 153 - pair a year filter with a town only if you already know that town's cycle, or omit the year and let the town speak for itself.
  • Grouping by town returns a large blank bucket. 72,709 rows (5.3%) carry no town_id, so groupBy=townId reports (blank) above every real municipality. Grouping by propertyCity does not have this problem (the city is populated on 100% of rows) and is the better default for a place-based view.
  • valuation_year carries data-entry garbage alongside the real roll years (2021-2027): values like 40831900 and 782180 are present. Year filters reject anything outside 2000-2100 rather than building a predicate that matches nothing.
  • Rows come back in parcel order, not newest-first. Neither recency axis is usable - sale dates are multi-format text, and the garbage years above sort above every real year on a descending roll-year sort.

Notes

  • Public open data from data.ct.gov. No login, no scraping.
  • The roll is assembled from municipal CAMA systems, which refresh on their own schedules; every record carries sourceUpdatedAt so you can see the feed's currency without running anything.
  • Charges are metered per record delivered, so a targeted query costs a fraction of a cent.