Electrical Contractor AI: Setting Up Permit and Inspection Tracking

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Electrical Contractor AI: Setting Up Permit and Inspection Tracking.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for Electrical Contractor AI: Setting Up Permit and Inspection Tracking.

Keep one spreadsheet with a row per job: permit or notification status, application date, expected decision, each inspection booking, who the job is waiting on and a next-action date. Let formulas flag quiet or overdue rows, use AI weekly to draft chasers and spot contradictions, and confirm rules and book inspections yourself.

Most stalled electrical jobs are not refusals. They are an application waiting for a customer's signature, a permit email that landed in a shared inbox, or a failed inspection nobody re-booked. Each of those becomes a visible row with a date. What a job needs (a permit, a notification, an inspection before the walls close, or none of these) depends on your authority and the type of work, so the tracker has a column for what the authority said and the AI never fills it in. The tracker takes over once an application is ready to send; preparing the application itself, from the data sheet to the scope summary, is in the electrical permit application tutorial, and the wider line between admin and code questions is in admin yes, code answers no.

Follow me on Instagram@sagnikteaches

One row per job: the eighteen columns and who fills them in

Permit trackers usually fail because they are kept per document. A single rewire can involve an application, a rough-in (first fix) inspection, a final (second fix) inspection and a certificate, and the crew only cares about two questions: can we start, and can we close up? So the row belongs to the job, and the document steps run across it as columns. Eighteen columns sounds like a lot, but on any given day you type into three or four of them.

Connect on LinkedInSagnik Bhattacharya
ColColumnWhat goes in itWho updates it
AJob refYour job number. Use this, not the customer's name, in anything you paste into AI.Office, at set-up
BWork typePanel upgrade, EV charger, rewire, new circuit, sub-board, generator hook-up and so on.Office
CRule checkNot yet checked, Permit, Notification or Neither. Add a cell note with the date and the authority page or person you relied on.Office, after asking the authority
DInspections neededNone, Final only, Rough-in and final, or Other (explain in column R).Office, from the same check
EStatusOne word from a fixed list (see the next section).Whoever moves the job
FApplication sentDate, with the reference number in a cell note.Office
GTypical decision timeWorking days, taken from the authority's published times or your own history.Office, per authority
HExpected decisionFormula: application date plus typical decision time.Nobody, it calculates
ICleared onDate the permit was granted or the notification acknowledged.Office
JRough-in booked forDate and time, only once you hold a confirmation.Office
KFinal booked forDate and time, same rule.Office
LWaiting onUs, Customer, Authority, Inspector, Supplier or Utility.Whoever moves the job
MLast movementDate of the last real change, not the last time someone looked.Whoever moves the job
NNext actionOne short sentence with a verb: "Send single-line diagram", "Book final".Whoever moves the job
ONext action dueDate.Whoever moves the job
PQuiet daysFormula: working days since column M.Nobody, it calculates
QFlagFormula that shows what needs attention, or stays blank.Nobody, it calculates
RConditions and notesAnything the authority attached: "notify before covering", "re-inspection after rectification".Office

Two columns carry most of the value. Column L stops the argument about whose move it is, because a job can only be waiting on one party at a time. Column M stops a job looking busy because someone opened the row last Tuesday.

Subscribe on YouTube@sagnikteaches

Status words, and the proof each one needs

Column E takes its values from a drop-down list so nobody invents "sort of approved". Use this set and no more: To apply, Applied, Info requested, Cleared to start, Rough-in booked, Rough-in passed, Rough-in failed, Final booked, Final passed, Final failed, Certificate issued, Closed. Each word has to be backed by something you can point to.

  • Applied needs a date in column F and a reference number. No reference, no "Applied".
  • Cleared to start needs the permit, the acknowledgement or the written answer that nothing is needed, saved in the job folder, and column I filled in.
  • Rough-in booked and Final booked need a confirmation (email, portal screenshot or a name and time from a phone call) and the date and time in column J or K. A voicemail you left does not count as booked.
  • Rough-in passed and Final passed need the result in the job folder. A failed result needs the reasons copied into column R the same day.
  • Certificate issued needs the signed paperwork filed. If you want to see where AI helps and where it must stop on that document, read what AI can draft and you must sign.

One house rule belongs on the first row of the sheet in bold: nobody closes up walls, ceilings or trenches on a job whose column D says an inspection is needed until the matching status is "passed" or the authority has told you in writing that the inspection is not required. It costs nothing to print, and it is the rule that prevents the expensive opening-up later.

