aquila-insights

Welcome to aquila-insights

These are data plots for Aquila Commercial, maintained by Nelson Lin

Aquila Operating KPIs

AMS Managed Properties KPIs [2026-03-04]

Aquila Transactions by Platform (Quarterly SF) [2026-03-04]

Aquila Transactions by Platform (Quarterly Count) [2026-03-04]

Office

Broker vs. Direct Deals – Net Effective Rent by Building [2026-03-11] - New leases only; compares represented vs. unrepresented tenants within same buildings

Aquila Benefit Dashboard

Interactive local dashboard comparing AQUILA-brokered deals vs peer deals in the same building/year using Skyline (restb.ai) lease comp data.

python dashboards/office_requirements_dashboard.py
# Open http://127.0.0.1:8050/ and click the 'Aquila Benefit' tab

Aquila Benefit tab features:

Quarterly Reports

The Office Quarterly Report is generated programmatically from Supabase + Excel data using Plotly charts, Jinja2 templates, and WeasyPrint PDF conversion. It covers 4 Austin submarkets and 6 micromarkets, producing a ~50-page branded PDF with 55 charts.

# Generate full PDF
python reports/generate_office_report.py

# HTML preview only
python reports/generate_office_report.py --html-only

# Reuse existing chart PNGs (faster iteration)
python reports/generate_office_report.py --skip-charts

Update reports/report_config.py with the new quarter before generating. Source data is read from Q:\0-Quarterly Reports\0-Office\{YEAR} Q{N}\.

Submarket boundary maps (Citywide, CBD, NW, SW, East) are generated from KMZ polygon data using Plotly Scattermapbox. Requires MAPBOX_API_KEY in aquila_graph.env.

Tenant Requirements

Requirements Total SF [2026-03-04] - Combined historical data from 2018+

Requirements Average SF [2026-03-04] - Combined historical data from 2018+

Tenant Demand by Industry [2026-03-04] - Combined historical data from 2018+

Tenant Demand by Size Range and Number [2026-03-04] - Combined historical data from 2018+

Requirements vs Absorption (Quarterly) [2026-03-04] - Compares tenant requirements against market absorption

Requirements YoY Rolling 12-Month [2026-03-04] - Rolling 12-month average SF and count with prior year comparison

Market Metrics

Asking vs Effective Rent by Submarket [2026-01-16]

Office Occupancy Rate by Building Size [2026-03-04]

Office Weighted Average Rent by Building Size [2026-03-04]

TI Allowance

TI Allowance by Size of Space [2026-03-16] - Average TI per SF by space size (Small/Medium/Large), office only

TI Allowance by Lease Term [2026-03-16] - Average TI per SF by lease term (Short/Medium/Long), office only

TI Allowance by Lease Type [2026-03-16] - Average TI per SF by lease type (New/Renewal/Expansion/Sublease), office only

Vacancy Rates (Competitive Set)

Vacancy Rate — CBD [2026-03-04]

Vacancy Rate — Northwest [2026-03-04]

Vacancy Rate — Southwest [2026-03-04]

Vacancy Rate — The Domain [2026-03-04]

Rental Rates (Competitive Set)

Rental Rate — CBD [2026-03-04]

Rental Rate — Northwest [2026-03-04]

Rental Rate — Southwest [2026-03-04]

Rental Rate — The Domain [2026-03-04]

Operating Expenses (Competitive Set)

Operating Expenses — CBD [2026-03-04]

Operating Expenses — Northwest [2026-03-04]

Operating Expenses — Southwest [2026-03-04]

Operating Expenses — The Domain [2026-03-04]

Industrial

Quarterly Reports

The Industrial Quarterly Report is generated programmatically from Supabase + Excel data using Plotly charts, Jinja2 templates, and WeasyPrint PDF conversion. It covers 7 Austin submarkets across 2 property types (Industrial + Flex), producing a ~45-page branded PDF with 52 charts.

# Generate full PDF
python reports/generate_industrial_report.py

# HTML preview only
python reports/generate_industrial_report.py --html-only

# Reuse existing chart PNGs (faster iteration)
python reports/generate_industrial_report.py --skip-charts

Update reports/industrial_report_config.py with the new quarter before generating. Source data is read from Q:\0-Quarterly Reports\0-Industrial\{YEAR} Q{N}\.

Tenant Demand (TITM)

Industrial Demand by Tenant Size [2026-03-04] - Quarterly demand grouped by size category with total demand line

Industrial Demand by Use Type [2026-03-04] - Distribution, Manufacturing, R&D/Lab, etc.

Industrial Requirements by Size Range [2026-03-04] - Total cumulative SF by size category

Industrial Requirements Total SF [2026-03-04] - Monthly total SF (Low/High)

