Industry guide · Custom Software

Permitting and Licensing Software: What Actually Breaks When Agencies Go Digital

The short answer

Build if you are processing more than roughly 4,000 permit and license applications a year across three or more departments, because that is the volume where Accela and Tyler EnerGov configuration bills and workflow gaps start costing more than owning the code. A focused first release covering intake, plan review routing, fee calculation and inspection scheduling typically runs $60k to $130k and ships in 12 to 16 weeks; a full platform with contractor licensing, GIS parcel binding, cashiering integration and a public portal runs $150k to $400k phased over 6 to 12 months. If you issue under 1,500 permits a year and your fee schedule fits on one page, stay on OpenGov or CityView and spend the money on scanning your file room instead.

Why permitting software makes or breaks an agency that has gone digital on paper

Here is the scene that repeats in every building department we have walked into. A contractor submits a residential addition online at 4:47pm on a Friday. The permit tech pulls it Monday morning, opens the PDF set in Bluebeam Revu, and discovers the site plan is missing the setback dimension. She emails the contractor. He replies Wednesday. She uploads the corrected sheet, but the plan review clock in the system already started Monday, so the 10 day statutory review window is now a 7 day window, and nobody told the plans examiner. Meanwhile the fee was calculated in a shared Excel workbook called FEE_SCHEDULE_2026_FINAL_v4.xlsx that lives on a network drive, and the version the tech used was last touched by someone who retired in March.

The tools in the room are usually Accela Civic Platform, Tyler Technologies EnerGov, CentralSquare Community Development, OpenGov Permitting and Licensing, CityView, or a Salesforce build somebody's IT director championed in 2019. Around them sits the real system: an Outlook shared mailbox for intake, an Access database the fire marshal built, a Trello board for inspections, Bluebeam Studio Sessions for plan markup, a Laserfiche repository nobody can search, and a physical routing slip that walks from Building to Planning to Engineering to Fire and back. We have counted 11 hand-offs on a commercial tenant improvement in a city of 90,000 people.

The dollars leak in places nobody puts on a slide. We have sat with permit techs who spend 90 minutes a day retyping applicant data across three systems, which at a typical tech salary is roughly $9,000 a year per person and is invisible because it is nobody's line item. We timed one department's inspectors at about 45 minutes of daily windshield time on routes built by hand in Google Maps, which across six inspectors is more than a full-time position of pure driving. And the number that gets the city manager's attention: refunds and fee corrections. One county we worked with was writing off $140,000 a year in miscalculated valuation-based fees because the multipliers in the spreadsheet had drifted away from the adopted ordinance.

Problem 1: your fee schedule is a legal document trapped in a spreadsheet

Your fee schedule is adopted by ordinance or council resolution. It has effective dates, valuation tables, square footage tiers, per-fixture plumbing counts, technology surcharges and state surcharges that pass through to a different fund. In Accela you configure fees through expression scripts. In EnerGov you build fee formulas in the admin console. Both work until your council adopts a mid-year amendment effective July 1 and you need permits submitted June 28 but issued July 3 to use the OLD schedule, because that is what your ordinance says.

The incumbents handle effective dating badly because they model a fee as a current configuration rather than as a versioned rule with a validity window. When you change it, you change it for everyone, including in-flight applications. So the workaround is a permit tech who knows to manually override, and the override becomes the audit finding.

A custom build models fee schedules the way your ordinance does. A fee rule is a record with an effective_from and effective_to date, a source citation to the ordinance section, and a calculation expression. Every permit stores the fee_schedule_version_id it was priced under, so an application submitted June 28 prices under version 12 forever, even if it is issued in October. Every fee line carries its own GL account code and fund, so cashiering reconciliation is a query rather than a monthly argument with Finance. And when someone asks why a permit cost $4,317.50, the system renders the calculation: base fee, valuation tier, plan review at 65 percent, state surcharge, each line citing its ordinance section. That single feature has ended more fee disputes than any policy memo.

