{
  "openapi": "3.0.1",
  "info": {
    "title": "Bid4Assets Scraper - County Tax Deed & Sheriff Sale Parcels",
    "description": "From $4.00 per 1,000 lots, no start fee. Every county tax-deed parcel and sheriff-sale property on Bid4Assets: 15,029 lots across 55 counties, measured. APN, minimum bid, close date, plaintiff, defendant, court case, debt amount. Optional per-parcel assessed value and due-diligence documents.",
    "version": "0.1",
    "x-build-id": "PBDg7jR2yXLxKW8Pt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~bid4assets-tax-sale-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-bid4assets-tax-sale-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/scrapersdelight~bid4assets-tax-sale-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-bid4assets-tax-sale-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/scrapersdelight~bid4assets-tax-sale-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-bid4assets-tax-sale-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": {
          "saleTypes": {
            "title": "Sale types",
            "type": "array",
            "description": "Which surfaces to walk. Empty means both.",
            "items": {
              "type": "string",
              "enum": [
                "tax-sale",
                "sheriff-sale"
              ],
              "enumTitles": [
                "County tax sales  (14,304 parcels / 47 storefronts / 32 counties)",
                "Sheriff & foreclosure sales  (725 properties / 36 storefronts / 29 counties)"
              ]
            },
            "default": [
              "tax-sale",
              "sheriff-sale"
            ]
          },
          "states": {
            "title": "US states",
            "type": "array",
            "description": "Two-letter state codes, e.g. \"PA\", \"CA\", \"NV\". Measured lot counts on 2026-09-18: PA 13,054 - CA 1,353 - NV 420 - LA 113 - WA 70 - OK 10 - WI 6 - FL 3. A code that is not a US state fails the run before it charges you, rather than returning a convincing empty result. Leave empty for every state.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "counties": {
            "title": "Counties / parishes",
            "type": "array",
            "description": "County or parish names, matched case-insensitively with or without the \"County\"/\"Parish\" suffix, e.g. \"Monroe\", \"Schuylkill County\", \"East Baton Rouge Parish\". Biggest today: Monroe County PA 5,366 lots - Fayette County PA 2,864 - Schuylkill County PA 1,632 - Berks County PA 1,525 - Columbia County PA 722. OR-ed together; combined with the state filter using AND.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "storefronts": {
            "title": "Specific storefronts",
            "type": "array",
            "description": "Pin the run to named sales. Accepts a slug (\"AlamedaMar26\", \"SchuylkillSheriffSales\"), a path (\"/storefront/AlamedaMar26\") or a full Bid4Assets URL. Tax-sale slugs are dated and turn over every sale season, so a slug that worked last quarter may be gone; the state and county filters above are the durable way to pin a run.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "auctionStatus": {
            "title": "Auction status",
            "type": "array",
            "description": "Leave empty for every status.",
            "items": {
              "type": "string",
              "enum": [
                "preview",
                "open",
                "sold",
                "closed",
                "withdrawn",
                "postponed",
                "stayed",
                "in_person"
              ],
              "enumTitles": [
                "preview - listed, bidding has not opened  (2,465)",
                "open - bidding live right now  (33)",
                "sold - closed with a winning bid  (1,613)",
                "closed - closed with no sale  (5,001)",
                "withdrawn - the county pulled the lot  (5,760)",
                "postponed - sheriff sale moved to a later date  (80)",
                "stayed - stayed by the court  (71)",
                "in_person - sale is being held in person, not online  (6)"
              ]
            },
            "default": []
          },
          "excludeWithdrawn": {
            "title": "Drop withdrawn lots",
            "type": "boolean",
            "description": "A county pulls a parcel when the owner pays the back taxes before the sale. Bid4Assets has no status code for it - it prefixes the lot's own title with \"***Withdrawn***\" and otherwise leaves the row looking live. Measured: 5,760 of 15,029 lots (38.3%) are withdrawn. This Actor detects them, strips the marker out of `title` and flags them in `isWithdrawn`; turn this on to drop them entirely so you never pay for a parcel that is no longer for sale.",
            "default": false
          },
          "closingAfter": {
            "title": "Closing on or after",
            "type": "string",
            "description": "YYYY-MM-DD. Filters on the lot's sale date. Use today's date to get only sales still ahead of you."
          },
          "closingBefore": {
            "title": "Closing on or before",
            "type": "string",
            "description": "YYYY-MM-DD. Combined with the field above to take one sale season, or the last 12 months of comps."
          },
          "minMinimumBid": {
            "title": "Minimum opening bid (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop lots whose opening bid is below this. Measured across the 14,999 lots that publish a non-zero opening bid: lowest $1, median $1,385, highest $2,447,008."
          },
          "maxMinimumBid": {
            "title": "Maximum opening bid (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop lots whose opening bid is above this."
          },
          "includeParcelDetails": {
            "title": "Open each lot's detail page",
            "type": "boolean",
            "description": "TAX LOTS, counted over 92 real detail pages (two from each of the 47 tax storefronts): adds the county's own Item Specifics table - parcel number 100% (vs 99.9% from the lot title, and the table also lists multi-parcel bundles in full), situs address 100%, city 86%, legal description 54%, acreage 45%, assessed value / land / improvements 59% / 35% / 27%, zoning 24%, total tax bill 16%, IRS liens 14%, the county parcel-map and GIS links 55% / 46%, deposit required 65%, bid count 65%, and every due-diligence document attached to the lot (302 documents across the 92 pages). SHERIFF LOTS, counted over 56 real detail pages across all 29 sheriff storefronts: mostly address completion - situs 98%, city 48% to 93%, ZIP 57% to 91%, deposit required 82%, legal description 41%. These are county-optional fields: a county that does not publish an assessment leaves it null, never zero.",
            "default": false
          },
          "maxLots": {
            "title": "Max lots",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on rows delivered, and therefore on rows charged. Rows dropped by the filters above are never delivered and never charged. 0 means no cap: the whole site is 15,029 lots and takes about 70 seconds without detail enrichment. A capped run returns the lots closing soonest first, so a small cap gives you what you can still bid on rather than an arbitrary slice.",
            "default": 1000
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "Measured: 30 detail pages at concurrency 8 returned 30/30 HTTP 200 in 2.9 s from a home IP, and 92 pages at concurrency 8 returned 92/92 through the Apify residential proxy at 12.4 requests/second. bid4assets did not rate-limit at any point across roughly 700 requests. Leave at 8 unless you are running several of these at once.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. bid4assets.com has no anti-bot on any of the surfaces this Actor reads: measured on 2026-09-18, the Apify datacenter (auto) and RESIDENTIAL pools returned byte-identical HTTP 200s to a home IP on both the storefront pages and the parcel API. Datacenter is the default because it is cheaper and nothing here needs more. The site serves no robots.txt at all - /robots.txt is a 404.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}