# Ascension Works Tax Sale Ranking Scraper (`ascensionworks/ascension-works-opportunity-screening-request`) Actor

Rank authorized customer-supplied tax-sale listings across up to 100 counties. Also try the U.S. County Research Scraper and Tax Sale Listings Scraper.

- **URL**: https://apify.com/ascensionworks/ascension-works-opportunity-screening-request.md
- **Developed by:** [Ascension Works](https://apify.com/ascensionworks) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $420.75 / 1,000 screening completeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Ascension Works Tax Sale Ranking Scraper

Rank authorized customer-supplied delinquent-property records as county-level
research targets and as one combined cross-county listing pool.

> Independent research utility. Not affiliated with or endorsed by any
> government agency, county, auction platform, or data provider.

### About Ascension Works

Learn more about the research suite at
[Ascension Works](https://ascensionworks.net/).

Ascension Works is a venture operated by Arete Praxis LLC. The original
software, documentation, configuration, and product presentation for this
Actor are proprietary intellectual property of Arete Praxis LLC under the
Ascension Works brand. Public records, official government materials, and
third-party materials remain subject to their respective rights and terms.

### Try the other Ascension Works scrapers

- [U.S. County Research Scraper](https://apify.com/ascensionworks/ascension-works-jurisdiction-research-request)
  checks customer-scoped research availability across up to 100 counties or
  county equivalents.
- [Tax Sale Listings Scraper](https://apify.com/ascensionworks/ascension-works-current-listing-research-request)
  cleans, filters, and organizes authorized listing records across up to 100
  counties.

### Two ranking modes

County ranking compares each requested county using disclosed metrics that are
available in the supplied records: qualifying count, overall match rate,
available starting-cost and value context, sale timing, and completeness. You
can set hard county exclusions and adjust metric weights. Missing metrics are
shown and omitted from the weighted score instead of silently being scored as
zero.

Listing ranking applies the selected hard filters and deterministic profile to
every qualifying record across all included counties. It produces one global
rank, plus a rank within each county, rather than disconnected county lists.
Every result includes matching reasons, material missing fields, data date,
screening cautions, and a customer-specific identifier.

### Important limits

Each request can include 1 to 100 counties or county equivalents across multiple
states or territories. Same-named counties in different states remain distinct.
Up to 500 customer-supplied records can be evaluated in one run.

`maxResults` is the number of listing rows per page. County comparisons cover
the confirmed scope on every page, while listing ranks remain global across the
entire combined qualifying pool. The summary reports exact totals and supplies
a signed, expiring continuation cursor until every qualifying listing has been
returned. A page cap is never described as all listings.

The early-release mode ranks only records supplied by a user who confirms the
right to use them. Ascension Works does not independently collect or verify
those records in this mode. Source URLs, raw pages, credentials, personal
owner/contact information, unknown fields, malformed records, duplicate events,
stale or past records, and out-of-scope rows cannot enter the result.

Scores are research aids, not predictions and not legal, tax, title, appraisal,
financial, or investment advice. Independently verify official records, title,
liens, redemption rules, bidding eligibility, condition, and sale status.

This Actor does not provide a bulk research-route directory, raw page captures,
or internal implementation data. Automated listing collection is used only for
separately authorized routes and is not promised nationwide.

Customers select jurisdictions rather than supplying or receiving the compiled
research-route registry. For a separately approved automated route, an
authenticated service maps that jurisdiction to an owner-controlled route,
collects only allowlisted factual fields, and removes route addresses and
implementation details before any customer result is stored.

### Data handling

Your input and final output are stored in this Actor run's Apify default
storages and follow your Apify account's access and retention settings.
Customer-supplied mode is processed inside this run.

When an eligible service-side route is used, the bounded request is sent to a
restricted Ascension Works-owned Apify run. After its result is copied and
validated, this Actor deletes that temporary run's default input, output, and
queue storages. If it cannot confirm all three deletions, no research result is
delivered. Minimal service logs record only product type, output count, and
status; Apify may retain generic run metadata and logs under its platform
policies.

Do not submit owner or taxpayer names, mailing or contact details, credentials,
raw pages, or other unnecessary personal data. If you enable Apify developer
run sharing or attach a run to an Actor Issue, Apify may provide the creator
access to the shared run's input, output, and logs.

### Support and corrections

Use the Actor's Apify Issue or support control for a reproducible ranking or
normalization problem. Include only the run ID, ranking profile, and generic
status; never post credentials, private records, or personal data. Ranking
contracts, schemas, and safety controls are periodically rechecked, and affected
processing may be held unavailable while a correction is reviewed.

### Early-release status

This early release supports complete customer-supplied county and combined-pool
listing ranking with deterministic continuation. Automated collection is
limited to separately authorized routes and is not promised nationwide. One
useful completed batch of up to 500 customer-supplied records and 100 counties
receives exactly one `screening_completed` event: $0.495000 FREE, $0.470250
BRONZE, $0.445500 SILVER, or $0.420750 GOLD, plus the $0.00005 Actor-start
event. Platform usage is included. Set at least $0.49505 as the run charge
authorization. County and listing rows are included in the one batch price and
are never charged separately. Empty, invalid, unsupported, unavailable,
manual-review, and held batches receive no custom paid event.

# Actor input Schema

## `requestReference` (type: `string`):

Use the reference assigned to this bounded request. This value does not authorize processing or delivery.

## `requestText` (type: `string`):

Describe the bounded research request in plain language without including credentials, payment details, or sensitive personal information.

## `years` (type: `array`):

List one or two calendar or sale years. Availability and permitted use remain subject to the displayed product limits.

## `businessPurpose` (type: `string`):

Explain the legitimate business purpose for the requested research and how any delivered results would be used.

## `customerType` (type: `string`):

Identify the requester category so reseller, competitor, and unusual-use requests can be routed to manual review.

## `expectedVolume` (type: `string`):

Estimate the expected record volume. Large, unknown, or entire-collection requests require manual owner review.

## `deliveryMode` (type: `string`):

Choose authenticated portal or API access unless a separately reviewed written license permits an export.

## `lawfulPurposeAccepted` (type: `boolean`):

Confirm that the request is for a lawful purpose and does not seek prohibited or unauthorized use.

## `restrictedUseAccepted` (type: `boolean`):

Confirm that bulk extraction, mirroring, resale, redistribution, model training, and competitive database construction are prohibited unless expressly licensed.

## `licenseAccepted` (type: `boolean`):

Confirm acceptance of the displayed draft license and policy terms, subject to final owner review. This does not create a paid order.

## `maxResults` (type: `integer`):

Maximum listing rows returned on each page. When more records qualify, the summary supplies a signed continuation cursor and exact remaining count.

## `maxSourceAgeDays` (type: `integer`):

Exclude records older than this many days.

## `maxTargetCost` (type: `number`):

Maximum known starting amount for screening. Auction amounts are not predicted final prices.

## `minAssessedValue` (type: `number`):

Optional minimum assessed value. Records without the required value are excluded.

## `minMarketValue` (type: `number`):

Optional minimum market value. Records without the required value are excluded.

## `minValueToCostRatio` (type: `number`):

Optional minimum available value divided by the known starting amount.

## `preferredPropertyTypes` (type: `array`):

Optional allowlist of property-type words, such as land or residential.

## `preferredSaleMethods` (type: `array`):

Optional allowlist of sale-method words, such as auction or non auction.

## `sortPreference` (type: `string`):

Choose the deterministic ordering profile for matching records.

## `customerDataRightsAccepted` (type: `boolean`):

Required when you supply records. Confirm that you are authorized to use those records for this screening request. Do not include source URLs, credentials, personal owner/contact data, or raw page content.

## `customerRecords` (type: `array`):

Optional bounded records that you are authorized to use. Only the listed factual fields are accepted; unknown and private fields fail closed.

## `rankingMode` (type: `string`):

Rank counties, listings across the combined county pool, or both.

## `minQualifyingListingsPerCounty` (type: `integer`):

Optional hard exclusion for counties with fewer qualifying supplied records.

## `minCountyMatchRatePercent` (type: `number`):

Optional hard exclusion based on the percentage of current in-scope supplied records that pass all listing filters.

## `countyWeightListingCount` (type: `number`):

Relative importance of the number of qualifying supplied listings in each county.

## `countyWeightMatchRate` (type: `number`):

Relative importance of the percentage of current in-scope supplied records that qualify.

## `countyWeightValueContext` (type: `number`):

Relative importance of available assessed or market-value context. Missing values are disclosed and omitted from this component.

## `countyWeightSaleTiming` (type: `number`):

Relative importance of upcoming sale timing among qualifying supplied listings.

## `countyWeightCompleteness` (type: `number`):

Relative importance of factual-field completeness in qualifying supplied records.

## `jurisdictions` (type: `array`):

Add 1 to 100 counties, parishes, boroughs, independent cities, census areas, municipios, or equivalent local jurisdictions. Each item carries its own state or territory code, so one request may cross state lines.

## `continuationCursor` (type: `string`):

For page 2 or later, paste the signed cursor returned by the immediately preceding page and resubmit the same customer records, scope, and criteria.

## Actor input object example

```json
{
  "requestReference": "SAMPLE-SCREENING-20260809",
  "requestText": "Rank my authorized Baldwin County record by county and listing.",
  "years": [
    2026
  ],
  "businessPurpose": "Internal due-diligence research for a possible direct purchase.",
  "customerType": "direct_customer",
  "expectedVolume": "under_500",
  "deliveryMode": "portal_api",
  "lawfulPurposeAccepted": true,
  "restrictedUseAccepted": true,
  "licenseAccepted": true,
  "maxResults": 100,
  "maxSourceAgeDays": 3650,
  "maxTargetCost": 5000,
  "minAssessedValue": 0,
  "minMarketValue": 0,
  "minValueToCostRatio": 0,
  "preferredPropertyTypes": [
    "land"
  ],
  "preferredSaleMethods": [],
  "sortPreference": "best_value",
  "customerDataRightsAccepted": true,
  "customerRecords": [
    {
      "recordReference": "CUSTOMER-SAMPLE-001",
      "stateCode": "AL",
      "county": "Baldwin County",
      "recordYear": 2026,
      "listingStatus": "ACTIVE",
      "dataAsOf": "2026-08-10",
      "parcelId": "SAMPLE-PARCEL-001",
      "propertyType": "land",
      "saleMethod": "non auction tax sale",
      "minimumBidUsd": 900,
      "assessedValueUsd": 12000,
      "marketValueUsd": 15000
    }
  ],
  "rankingMode": "counties_and_listings",
  "minQualifyingListingsPerCounty": 0,
  "minCountyMatchRatePercent": 0,
  "countyWeightListingCount": 30,
  "countyWeightMatchRate": 25,
  "countyWeightValueContext": 20,
  "countyWeightSaleTiming": 15,
  "countyWeightCompleteness": 10,
  "jurisdictions": [
    {
      "stateCode": "AL",
      "name": "Baldwin County",
      "jurisdictionId": "US-AL-01003"
    }
  ]
}
```

# Actor output Schema

## `datasetId` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "requestReference": "SAMPLE-SCREENING-20260809",
    "requestText": "Rank my authorized Baldwin County record by county and listing.",
    "years": [
        2026
    ],
    "businessPurpose": "Internal due-diligence research for a possible direct purchase.",
    "customerType": "direct_customer",
    "expectedVolume": "under_500",
    "deliveryMode": "portal_api",
    "lawfulPurposeAccepted": true,
    "restrictedUseAccepted": true,
    "licenseAccepted": true,
    "maxResults": 100,
    "maxSourceAgeDays": 3650,
    "maxTargetCost": 5000,
    "minAssessedValue": 0,
    "minMarketValue": 0,
    "minValueToCostRatio": 0,
    "preferredPropertyTypes": [
        "land"
    ],
    "preferredSaleMethods": [],
    "sortPreference": "best_value",
    "customerDataRightsAccepted": true,
    "customerRecords": [
        {
            "recordReference": "CUSTOMER-SAMPLE-001",
            "stateCode": "AL",
            "county": "Baldwin County",
            "recordYear": 2026,
            "listingStatus": "ACTIVE",
            "dataAsOf": "2026-08-10",
            "parcelId": "SAMPLE-PARCEL-001",
            "propertyType": "land",
            "saleMethod": "non auction tax sale",
            "minimumBidUsd": 900,
            "assessedValueUsd": 12000,
            "marketValueUsd": 15000
        }
    ],
    "rankingMode": "counties_and_listings",
    "minQualifyingListingsPerCounty": 0,
    "minCountyMatchRatePercent": 0,
    "countyWeightListingCount": 30,
    "countyWeightMatchRate": 25,
    "countyWeightValueContext": 20,
    "countyWeightSaleTiming": 15,
    "countyWeightCompleteness": 10,
    "jurisdictions": [
        {
            "stateCode": "AL",
            "name": "Baldwin County",
            "jurisdictionId": "US-AL-01003"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ascensionworks/ascension-works-opportunity-screening-request").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "requestReference": "SAMPLE-SCREENING-20260809",
    "requestText": "Rank my authorized Baldwin County record by county and listing.",
    "years": [2026],
    "businessPurpose": "Internal due-diligence research for a possible direct purchase.",
    "customerType": "direct_customer",
    "expectedVolume": "under_500",
    "deliveryMode": "portal_api",
    "lawfulPurposeAccepted": True,
    "restrictedUseAccepted": True,
    "licenseAccepted": True,
    "maxResults": 100,
    "maxSourceAgeDays": 3650,
    "maxTargetCost": 5000,
    "minAssessedValue": 0,
    "minMarketValue": 0,
    "minValueToCostRatio": 0,
    "preferredPropertyTypes": ["land"],
    "preferredSaleMethods": [],
    "sortPreference": "best_value",
    "customerDataRightsAccepted": True,
    "customerRecords": [{
            "recordReference": "CUSTOMER-SAMPLE-001",
            "stateCode": "AL",
            "county": "Baldwin County",
            "recordYear": 2026,
            "listingStatus": "ACTIVE",
            "dataAsOf": "2026-08-10",
            "parcelId": "SAMPLE-PARCEL-001",
            "propertyType": "land",
            "saleMethod": "non auction tax sale",
            "minimumBidUsd": 900,
            "assessedValueUsd": 12000,
            "marketValueUsd": 15000,
        }],
    "rankingMode": "counties_and_listings",
    "minQualifyingListingsPerCounty": 0,
    "minCountyMatchRatePercent": 0,
    "countyWeightListingCount": 30,
    "countyWeightMatchRate": 25,
    "countyWeightValueContext": 20,
    "countyWeightSaleTiming": 15,
    "countyWeightCompleteness": 10,
    "jurisdictions": [{
            "stateCode": "AL",
            "name": "Baldwin County",
            "jurisdictionId": "US-AL-01003",
        }],
}

# Run the Actor and wait for it to finish
run = client.actor("ascensionworks/ascension-works-opportunity-screening-request").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "requestReference": "SAMPLE-SCREENING-20260809",
  "requestText": "Rank my authorized Baldwin County record by county and listing.",
  "years": [
    2026
  ],
  "businessPurpose": "Internal due-diligence research for a possible direct purchase.",
  "customerType": "direct_customer",
  "expectedVolume": "under_500",
  "deliveryMode": "portal_api",
  "lawfulPurposeAccepted": true,
  "restrictedUseAccepted": true,
  "licenseAccepted": true,
  "maxResults": 100,
  "maxSourceAgeDays": 3650,
  "maxTargetCost": 5000,
  "minAssessedValue": 0,
  "minMarketValue": 0,
  "minValueToCostRatio": 0,
  "preferredPropertyTypes": [
    "land"
  ],
  "preferredSaleMethods": [],
  "sortPreference": "best_value",
  "customerDataRightsAccepted": true,
  "customerRecords": [
    {
      "recordReference": "CUSTOMER-SAMPLE-001",
      "stateCode": "AL",
      "county": "Baldwin County",
      "recordYear": 2026,
      "listingStatus": "ACTIVE",
      "dataAsOf": "2026-08-10",
      "parcelId": "SAMPLE-PARCEL-001",
      "propertyType": "land",
      "saleMethod": "non auction tax sale",
      "minimumBidUsd": 900,
      "assessedValueUsd": 12000,
      "marketValueUsd": 15000
    }
  ],
  "rankingMode": "counties_and_listings",
  "minQualifyingListingsPerCounty": 0,
  "minCountyMatchRatePercent": 0,
  "countyWeightListingCount": 30,
  "countyWeightMatchRate": 25,
  "countyWeightValueContext": 20,
  "countyWeightSaleTiming": 15,
  "countyWeightCompleteness": 10,
  "jurisdictions": [
    {
      "stateCode": "AL",
      "name": "Baldwin County",
      "jurisdictionId": "US-AL-01003"
    }
  ]
}' |
apify call ascensionworks/ascension-works-opportunity-screening-request --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ascensionworks/ascension-works-opportunity-screening-request"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sz7TbxULgUdifjc4d/builds/r3fItrFp9dn014AWB/openapi.json