Problem 2: plan review routing is parallel in reality and sequential in software

A commercial permit needs Building, Planning, Fire, Engineering, and sometimes Health and the water district. Some of those reviews are genuinely parallel. Some have real dependencies: Engineering cannot review the grading plan until Planning confirms the site layout is approved. Fire will not sign off until the sprinkler submittal arrives, which is a deferred submittal that comes in three weeks after permit issuance.

Accela and EnerGov both do workflow. What they do poorly is conditional parallel routing with dependency edges and re-entrant cycles. A resubmittal after a correction letter should not restart every review. It should reopen only the reviewers who issued corrections, preserve the approvals from reviewers who already cleared it, and restart only their portion of the statutory clock. Configuring that in the incumbent tools produces a workflow diagram that no one on your staff can maintain after the implementation consultant leaves, which is why so many agencies quietly route by email instead.

A custom build models the review cycle as a directed graph rather than a linear workflow. Each review discipline is a node with an SLA, a reviewer pool, and dependency conditions. Cycle 2 automatically includes only the disciplines that issued open comments in Cycle 1. Every comment is a structured record with a code section reference, a sheet number, a status, and a threaded applicant response, rather than a paragraph in a PDF letter. The examiner marks up in Bluebeam, and the markup syncs back as linked comment records so the contractor sees exactly which sheet and which comment blocks issuance. AI earns one narrow job here: run the incoming submittal through a document extraction pass that reads the plan set, identifies sheet types, checks the submittal checklist for the permit type, and flags a missing structural calc package or an unstamped sheet within two minutes of upload, at 4:47pm on that Friday, before it ever reaches a human. It does not approve anything. It stops the intake failure that costs you four days.

Problem 3: inspection scheduling ignores geography, skills, and reinspection reality

Your inspectors have certifications. A combination inspector can do framing and rough plumbing; the electrical inspector cannot. Some inspections require the same inspector who did the previous one on that permit for continuity. Some are AM or PM windows the contractor picked. Some are reinspections that should be billed at $125 because it is the third failed framing call on that address.

The scheduling in most incumbent permitting products is a calendar with slots. It does not know that your inspector's 8am is in the north annexation and their 8:30 is nine miles south, and it does not sequence the day. So your inspection supervisor rebuilds the routes by hand every afternoon, and inspectors show up in a window so wide that contractors staff a person to wait.

In a custom build an inspection request carries the parcel geometry, the required certification, the estimated duration by inspection type learned from your own historical actuals, and the contractor's window preference. A nightly optimizer sequences each inspector's day against real drive time, respecting certifications and same-inspector continuity rules, and publishes a two hour window with live ETA updates to the contractor. Failed inspections auto-generate the reinspection fee per your ordinance and hold the next inspection until it is paid, which is a rule your current system almost certainly cannot enforce. On the field side, the inspector's tablet works offline in a basement with no signal, captures photos tagged to the specific code violation, and syncs on the drive out. On the builds we have shipped, departments recover roughly 5 to 8 inspections per inspector per week, which is capacity you would otherwise hire for.

Problem 4: contractor licensing and the permit are two systems that must be one

You cannot issue a plumbing permit to an unlicensed plumber. You cannot issue to a contractor whose general liability lapsed Tuesday or whose workers comp certificate expired. In most agencies this check is a permit tech opening a second system, or a binder, or a state license lookup website, and eyeballing a date.

Licensing modules exist in the incumbents, but they are bolted on, their expiration logic does not gate permit issuance in real time, and they almost never reconcile against the state license board's data automatically. So the failure mode is real: you issue to a contractor whose license was suspended, work proceeds, and your city attorney finds out from a homeowner's lawsuit.

