{
  "openapi": "3.0.1",
  "info": {
    "title": "Rent.com Scraper $0.8/1K",
    "description": "Extract rental listings from rent.com. Get comprehensive data including monthly rent ranges, full address with GPS, beds/baths/sqft ranges, three contact phone channels, special offers, pet policy, photos, amenities, floor plans, and per-day office hours. Apartments, houses, condos, and townhomes.",
    "version": "1.0",
    "x-build-id": "FQC5wyLq4OCvn9bUe"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~rent-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-rent-com-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/abotapi~rent-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-rent-com-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/abotapi~rent-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-rent-com-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "1. Search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode = pick city + state + filters below. URL mode = paste any rent.com URL refined in a browser (recommended for filters not exposed below).",
            "default": "search"
          },
          "locations": {
            "title": "Locations to search",
            "type": "array",
            "description": "Cities to search. Add one or more entries — the scraper visits each city. State is the 2-letter US code. Search mode only.",
            "items": {
              "type": "object",
              "properties": {
                "city": {
                  "title": "City or Neighborhood",
                  "type": "string",
                  "description": "City name (e.g. Los Angeles, Austin) — slugification is automatic.",
                  "editor": "textfield"
                },
                "state": {
                  "title": "State",
                  "type": "string",
                  "description": "Two-letter US state code (e.g. CA, TX, NY).",
                  "enum": [
                    "AL",
                    "AK",
                    "AZ",
                    "AR",
                    "CA",
                    "CO",
                    "CT",
                    "DE",
                    "FL",
                    "GA",
                    "HI",
                    "ID",
                    "IL",
                    "IN",
                    "IA",
                    "KS",
                    "KY",
                    "LA",
                    "ME",
                    "MD",
                    "MA",
                    "MI",
                    "MN",
                    "MS",
                    "MO",
                    "MT",
                    "NE",
                    "NV",
                    "NH",
                    "NJ",
                    "NM",
                    "NY",
                    "NC",
                    "ND",
                    "OH",
                    "OK",
                    "OR",
                    "PA",
                    "RI",
                    "SC",
                    "SD",
                    "TN",
                    "TX",
                    "UT",
                    "VT",
                    "VA",
                    "WA",
                    "WV",
                    "WI",
                    "WY",
                    "DC"
                  ],
                  "editor": "select"
                }
              }
            }
          },
          "propertyType": {
            "title": "Property type",
            "enum": [
              "apartments",
              "houses",
              "condos",
              "townhomes"
            ],
            "type": "string",
            "description": "Which kind of rental to search. In Search mode this is encoded into the URL path segment (e.g. apartments → /<state>/<city>-apartments) and determines what gets fetched. In URL mode it never filters: each record's type comes from rent.com's own listing data first, then the type named in the pasted URL's path segment, and this field is used only as a last-resort fallback label when neither is present.",
            "default": "apartments"
          },
          "bedrooms": {
            "title": "Bedrooms",
            "enum": [
              "",
              "studio",
              "1",
              "2",
              "3",
              "4"
            ],
            "type": "string",
            "description": "Exact bedroom count. Rent.com only exposes integer counts (no min/max ranges) on its SEO URLs. Search mode only.",
            "default": ""
          },
          "maxPrice": {
            "title": "Max monthly rent (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Snapped to the nearest rent.com SEO band: 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500, 2000. Values above 2000 disable the max-price filter (rent.com has no canonical band above $2000). Optional. Search mode only."
          },
          "petFriendly": {
            "title": "Pet-friendly only",
            "type": "boolean",
            "description": "Show only pet-friendly listings. Rent.com URL filter is `pet-friendly` (combines cats AND dogs); separate cat/dog filters are not exposed. Search mode only.",
            "default": false
          },
          "furnished": {
            "title": "Furnished only",
            "type": "boolean",
            "description": "Show only furnished listings. Search mode only.",
            "default": false
          },
          "luxury": {
            "title": "Luxury only",
            "type": "boolean",
            "description": "Show only premium / luxury listings. Search mode only.",
            "default": false
          },
          "dealsOnly": {
            "title": "Special deals only",
            "type": "boolean",
            "description": "Show only listings with active rent specials (e.g. 1 month free). Search mode only.",
            "default": false
          },
          "incomeRestricted": {
            "title": "Income-restricted only",
            "type": "boolean",
            "description": "Show only income-restricted (affordable housing) listings. Search mode only.",
            "default": false
          },
          "urls": {
            "title": "Search URLs (URL mode)",
            "type": "array",
            "description": "One or more full rent.com URLs. Tip: open rent.com in your browser, apply any filters (price band, neighborhood, amenities), then paste the resulting URL here. Multi-URL supported. Search-mode fields above have no effect on which listings are fetched, except Property type, which is used as a fallback label when neither the pasted URL nor rent.com's own listing data states one, see its own description. Pagination starts at the page in the URL and walks forward.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "How many SERP pages to walk per location/URL. Each page returns up to ~30 listings. Leave empty to walk every result page (still bounded by Max listings)."
          },
          "maxListings": {
            "title": "Max listings (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many listings across all locations. 0 = no cap.",
            "default": 20
          },
          "fetchDetails": {
            "title": "Fetch detail pages (richer data, slower)",
            "type": "boolean",
            "description": "When ON, fetch each listing's detail page for full description, complete amenity list, individual floor plans, ratings, and pet-policy details. Multiplies request count ~30× per SERP page. Default OFF — SERP cards already include 40+ fields. Detail fetches share the same warm session, so they consume no extra credits.",
            "default": false
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (optional)",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an unbounded walk across separate runs. Listings already collected there (matched by id) are skipped, so this run only saves the new ones. Leave empty for a normal fresh run. See `incrementalMode` below for recurring/scheduled monitoring instead."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "When ON, this run compares itself with the last successfully committed run of the SAME search (matched by `stateKey`, or an automatic key derived from your search/URL/filter settings) and adds `changeType` (NEW, UPDATED, UNCHANGED, REAPPEARED, EXPIRED), `changedFields`, `firstSeenAt`, `lastSeenAt` to every emitted record. By default only NEW, UPDATED, and REAPPEARED are returned (see `emitUnchanged` and `emitExpired` below). No KV store or run ID pasting needed, this actor remembers state itself. Default OFF, so existing scheduled tasks keep their current output unchanged.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional)",
            "type": "string",
            "description": "Name this monitoring campaign so the same tracked search is recognized run over run, even if you change unrelated settings like `maxListings` or the proxy. Leave empty to derive one automatically from your search/URL/filter settings (two different searches never share state). Set it explicitly if you deliberately want to share state across differently-configured runs (for example, switching between Search mode and URL mode for the same properties)."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings",
            "type": "boolean",
            "description": "When ON, incremental mode also outputs listings whose data did not change since the last run, tagged `changeType: UNCHANGED`. These rows ARE billed like any other dataset item. Default OFF: unchanged listings are scanned (so change detection still works) but not returned or charged.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings",
            "type": "boolean",
            "description": "When ON, incremental mode also outputs previously-tracked listings no longer found, tagged `changeType: EXPIRED`, but ONLY after a run that completed a full scan of the tracked search (no page cap or item cap cut it short, and no page was blocked). These rows ARE billed like any other dataset item. If a run cannot prove a complete scan, EXPIRED detection is skipped for that run and the prior tracked state is kept as-is (nothing is falsely marked gone). Default OFF.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Rent.com fronts SERP pages with a US-only edge filter; non-US IPs almost always get rejected. Apify residential US passes naturally. Datacenter or non-US proxies will be SLOW or fail entirely."
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}