Property Owner Search — Property Records & Portfolio by Name
Pricing
from $127.50 / 1,000 owner portfolios
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
an hour ago
Last modified
Categories
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
nameandstate, with an optionalcountyconstraint. - 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, booleanretry, and plain-languagenotes. 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
| Source | Covered states |
|---|---|
| State tax-roll parcels | FL, IN, NC, NY |
| Business register | AK, CO, FL, IA, IL, MS, RI, WV |
| Recorded documents | WV |
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
| Approach | Starting point | Result shape | Portfolio totals |
|---|---|---|---|
| Single-parcel assessor lookup | Address or parcel ID | One property record | Requires separate aggregation |
| Business-register lookup | Entity name | Registration details | No parcel totals |
| Recorder search | Party name or document identifier | Recorded documents | No tax-roll totals |
| Property Owner Portfolio | Owner name + state | One owner record with covered source results | Full-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
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
owners | array of objects | yes | none | 1-50 owner queries. Each requires name and state; county is optional. |
owners[].name | string | yes | none | Owner name as written on the tax roll or recorded document, 2-120 characters; for example, INVITATION HOMES. |
owners[].state | string | yes | none | Two-letter US state code. Submit separate owner queries for separate states. |
owners[].county | string | no | omitted | Narrows parcel and recorded-document searches. Business-register searches remain statewide. |
maxParcels | integer | no | 100 | 1-500 parcel detail records per owner. Does not cap portfolio totals. |
includeEntities | boolean | no | true | Search the business register where covered. |
includeDeeds | boolean | no | true | Search 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."]}
| Field | Meaning |
|---|---|
query | Echoed name, state, and county; county is null for a statewide query. Invalid input uses null query values. |
status | Search outcome; see Behavior. A completed profile need not have results from all three sources. |
retry | Whether another run of the same query could plausibly help. It is a boolean, not a text instruction. |
coverage | State-level availability flags for parcels, entities, and deeds, independent of the optional switches. |
parcels | Parcel totals and details, or null when not searched or unavailable. |
entities | total returned and records, capped at 25; null when switched off, uncovered, or unavailable. |
deeds | total recorder matches before the returned-list cap and filtering, plus up to 25 property-document records; null when switched off, uncovered, or unavailable. |
notes | Plain-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 osfrom apify_client import ApifyClientclient = 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
| Status | Meaning | Owner charge | Retry |
|---|---|---|---|
completed | Every requested, covered source answered; at least one delivered records. | Yes | false |
partial | At least one source delivered records and another covered source errored. | Yes | true for a timeout/retryable outage; otherwise false |
no_match | All searched sources answered without matches. | No | false |
not_covered | No source covers the state, or every covering source was switched off. | No | false |
source_error | Nothing delivered and a source errored, or the run had no time to search this owner. | No | true |
invalid_input | Runtime validation rejected the input; no owner was searched. | No | false; 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.
Related Actors
| Actor | Use it when |
|---|---|
| County Property Records | You have the property address or parcel ID and need its single-parcel assessor record, rather than an owner-level portfolio. |
| Business Entity + UCC Lien Search | You need entity and UCC lien detail, rather than name-matched business records alongside parcel totals. |
| Property Deed Records | You need document-level deed lookups, rather than an aggregated owner asset profile. |