Property Owner Search — Property Records & Portfolio by Name avatar

Property Owner Search — Property Records & Portfolio by Name

Pricing

from $127.50 / 1,000 owner portfolios

Go to Apify Store
Property Owner Search — Property Records & Portfolio by Name

Property Owner Search — Property Records & Portfolio by Name

Batch 1-50 owner names with a state and optional county. Get one public-record asset profile per owner: tax-roll parcels, full-match-set value totals by county, matching business entities, and recorded documents where covered. Includes status, retry flag, and coverage notes.

Pricing

from $127.50 / 1,000 owner portfolios

Rating

0.0

(0)

Developer

Scott Helvick

Scott Helvick

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

Property Owner Search — Property Records Property Owner Portfolio — Property Records by Owner Name Portfolio by Name

An owner name can appear across tax rolls, business registers, and recorded documents without a single asset profile tying the search results together. Submit 1-50 owner queries and get one public-record portfolio per owner: matching parcels, full-match-set totals, matching business entities, and recorded documents where covered.

What this does

  • Searches by owner name and state, with an optional county constraint.
  • Returns tax-roll parcel count, assessed and market totals where published, and a per-county breakdown over the full match set, not just the returned parcel list.
  • Adds matching business-register entities and recorded documents naming the owner, where requested and covered.
  • Writes one dataset record per owner query, with status, boolean retry, and plain-language notes. There are no trailing summary rows.
  • Supports portfolio comparison across counties, assessment research for a REIT's named holdings, utility asset reviews, and batch public-record inputs for agent workflows.

Coverage

SourceCovered states
State tax-roll parcelsFL, IN, NC, NY
Business registerAK, CO, FL, IA, IL, MS, RI, WV
Recorded documentsWV

New York's statewide tax-roll source excludes the five NYC boroughs and some counties outside the city. Coverage means the source supports the state, not that every county or field is present. An uncovered state returns not_covered, uncharged; a state with only business-register coverage can return a completed entity-only profile.

Why full-match-set totals matter

A parcel list capped at 100 is not a 100-parcel portfolio. Summing only that list would understate a larger owner's holdings. maxParcels limits the returned detail records; the parcel count, value totals, and county breakdown still describe every match within the requested scope.

The same distinction matters for absence. An empty search result means a source answered and found nothing. A source that was not searched, or did not answer, is unknown rather than empty. Coverage flags and notes preserve that difference.

Matching names across sources is useful context, not proof that every similarly named entity is the same owner. Review the returned legal names and public records before drawing ownership relationships. Tax-roll values are the published assessment figures, not a new valuation of the assets.

How it compares to separate record lookups

ApproachStarting pointResult shapePortfolio totals
Single-parcel assessor lookupAddress or parcel IDOne property recordRequires separate aggregation
Business-register lookupEntity nameRegistration detailsNo parcel totals
Recorder searchParty name or document identifierRecorded documentsNo tax-roll totals
Property Owner PortfolioOwner name + stateOne owner record with covered source resultsFull-match-set parcel totals, capped detail list

Use this Actor when the owner is the starting point and an aggregated asset profile is the desired output.

Input

FieldTypeRequiredDefaultDescription
ownersarray of objectsyesnone1-50 owner queries. Each requires name and state; county is optional.
owners[].namestringyesnoneOwner name as written on the tax roll or recorded document, 2-120 characters; for example, INVITATION HOMES.
owners[].statestringyesnoneTwo-letter US state code. Submit separate owner queries for separate states.
owners[].countystringnoomittedNarrows parcel and recorded-document searches. Business-register searches remain statewide.
maxParcelsintegerno1001-500 parcel detail records per owner. Does not cap portfolio totals.
includeEntitiesbooleannotrueSearch the business register where covered.
includeDeedsbooleannotrueSearch recorded documents where covered.

Extra fields are not accepted. County is a constraint, not a hint: a county-scoped miss does not trigger a statewide fallback. The parcel search is always requested; only the other two sources have switches.

Output

Illustrative record, with synthetic values rather than a live result:

