{
  "openapi": "3.0.1",
  "info": {
    "title": "AppFolio Rental Listings Scraper: Rent, Beds, Baths, and Photos",
    "description": "Extract public AppFolio rental listings from authorized tenant URLs into structured JSON with rent, beds, baths, square footage, availability, address, coordinates, and photos. Filter by city, postal code, rent range, pet policy, move-in date, and keywords, plus optional office contacts.",
    "version": "0.2",
    "x-build-id": "BYdJPBHcrxFWdfgxl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~appfolio-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-appfolio-scraper",
        "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/getascraper~appfolio-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-appfolio-scraper",
        "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/getascraper~appfolio-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-appfolio-scraper",
        "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": {
          "startUrls": {
            "title": "AppFolio Listing URLs",
            "type": "array",
            "description": "Public HTTPS AppFolio listing pages or detail pages you are authorized to access. Use a tenant URL such as https://example.appfolio.com/listings.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "Source URL",
                  "type": "string",
                  "description": "An HTTPS *.appfolio.com/listings URL. Add filters to the URL when needed."
                }
              },
              "required": [
                "url"
              ]
            },
            "default": [
              {
                "url": "https://apg.appfolio.com/listings"
              }
            ]
          },
          "minRent": {
            "title": "Minimum Rent",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Return listings with published rent at or above this amount. Leave empty to keep all rent levels."
          },
          "maxRent": {
            "title": "Maximum Rent",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Return listings with published rent at or below this amount. Leave empty to keep all rent levels."
          },
          "minBedrooms": {
            "title": "Minimum Bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Return listings with at least this many bedrooms. Studios are represented as zero bedrooms."
          },
          "maxBedrooms": {
            "title": "Maximum Bedrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Return listings with no more than this many bedrooms. Use this with Minimum Bedrooms for an exact bedroom range."
          },
          "minBathrooms": {
            "title": "Minimum Bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Return listings with at least this many bathrooms."
          },
          "maxBathrooms": {
            "title": "Maximum Bathrooms",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Return listings with no more than this many bathrooms. Use this with Minimum Bathrooms for an exact bathroom range."
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Keep listings in these exact published city names. Add one city per row and leave empty to include every city.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "postalCodes": {
            "title": "Postal Codes",
            "type": "array",
            "description": "Keep listings in these published postal codes. Add one code per row and leave empty to include every postal code.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "catPolicy": {
            "title": "Cat Policy",
            "enum": [
              "any",
              "allowed",
              "notAllowed"
            ],
            "type": "string",
            "description": "Filter by whether the public listing identifies cats as allowed. Any keeps the source default.",
            "default": "any"
          },
          "dogPolicy": {
            "title": "Dog Policy",
            "enum": [
              "any",
              "allowed",
              "small",
              "notAllowed"
            ],
            "type": "string",
            "description": "Filter by whether the public listing identifies dogs as allowed. Small keeps listings that mention small dogs.",
            "default": "any"
          },
          "desiredMoveIn": {
            "title": "Desired Move-In Date",
            "type": "string",
            "description": "Pass a desired move-in date to the source listing filter. Leave empty when the move-in date does not matter."
          },
          "sortBy": {
            "title": "Sort Listings By",
            "enum": [
              "date_posted",
              "rent_asc",
              "rent_desc",
              "bedrooms"
            ],
            "type": "string",
            "description": "Choose the order used by the source before records are returned.",
            "default": "date_posted"
          },
          "minSqft": {
            "title": "Minimum Square Feet",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Return listings with published square footage at or above this value. Leave empty when size does not matter."
          },
          "maxSqft": {
            "title": "Maximum Square Feet",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Return listings with published square footage at or below this value. Use this with Minimum Square Feet for an exact size range."
          },
          "includeKeywords": {
            "title": "Include Keywords",
            "type": "array",
            "description": "Keep listings whose published text, amenities, appliances, or pet policy contains at least one of these terms. Add one term per row.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude Keywords",
            "type": "array",
            "description": "Remove listings whose published text, amenities, appliances, or pet policy contains any of these terms. Add one term per row.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "requireApplicationUrl": {
            "title": "Require Application Link",
            "type": "boolean",
            "description": "Keep only listings that publish a public application link. Defaults to off so listings without an application link are not discarded.",
            "default": false
          },
          "scrapeDetails": {
            "title": "Fetch Detail Pages",
            "type": "boolean",
            "description": "Fetch each listing detail page for full description, amenities, pet policy, photos, showing link, office name, and phone. This adds one request per listing.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum Listings",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of matching unique rental listings to return across all source URLs.",
            "default": 25
          },
          "maxPages": {
            "title": "Maximum Pages per Source",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Maximum number of paginated listing pages to read from each source URL while looking for matching records.",
            "default": 10
          },
          "requestDelayMs": {
            "title": "Minimum Request Delay (ms)",
            "minimum": 10000,
            "maximum": 60000,
            "type": "integer",
            "description": "Minimum delay between requests to the same tenant. Values below the source crawl delay are raised automatically.",
            "default": 10000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}