A custom build makes contractor a first-class entity with license records, insurance certificates with expiration dates, bond records, and registration status. Issuance is blocked by a hard rule evaluated at the moment of issuance rather than at application. A nightly job pulls the state license board's public data and flags any status change on a contractor with open permits in your jurisdiction, so a suspension shows up on the supervisor's dashboard the next morning. Insurance certificates arrive as PDFs from a hundred different carriers in a hundred different layouts, which is the second place AI genuinely helps: an extraction model reads the ACORD certificate, pulls the policy number, carrier, coverage limits, and expiration date, populates the record, and routes only the low-confidence extractions to a human. One clerk stops spending two days a month keying certificates.

Problem 5: the public portal is where your reputation is actually made

Your contractors judge you on one thing: can they see where their permit is without calling. Right now they call. Your front counter phone rings 60 times a day asking "where is my permit," and each call is four minutes of a tech who was doing plan intake.

The incumbent portals, Accela Citizen Access most notoriously, are functional and hated. They show status codes rather than meaning. "IN REVIEW" tells a contractor nothing about whether he can schedule his framing crew for next Thursday.

A custom portal shows the review cycle, which discipline is holding it, what specific comments are open, what the applicant owes, and a projected issuance date based on your actual historical cycle times for that permit type rather than a promise. It lets the contractor upload the corrected sheet against the specific comment, so the resubmittal arrives pre-linked. It sends the notification the contractor actually wants, an SMS at 6:45am saying the inspector is third on the route today. AI helps here in one narrow way: an after-hours assistant grounded strictly in that permit's record and your published requirements answers "what do I still owe and what is blocking me," and hands off to a human for anything it cannot answer from the record. It never interprets code. Status calls were the single largest bucket at the counters we measured, and this deflects most of them.

What this costs and how long it takes

Across 2,000-plus projects, our delivery bands for this category: a focused first release, meaning intake, configurable fee engine with effective dating, parallel plan review routing, and inspection scheduling for one department, lands at $60k to $130k in 12 to 16 weeks. A full platform adding contractor licensing, code enforcement cases, business licensing, GIS parcel integration, cashiering, and the public portal runs $150k to $400k phased across 6 to 12 months.

What drives price up in permitting specifically: the number of distinct permit types and their fee formulas, since 40 permit types with real valuation tables is materially more work than 12. GIS integration depth, because binding to an Esri ArcGIS parcel layer with overlay districts, flood zones and historic overlays is a project inside the project. Cashiering and financial integration, since Tyler Munis and CentralSquare Finance both have opinions about how a receipt posts. Legacy data migration, which is always the underestimated line: 15 years of Accela records with attachments, incomplete parcel bindings and dead workflow states is 4 to 8 weeks by itself. And state reporting mandates, which vary wildly and are non-negotiable.

Build versus buy: our position

Buy if you issue under 1,500 permits a year, run one or two review disciplines, and your fee schedule is simple. OpenGov Permitting and Licensing or CityView will serve you well, and a $60k custom build is money better spent digitizing your records. That is a real answer and we give it regularly.

Build when these signals stack up. You are paying an implementation partner an annual retainer just to keep workflow configuration alive. Your fee schedule needs effective-dated versioning and your staff overrides fees manually. You have more than four review disciplines with real dependencies. You are annexing, merging departments, or running a shared-services model across multiple jurisdictions, which every off-the-shelf product prices as separate tenants and treats as strangers. Or the decisive one: your renewal quote came back at $180,000 a year and you are still routing paper. At that number you are financing someone else's roadmap. Three years of that subscription buys the platform, and you own the fee engine that is legally your ordinance anyway.

We recommend a partial build more often than a full replacement: keep the system of record you have, build the layer that is failing. Custom plan review routing and a real portal on top of an Accela backend is a $70k to $110k project that fixes most of the pain without a migration.

How to choose a developer for permitting and licensing software

Ask them to model your fee schedule in the first conversation. Hand them one page of your adopted ordinance with a valuation table and a mid-year amendment. A developer who has done this asks about effective dates, GL codes, and which schedule applies at submittal versus issuance within the first ten minutes. A developer who has not will say "we will make it configurable," which means you will be the one configuring it.

