opsforenergy
Permit Expiry Warnings That Actually Prevent Surprises
Risk

Permit Expiry Warnings That Actually Prevent Surprises

OpsForEnergy··5 min read

The permit for the Fresno project expired on a Thursday. No one noticed until the following Tuesday, when the crew showed up to start trenching and the AHJ said the permit was no longer valid. The EPC had to restart the permitting process. The project slipped by three weeks. The customer was furious.

This is not a rare story. Permit expiry is one of the most preventable delays in solar EPC, and one of the most commonly missed. The expiry date is usually printed right on the permit document. But in a 15-project portfolio with permits across five jurisdictions, no human can reliably track every deadline.

I built the Permit Agent to handle this automatically. Here is how it works.

Step 1: Extraction. When a permit approval email arrives, the agent parses the body and attachments for an expiry date. Some jurisdictions include it in the subject line. Others bury it in a PDF attachment. The agent tries regex first, then falls back to the LLM for unstructured documents.

Step 2: Storage. The extracted expiry date is written to the Supabase permits table, linked to the project ID and jurisdiction. The agent also records the source document and extraction confidence so a human can verify if needed.

Step 3: Warning windows. The agent calculates three warning windows: 30 days (informational), 14 days (action needed), and 7 days (urgent). Every morning, it queries the permits table for expiries falling into these windows.

Step 4: Escalation. At 30 days, the agent logs a note. At 14 days, it sends a Telegram message to the PM channel. At 7 days, it tags the message as urgent and includes the exact permit number, jurisdiction, and recommended action: "Contact [AHJ] to request extension or confirm start date."

The metric: In a portfolio with 15 active permits, an estimated 2–3 expiry warnings are relevant per month. Before the agent, roughly 40% of these were missed or noticed too late. After the agent, the catch rate is 100% for permits where the expiry date was successfully extracted.

An honest limitation: The agent cannot warn about permits it has not seen. If a permit was approved before the agent was deployed, or if the expiry date was not included in the approval email, the deadline will not be tracked unless a human manually enters it into Supabase.

The expiry calendar template is available below. It includes the warning formulas and a dashboard view for at-risk permits.

Want to see this in action? Here's the demo →

Download

AHJ Permit Tracking Calendar — Google Sheets template with automated expiry warnings.

Get the calendar →