Industrial Requirements Average SF [2026-03-04] - Monthly average SF with record count

Market Metrics

NNN Rental Rates by Submarket [2026-03-16]

Vacancy Rate by Submarket [2026-03-04]

Industrial Occupancy Rate by Building Size [2026-03-04]

Industrial Weighted Average Rent by Building Size [2026-03-04]

Retail

Market Fundamentals

Retail Vacancy Rate by Submarket [2026-03-30]

Retail NNN Rent by Submarket (RBA-Weighted) [2026-03-30]

Retail Net Absorption — Citywide [2026-03-30]

Retail Occupancy Rate by Submarket [2026-03-30]

Building Stock & Composition

Retail RBA by Building Age and Submarket [2026-03-30]

Retail Property Type Mix by Submarket [2026-03-30]

Supply Pipeline & Growth

Retail Supply Pipeline by Submarket [2026-03-30]

Retail Pipeline as % of Existing Inventory [2026-03-30]

Retail Inventory Growth by Submarket (2018 vs 2025) [2026-03-30]

East Austin Spotlight

East Austin Retail NNN Rent vs Citywide [2026-03-30]

East Austin Retail Occupancy vs Rent [2026-03-30]

Submarket Deep Dives

Northeast Austin Retail Occupancy [2026-03-30]

Urban vs Suburban Retail Occupancy [2026-03-30]

Suburban Retail Rent Growth Comparison [2026-03-30]

Demographics & Retail Demand

Retail SF per Capita by Submarket [2026-03-30]

Population Growth vs Retail Pipeline [2026-03-30]

Median Household Income vs NNN Rent [2026-03-30]

Demographic Profile by Submarket [2026-03-30]

Economic Indicators

Employment

Austin Employment - Office Sectors [2026-03-04]

Austin Employment - Industrial Sector [2026-03-04]

Austin Employment - Retail Sector [2026-03-04]

Austin vs National Tech Employment Growth [2026-03-04]

Wages

Austin vs Dallas vs National Wage Growth [2026-03-04]

Financial Indicators

Interest Rates - Treasury & Mortgage [2026-03-04]

Inflation & PPI - CPI and Office Construction Costs [2026-03-04]

Housing Indicators

Austin Housing Starts (Monthly) [2026-03-04]

Census + Labor Market Intelligence

Submarket Demographics (Census ACS 5-Year + KMZ Spatial Join)

Population by Office Submarket [2026-03-31]

Office-Using Occupations by Submarket [2026-03-31]

Educational Attainment by Submarket [2026-03-31]

Median Household Income by Submarket [2026-03-31]

Office Employment Density (Census LODES + KMZ Spatial Join)

Office-Using Employment by Submarket — 2023 Snapshot [2026-03-31]

Office Employment Growth by Submarket 2015–2023 [2026-03-31]

Professional Services: Firms & Employment — Travis County [2026-03-31]

Office Industry Sector Mix — Travis County [2026-03-31]

MSA Comparisons

Population Growth: Austin vs. Sun Belt Peers [2026-03-31]

Office-Sector Job Growth: Austin vs. National [2026-03-31]

Austin Economy

Industries and Companies That Came to Austin in 2025

Jobs Created by Industry — Austin Region 2025 [2026-03-04]

New Relocations vs. Expansions by Industry — Austin 2025 [2026-03-04]

Jobs by Location — Austin Region 2025 [2026-03-04]

Headquarters vs. Branch/Production Jobs by Industry — Austin 2025 [2026-03-04]

Monthly Jobs Announced — Austin Region 2025 [2026-03-04]

Top 10 Companies by Jobs Created — Austin 2025 [2026-03-04]

Development & Permitting

Development Pipeline Analysis

Pipeline Volume by Quarter [2026-03-04] - Total proposed SF by quarter and permit status (2015-present)

Pipeline by Land Use Type [2026-03-04] - Development activity by CRE sector (Office, Industrial, Retail, Mixed-Use, etc.)

Pipeline by Council District [2026-03-04] - Development volume by Austin City Council district

Permit Status Distribution [2026-03-04] - Breakdown of permits by current status (Active, Expired, Approved, etc.)

Regulatory & Market Efficiency

Approval Timeline Trends [2026-03-04] - Median days to approval by quarter

Year-over-Year Permit Trends by Land Use [2026-03-04] - Annual permit volume comparison across CRE sectors

Todo:


Repository Architecture

Directory Structure