Work that goes through a notification rather than a permit fits the same columns. Treat "Application sent" as the date you notified, "Cleared on" as the date it was acknowledged, and keep the rule check cell honest: some notifiable work still needs a final inspection or a certificate sent to the customer within a set time, and column D is where you record that. The flag still catches a notification with no acknowledgement.

One more party stalls panel upgrades and new supplies: the network operator or utility that has to disconnect and reconnect the service, or be told about a new load such as an EV charger. Give it its own value in column L (Utility), put its reference in the cell note on column F beside the permit reference, and hold its appointment to the same proof rule as an inspection: no confirmation, no date in the sheet. Put the reconnection date in column R as well, because a rewire that has passed its final can still sit idle for a week waiting on a slot nobody requested, and the Friday scan can only spot that if the date is written down.

Formulas that do the nagging

The flags come from ordinary formulas, not from AI. A formula gives the same answer every time you open the sheet, which is what you want from a warning light. (Microsoft also retired Excel's COPILOT worksheet function in September 2026, so a tracker built on it would have broken anyway.) The three formulas below work in Google Sheets and in Excel; they assume the column layout above and start in row 2.

H2 (expected decision):
=IF(OR(F2="",G2=""),"",WORKDAY(F2,G2))

P2 (quiet days):
=IF(M2="","",NETWORKDAYS(M2,TODAY())-1)

Q2 (flag), typed as one line:
=IF(E2="Closed","",IF(C2="Not yet checked","CHECK RULES",IF(AND(E2="Applied",H2<>"",TODAY()>H2),"CHASE AUTHORITY",IF(AND(E2="Cleared to start",D2="Rough-in and final",J2=""),"BOOK ROUGH-IN",IF(AND(OR(E2="Rough-in passed",AND(E2="Cleared to start",D2="Final only")),K2=""),"BOOK FINAL",IF(OR(E2="Rough-in failed",E2="Final failed"),"REBOOK",IF(AND(O2<>"",O2<TODAY()),"ACTION OVERDUE",IF(AND(P2<>"",P2>=5),"QUIET 5+ DAYS",""))))))))

Then add two finishing touches. Apply data validation (a drop-down list) to columns C, D, E and L so only your agreed words can go in. Apply conditional formatting to the whole row with a custom formula such as =$Q2<>"" so any flagged row turns amber, and a second rule, =OR($Q2="CHASE AUTHORITY",$Q2="REBOOK"), placed above the first so those rows turn red. Test the formulas with three dummy rows (one applied and overdue, one cleared with no booking, one failed) before you enter a real job.

If you would rather not type the formulas, ask an AI to build the sheet and then check its work against your three dummy rows. A prompt along these lines does it, and the same prompt works in a ChatGPT or Claude Project so you can come back to it. If you want more spreadsheet prompts of this kind, the Google Sheets AI prompts tutorial has a longer set.

I run a small electrical contracting firm and need a permit and inspection tracker in Google Sheets.
Columns A to R: Job ref, Work type, Rule check, Inspections needed, Status, Application sent,
Typical decision time (working days), Expected decision, Cleared on, Rough-in booked for,
Final booked for, Waiting on, Last movement, Next action, Next action due, Quiet days, Flag,
Conditions and notes.
Give me: (1) the exact formulas for Expected decision, Quiet days and Flag, using only WORKDAY,
NETWORKDAYS, TODAY, IF, AND and OR; (2) the drop-down lists for Rule check, Inspections needed,
Status and Waiting on; (3) conditional formatting rules for the Flag column.
Flag logic: CHECK RULES if Rule check is "Not yet checked"; CHASE AUTHORITY if Applied and today is
past Expected decision; BOOK ROUGH-IN or BOOK FINAL when cleared but no inspection date;
REBOOK after a failed inspection; ACTION OVERDUE when Next action due has passed;
QUIET 5+ DAYS when Quiet days is 5 or more. Do not use any AI function in the sheet.
Then give me three dummy rows that should trigger three different flags, so I can test it.

Expect the whole build to take an afternoon: about 20 minutes for the columns and lists, 20 for the formulas and the dummy-row test, and 40 to enter 14 live jobs at roughly three minutes each. Typing a job's history from memory is the slow part, so enter only the current status, the next action and the dates you can prove.

A Friday with fourteen live jobs

Take an invented six-person firm: two two-person crews, an owner and an office manager, with 14 jobs open. A two-person crew costs this firm about $95 an hour all-in (wages, van, insurance, tools), so an idle day is roughly $760 of paid time that bills nothing. Use your own figure; the point is that two single-day stalls in a month cost $1,520 before anyone is annoyed.

On Friday afternoon the office manager exports the sheet as CSV (it holds job refs and no customer names) and pastes it into the standing prompt below. Seven of the rows look like this once the formulas have run.

JobWorkStatusWaiting onQuiet daysFlag
J-0412Panel upgradeAppliedAuthority7CHASE AUTHORITY
J-0418Full rewireCleared to startUs3BOOK ROUGH-IN
J-0420Garage sub-boardRough-in failedUs2REBOOK
J-0423Loft wiringTo applyCustomer9ACTION OVERDUE
J-0427Kitchen circuitsFinal bookedInspector6QUIET 5+ DAYS
J-0431EV chargerFinal bookedInspector1
J-0433Shed supplyTo applyUs0CHECK RULES

The formulas have already done the arithmetic. What they cannot do is notice that J-0427's final inspection was booked for a date that has passed with no result recorded, or write six different messages. That is the AI's job.

You are the permit-and-inspection assistant for a small electrical contracting firm.
Below is today's tracker export as CSV. It uses job refs only. Today is [date, written as 6 November 2026].
Rules:
1. Use only what is in the CSV. If a date, reference or status is missing, say so; never fill it in.
2. Do not tell me what any permit requires or what any code says.
3. Output four parts:
   A) Jobs to act on today, earliest crew date in the notes first, each with the reason and one
      next action.
   B) Jobs quiet for 5 or more working days.
   C) Data problems: statuses that contradict the dates, booked dates in the past with no result,
      missing references, rows with no next action.
   D) Short draft messages for A, with [reference needed] wherever a detail is missing.