Make them explain parcel data. Ask how they bind a permit to a parcel when the address is a new subdivision lot that the county assessor has not created an APN for yet. If they have not hit that, they have not shipped permitting. Ask specifically about Esri ArcGIS REST integration and what happens when the parcel layer is republished and geometries shift.

Check the compliance surface honestly. Your portal is public-facing government, so WCAG 2.1 AA is not optional, and a vendor who has never run an accessibility audit will hand you a lawsuit. Ask about records retention and public records request handling, because every comment, markup and status change in this system is a public record with a retention schedule. Ask about CJIS if code enforcement touches law enforcement data, and about payment handling scope, since you want your cashiering to keep PCI scope out of your application.

Settle ownership before the kickoff. You should own the repository, the schema, the deployment infrastructure and the documentation, with no runtime license on the code. If a vendor holds the code and rents it back, you have bought Accela with worse support. Insist on the transition clause that says another firm can pick this up, and ask what their handover package contains before you sign.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. In PMI's 2014 Pulse of the Profession report on requirements management, inaccurate requirements management is cited as a leading cause of project failure, with 47% of unsuccessful projects failing to meet goals due to poor requirements management. Source: Project Management Institute (PMI) (2014) →
  2. Only about 30% of digital transformations succeed at meeting their objectives, but getting six critical success factors in place (leadership commitment, talent, agile culture, progress monitoring, clear strategy, and a modernized platform) raises the odds of success from 30% to 80%. Source: Boston Consulting Group (BCG) (2020) →
  3. Nucleus Research's analysis of published analytics deployment case studies found business intelligence and analytics returned an average of $13.01 in benefits for every dollar spent, up from $10.66 three years earlier. Source: Nucleus Research (2014) →
  4. Total US training expenditure rose 4.9% to $102.8 billion; learning management systems were used at 89% of organizations (90% of large, 97% of midsize, 84% of small companies), with average training at 40 hours per employee and $874 spent per learner. Source: Training Magazine (2025) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does custom permitting software cost for a city issuing 6,000 permits a year?
