ATTOM Sales API

Recorded sale, deed, sales history, and sales trend data.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/attom-data-sales-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

attom-data-sales-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: ATTOM Area Sales API
  description: 'The ATTOM API (delivered as ATTOM Cloud) provides REST access to ATTOM Data Solutions'' national warehouse of property, real estate, and location data covering 158+ million U.S. properties. Resources are queried by address, APN + FIPS, ATTOM ID, radius around coordinates, or geoIdV4, and cover property characteristics, tax assessments, automated valuations (AVM), sales and deed history, mortgage records, area and boundary geographies, schools, community/neighborhood data, points of interest, transportation noise, consolidated all-event history, and home equity.

    Every request requires an API key passed in the `apikey` header. The URI pattern for the classic Property API is `{base}/propertyapi/v1.0.0/{resource}/{package}?{query}`; version 4 (v4) endpoints drop the component name and use a simplified `{base}/v4/{resource}` form. Area geography endpoints live under `areaapi/v2.0.0`.

    Endpoints under `propertyapi/v1.0.0` (property, assessment, avm, sale, saleshistory, salestrend, school, allevents, valuation) are grounded in ATTOM''s published endpoint reference. The v4 community, POI, area/boundary, and transportation-noise operations are modeled from ATTOM''s documented resource groups; confirm exact query parameters against the live docs.'
  version: 1.0.0
  contact:
    name: ATTOM Data Solutions
    url: https://www.attomdata.com
  x-logo:
    url: https://kinlane-images.s3.amazonaws.com/shared/apis-json/apis-json-logo.jpg
servers:
- url: https://api.gateway.attomdata.com
  description: ATTOM API gateway (production)
security:
- apiKeyAuth: []
tags:
- name: Sales
  description: Recorded sale, deed, sales history, and sales trend data.
paths:
  /propertyapi/v1.0.0/sale/detail:
    get:
      operationId: getSaleDetail
      tags:
      - Sales
      summary: Sale detail
      description: Recorded sale transaction detail for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/sale/snapshot:
    get:
      operationId: getSaleSnapshot
      tags:
      - Sales
      summary: Sale snapshot
      description: Sale transactions for properties in an area over a date range.
      parameters:
      - $ref: '#/components/parameters/PostalCode'
      - $ref: '#/components/parameters/StartSaleSearchDate'
      - $ref: '#/components/parameters/EndSaleSearchDate'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/detail:
    get:
      operationId: getSalesHistoryDetail
      tags:
      - Sales
      summary: Sales history detail
      description: Up to ~10 years of recorded sales history for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/basichistory:
    get:
      operationId: getSalesHistoryBasic
      tags:
      - Sales
      summary: Sales history (basic)
      description: Essential sales history records for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/saleshistory/expandedhistory:
    get:
      operationId: getSalesHistoryExpanded
      tags:
      - Sales
      summary: Sales history (expanded)
      description: Extended sales history records, including transaction and mortgage context, for a property.
      parameters:
      - $ref: '#/components/parameters/Address1'
      - $ref: '#/components/parameters/Address2'
      - $ref: '#/components/parameters/AttomId'
      responses:
        '200':
          $ref: '#/components/responses/PropertyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /propertyapi/v1.0.0/transaction/salestrend:
    get:
      operationId: getSalesTrend
      tags:
      - Sales
      summary: Sales trend
      description: Aggregated average/median sale prices and transaction counts for an area over an interval (up to two years).
      parameters:
      - $ref: '#/components/parameters/GeoIdV4'
      - $ref: '#/components/parameters/Interval'
      - $ref: '#/components/parameters/StartYear'
      - $ref: '#/components/parameters/EndYear'
      responses:
        '200':
          $ref: '#/components/responses/AreaResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    Interval:
      name: interval
      in: query
      schema:
        type: string
        enum:
        - monthly
        - quarterly
        - yearly
      description: Aggregation interval for trend data.
    PostalCode:
      name: postalcode
      in: query
      schema:
        type: string
      description: 5-digit ZIP / postal code to scope the search.
    EndYear:
      name: endyear
      in: query
      schema:
        type: integer
      description: Last year of the trend window.
    EndSaleSearchDate:
      name: endSaleSearchDate
      in: query
      schema:
        type: string
        format: date
      description: End of the sale date range (YYYY-MM-DD).
    Address2:
      name: address2
      in: query
      schema:
        type: string
      description: Second line of the address (city, state).
    StartYear:
      name: startyear
      in: query
      schema:
        type: integer
      description: First year of the trend window.
    Address1:
      name: address1
      in: query
      schema:
        type: string
      description: First line of the street address (house number and street).
    AttomId:
      name: attomid
      in: query
      schema:
        type: string
      description: ATTOM-assigned property identifier.
    GeoIdV4:
      name: geoIdV4
      in: query
      schema:
        type: string
      description: 32-character geoIdV4 area identifier (required by v4-and-above endpoints).
    StartSaleSearchDate:
      name: startSaleSearchDate
      in: query
      schema:
        type: string
        format: date
      description: Start of the sale date range (YYYY-MM-DD).
  responses:
    PropertyResponse:
      description: A status envelope plus an array of property records.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PropertyResponse'
    AreaResponse:
      description: A status envelope plus an array of area, school, community, or POI records.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GenericResponse'
    Unauthorized:
      description: Missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StatusEnvelope'
  schemas:
    GenericResponse:
      type: object
      description: Generic envelope for area, school, community, POI, and boundary responses.
      properties:
        status:
          $ref: '#/components/schemas/Status'
      additionalProperties: true
    Property:
      type: object
      description: A property record. ATTOM returns a rich, package-dependent object; key groups are summarized here.
      properties:
        identifier:
          type: object
          properties:
            obPropId:
              type: string
            attomId:
              type: integer
            fips:
              type: string
            apn:
              type: string
        address:
          type: object
          properties:
            line1:
              type: string
            line2:
              type: string
            locality:
              type: string
            countrySubd:
              type: string
            postal1:
              type: string
        location:
          type: object
          properties:
            latitude:
              type: string
            longitude:
              type: string
            geoIdV4:
              type: object
              additionalProperties:
                type: string
        summary:
          type: object
          additionalProperties: true
        building:
          type: object
          additionalProperties: true
        assessment:
          type: object
          additionalProperties: true
        avm:
          type: object
          additionalProperties: true
        sale:
          type: object
          additionalProperties: true
        mortgage:
          type: object
          additionalProperties: true
        owner:
          type: object
          additionalProperties: true
    Status:
      type: object
      description: The status block returned on every ATTOM response.
      properties:
        version:
          type: string
        code:
          type: integer
        msg:
          type: string
        total:
          type: integer
        page:
          type: integer
        pagesize:
          type: integer
    PropertyResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/Status'
        property:
          type: array
          items:
            $ref: '#/components/schemas/Property'
    StatusEnvelope:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/Status'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: 'Your unique ATTOM API key, assigned by ATTOM and passed in the `apikey` request header. Also send `Accept: application/json` (or application/xml).'