CSV:
[paste]

A trimmed response might read: "A) J-0418, full rewire: cleared three working days ago, no rough-in booked, and the notes column says the crew starts Monday week; book the rough-in today or move the crew. J-0420: rough-in failed two working days ago; rectify and rebook. J-0412: two working days past the expected decision; chase. C) J-0427 shows Final booked, but the booked date was Wednesday and there is no result; confirm with the inspector whether it happened. J-0433 has no rule check; ask the authority before quoting a start date."

The response earned its keep on J-0427, which no formula flagged. It also made one mistake worth knowing about: it read 06/11 in an older row as 11 June. Writing dates as "6 November 2026" in the sheet, or telling the AI "dates are day/month" in the prompt, fixes that for good. The whole Friday routine takes about 15 minutes: paste, read, send the chasers, update the rows.

Four chasers, four tones

The same row produces four different messages, because each reader needs something different from it. Ask the AI for drafts in one go and read them as the person receiving them. Do not auto-send: a draft that quotes the wrong reference number to an authority costs more time than writing it yourself.

ToTriggerWhat it must containWhat to remove
Authority or permit officeCHASE AUTHORITYReference, submission date, the start date at risk, one clear question.Complaints and guesses about why it is slow.
CustomerWaiting on CustomerWhat you need (a signature, a decision, access), by when, and what it protects.Jargon and any promise about the authority's timing.
InspectorBOOK or REBOOKReference, address, stage, preferred slots, who will be on site.Anything that reads as arguing a failed result.
Own crewRough-in or final bookedDate and time, what must stay uncovered, who is on site, who has the keys.Extra detail. Crew read three lines.

Here is a draft to the authority for J-0412, with the placeholders left for you to complete:

Subject: Application [reference needed], status check

Hello, we submitted this application on [date] and the published decision time has now passed. Could you tell me whether anything further is needed from us, and when we can expect a decision? Our crew is booked to start on [date], so a date would let us plan. Thank you, [your name], [company], [phone].

And a text to a customer on J-0423, whose signature has been outstanding for nine working days:

Hi [first name], we are still waiting for your signature on the form we emailed on [date]. We cannot send the application until it is signed, and your start date of [date] depends on it. Could you sign it today? If anything on the form is unclear, call me on [phone] and I will talk you through it.

The second message is better than most people's first attempt because it ties the request to the customer's own start date. Left alone, an AI tends to soften it into "just a gentle reminder", which tells the customer there is no urgency. Add "state the consequence for their start date" to the prompt and the tone corrects itself.

A failed inspection is the row most likely to slip, because the crew has moved on and the office assumes someone else is fixing it. Treat the failure itself as a trigger for three small jobs on the day: copy the inspector's reasons into column R word for word, set the next action to the fix and a named person, and send the rebooking request while the memory is fresh. Ask the AI to turn the reasons into a plain list for the crew, and keep its wording out of anything sent to the inspector. With reasons such as a loose cable support and an unlabelled circuit at the board, the crew list is two lines, the rebooking message is three, and the row is back in the plan by the end of Friday.

Turning an authority email into a tracker update

The other time-saving job is reading. Authority emails are long and mostly boilerplate, and the one useful sentence is easy to miss. Paste the email and ask for a proposed row update instead of a summary, then apply it yourself.