{
"query": {"name": "BLUE RIDGE HOLDINGS LLC", "state": "NC", "county": "Wake"},
"status": "completed",
"retry": false,
"coverage": {"parcels": true, "entities": false, "deeds": false},
"parcels": {
"total_matches": 2,
"truncated": true,
"parcel_count": 2,
"assessed_total": 800000,
"market_total": null,
"by_county": [{"county": "Wake", "count": 2, "assessed_total": 800000}],
"records": [{
"parcel_id": "EXAMPLE-001",
"owner": "BLUE RIDGE HOLDINGS LLC",
"county": "Wake",
"state": "NC",
"situs_address": "100 Example Rd",
"assessed_value": 500000,
"market_value": null,
"land_value": 150000,
"improvement_value": 350000,
"tax_year": 2025,
"year_built": 2001,
"building_sqft": 2400,
"lot_sqft": 10000,
"sale_price": null,
"sale_date": null
}]
},
"entities": null,
"deeds": null,
"notes": [
"Searched property tax-roll parcels in North Carolina.",
"Property tax-roll parcels were limited to Wake County.",
"Business-register search is not available for North Carolina yet, so no company records were looked up.",
"Recorded-document search is not available for North Carolina yet, so no deeds, mortgages, or liens were looked up.",
"This state's parcel file publishes assessed values but not market values, so the market total is empty for this owner while the assessed total is complete.",
"2 parcels matched this owner name; the records list shows the 1 with the highest assessed value. The parcel count, the value totals, and the county breakdown cover all 2."
]
}
FieldMeaning
queryEchoed name, state, and county; county is null for a statewide query. Invalid input uses null query values.
statusSearch outcome; see Behavior. A completed profile need not have results from all three sources.
retryWhether another run of the same query could plausibly help. It is a boolean, not a text instruction.
coverageState-level availability flags for parcels, entities, and deeds, independent of the optional switches.
parcelsParcel totals and details, or null when not searched or unavailable.
entitiestotal returned and records, capped at 25; null when switched off, uncovered, or unavailable.
deedstotal recorder matches before the returned-list cap and filtering, plus up to 25 property-document records; null when switched off, uncovered, or unavailable.
notesPlain-language scope, truncation, coverage, and outage explanations. Keep these alongside the data.

Within parcels, total_matches and parcel_count describe the full matching set. assessed_total and market_total sum published values over that set; missing values remain unknown. by_county contains county, parcel count, and assessed_total. truncated says the records list was cut; the listed parcels have the highest assessed values.

Parcel records identify parcel_id, owner, county, state, and situs_address. Published value fields are assessed_value, market_value, land_value, and improvement_value, with tax_year identifying the roll year. year_built, building_sqft, and lot_sqft describe the property; sale_price and sale_date describe a published sale. Fields not supplied by the source are null.

Entity records carry legal_name, entity_id, state, entity_type, entity_status, effective_date, principal_address, mailing_address, registered_agent, and source: the registered name and identifier, jurisdiction, type and standing, effective date, addresses of record, agent name, and source attribution. They are name matches, not verified parent/subsidiary links.

