TL;DR
Most integrations run unchanged. v3 serves the same endpoints, the same authentication, and the same flat response shape as v2 — there is no new URL, header, or version parameter. Of the v2 response contract, the large majority of fields return under the same names with the same meanings. What to check in your integration:- Identifiers — if you persist
_id, switch torealieParcelId. See the warning below. - Past-sale fields — if you read any of the fixed “past/prior sale” scalar
fields, switch to the
transfersarray, which now carries the full event history. See Removed fields. - Coded fields — 13 coded fields use new code vocabularies. Do not decode v3 values against v2 tables; use the Property Feature Field Key. See Code vocabularies.
- Bathrooms — bathroom counts are now decimals (
2.5), not truncated integers. See Type changes.
Use realieParcelId, not _id
Restored fields (16)
The v2 debt and ownership analytics — lien rollups, LTV/equity estimates, and owner tenure counts — were modeled estimates produced by our previous data provider, not recorded facts. They are carried forward under their exact v2 field names as frozen estimates, captured May 2026 (the final v2 data refresh). They do not update with new data releases, and they never mix into the recorded mortgage and lien data.
For parcels with no archived analytics, these keys are simply absent, matching
v2’s absent-vs-null conventions.
Recorded facts win: the three starred fields
totalLienCount, totalLienBalance, and lenderName can also be derived
from recorded lien and mortgage records in the new data generation, and
recorded facts win when known:
- When lien records are known for a parcel — including a known-empty set,
which counts as zero —
totalLienCountandtotalLienBalanceare computed from the recorded liens (count, and sum of amounts). The frozen estimate fills in only when lien data is entirely unknown for the parcel. - When mortgage records are known,
lenderNamecomes from the most recent recorded mortgage. If that record carries no lender name, the field is omitted — a known record without a lender never falls back to the frozen estimate. The frozen value is used only when no mortgage data is known.
Removed fields (57)
These v2 fields have no equivalent key in v3. They fall into a few families, and every family has a replacement path except the last.Past-sale scalar slots → the transfers array
v2 copied individual past sale/transfer events into fixed per-event columns.
v3 returns the full event history instead: the same data (and more) is in the
transfers array. Page the array rather than reading fixed “past/prior”
slots.
Removed (31 fields): assessorSaleBookNumber, assessorSaleDocumentNumber,
assessorSaleDocumentType, assessorSalePageNumber, assessorSalePrice,
assessorSalePriceCode, assessorSaleRecordingDate, pastBookSale,
pastBookTransfer, pastDistressedSale, pastDistressedTransfer,
pastDocumentNumberSale, pastDocumentNumberTransfer,
pastDocumentTypeSale, pastDocumentTypeTransfer, pastPageSale,
pastPageTransfer, pastPriceCodeSale, pastPriceCodeTransfer,
pastPriceSale, pastPriceTransfer, pastRealEstateOwnedSale,
pastRealEstateOwnedTransfer, pastRecoDateSale, pastRecordingDateSale,
pastSaleDateTransfer, priorSalesDate, saleBookLastSale,
saleDocumentNumberLastSale, saleDocumentTypeLastSale, salePageLastSale
Also removed (5 last-sale/transfer scalars of the same flattening class):
salePriceCodeLastSale, salePriceCodeLastTransfer, salePriceLastTransfer,
purchaseSaleDate, purchaseRecordingDate. The latest event is covered by
the flat transferDate/transferPrice fields, and per-event codes by
transfers[].saleCode.
transfers is sorted newest-first, and each entry carries exactly these
11 keys (a key is absent when the source record has no value):
transferDate, transferPrice, and the other
latest-sale scalars) are always derived from the newest dated entry of
transfers, so the scalars and the array cannot disagree.
Per-transfer deed flags
Removed (2):distressedDeedTransfer, realEstateOwnedDeedTransfer — flags
of the retired fixed transfer slots. The latest sale keeps its flat flags
(distressedSale, realEstateOwnedPurchaseSale); entries of the transfers
array do not carry per-event distressed/REO flags.
Owner name splits
Removed (6):owner1FirstName, owner1MiddleName, owner1LastName,
owner2FirstName, owner2MiddleName, owner2LastName.
The new source delivers owner names as raw LAST FIRST strings (ownerName,
and now also ownerName2); there is no authoritative split today, so these
keys are absent (not empty-string). An owner-name parsing initiative may
restore them in a future release.
Assessment component scalars
Removed (2):assessedBuildingValue, assessedLandValue — superseded by
totalBuildingValue/totalLandValue plus the full assessments history
array.
Administrative fields
Removed (10):citySection, countyUSPS, districtNum, jurisdiction,
legalUnit, phaseNum, secTwnRng, siteId, tractNum,
forecloseFileDate.
These convenience fields have no source in the new data generation, or have
structured equivalents:
Archived: USPS carrier route
Removed (1):siteCarrierRoute — not returned by the v3 API, neither flat
nor nested. The underlying value is retained in our archives and may be
restored in a future release.
Raw codes → descriptive fields
Alongside the removals above, v3 favors readable values over raw source codes for a few characteristics: air conditioning arrives as the new booleanairConditioning, and building condition and quality arrive as the
descriptive fields conditionDesc and gradeDesc.
Type changes
totalBathrooms— integer → decimal. After a bathroom-count data-quality improvement, fractional values (e.g.2.5) are now real JSON numbers. The same applies to the room-level bath fields (fullBathrooms,halfBathrooms).ownershipStartDate— format. Now returned asYYYY-MM-DD(v2 returnedYYYYMMDD).
New fields worth adopting (32)
The headline additions:realieParcelId— the stable parcel identifier. Persist this, not_id.transfers— not new, but newly central: it now carries the full sale history that v2 spread across fixed past-sale slots, with the 11-key event shape shown above.airConditioning— boolean air-conditioning presence.conditionDesc/gradeDesc— descriptive building condition and quality, replacing raw-code lookups.
- Stable key:
realieParcelId - Identity / location:
ownerName2,geometry,location,zipCodePlusFour,fullAddress,formattedAddress - Aliases of kept fields:
legalDescription(=legalDesc),lotNumber(=lotNum),blockNumber(=blockNum) - Building:
roomCount,unitCount,effectiveYearBuilt,fullBathrooms,halfBathrooms,airConditioning,styleDesc,conditionDesc,gradeDesc - Land:
depth - Sale:
qualified— boolean qualification of the latest sale; also per-event ontransfers[] - Valuation:
compModelValue,compModelValueMin,compModelValueMax,compPpsf,compCount,compMaxDistMi,compWindowMo,compModelVersion,modelVersion,estimateAgreementPct, andmodelConfidenceBucket
Internal model fields.
modelConfidenceBucket is internal-only and not
returned by the public API. The v2-era model diagnostics
(modelValueStdDev, modelConfidence, modelDate, modelValueRange) and
realieSquareFootage likewise remain excluded from public responses —
unchanged from v2, which excluded the same set.Code vocabularies
13 fields change vocabulary. The keys are unchanged, but the values are not the v2 letter codes — do not decode them against v2 tables. Decode every value with the Property Feature Field Key:
Notes:
useCodeis unchanged — the same 4-digit scheme as v2. A small number of v2 codes are retired by the new source: for example, in Florida the generic codes4001and8017are retired and those parcels are re-coded to specific successor codes.buyerVestingCodenumeric values are by design — the new vocabulary, not a data defect (e.g. code60= “Limited Liability Company / Partnership”).transferDocType— a small share of records (~2%) carry numeric source codes not yet in the named table; they will be folded into named codes in an upcoming release.transfers[].saleCodeuses the Realie code system (TQ####sale-qualification codes, e.g.TQ0022= valid arm’s-length sale,TQ0013= non-market or forced transfer) — one vocabulary across every sale event. The relatedpriceDerivationcodes (PD####, how the price figure was obtained) are included in bulk exports today and come to API responses in an upcoming release.
Data freshness
Sale histories now extend through mid-May 2026 in most states, via a fast-path append of recent recordings. Appended recent events carry a reduced record shape until they backfill in subsequent data releases:qualifiedis absent on nearly all events recorded after March 2026 (the qualification determination lags the recording), and seller (grantor) and title-company details are similarly not yet attached.transfers[].saleCode(TQ####) carries the qualification semantics — prefer it overqualifiedfor recent events.transferPriceis sparse on recent events in non-disclosure states (for example Texas), where recorded documents do not carry a price.
One more vocabulary change is coming
Sale-qualification and price-derivation codes already use Realie’s own code system (TQ####/PD####). Building and characteristic code values
migrate to prefixed Realie codes in an upcoming data release. We are
pre-announcing it so you can plan for exactly one further vocabulary change
after this migration. The complete
mapping will be published in the changelog
before it ships.