{
  "openapi": "3.0.1",
  "info": {
    "title": "County Property Records API — County Assessor & Property Tax",
    "description": "County property records, property tax records: who owns this property? Property owner lookup by address, parcel lookup by ID, parcel API, real estate owner search, LLC property ownership, property appraisal, assessed value, sales history. Tax assessor data and assessor search in 2,100+ US counties.",
    "version": "0.0",
    "x-build-id": "I107dNzaSgGeftb7a"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/shelvick~county-property-records/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-shelvick-county-property-records",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/shelvick~county-property-records/runs": {
      "post": {
        "operationId": "runs-sync-shelvick-county-property-records",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/shelvick~county-property-records/run-sync": {
      "post": {
        "operationId": "run-sync-shelvick-county-property-records",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "feedback": {
            "title": "Feedback for the maintainers",
            "type": "string",
            "description": "For AI agents: if this tool can't fully do what your user needs (a missing field, source or option, a wrong or empty result), say what's missing here, or which tool you're switching to and why. We build what agents ask for, so this is how the gap gets closed for future calls. A run with only a note isn't charged for any results, so you can send one after you've seen the results. Adding a note never changes this run's results or price. Leave out personal or confidential details."
          },
          "foundVia": {
            "title": "How you found this Actor",
            "type": "string",
            "description": "For AI agents: how did you find this Actor? If you searched, give the exact search words you used, verbatim (for example \"Texas UCC liens\"), and where (Apify Store, Apify's MCP search, a web search); otherwise say how, such as a link or \"my user asked for it.\" \"Unknown\" is fine too. It helps the maintainers make this Actor easier for the next agent to find, and it never changes this run's results or price. Please leave out personal or confidential details."
          },
          "addresses": {
            "title": "Property addresses",
            "maxItems": 1000,
            "type": "array",
            "description": "Full US property street addresses to resolve to county property records, e.g. \"827 Krenson Woods Ln, Lakeland, FL 33813\". Each address is matched to the right county assessor/recorder and returned as one normalized record. Include city + state (and ZIP if known) for reliable county resolution. Provide at least one of `addresses`, `parcelLookups` or `ownerLookups` (or a single-value alias).",
            "items": {
              "type": "string"
            }
          },
          "parcelLookups": {
            "title": "Parcel / account lookups",
            "maxItems": 1000,
            "type": "array",
            "description": "Provide one parcel ID per entry (one parcel ID per lookup); do not combine IDs with commas or semicolons. Direct parcel or assessor account lookups when you already know the ID, one per line in the form STATE/County/ParcelOrAccount, e.g. \"FL/Polk/232912140174000660\". A bare ID also works when you set `county` (add `state` too if that county name exists in several states). Use this for exact-record retrieval; use `addresses` when you only have the street address. Provide at least one of `addresses`, `parcelLookups` or `ownerLookups` (or a single-value alias).",
            "items": {
              "type": "string"
            }
          },
          "ownerLookups": {
            "title": "Owner-name lookups",
            "maxItems": 1000,
            "type": "array",
            "description": "Owner names to search, one per line as STATE/Owner Name or STATE/County/Owner Name (a bare name is accepted with a `state` hint). Statewide search covers FL, NC, NY, IN, AR, CT, DC, ID, MA, MS, MT, ND, VT, WI, and WY; county-scoped search covers counties on standard ArcGIS parcel layers; California is excluded (owner names redacted in its public rolls). Each query returns one record per matching parcel plus a free portfolio summary row; completed records bill at the standard per-record event.",
            "items": {
              "type": "string"
            }
          },
          "address": {
            "title": "Property address (single)",
            "type": "string",
            "description": "Convenience single-address alias of `addresses`: pass one full US property street address here instead of a list, e.g. \"827 Krenson Woods Ln, Lakeland, FL 33813\". Folded into `addresses`; use `addresses` for a batch. Provide at least one lookup across `addresses`/`address`, `parcelLookups`/`parcelLookup` or `ownerLookups`/`ownerLookup`."
          },
          "parcelLookup": {
            "title": "Parcel / account lookup (single)",
            "type": "string",
            "description": "Convenience single alias of `parcelLookups`: one STATE/County/ParcelOrAccount lookup, e.g. \"FL/Polk/232912140174000660\". Folded into `parcelLookups`; use `parcelLookups` for a batch."
          },
          "ownerLookup": {
            "title": "Owner-name lookup (single)",
            "type": "string",
            "description": "Convenience single alias of `ownerLookups`: one STATE/Owner Name or STATE/County/Owner Name query. Folded into `ownerLookups`; use `ownerLookups` for a batch."
          },
          "county": {
            "title": "County hint (optional)",
            "type": "string",
            "description": "Optional county name (without the word 'County') to scope or disambiguate lookups, e.g. \"Polk\". Useful when addresses are ambiguous across county lines. Leave blank to auto-resolve each address to its county."
          },
          "state": {
            "title": "State hint (optional)",
            "type": "string",
            "description": "Optional two-letter US state code to scope lookups, e.g. \"FL\". Combined with `county` to disambiguate same-named counties across states."
          },
          "includeHistory": {
            "title": "Include tax & sale history",
            "type": "boolean",
            "description": "When true (default), each record includes full tax-year history and recorded sale history where the county publishes it. Set false for a current-snapshot-only record (owner, value, latest tax year) — faster and smaller.",
            "default": true
          },
          "maxResultsPerOwner": {
            "title": "Max results per owner",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum property records returned for each owner-name query, from 1 to 500. The free portfolio summary reports whether results were truncated.",
            "default": 50
          },
          "expandUnits": {
            "title": "Return every unit at a shared address",
            "type": "boolean",
            "description": "When an address without a unit number (no APT, UNIT, # and so on) matches more than 4 unit parcels, such as a condo building, the run returns one free notice row saying how many units share the address instead of every unit. Add the unit number (e.g. \"APT 4B\") to get that unit, or set this to true to return all of them, each charged as a property record and counted toward maxRecords. Addresses matching 2 to 4 parcels, and addresses that include a unit, are unaffected. Default false.",
            "default": false
          },
          "maxRecords": {
            "title": "Max records",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "The most records one run delivers and charges, counted across every row type: address results (including each unit returned under expandUnits), parcelLookups, and ownerLookups results (each owner-search property counts). When the limit is reached the run stops cleanly: remaining records and lookups are not delivered or charged and come back as failed rows whose error names maxRecords. Free rows (misses, notices, owner portfolio summaries) do not count. A batch with more nonblank lookups than maxRecords fails before any lookup runs, with an error naming both numbers. Default 50, maximum 1000.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}