Permora
Every permit expiry and inspection date across your jobs, on one board and in your own calendar.
For trades contractors who pull permits. Often replaces Contractor Foreman.
Single license $89 · Extended license $179 · paid once, yours for good
What it does
Overdue inspections, permits expiring within 60, 30 or 7 days, and live jobs with nothing booked, computed exactly.
One email a day to the office, and to each job lead for their own jobs. Off until you switch it on.
Record the deposit and the day the work finished. Thirty days later (you choose), you are reminded to request the final inspection or ask for the refund.
AHJ, type, number, application, issue and expiry dates, fee to the cent, and status.
Record each inspection's type, date, inspector and result. A failed or partial one becomes a linked re-inspection in one click.
Record the date a permit has to be pulled by. Until it is issued, it is in the daily alert.
Log what the plan reviewer or inspector asked for. Close each with how it was addressed, with a nudge on the follow-up day.
Saved check lists for a rough-in or a final. The evening before, the alert says how many are still open.
Bring Jobora jobs into Permora once each, with the site address, so every permit starts from the job.
Expiries and inspections in your own calendar. Revoke a feed, and a contractor who left stops seeing your schedule.
The full permit and inspection history for any job, for the client, the GC or your records.
The actual permit and inspection reports as PDFs up to 10 MB, checked by their bytes.
Also: jobs by trade, spreadsheet-safe CSV exports, a phone home-screen app and an API with MCP.
What Permora deliberately doesn’t do.
- One company per installation; your team shares it with roles.
- Permora records what staff enter — no AHJ portal, e-permitting, filing or payment integration; the one outside system it reads is your own Jobora, if you connect it. 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.
- Permit alerts are email only (no text messages), once a day, and go when someone opens Permora or a daily cron calls them.
What renting costs instead
2 months of Contractor Foreman costs what Permora costs once.
Read Sep 24, 2026 · sourceThe full comparison: every rival, what each does better, and who should stay with them →
Replacing one of these? Contractor Foreman alternative · PermitFlow alternative
Release history
For Permora, 4.1 makes two changes that every app gets. What’s new in 4.1 →
For Permora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and… What’s new in 4.0 →
The jobs import's preview used to count every row with a name as ready, and an expiry that is not a real date was dropped without a word. What’s new in 3.4 →
3.3 is the detail that decides whether a tool fits a working day.
The 3.2 wave sent reminders out in your own name.
The 3.1 wave gave the catalog ways to reach the other side of the transaction.
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…
Permora 2.0 adds the 2.0 owner layer.
What’s in the zip
The tree as the zip ships it — the working leftovers the packager deletes are not listed
- .htaccess
- API.md
- Dockerfile
- LICENSE.txt
- QUICKSTART.txt
- README.md
- assets/
- bin/
- config.sample.php
- controllers/
- deploy/
- index.php
- install/
- manifest.json
- offline.html
- router.php
- shots/
- src/
- sw.js
- tests/
- views/
src/PermitOps.php: a real module, the first 24 of 339 lines
Chosen as the largest module in src/ that is not one of the shared cores — this product's own logic, not a file every product carries.
<?php
/**
* PermitOps.php — Permora 3.2 pass B.
*
* · PullBy — the date a permit has to be pulled by, and where each one stands.
* · Corrections — the AHJ's comments and corrections on a permit: received, answered, closed,
* with a follow-up date that joins the daily alerts.
* · Checks — internal quality checks before an inspection: named lists copied onto an
* inspection and ticked off. They show readiness; the AHJ's result stays the
* inspector's own and is never blocked by them.
* · JoboraImport — jobs brought in from Jobora through Jobora's own REST API, once each.
* · Deposits — 3.3: a permit's deposit held by the AHJ, and the reminder to get it back. In
* most towns the refund never comes by itself: someone has to request the final
* inspection, then ask for the money. N days after the work is finished
* (settings, 30 by default) a deposit still held joins the daily alerts.
*/
declare(strict_types=1);
final class PullBy
{
/** A permit that is not pulled yet: still applied for, with no issued date. */
public static function pending(array $permit): bool
{
return (string) ($permit['permit_status'] ?? '') === 'applied' && (string) ($permit['issued_date'] ?? '') === '';Runs on: 2-minute web installer, plain PHP 8.1+ with MySQL (or SQLite for a trial), no Composer or build step — Docker image included. Tested on PHP 8.3. Or run it in Docker: the Dockerfile is in the zip.
Technical owners can install it with one line and their license key: curl -fsSL https://ownware.io/install.sh | sh -s -- permora <your license key>
Nothing is obfuscated or encoded; what you read is what runs. Manual · API · the test run
Which license do I need?
It comes down to how many installations you need. Running your own business on one site is the Single license. A second domain of your own, or sites you build or run for other people, is the Extended license.
- 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 license
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
- Everything the Single license grants
- Install it on as many domains as you own or operate — no cap on the number
- Up to ten client installations, one per client project, handed over or hosted for each client; for more, buy another Extended license
- White-label: remove or replace the product name and logo in the screens of client installations
- 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. The complete wording is on the terms page.
After you buy
The app’s Updates page installs a new release with your license key, with the release’s signature checked and a backup taken first. Your download link always serves the current build. Download again any time from your order page or the buyer portal; there is no renewal fee.
Email support for installation and for defects in the code as delivered: a person reads and answers every message. It does not cover custom development or server administration. What support covers
Refunds are handled by Lemon Squeezy as merchant of record, case by case. EU consumers keep the statutory 14-day right until delivery starts. Refund terms
It keeps running: your server, the full PHP source, no license check that can fail. If no stable release is published for 365 days, the domain limit lifts; after three such years your copy becomes MIT-licensed. The terms have the exact wording: continuity.
Questions
Does Permora file permits with the city?
How reliable are the date alerts?
Does it handle permit fees?
Will it run on shared hosting?
Can I get my data out?
Can I attach the actual permit document?
Is Permora a subscription?
What exactly do I get for the money?
Does it email the crew when a permit is about to expire?
Does it tell me whether a permit is valid?
Covered in these guides
More about Permora
Every permit expiry and inspection date across your jobs, on one board and in your own calendar — bought once for the whole crew.
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
Every feature
- The permit itself, on the permit record. 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.
- Calendar feeds you can revoke. 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.
- Jobs by trade. Organize work as jobs — electrical, plumbing, HVAC, or general — each with site address, client, and status.
- Permits per job. Track each permit's AHJ/jurisdiction, type, number, application/issued/expiry dates, fee (kept in exact cents), and status.
- Inspections with one-click re-inspection. 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.
- Exact date-math alert board. 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. Alerts on the dashboard, and by email once a day to the office and each job's lead.
- Per-job PDF report. A dependency-free PDF of the full permit and inspection history for any job — for the client, the GC, or your records.
- Hardened CSV exports. Permits and inspections export to spreadsheet-safe CSV, hardened against formula injection, with fees kept numeric.
- Installable mobile app (PWA). 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 not stored offline on the device; what you see is read live.
- Alerts that reach the truck. Once a day, one email to the office with every permit about to lapse or already expired, tomorrow's inspections, overdue inspections, and live jobs with nothing booked. Name a job lead and they get the same email for their own jobs. Nothing goes on a quiet day, and everyone has a stop link. Off until you switch it on, through your own email server.
- Pull-by dates. Record the date a permit has to be pulled by; until it is issued it is in the daily alert, and a passed one stands out.
- AHJ comments and corrections. Log what the plan reviewer or inspector asked for, close each one with how it was addressed, and get a nudge on the follow-up day.
- Your own checks before the inspector. Saved check lists for a rough-in or a final, ticked off on the inspection; the evening before, the alert says how many are still open.
- Jobs from Jobora. Run jobs in Jobora? Bring them into Permora once each, with the site address, so every permit starts from the job.
- Get permit deposits back. Record the deposit a permit leaves with the AHJ and the day the work finished. Thirty days later (you choose), Permora reminds you to request the final inspection, or, once it has passed, to ask for the refund. Closed jobs included.
- Updates from inside the app. The Updates page installs a new release with your license key: Ownware's signature is checked, a backup is taken first, and the app puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. It never checks by itself.
- Backups by themselves. Automatic backups, an optional copy to S3-compatible storage you own, and a weekly check that the latest backup reads back. The Health page names anything that needs attention.
- Own It 4.0.1 — fixes and an up-to-date manual. For Permora, 4.0.1 fixes an installer that had lost its styling and a command-line update that ended in an error after putting the previous version back. Its manual, FAQ and QUICKSTART now cover everything 4.0 added, including two Nginx rules that keep the data folder private. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0.2 — the installer opens on every host. For Permora, 4.0.2 fixes a fresh install on an Apache host: the one-page setup at /install/ looped back to itself and never opened, and now it opens. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
Release notes in full
- Own It 4.1: client installations and your other tools. For Permora, 4.1 makes two changes that every app gets. An Extended license bought from October 4, 2026 covers up to ten client installations, one per client project: hand each one over to the client or host it for them, with the client's logo and colors from the app's branding settings. The API reference now shows how to connect Permora to Zapier, Make or n8n, using its own webhooks and API key. Your license covers the update: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0: it updates and backs itself up. For Permora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. A new install can start with a sample business and remove it in one click; backups run by themselves, with an optional offsite copy and a weekly check that the latest one reads back; and the Health page says whether the install is looking after itself.
- Own It 3.4: the jobs import keeps its permit dates. The jobs import's preview used to count every row with a name as ready, and an expiry that is not a real date was dropped without a word. Now the preview runs the import's own checks, and such a date is refused and named.
- Own It 3.3: a reminder to get the permit deposit back. 3.3 is the detail that decides whether a tool fits a working day. For Permora, it is the permit deposit: record what the AHJ holds and the day the work finished. Thirty days later (you choose), Permora reminds you to request the final inspection, or, once it has passed, to ask for the refund, closed jobs included.
- Own It 3.2: the permit alerts reach the job lead. The 3.2 wave sent reminders out in your own name. For Permora, that meant one email a day to the office, and to each job lead for their own jobs, listing every permit about to lapse or already expired, tomorrow's and overdue inspections, and live jobs with nothing booked. Pull-by dates, AHJ comments closed with how each was addressed, your own checks before the inspector, and jobs brought in from Jobora came with it.
- Own It 3.1: the paperwork on the record. The 3.1 wave gave the catalog ways to reach the other side of the transaction. For Permora it meant the permit document on the permit record and calendar feeds your own calendar subscribes to, each one revocable. Permora emails no one outside your team.
- Own It 3.0: works for your AI, not just for you. 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.
- Own It 2.0: API, 2FA, backups, dark mode. 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.
Browse self-hosted: Field, stock & service software · Rentals & property software · Trades & field-work software · Construction & building-trade software · Farm & agriculture software