aquila-insights/
├── aquila/                    # Shared Python package
│   ├── brand.py               #   AQUILA_COLORS, AQUILA_FONT, named aliases
│   ├── charts.py              #   aquila_styled_line_chart()
│   ├── dateutil.py            #   parse_quarter(), quarter_sort_key()
│   ├── git.py                 #   commit_and_push_all()
│   └── connectors/            #   Data source clients
│       ├── supabase.py        #     get_supabase_client()
│       ├── gsheets.py         #     get_gsheets_client()
│       └── fred.py            #     fetch_fred_series()
│
├── generators/                # Chart generators (organized by domain)
│   ├── office/                #   5 generators (29 charts)
│   │   ├── requirements.py    #     7 requirement charts (Google Sheets)
│   │   ├── demand_by_market.py#     5 submarket demand charts
│   │   ├── transactions.py    #     2 transaction charts (Excel)
│   │   ├── market_metrics.py  #     12 vacancy/rent/opex charts (Supabase)
│   │   └── building_performance.py  # 4 occupancy/rent by size
│   ├── industrial/            #   3 generators (9 charts)
│   │   ├── vacancy.py         #     1 vacancy chart (Supabase)
│   │   ├── demand.py          #     5 TITM demand charts (Google Sheets)
│   │   └── nnn_rent.py        #     1 NNN rent chart (Supabase)
│   ├── economic/              #   3 generators (14 charts)
│   │   ├── fred_indicators.py #     7 FRED indicator charts
│   │   ├── fred_housing.py    #     1 housing starts chart
│   │   └── austin_economy.py  #     6 Austin 2025 economy charts
│   ├── property_mgmt/         #   1 generator (1 chart)
│   │   └── ams_kpi.py
│   └── development/           #   1 generator (6 charts)
│       └── permits.py
│
├── reports/                   # Quarterly PDF report generators
│   └── map_builder.py         #   Submarket maps (KMZ -> Mapbox -> PNG)
├── dashboards/                # Local interactive Dash apps
│   ├── office_requirements_dashboard.py  # Requirements + Aquila Benefit tabs
│   └── aquila_benefit.py      #   Aquila Benefit module (Skyline NER analysis)
├── charts/                    # Published HTML charts (GitHub Pages)
├── data/                      # Input data files (Excel, CSV)
├── notebooks/                 # Jupyter development notebooks
├── archive/                   # Deprecated/test scripts
├── update_all_charts.py       # Master orchestrator
├── aquila_graphing_tools.py   # Backward-compat shim
└── aquila_graph.env           # Credentials (gitignored)

Running Charts

# Regenerate all charts (13 generators)
python update_all_charts.py

# Run a specific domain group
python update_all_charts.py --group office
python update_all_charts.py --group industrial
python update_all_charts.py --group economic
python update_all_charts.py --group property_mgmt
python update_all_charts.py --group development

# Run a single generator directly
python -m generators.office.requirements
python -m generators.industrial.vacancy
python -m generators.economic.fred_indicators

Embedding Charts

<iframe
  src="https://realdatallc.github.io/aquila-insights/charts/office/requirements_sf_total.html"
  width="100%"
  height="500"
  frameborder="0">
</iframe>

All chart URLs: https://realdatallc.github.io/aquila-insights/charts/{category}/{filename}.html


Changelog

