# Austin Commercial Change-of-Use Permits (`recordfoundry/austin-commercial-use-changes`) Actor

Find Austin commercial building permits that describe a change in how a property will be used—for example, an office becoming a restaurant. Get the previous use, planned new use, and links to official records in JSON.

- **URL**: https://apify.com/recordfoundry/austin-commercial-use-changes.md
- **Developed by:** [Record Foundry](https://apify.com/recordfoundry) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1,000.00 / 1,000 nonempty permit reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Austin Commercial Change-of-Use Permits

Find Austin commercial building permits that describe a change in how a property will be used—for example, an office becoming a restaurant. Get the previous use, planned new use, and links to official records in JSON.

Built and maintained with AI agents. Each run uses fixed extraction rules; it makes no LLM calls.

### What you get

Austin provides the underlying records for free. This tool saves the work of querying them, finding explicit changes in property use inside permit descriptions, and extracting the previous and planned uses into consistent fields.

- **Focused results:** selects commercial building permits containing an explicit “change of use from … to …” phrase.
- **Traceable answers:** returns the original wording, address, issue date, status, and official permit link.
- **Collection checks:** rejects mismatched counts, duplicate identifiers, or a source update during the download.
- **Agent access:** one paid run returns a JSON report through Apify's API or MCP integration.

The tool extracts wording; it does not rank properties or predict openings. It can miss other phrasing or misread quoted, conditional, or negated text. Each result includes the original description for review.

### Quick start

Use the [editable example](https://apify.com/recordfoundry/austin-commercial-use-changes/examples/find-austin-commercial-use-changes) for a fixed sample period, or run the Actor with an empty input for the latest seven UTC dates:

```json
{}
```

For a specific period:

```json
{
  "startDate": "2026-08-08",
  "endDate": "2026-09-07"
}
```

Both dates are inclusive. Omit them for the last seven UTC dates. The maximum window is 31 days. Only Austin commercial building permits (`BP`) are queried; other permit types, residential-class permits and other cities are outside coverage. Queries above 2,000 source rows fail with a request to shorten the window.

### Output

Each run returns **one report**, with matching permits inside its `records` list.

| Field | Meaning |
| --- | --- |
| `sourceRecordCount` | Commercial building permits retrieved for the date range, before phrase matching |
| `matchedPermitCount` | Permits containing a selected change-of-use phrase |
| `collectedAt` | When this report was created |
| `sourceUpdatedAt` | The city's dataset update timestamp |
| `sourceQuery` | The exact public query used |
| `records` | Matching permits, newest issue date first |
| `summaries` | Deterministic exact-text counts for planned use, source status, and location |

Each permit includes its identifier, number, location, issue date, status, extracted transitions, complete source description, and official record link.

Each described transition contains the exact extracted `priorUse`, `proposedUse`, and `evidenceQuote`. These are source text, not standardized land-use codes. Multiple explicit transitions are retained and flagged. A description without an explicit "change of use from ... to ..." phrase is omitted, so this is not an exhaustive list of all commercial changes or business openings.

`summaries` has `summaryVersion: "1"`. `plannedUseCounts` counts each permit once for each distinct exact `proposedUse` label it contains; totals can therefore exceed `matchedPermitCount` when a permit has different labels. `sourceStatusCounts` and `locationCounts` preserve exact source values; a null status means it was missing or unavailable in the source. Locations are not grouped into neighborhoods or geocoded.

`openingDate` is always null. `historicalTransitionObserved` is false. These describe the current published record selected by its issue date; they do not reconstruct what the record said on an earlier date. They do not establish completed construction, a new tenant, a new business, delivery eligibility or a scheduled opening.

### Verified example

A live query for August 8–September 7, 2026 returned 332 commercial building-permit records and selected six explicit use-change descriptions. All six extractions were reviewed against the corresponding descriptions. Examples include a transportation-terminal-to-restaurant conversion and an administrative-office-to-medical-office conversion. This is a one-window check, not a measured general accuracy or recall rate. The source may change after this example.

The tool checks source update metadata before and after downloading, verifies the returned count, rejects duplicate or missing identifiers, and refuses partial results on those failures.

### Example agent workflow: a property research brief

Ask your agent:

> Run this tool for August 8–September 7, 2026. Turn the returned report into a short property research brief. For each result, show the address, previous use, planned new use, permit issue date, and official record link. Separate what the permit says from what still needs verification. Do not infer an opening date, new tenant, or completed construction.

The verified sample below shows what that brief can look like. These are permit descriptions retrieved September 7, 2026; the issue dates are not business opening dates.

| Property | Previous use in permit | Planned new use in permit | Permit issued | Official record |
| --- | --- | --- | --- | --- |
| 1500 SAN JACINTO BLVD | Transportation Terminal | Restaurant (2131 SF) | 2026-09-03 | [Permit 2025-086071 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13547535) |
| 4929 BURNET RD | fast food | coffee shop | 2026-09-02 | [Permit 2026-112946 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13763364) |
| 3410 FAR WEST BLVD UNIT 300 | Admin Business Office | Medical Office | 2026-08-27 | [Permit 2026-108531 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13758408) |
| 13343 N US 183 HWY SVRD NB UNIT 250 | Mercantile (food sales) | Restaurant | 2026-08-18 | [Permit 2026-107844 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13757625) |
| 620 W 6TH ST | Cocktail Bar | a Full-Service Restaurant (22620 SF) | 2026-08-10 | [Permit 2026-057238 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13699921) |
| 5703 MANOR RD | SFR | Office - No remodel work | 2026-08-09 | [Permit 2026-093933 BP](https://abc.austintexas.gov/web/permit/public-search-other?t_detail=1\&t_selected_folderrsn=13741408) |

**Research takeaway:** Three descriptions propose restaurant uses, one a coffee shop, and two office uses. This grouping summarizes the wording; it does not establish six new businesses. The Far West Boulevard description says no work is scheduled, and the Manor Road description says no remodel work.

**Next verification:** Check each official record for updated status and supporting documents before drawing conclusions about construction or occupancy. Business identity and opening dates require separate evidence.

### Use with an AI agent

Connect your agent to [Apify's MCP server](https://docs.apify.com/integrations/mcp), then ask it to find `recordfoundry/austin-commercial-use-changes` and use the research prompt above. Discovery and tool details are available without authentication; running the paid tool requires an authenticated Apify account and a sufficient run budget.

You can also start with the [editable example task](https://apify.com/recordfoundry/austin-commercial-use-changes/examples/find-austin-commercial-use-changes). Set your dates before running it. The example uses a fixed historical window so its purpose is reproducible, rather than always showing the latest week.

### Intended use

Public-record research, commercial activity analysis, and agent workflows that need traceable permit-description evidence. The tool does not enrich or infer personal contacts. Do not use it to re-identify or contact represented individuals; observe the source's use restrictions.

Source: City of Austin, Development Services Department, [Issued Construction Permits](https://data.austintexas.gov/resource/3syk-w9eu.json). [City open-data terms](https://data.austintexas.gov/stories/s/City-of-Austin-Open-Data-Terms-of-Use/ranj-cccq/). This service is not affiliated with the City of Austin.

### Freshness and empty results

Every run fetches the city's currently published records. With no dates supplied, the date window moves forward automatically. The published example has fixed dates; downloaded reports remain snapshots.

An empty `records` list means no supported phrase matched in that query window. It does not mean no property changes occurred. A failed collection is an error, not an empty successful report.

### Local verification

Maintainer checks for the source package; no local setup is needed to use the hosted Actor.

**Runtime:** Python 3.12; Apify SDK 4.0.2. The hosted entrypoint is `main.py`.

Run the offline checks:

```sh
python -m unittest -v
```

Run a live query:

```sh
python local.py \
  --start 2026-08-08 \
  --end 2026-09-07 \
  --output report.json
```

### Pricing

Pay $1 for each successfully delivered nonempty report, independent of the number of permits it contains. Queries with no matches still return a report with an empty records list and incur no report charge. Set a run budget of at least $1; this is a minimum budget requirement, not an automatic fee. Platform usage is included in the verified pricing configuration, and no synthetic events are charged.

### More from Record Foundry

[Record Foundry publisher](https://apify.com/recordfoundry) · [Chicago Property Use and Occupancy Changes](https://apify.com/recordfoundry/chicago-property-use-changes) · [FDA Import Refusal History by Facility](https://apify.com/recordfoundry/fda-import-refusal-history)

# Actor input Schema

## `startDate` (type: `string`):

YYYY-MM-DD. Defaults to six days before endDate. Maximum window: 31 days.

## `endDate` (type: `string`):

YYYY-MM-DD. Defaults to today UTC. Future dates are rejected.

## Actor input object example

```json
{}
```

# Actor output Schema

## `report` (type: `string`):

One JSON report with dates, permit counts, and records showing the previous use, planned new use, and original permit wording. An empty records list means no explicit change was found.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("recordfoundry/austin-commercial-use-changes").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("recordfoundry/austin-commercial-use-changes").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 '{}' |
apify call recordfoundry/austin-commercial-use-changes --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,recordfoundry/austin-commercial-use-changes"
        }
    }
}

```

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/hTUfmKLHBefxw0iJd/builds/L7A5PO6DPg9WN5EFl/openapi.json
