PermoraPermit & Inspection Tracker for Trades
Track permits and inspections across every job — exact date-math alerts, owned outright.
No sign-up, no password — the demo opens already signed in, on sample data.
- Full PHP source included
- Instant download + licence key
- It never phones home
The problem it solves
Electrical, plumbing, HVAC, and general contractors juggle permits and inspections across every active job — and the tracking usually lives in a truck-cab notebook or a spreadsheet. A missed re-inspection stalls the job; an expired permit can mean re-applying and re-paying. Construction-management SaaS solves this as a side feature, priced per user, per month, forever.
- Inspection dates and permit expiries scattered across jobs, with no single alert board
- Failed inspections that need a re-inspection nobody scheduled
- Per-user monthly SaaS pricing for what is, at its core, structured record-keeping
What you get
PDFs up to 10 MB — the actual permit, the inspection report — stored under a minted name, decided by the file's bytes, and served back with the recorded type. The file picker says "photo or report" because that is what arrives.
Expiries and inspections as token-guarded .ics feeds your calendar subscribes to — and a revoke button per feed, so a contractor who left stops seeing your schedule immediately. Rotating and revoking are separate acts, as they should be.
Organise work as jobs — electrical, plumbing, HVAC, or general — each with site address, client, and status.
Track each permit's AHJ/jurisdiction, type, number, application/issued/expiry dates, fee (kept in exact cents), and status.
Schedule inspections per permit with type, date, inspector, and result — and turn a failed or partial result into a linked re-inspection in one click.
Overdue inspections, permits expiring in configurable 60/30/7-day windows, and active jobs with no next inspection scheduled — all computed exactly, leap-year and DST-safe.
A dependency-free PDF of the full permit and inspection history for any job — for the client, the GC, or your records.
Permits and inspections export to spreadsheet-safe CSV, hardened against formula injection, with fees kept numeric.
Add it to a phone or tablet home screen straight from the browser — a full-screen app served from your own server, with no app store involved. Business data is never cached offline, so what you see is always live.
Permora 2.0 adds the 2.0 owner layer. Upgrade by replacing the files — the database migrates itself, and it is still the same one-time purchase.
- REST API with an OpenAPI spec and signed webhooks
- Two-factor sign-in (TOTP)
- Email notifications through your own SMTP
- CSV import with a mandatory dry run
- One-click backups
- Dark mode
MCP tools read permits and inspection histories, pull the expiry report, record permits, book inspections and record findings — and an inspection is decided once: the re-inspection chain is built by the same function the button calls, so an agent cannot spawn a follow-up from a passed inspection.
- Roles with email invitations and a last-admin guard
- Append-only audit trail across browser, API and agent
- Printable PDFs
- Your logo and colours throughout
- Scheduled backups with a guided dry-run restore
- Optional single sign-on (OIDC)
The 3.1 wave gave the catalogue a way to reach the other side of the transaction: counterparty email through your own SMTP server, calendar feeds your own calendar subscribes to, attachments filed where the paperwork belongs, and export presets other people's software imports. Every outbound path ships switched off, runs on your own credentials, and can never break the thing that triggered it. What this app gained is listed at the top of this section.
Pricing — one-time, yours forever
- ✔ Full source included — PHP you can read and change
- ✔ No subscription. One payment, yours forever
- ✔ It never phones home
- ✔ Your data stays on your server
Which licence do I need?
It comes down to how many installations you need. Running your own business on one site is the Single licence. Building or running sites for other people — a second domain of your own, or an installation a client keeps — is the Extended licence.
Single licence
One (1) domain or subdomain
One business, running it on one site.
- Install it on one domain or subdomain you own or operate
- Change the source however you like for that installation
- Run your own business on it commercially, client work included
- Re-download the current build any time from your buyer portal
- A second site, or an installation you hand to a client as theirs, needs the Extended licence
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
Extended licence
Unlimited sites you own or operate
Agencies, and anyone running it on more than one site.
- Everything the Single licence grants
- Install it on as many domains as you own or operate — no cap on the number
- Build and hand over one installation per client project
- Still no reselling or redistributing the source itself
- Running it as a multi-tenant service others sign up for needs a SaaS agreement
Every download carries the full terms as LICENSE.txt, and the licence you bought is
named on your order and in your buyer portal. The complete wording lives on the
terms page, and the live demo is free for as long
as it takes to decide.
Honest limitations
What it does not do — written down before you buy, and kept true on purpose.
- One company per installation; your team shares it with roles.
- Permora records what staff enter — no AHJ portal, e-permitting, filing or payment integration. That is exactly why there is no filing, payment or e-signature surface on your server to secure.
- Fee totals are single-currency by design; cross-currency sums are never shown.
- Attachments are PNG, JPEG or PDF up to 10 MB, checked by content, served only to a signed-in user through a controller.
- Calendar feeds are read-only and per-feed revocable; changes are made in Permora.
- Not legal advice: whether a permit is still valid is a question for the authority that issued it.
2-minute web installer, plain PHP 8 + MySQL (or SQLite for a trial), no Composer or build step — Docker image included.
Covered in these guides
The limitation-smash release: your tools now write to the people they serve — client emails through your own SMTP, calendar feeds, attachments, export presets — every one of them off until you switch it on.
Search this category and you get municipal citizen portals, because search engines conflate "self-service" with "self-hosted." Contractors chasing permits across several jurisdictions are served by almost nothing. Here is why, and what fills it.
Questions about Permora
Does Permora file permits with the city?
No — it tracks permits you've already pulled and the inspections they require. It is not an e-permitting or filing system, and it holds no legal documents.
How reliable are the date alerts?
The date math is computed exactly in PHP, anchored to UTC midnights — the test suite covers leap years, month and year boundaries, and both DST transitions.
Does it handle permit fees?
Fees are recorded as exact integer cents for your records and reports — Permora never charges or collects money.
Will it run on shared hosting?
Yes — PHP 8+ with PDO, MySQL/MariaDB or SQLite, a 2-minute web installer, no Composer packages, no API keys.
Can I get my data out?
Permits and inspections export to CSV at any time, and every job has a printable PDF report — your data stays yours.
Can I attach the actual permit document?
Yes — PDFs (and photos) up to 10 MB attach to permits and inspections, checked by content rather than filename, stored under a minted name and served only to signed-in users. A text file renamed .pdf is refused with no row written.