Version Date Summary
6.9.0 2026-03-26 Solid logo watermark on all charts — changed default opacity from 0.7 to 1.0 in add_aquila_logo() and write_chart_html(); regenerated all 62 charts
6.8.0 2026-03-16 Report styling overhaul — chart legends moved below charts (horizontal, centered); table pagination reduced to 30 rows/page with continuous row numbering across pages; building lists now include # column; TOC entry labels enlarged to 12pt; TOC section headers enlarged to 12pt; footer shows “Aquila Office/Industrial Report” on bottom-left of all pages (except title/TOC); disclaimer text full-width with 8pt right padding; long-term performance chart color swaps for clarity; industrial NNN rent chart legend moved to bottom
6.7.0 2026-03-13 Office report submarket maps — reports/map_builder.py generates Plotly Scattermapbox maps from KMZ polygon data (13 submarkets); Citywide + 4 submarket maps embedded as base64 PNGs in KPI header pages; Mapbox “light” basemap with brand-colored polygons
6.6.0 2026-03-12 Aquila Benefit dashboard tab — Skyline API connector (aquila/connectors/skyline.py), NER comparison module (dashboards/aquila_benefit.py); two-tab layout in office requirements dashboard (Requirements + Aquila Benefit)
6.5.0 2026-03-09 Dashboard UX — moved Annual Demand chart to top of right column; consolidated demand-submarket-filter and demand-size-filter into left sidebar; all charts export to PNG via Plotly modebar (_CHART_CONFIG with toImageButtonOptions)
6.4.0 2026-03-09 Magic link auth for @aquilacommercial.comAPP_URL env var replaces hardcoded Vercel URL; documented SUPABASE_ANON_KEY, FLASK_SECRET_KEY, APP_URL as required Vercel env vars
6.3.0 2026-03-06 Dashboard annual demand chart converted to rolling 12M windows — aggregate_annual_demand() now returns (window_by_size, window_total, window_labels_list); solid bars, single total line, “Mar 2025–Feb 2026” range labels on x-axis; matches requirements.py Chart 7 behavior
6.2.0 2026-03-06 Removed annualized projection from demand charts — demand_by_market.py now uses rolling 12M trailing windows with zero-filled sparse months; requirements.py Chart 7 shows actual YTD with “Data through [Month Year]” subtitle; dashboard fixed top-left logo bar
6.1.0 2026-03-05 Vercel deployment for office requirements dashboard — api/index.py WSGI entry, vercel.json, brand constants stub, server = app.server, added numpy to requirements
6.0.0 2026-03-04 CLAUDE.md consolidated (1498→418 lines); added custom slash commands (.claude/commands/)
5.3.0 2026-03-02 Report pagination — building lists and large availabilities chunked at 35 rows/page with “Page X of Y” labels; TOC disclaimer anchored to bottom; new separate UC/Proposed pipeline templates
5.2.0 2026-03-02 Report style fixes — TOC heading Futura Light/Navy, pipeline split into two independently page-counted sections, industrial rental chart vacancy line corrected to Glass Blue Alt
5.1.0 2026-03-02 PNG arrow icons for KPI direction indicators (Greenspace up, Signal down); CSS polish for TOC/section dividers/pipeline; all secondary y-axes fixed to start at 0%
5.0.0 2026-02-27 MAJOR — Created aquila/ shared package (brand, connectors, charts, dateutil, git); reorganized all 13 generators to generators/ by domain; aquila_graphing_tools.py converted to backward-compat shim
4.4.0 2026-02-26 Updated to 13-color 2026 palette (Glass Blue Alt added at [2], all indices reordered); centered all chart titles globally; fixed Austin 2025 chart colors and size-range sequential ordering
4.3.0 2026-02-25 Added 12 Office Market Metrics charts (CBD/NW/SW/Domain: vacancy rate, rental rate, opex) via Supabase market_tables_office
4.2.0 2026-02-25 Added 6 Austin Economy charts from Industries and Companies 2025.xlsx (jobs by industry/location/month, HQ activity, top companies)
4.1.0 2026-02-25 Enhanced cleanup script — auto report-type detection, Supabase inventory loading, Major Leases sort/name-match, Major Sales portfolio consolidation, pipeline UC verification, Proposed sorting
4.0.0 2026-02-24 MAJOR — Added Industrial Quarterly Report PDF generator (~45 pages, 52 charts, 9 templates, 5 new modules); dual property types (Industrial + Flex); generation-based large availabilities; regional comparison charts
3.5.0 2026-02-24 Added pre-report cleanup script (cleanup_quarterly_data.py) with abbreviation standardization, Vertical Format tab creation; fixed Quarterly Changes NRA title and Property ID comma formatting
3.4.0 2026-02-24 Added 2 long-term performance pages (10 charts: Of Submarkets 2×3 + CBD vs Suburban 2×2); Class B asking rates; submarket-stacked absorption; fully stacked direct/sublease vacancy chart
3.3.0 2026-02-24 Added Table of Contents page with two-pass page number computation and anchor hyperlinks
3.2.0 2026-02-23 Report layout fixes — Major Sales as table layout, Pipeline Proposed as single fixed-width table, chart fonts scaled 1.5×, building list totals in <tfoot>
3.1.0 2026-02-23 Added Development Pipeline pages (UC + Proposed) and Quarterly Changes page; chart export scale 2×→3×
3.0.0 2026-02-19 MAJOR — Added Office Quarterly Report PDF generator (Plotly + Jinja2 + WeasyPrint, ~50 pages, 48 charts, 9 templates)
2.3.0 2026-02-19 Added Industrial NNN Rental Rates chart (Northeast/Southeast/Williamson County)
2.2.0 2026-02-19 Added Office Requirements Dashboard (Dash app with submarket/industry/size filters, YoY comparison, 3-month rolling avg)
2.1.0 2026-02-19 Added 2026 annualized projection to demand-by-tenant-size charts (main + 5 submarkets); YTD pace factor formula
2.0.0 2026-02-10 MAJOR — CLAUDE.md condensed 80%; all scripts renamed for clarity; organized by data source
1.0–1.4 2026-01-15–02-09 Initial documentation; FRED indicators; 2026 brand palette rebrand; Industrial Demand charts; categorized chart subdirectories