Read this email from an authority about job [job ref]. Return only:
Status (choose from: To apply, Applied, Info requested, Cleared to start, Rough-in booked,
Rough-in passed, Rough-in failed, Final booked, Final passed, Final failed, Certificate issued),
Waiting on, Date of this email, Any dates mentioned (with what each date is for),
Conditions (a separate bullet for every condition, quoted exactly),
Next action and who owns it. If the email does not say, write NOT STATED. Do not interpret the rules.
EMAIL:
[paste]

Suppose an authority email reads: "Your application has been accepted subject to the conditions below. Please notify this office before any cable is concealed. Inspection slots are released five working days ahead and are booked through the portal." A good response sets Status to Cleared to start, Waiting on to Us, and Conditions to two bullets: notify before concealing, and book through the portal with slots released five working days ahead. That second bullet matters, because it means the rough-in cannot be booked earlier than five working days before the date you want it, which changes when column O should fall.

The realistic failure here is dropped conditions. An AI asked for a summary will often write "approved" and lose the condition that decides when you can cover the cables. That is why the prompt asks for each condition as its own quoted bullet, and why column R exists. Read the original email when a condition affects a date.

Where AI stays out of the tracker

The tracker is a memory and a writing aid. It is not a source of rules. Keep these four things with a person, every time:

  • Whether a job needs a permit, a notification or an inspection. The authority decides, and the answer can change with the scope of the work. The AI can list the questions to ask; it cannot answer them. For code questions in particular, see how to test an AI before anyone relies on it.
  • Whether an inspection result is a pass. Only the inspector's record counts. Never let a draft message say "passed" because the crew said so.
  • Declarations and certificates. Anything signed in your name is yours to read in full.
  • Personal data. Use job refs in prompts. If you do need an address in a draft, add it after the AI has finished. On a consumer plan, check the model-training switch in the privacy settings before you paste anything business-related at all.

One more limit is practical rather than ethical: an AI chat cannot log in to a permit portal on your behalf and wait for a decision. If a vendor tells you their agent does that, ask who is responsible for a wrong submission before you try it.

Checking after four weeks that it worked

A tracker proves itself in numbers you already have. Record these at the start, then again after four weeks, and keep the sheet only if they move.

MeasureHow to get itWhat good looks like
Days between clearance and booking an inspectionColumn I to the booking date, across closed jobsA rule you set, for example booked within two working days
Crew-days lost waiting on paperwork or inspectionsSchedule notes, one line per incidentFewer than last month, each one explained
Failed inspections that were re-booked inside two working daysRows with a failed statusAll of them
Actual authority decision timesApplication date to cleared date, per authorityReplace the guess in column G with your own median
Minutes spent on the Friday reviewA stopwatch for four weeksUnder 20, after the first week

Column G is the one to improve first. Start with the authority's published decision time if it has one and replace it with your own median after ten jobs. An AI can calculate that median from an export, but check it once with a pivot table or a calculator, because AI arithmetic on a long column of dates is a known weak spot.

If a month in the Friday scan finds nothing, that is a result too. Either the jobs are moving, or the columns are not being updated. The quiet-days column tells you which: when every row says 0 or 1 and nothing has changed, someone is touching rows without moving them.

Questions electrical contractors ask before trusting a tracker

Can AI submit permit applications or book inspections for me?

Not reliably, and I would not try. Applications and bookings go through the authority's own portal or phone line, often with a login and a declaration that you make as the contractor. AI can prepare the text you paste in and tell you when a booking is overdue. Keep the submitting and the declarations with a person.

Which AI tool should I use for the Friday scan?

Any of ChatGPT, Claude, Gemini or Copilot can read a pasted export and follow a fixed prompt, so pick the one your office already has on a business plan. Business plans do not train on your content by default, but check the privacy setting yourself, because labels change. Save the prompt in a Project so each week starts from the same rules.

Is it safe to paste customer details into an AI chat?

Avoid it. Use job references instead of names, addresses and phone numbers, and add the real details to a draft after the AI has written it. The tracker works perfectly well with a job reference and a work type, and that keeps personal data out of a tool you do not control.

My authority has an online portal with its own status. Do I still need a tracker?

Yes. A portal shows the authority's side only. Your tracker also shows what you are waiting for from the customer, which inspections nobody has booked, and which crew dates depend on them. Copy the portal status into the row whenever you check it, and use the portal's published times to fill the typical decision column.

Further reads

Want your permit and inspection chasing set up properly?

On a 1:1 call we can map how permits, notifications and inspections move through your jobs, build the tracker around your own authority's steps, and decide which chasers AI should draft for you.

Book a 1:1 call with me