Recorded-document records carry instrument (identifier), county, state, doc_type, recording_date, book_page, description, and parties (each party's name and role). A party appearing in a document does not establish current parcel ownership. Non-property vital and military records are excluded; deeds.total can exceed the number of eligible records listed.

A searched source with no matches returns an object with an empty records list, not null. Run-level counts live separately in the key-value store's OUTPUT: owners_requested, the counts for completed, partial, no_match, not_covered, and source_error, plus charged (actual owner charges). They are not appended to the dataset.

Example

Search a REIT name statewide and a utility name within one county. These are query examples, not promises that either name will match:

{
"owners": [
{"name": "INVITATION HOMES", "state": "FL"},
{"name": "DUKE ENERGY", "state": "NC", "county": "Wake"}
],
"maxParcels": 10,
"includeEntities": true,
"includeDeeds": true
}
curl -X POST \
"https://api.apify.com/v2/acts/shelvick~property-owner-portfolio/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"owners":[{"name":"INVITATION HOMES","state":"FL"},{"name":"DUKE ENERGY","state":"NC","county":"Wake"}],"maxParcels":10,"includeEntities":true,"includeDeeds":true}'

Calling from an AI agent

Apify MCP server

Expose shelvick/property-owner-portfolio through the Apify MCP server (mcp.apify.com). Supply owners as objects, not bare strings. Read status, retry, coverage, and notes before interpreting the source results. A successful run is not proof that every owner matched.

Apify Python client

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("shelvick/property-owner-portfolio").call(run_input={
"owners": [
{"name": "INVITATION HOMES", "state": "FL"},
{"name": "DUKE ENERGY", "state": "NC", "county": "Wake"},
],
"maxParcels": 10,
"includeEntities": True,
"includeDeeds": True,
})
for record in client.dataset(run["defaultDatasetId"]).iterate_items():
print(record["query"], record["status"], record["notes"])
if record["status"] in ("completed", "partial"):
print(record["parcels"], record["entities"], record["deeds"])
if record["retry"]:
print("Candidate for a later retry:", record["query"])

REST API

Use POST /v2/acts/shelvick~property-owner-portfolio/run-sync-get-dataset-items for small batches that fit the synchronous response window. For larger or slower batches, use POST /v2/acts/shelvick~property-owner-portfolio/runs, poll the run, then retrieve /v2/datasets/{defaultDatasetId}/items.

Pricing

One owner-portfolio charge per owner record that delivered something, after the record is written to the dataset. A completed or partial record is eligible; the charge covers the combined profile, not each parcel or source separately. No owner charge applies to no-match, uncovered, outage-only, or invalid-input records. A partial record still charges when another source delivered data. Subscribers receive an automatic discount.

See the Pricing tab on this Store page for the current per-event rates and any active subscriber discounts.

Behavior

StatusMeaningOwner chargeRetry
completedEvery requested, covered source answered; at least one delivered records.Yesfalse
partialAt least one source delivered records and another covered source errored.Yestrue for a timeout/retryable outage; otherwise false
no_matchAll searched sources answered without matches.Nofalse
not_coveredNo source covers the state, or every covering source was switched off.Nofalse
source_errorNothing delivered and a source errored, or the run had no time to search this owner.Notrue
invalid_inputRuntime validation rejected the input; no owner was searched.Nofalse; correct the input

Owners run sequentially; each owner's requested, covered sources run together, up to three at once. No measured latency range is promised: source response times vary. Prefer asynchronous runs for full batches. The configured run timeout is 900 seconds, with wrap-up time reserved so unsearched owners receive retryable source_error records.

Runtime input validation produces one uncharged correction record with null query values rather than an owner result. An unexpected run-level fault can also produce a correction record; previously delivered owner records remain available. Normal owner results retain one-record-per-query shape with no trailing summary rows.

Retry only the affected queries. Retrying a delivered partial profile is a new search and may charge again. Public records can lag recent changes; a no-match is not proof that the owner has no assets, and an assessed total is not a current market appraisal.

Telemetry: to improve coverage and reliability, this Actor reports anonymous usage metrics and diagnostic events to the developer: run outcome and charge counts, duration, source delivery/error counts, coverage gaps by state, and validation counts. No-match diagnostics include the queried owner name and state; fault diagnostics can include relevant input fields. No account identifiers are collected, and telemetry never affects a run.

FAQ

Does lowering maxParcels change the totals? No. It reduces only the detail list. Totals and the county breakdown still cover the full match set within the query's scope.

Does completed mean all three sources were searched? No. Only requested sources that cover the state participate. Read coverage and notes; an entity-only answer can be completed.

Does a county filter the business register? No. County limits parcels and recorded documents only. Entity matches remain statewide, and an empty county search does not expand to the state.

Do empty answers or outages charge? No owner charge applies when nothing was delivered. A partial profile with delivered data is charged once after writing; subscribers get an automatic discount.

What this doesn't do

  • No nationwide completeness guarantee. Coverage is source-specific, with county gaps noted explicitly.
  • No ownership-tree inference. Similar names do not establish common ownership or a parent/subsidiary relationship.
  • No new asset valuation. Values are those published on tax rolls, not estimated sale prices.
  • No document images or title certification. Recorded-document results are public index entries.
  • No automatic monitoring. Each run answers the submitted owner queries at that point in time.

Use a single-parcel assessor lookup when you already have the property address or parcel ID. Use an entity-and-UCC lookup for registration and secured-filing detail; use a document-level deed lookup for the recorded instrument itself.

ActorUse it when
County Property RecordsYou have the property address or parcel ID and need its single-parcel assessor record, rather than an owner-level portfolio.
Business Entity + UCC Lien SearchYou need entity and UCC lien detail, rather than name-matched business records alongside parcel totals.
Property Deed RecordsYou need document-level deed lookups, rather than an aggregated owner asset profile.