Expect $60k to $130k for a focused first release covering intake, a fee engine, plan review routing and inspection scheduling, delivered in 12 to 16 weeks. A full platform for that volume, adding contractor licensing, GIS parcel binding, cashiering integration and a public portal, runs $150k to $400k over 6 to 12 months. At 6,000 permits with four or more review disciplines, the fee engine and routing complexity is what moves you toward the upper half of the band, not the permit count itself.
Is custom permitting software cheaper than Accela or Tyler EnerGov over five years?
It depends on your renewal number. If you are paying six figures annually plus a retained implementation partner to keep workflow configuration alive, three years of that spend typically exceeds a full custom platform, and you own the code afterward with no license renewal. If your annual subscription is under about $40k and the product covers your workflows, staying is the right call financially.
Can we migrate 15 years of Accela records into a custom system?
Yes, and budget 4 to 8 weeks for it as its own workstream. The hard parts are attachments, incomplete parcel bindings on older records, and permits stuck in workflow states that no longer exist. We usually migrate closed permits as read-only historical records and only bring open permits into the live workflow, which cuts migration risk substantially without losing anything staff needs to search.
How long before inspectors and permit techs are actually off the old system?
A focused first release ships in 12 to 16 weeks, but plan on 3 to 4 weeks of parallel running where both systems take applications before you cut over. Inspectors adopt fastest because the field app removes work from their day. Permit techs take longer because their muscle memory is the workaround, so training targets the fee engine and the review routing where the behavior actually changes.
Do we own the code if we build custom permitting software?
You should own everything: the repository, the database schema, the infrastructure configuration and the documentation, with no runtime license back to the developer. Put it in the contract explicitly, including a transition clause stating another firm can take over the codebase. If a vendor retains the code and licenses it back to you, you have recreated the dependency you were trying to escape.
Can custom permitting software handle a fee schedule that changes mid-year by ordinance?
Yes, and this is one of the strongest reasons agencies leave off-the-shelf products. A custom fee engine stores each fee rule with an effective_from and effective_to date and a citation to the ordinance section, and every permit records which schedule version it was priced under. An application submitted before the amendment prices under the old schedule permanently, even if issued months later, without a manual override.
Does a custom permitting portal need to meet accessibility requirements?
Yes. A public-facing government portal needs to meet WCAG 2.1 AA, and this is an enforcement and litigation risk rather than a nice-to-have. Ask any developer whether they have run an accessibility audit with a real screen reader on a form-heavy application, and ask to see the report. Retrofitting accessibility onto a finished portal costs several times what building to it does.
Where does AI genuinely help in permitting and where is it hype?
It helps in three concrete places: extracting data from plan set submittals to catch missing sheets and unstamped drawings at intake, reading insurance certificates and contractor license documents to populate records automatically, and answering after-hours status questions from a permit's own record to deflect front counter calls. It should never interpret code, approve a plan, or issue a permit. Any vendor pitching AI plan review approval is selling you a liability.
Should we replace our whole permitting system or just fix the broken part?
Often just the broken part. Building custom plan review routing and a real public portal on top of an existing Accela or EnerGov backend is a $70k to $110k project that fixes most of the daily pain with no migration risk. Full replacement makes sense when the fee engine itself is failing, when you are consolidating jurisdictions, or when the subscription renewal alone approaches the cost of ownership.
How much should a small business budget for its first custom app or website?
For a focused first build, most small businesses land between $8,000 and $60,000: roughly $8,000 to $45,000 for a custom website and $25,000 to $60,000 for an internal tool or simple web app, based on Digital Heroes delivery across 2,000+ projects. Customer-facing products with payments, logins, or a mobile app start around $40,000. Quotes far below these bands usually mean a template with your logo on it, not software shaped around your workflow.
What questions should I ask a development agency on the first call?
Ask who exactly will build it, what happens when scope changes mid-project, what their maintenance terms are after launch, and what they will need from you every week. Then ask them to describe a project that went wrong and what they changed afterward; teams that have shipped at real volume have war stories, and teams claiming a perfect record are hiding something. The scope-change answer matters most: a disciplined shop describes a written change-order process, not a vague promise to be flexible.
What does a $50,000 custom software budget actually buy?
One core workflow done properly: 10 to 15 screens, two or three user roles, a couple of integrations, an admin panel, and automated tests, delivered in roughly 12 to 14 weeks. What it does not buy is that workflow plus a mobile app plus AI features plus five more integrations. The discipline of picking the one workflow that matters is what separates $50,000 projects that ship from $50,000 projects that stall at 70% complete.
Who owns the code when an agency builds my software?
You should, completely, through a written intellectual property assignment that transfers everything on final payment; without that clause, copyright stays with whoever wrote the code by default. Insist that the repository lives in your own GitHub organization from day one and that hosting, domains, and third-party accounts are registered to you. Also check for licenses to the agency's proprietary frameworks buried in the contract, because those can make switching vendors practically impossible even when you own your own code.
Should we build an MVP first or go straight to the full system?
MVP first, for almost everyone: ship the single workflow that carries the business value in 10 to 16 weeks, learn from real users, then fund phase two from evidence instead of guesses. The caveat is that an MVP is a small version of a well-built system, not a badly built version of a big one; the data model must already support what comes next. An agency that cannot tell you what they deliberately left out of your MVP has not designed one.
If an agency builds my software, who actually owns the code?
You should own everything, assigned in writing: the contract transfers full IP to you on final payment, the code lives in your GitHub organization, and hosting runs in cloud accounts you control. The red flag is a proposal that mentions the agency's proprietary platform or framework, which usually means you are renting, not buying. Digital Heroes structures every build this way precisely so a client can fire us and lose nothing but the relationship.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?