---
title: "Stay Compliant with Permits & Regulations"
slug: "stay-compliant-with-permits-regulations-1"
updated: 2026-05-11T19:14:28Z
published: 2026-05-11T19:14:28Z
---

> ## Documentation Index
> Fetch the complete documentation index at: https://help.servicetitan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Stay Compliant with Permits & Regulations

<editor360-custom-block data-preprocessing="true" data-sanitizationtags="b,svg,polyline,style"><div class="sc" style="max-width:960px;margin:0 auto;padding:0 0 3rem;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#1a1a1a"><div style="border-radius:12px;overflow:hidden;background:linear-gradient(135deg,#0d1b35 0%,#162a4a 60%,#0f2040 100%);padding:32px 32px 28px;margin:0 0 16px;border-top:3px solid #3892F3;position:relative;"><div style="position:absolute;top:-60px;right:-60px;width:320px;height:320px;background:radial-gradient(circle,rgba(2,101,220,0.18) 0%,transparent 70%);pointer-events:none;"></div><div style="position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,0.02) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,0.02) 1px,transparent 1px);background-size:32px 32px;pointer-events:none;border-radius:12px;"></div><div style="position:relative;display:inline-flex;align-items:center;gap:6px;padding:4px 14px;border-radius:20px;background:rgba(2,101,220,0.18);border:1px solid rgba(56,146,243,0.4);margin:0 0 16px"><span class="hb">SERVICETITAN · COMPLIANCE &amp; ACCOUNTING</span></div><div style="position:relative;font-size:24px;font-weight:800;color:#ffffff;line-height:1.25;margin:0 0 10px;max-width:520px;letter-spacing:-0.01em">Stay Compliant with Permits &amp; Regulations</div><p style="position:relative;font-size:13.5px;color:#B5DEFF;margin:0;line-height:1.65;max-width:540px;opacity:0.85">Configure tax rates, track refrigerant usage, and manage technician certifications to keep your business compliant and audit-ready.</p></div><div style="display:flex;align-items:center;gap:8px;margin:0 0 16px;flex-wrap:wrap"><span style="font-size:11px;color:#6A7A85;font-weight:500">Jump to:</span><a href="/docs/stay-compliant-with-permits-regulations-1#p1" class="jp" rel="noopener">Tax &amp; Compliance Setup </a><a href="/docs/stay-compliant-with-permits-regulations-1#p2" class="jp" rel="noopener">Permit Tracking </a><a href="/docs/stay-compliant-with-permits-regulations-1#p3" class="jp" rel="noopener">Refrigerant &amp; Certification Tracking </a><a href="/docs/stay-compliant-with-permits-regulations-1#p4" class="jp" rel="noopener">Troubleshoot </a><a href="/docs/stay-compliant-with-permits-regulations-1#kpi" class="jp" rel="noopener">Measure Impact </a></div><div id="p1" style="margin:20px 0 8px;padding:10px 14px;background:#E3FCFF;border-radius:8px;border-left:4px solid #038299"><div style="font-size:14px;font-weight:700;color:#038299">Tax &amp; Compliance Setup</div></div><div style="display:flex;flex-direction:column;gap:6px"><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E3FCFF;color:#038299;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Set up your tax zones and rates</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Go to <b>Settings</b> &gt; <b>Invoicing</b> &gt; <b>Tax Zones</b>. Create zones for each jurisdiction where you operate by clicking <b>Add Tax Zone</b>. Enter a name, set the tax rate, and assign zip codes to map locations to the correct zone.</p><p style="margin:0 0 2px"><b>b.</b> Assign tax rates to each zone. Tax is calculated automatically based on the service location's address and mapped tax zone. After creating all zones, click <b>Set Tax Zones</b> to apply the mappings to your customer locations.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ You must click "Set Tax Zones" after creating or editing zones — changes do not apply automatically. Locations without a mapped zone will not have tax calculated.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If you export to QuickBooks or Intacct, your ServiceTitan tax zone names must match your accounting software's tax item names exactly. Mismatches cause export failures or incorrect tax reporting.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ For commercial projects with multiple service locations under one customer, verify that each location has the correct tax zone assigned. Tax is calculated per location, not per customer — a single customer with locations in different jurisdictions will have different tax rates on different jobs.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/set-up-sales-tax-in-servicetitan" target="_self" translate="no" class="sl" rel="noopener"><u>Set up sales tax in ServiceTitan</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E3FCFF;color:#038299;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">(Optional) Connect Avalara for automatic tax calculation</div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Avalara requires account configuration by ServiceTitan. Contact Technical Support to enable the integration before attempting setup.</p></div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Go to <b>Settings</b> &gt; <b>Integrations</b> &gt; <b>Avalara</b>. Enter your Avalara account number, license key, company code, and select a cutoff date. Map the integration to the relevant business units. Click <b>Test Connection</b> to verify, then click <b>Save</b>.</p><p style="margin:0 0 2px"><b>b.</b> Assign Avalara tax codes to your pricebook items at the item, subcategory, or category level. Avalara evaluates tax codes in that order — item first, then subcategory, then category. If no code is assigned at any level, Avalara returns $0 tax.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If pricebook items do not have Avalara tax codes assigned (at any level), Avalara returns $0 tax. Check item, subcategory, and category levels.</p></div><p style="margin:0 0 2px"><b>c.</b> If you use <b>Application for Payment (progress billing)</b>, you must enable Avalara separately for AFP. Go to <b>Settings</b> &gt; <b>Accounting</b> &gt; <b>Application for Payment</b> and enable <b>"Use Avalara to calculate sales tax."</b> You can also enable this per-project in the AFP Settings tab within each project's Continuation Sheet.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ When Avalara is enabled for AFP, the Application for Payment preview is not available — but sales tax will appear when you print the document. This is a known limitation.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Manual tax zone overrides can cause double-taxation on recurring service visits. Best practice: create non-taxable visit SKUs instead of overriding zones.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/avalara-integration-guide" target="_self" translate="no" class="sl" rel="noopener"><u>Avalara integration guide</u></a><a href="/v1/docs/progress-billing-overview-and-setup" target="_self" translate="no" class="sl" rel="noopener"><u>Progress billing overview and setup</u></a></div></div></div></div></div><div id="p2" style="margin:20px 0 8px;padding:10px 14px;background:#E0F2FF;border-radius:8px;border-left:4px solid #004491"><div style="font-size:14px;font-weight:700;color:#004491">Permit Tracking</div></div><div style="display:flex;flex-direction:column;gap:6px"><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E0F2FF;color:#004491;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Add permit fees to your pricebook and schedule of values</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Create "Permit Fee" material items in your pricebook for each permit type (e.g., "Permit — Mechanical," "Permit — Electrical," "Permit — Building"). Set the cost to your average permit cost and the sell price to whatever you pass through to the GC or owner. Assign the items to a dedicated "Permits &amp; Fees" category.</p><p style="margin:0 0 2px"><b>b.</b> For projects using progress billing, include permit fees as line items on the estimate so they flow into the <b>Schedule of Values (SOV)</b>. This ensures permit costs appear on Applications for Payment and are recoverable through the billing cycle — rather than being absorbed as overhead.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If you use membership or category-based discounts, ensure your "Permits &amp; Fees" category is excluded from discount rules. Permit fees should never be discounted.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ For QuickBooks Desktop/Online integrations, permit fee item names are limited to 31 characters. Use abbreviated naming (e.g., "Permit-Mech-Commercial").</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/edit-pricebook-items" target="_self" translate="no" class="sl" rel="noopener"><u>Edit pricebook items</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E0F2FF;color:#004491;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Track permit status with custom fields, tags, and Task Management</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Create custom fields on the <b>Project</b> scope to capture permit data. Go to <b>Settings</b> &gt; <b>Operations</b> &gt; <b>Custom Fields</b>. Recommended fields: <b>Permit Number</b> (Text) — the jurisdiction-issued permit ID; <b>Permit Status</b> (Dropdown) — values like "Not Required," "Application Submitted," "Approved," "Inspection Scheduled," "Inspection Passed," "Inspection Failed"; <b>Permit Jurisdiction</b> (Text or Dropdown) — the issuing authority; <b>Inspection Date</b> (Date) — when the inspection is scheduled.</p><p style="margin:0 0 2px"><b>b.</b> Create tags for quick dispatch-board visibility: <b>Permit Required</b> — applied at booking or project creation; <b>Permit Pulled</b> — applied when the office confirms the permit is in hand; <b>Inspection Pending</b> — applied after work is complete, awaiting inspector; <b>Inspection Passed</b> — final state, clears for closeout.</p><p style="margin:0 0 2px"><b>c.</b> For commercial projects, use <b>Task Management</b> to create permit milestone tasks on the project record. Open the project, go to the Task Management section, and click <b>Create Task</b>. Create tasks for each permit phase: <b>Submit permit application</b> — assign to the PM or office coordinator with a due date; <b>Receive permit approval</b> — blocks mobilization until marked complete; <b>Schedule inspection</b> — linked to the relevant job within the project; <b>Pass final inspection</b> — required before project can move to closeout status. This creates a permit audit trail within the project record.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Permit status must be managed manually through custom fields, tags, and tasks. There is no automatic gate that prevents work from starting without a permit — enforcement comes from process (forms, task completion gates) or dispatcher/PM vigilance (tags).</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ The project cannot be closed until all tasks — including permit inspection tasks — are marked complete. Use this as a natural enforcement mechanism for permit closeout.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/manage-tags" target="_self" translate="no" class="sl" rel="noopener"><u>Manage tags</u></a><a href="/v1/docs/use-custom-fields" target="_self" translate="no" class="sl" rel="noopener"><u>Use custom fields</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E0F2FF;color:#004491;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Use forms to enforce permit verification before work begins</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Create a "Permit &amp; Inspection Readiness" form in <b>Settings</b> &gt; <b>Operations</b> &gt; <b>Forms</b>. Include fields such as: "Is a permit required for this job?" (Radio: Yes / No); "Has the permit been pulled?" (Radio: Yes / No); "Permit number" (Text — confirms the permit is in hand); "Photo of posted permit" (Photo — proof for your records and the inspector).</p><p style="margin:0 0 2px"><b>b.</b> Set the form trigger to fire on the relevant Job Types. For commercial projects, use a <b>"Mobilization"</b> or <b>"Site Readiness"</b> job type and set the trigger to <b>"Required for Job Completion."</b> This gates the mobilization phase — the foreman cannot mark the mobilization job complete until permits, site access, and safety checks are all confirmed.</p><p style="margin:0 0 2px"><b>c.</b> Add conditional logic and auto-tagging: IF "Is a permit required?" = Yes AND "Has the permit been pulled?" = No → auto-apply the <b>Permit Required</b> tag and show: "STOP — Do not begin work until the permit is confirmed. Contact the office." IF "Has the permit been pulled?" = Yes → auto-apply the <b>Permit Pulled</b> tag.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Never mark a form field as "Required" if its section can be hidden by conditional logic. This causes the form to freeze and the technician cannot submit it.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/use-form-triggers" target="_self" translate="no" class="sl" rel="noopener"><u>Use form triggers</u></a><a href="/v1/docs/use-conditional-logic-in-forms" target="_self" translate="no" class="sl" rel="noopener"><u>Use conditional logic in forms</u></a><a href="/v1/docs/add-tags-using-conditional-logic-in-forms" target="_self" translate="no" class="sl" rel="noopener"><u>Add tags using conditional logic in forms</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#E0F2FF;color:#004491;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Set up alerts for permit-related jobs</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Create a <b>"Completed Form"</b> alert filtered to your Permit &amp; Inspection Readiness form. Route this to the PM or Permit Coordinator so they are notified when a foreman submits permit data from the field.</p><p style="margin:0 0 2px"><b>b.</b> Create a <b>"Task Used"</b> alert for your Permit Fee pricebook items. When a permit fee is added to an invoice or estimate, the alert notifies the office that a permit-related job is in progress.</p><p style="margin:0 0 2px"><b>c.</b> (Optional) For projects requiring AHJ (Authority Having Jurisdiction) approval — common in mechanical, electrical, and fire protection work — create additional "Task Used" alerts for specific pricebook items that trigger regulatory sign-off requirements.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Alert logic uses strict AND matching — all conditions must be met. Start broad and narrow down only if alert volume is too high.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/use-alerts" target="_self" translate="no" class="sl" rel="noopener"><u>Use alerts</u></a></div></div></div></div></div><div id="p3" style="margin:20px 0 8px;padding:10px 14px;background:#F1EDFF;border-radius:8px;border-left:4px solid #4F3A9E"><div style="font-size:14px;font-weight:700;color:#4F3A9E">Refrigerant &amp; Certification Tracking</div></div><div style="display:flex;flex-direction:column;gap:6px"><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#F1EDFF;color:#4F3A9E;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Track refrigerant usage for EPA compliance</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Create specific pricebook material items for each refrigerant type (e.g., "R-410A — per lb," "R-22 — per lb," "R-454B — per lb"). Set accurate costs and assign them to a dedicated "Refrigerants" subcategory. A generic "Refrigerant" SKU won't satisfy EPA Section 608 reporting, which requires tracking by type.</p><p style="margin:0 0 2px"><b>b.</b> When technicians add refrigerant to an invoice, they enter the quantity (pounds) used. To track cylinder serial numbers — required for full EPA chain-of-custody — use one of two approaches: <b>Custom fields on the material item</b> — add a "Cylinder Serial #" custom field so techs enter the serial number at the point of use; or <b>Form-based capture (recommended)</b> — create a "Refrigerant Usage Log" form with fields for type (dropdown), quantity (number), cylinder serial (text), and a photo of the cylinder label. Trigger it on HVAC job types for a richer audit trail.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ ServiceTitan does not have a dedicated EPA refrigerant tracking module. You must build a custom Invoice Items report filtered by refrigerant SKU codes. Cylinder-level tracking requires custom fields or a form-based workflow.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If you use the form-based approach, ensure the form is assigned to Jobs (not just Locations) — forms assigned only to Locations do not appear in the Form Submissions report, which breaks your audit trail.</p></div><p style="margin:0 0 2px"><b>c.</b> Set up a <b>"Task Used" alert</b> for your refrigerant pricebook items — especially R-22. Route to your Safety Officer or Operations Manager.</p><p style="margin:0 0 2px"><b>d.</b> To generate EPA-ready usage reports, go to <b>Reports</b> &gt; <b>Create Report</b>, select the <b>Invoice Items</b> template, and filter by your Refrigerant subcategory. Include: Item Name, Quantity, Customer Name, Location Address, Job Date, and Technician.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ For HVAC companies handling R-22 recovery, create separate "R-22 Recovery" and "R-22 Charge" SKUs. EPA reporting requires both directions.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/create-custom-reports" target="_self" translate="no" class="sl" rel="noopener"><u>Create custom reports</u></a><a href="/v1/docs/use-alerts" target="_self" translate="no" class="sl" rel="noopener"><u>Use alerts</u></a><a href="/v1/docs/create-a-form-in-servicetitan" target="_self" translate="no" class="sl" rel="noopener"><u>Create a form in ServiceTitan</u></a><a href="/v1/docs/use-form-triggers" target="_self" translate="no" class="sl" rel="noopener"><u>Use form triggers</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#F1EDFF;color:#4F3A9E;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Track technician licenses and certifications</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Set up custom fields on the <b>Technician</b> entity to store certification data. Go to <b>Settings</b> &gt; <b>Operations</b> &gt; <b>Custom Fields</b>. Create fields for each license type: <b>License Number</b> (Text) — the state or jurisdiction-issued ID; <b>License Type</b> (Dropdown) — e.g., "Journeyman Electrician," "Master Plumber," "EPA 608 Universal," "Medical Gas Installer"; <b>Issue Date</b> (Date); <b>Expiration Date</b> (Date); <b>Issuing Authority</b> (Text) — the licensing body or state board. For commercial trades with multiple required certifications, create a separate field group for each.</p><p style="margin:0 0 2px"><b>b.</b> Build proactive expiration monitoring reports. Go to <b>Reports</b> &gt; <b>Create Report</b>, select the <b>Technician</b> template, and include your custom certification fields. Create three saved versions: <b>Expiring in 30 days</b> — your "act now" list, schedule weekly; <b>Expiring in 60 days</b> — your planning horizon for renewal paperwork; <b>Expiring in 90 days</b> — early warning for certifications that require classes or testing, schedule monthly.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ ServiceTitan does not have a native certification tracking module with built-in expiration alerts. The scheduled report is the only proactive mechanism — if you don't build and schedule it, expirations will be missed.</p></div><p style="margin:0 0 2px"><b>c.</b> Use <b>Technician Skills</b> (a Core dispatch feature) to reflect certification status in dispatch. Map certifications to skills — for example, create a "Backflow Certified" or "Medical Gas" skill and assign it to qualified techs. Configure job types requiring that work to require the skill. The dispatch system will only suggest or assign those jobs to techs with the matching skill, preventing compliance violations at the scheduling level.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If a technician's certification expires, removing their corresponding Skill is a manual step. There is no automatic sync between custom field expiration dates and skill assignments.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ For prevailing wage or government projects requiring certified payroll, use Configurable Payroll to set up union/prevailing wage pay rules. Certification tracking (this section) addresses trade licenses; wage compliance is a separate payroll configuration.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/add-and-manage-technician-profiles" target="_self" translate="no" class="sl" rel="noopener"><u>Add and manage technician profiles</u></a><a href="/v1/docs/create-custom-reports" target="_self" translate="no" class="sl" rel="noopener"><u>Create custom reports</u></a><a href="/v1/docs/manage-skills-for-technicians-and-job-types" target="_self" translate="no" class="sl" rel="noopener"><u>Manage skills for technicians and job types</u></a></div></div></div></div></div><div id="p4" style="margin:20px 0 8px;padding:10px 14px;background:#FEF3E2;border-radius:8px;border-left:4px solid #8B5E0F"><div style="font-size:14px;font-weight:700;color:#8B5E0F">Troubleshoot</div></div><div style="display:flex;flex-direction:column;gap:6px"><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#FEF3E2;color:#8B5E0F;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Troubleshoot: Tax not calculating</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Verify the service location has a valid, Google-verified address with a mapped tax zone. Go to <b>Settings</b> &gt; <b>Invoicing</b> &gt; <b>Tax Zones</b> and confirm the location's zip code is included in a zone. If you recently created or edited zones, confirm you clicked <b>Set Tax Zones</b> to apply changes.</p><p style="margin:0 0 2px"><b>b.</b> If using Avalara, confirm the integration is active at <b>Settings</b> &gt; <b>Integrations</b> &gt; <b>Avalara</b> and verify pricebook items have Avalara tax codes assigned. If using manual tax zones, verify the rate and that the pricebook item is marked as <b>Taxable</b>.</p><p style="margin:0 0 2px"><b>c.</b> For progress billing invoices: if tax shows $0 on an Application for Payment, verify that <b>"Use Avalara to calculate sales tax"</b> is enabled in the AFP settings (either global or per-project). This is a separate setting from the main Avalara integration.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ A common cause: the pricebook item's "Taxable" checkbox is not selected. Even with correct tax zones, non-taxable items show $0 tax.</p></div><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Tax zone "drift" — if staff manually override the tax zone on individual invoices instead of fixing the Location's master data, the error repeats on every future job at that address. Fix the Location, not the invoice.</p></div></div><div style="margin:6px 0 0;padding-top:5px;border-top:1px solid #DFE0E1"><a href="/v1/docs/set-up-sales-tax-in-servicetitan" target="_self" translate="no" class="sl" rel="noopener"><u>Set up sales tax in ServiceTitan</u></a></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#FEF3E2;color:#8B5E0F;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Troubleshoot: Permit status not visible on dispatch board</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Confirm that permit-related tags are created and active. Tags must be applied to the <b>Job</b> entity (not Customer or Location) to appear on the dispatch board.</p><p style="margin:0 0 2px"><b>b.</b> If using form-based auto-tagging, verify the conditional logic targets the correct entity (Job, not Location). Test by submitting the form on a test job.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ Auto-tags applied by conditional logic are permanent once the form is submitted. If permit status changes, the old tag must be manually removed and the new tag applied — forms do not remove previously applied tags.</p></div></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#FEF3E2;color:#8B5E0F;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Troubleshoot: Refrigerant report showing incomplete data</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Verify technicians are using the correct, specific refrigerant SKUs rather than a generic item or miscellaneous charge.</p><p style="margin:0 0 2px"><b>b.</b> If using form-based cylinder tracking, confirm the form is assigned to <b>Jobs</b> (not just Locations) and the trigger fires on the correct Job Types.</p></div></div></div></div><div class="st" style="border:1px solid #D0D8DD;border-radius:8px;padding:10px 14px"><div style="display:flex;align-items:flex-start;gap:10px"><div class="sn" style="min-width:24px;height:24px;border-radius:6px;background:#FEF3E2;color:#8B5E0F;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0"></div><div style="flex:1"><div style="font-size:13.5px;font-weight:600;color:#1a1a1a;margin:0 0 1px">Troubleshoot: Certification report missing technicians</div><div style="font-size:13px;color:#374151;line-height:1.7;margin:6px 0 0;padding-left:1em"><p style="margin:0 0 2px"><b>a.</b> Confirm custom fields are created at the correct scope (Technician entity) and data has been entered. Blank fields won't appear in filtered reports.</p><p style="margin:0 0 2px"><b>b.</b> Verify you're using the <b>Technician</b> report template (not Employee). Check that your date filter is correct.</p><div style="padding:5px 10px;background:#EAEFF2;border-left:3px solid #8C9CA5;border-radius:6px;margin:4px 0 4px"><p style="font-size:12px;color:#4B5563;margin:0;line-height:1.5">⚠︎ If the report returns zero results, it likely means no expiration dates fall within your filter range. Widen the range to confirm data exists.</p></div></div></div></div></div></div><div id="kpi" style="margin:24px 0 12px"><div style="display:flex;align-items:center;gap:8px;margin:0 0 12px"><svg width="15" height="15" viewbox="0 0 24 24" fill="none" stroke="#004491" stroke-width="2.5"><polyline points="23 6 13.5 15.5 8.5 10.5 1 18"></polyline><polyline points="17 6 23 6 23 12"></polyline></svg><div style="font-size:13px;font-weight:700;color:#004491;text-transform:uppercase;letter-spacing:0.06em">Measure the impact</div></div><div style="display:grid;grid-template-columns:1fr 1fr;gap:8px"><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Accuracy</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Tax calculation accuracy</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Compare collected tax to filed returns. For projects using AFP, verify that progress billing invoices include the correct tax amounts.</div><a href="https://go.servicetitan.com/#/new/reports/new" target="_blank" class="sl" rel="noopener">Reports &gt; Create Report &gt; use "Invoice Items template" ↗</a></div><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Compliance</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Technician certification coverage</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Track the percentage of technicians with current, unexpired licenses. A single expired license can halt permitted work and trigger fines on commercial projects.</div><a href="https://go.servicetitan.com/#/new/reports/new" target="_blank" class="sl" rel="noopener">Reports &gt; Create Report &gt; use "Technician template" ↗</a></div><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Tracking</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Refrigerant reporting accuracy</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Compare ServiceTitan usage records to physical cylinder inventory. Required for EPA Section 608 audits.</div><a href="https://go.servicetitan.com/#/new/reports/new" target="_blank" class="sl" rel="noopener">Reports &gt; Create Report &gt; use "Invoice Items template" ↗</a></div><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Process</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Permit compliance rate</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Track the percentage of permit-required jobs where the permit was confirmed before work began. Cross-reference Task Management for permit milestone completion.</div><a href="https://go.servicetitan.com/#/new/reports/new" target="_blank" class="sl" rel="noopener">Reports &gt; Create Report &gt; use "Jobs template" ↗</a></div><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Timeliness</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Permit cycle time</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Track the time from permit application submission to permit approval. Long cycle times delay mobilization and compress the project schedule.</div></div><div style="padding:14px 16px;border-radius:10px;background:#fff;border:1px solid #DFE0E1;border-top:3px solid #0265DC;"><div style="font-size:11px;font-weight:700;color:#0265DC;text-transform:uppercase;letter-spacing:0.06em;margin:0 0 6px">Financial</div><div style="font-size:12.5px;font-weight:600;color:#1a1a1a;margin:0 0 4px">Permit fee recovery rate</div><div style="font-size:11.5px;color:#6A7A85;line-height:1.55;margin:0 0 8px">Track whether permit fees are consistently included on estimates and invoices. For progress billing projects, verify permit fees appear on the Schedule of Values.</div><a href="https://go.servicetitan.com/#/new/reports/new" target="_blank" class="sl" rel="noopener">Reports &gt; Create Report &gt; use "Invoice Items template" ↗</a></div></div></div><style> .sc { counter-reset: step } .sn { counter-increment: step } .sn::before { content: counter(step) } .hb { font-size: 10.5px; font-weight: 700; color: #78BBFA; letter-spacing: 0.08em } .jp { font-size: 11.5px; font-weight: 600; color: #374151; text-decoration: none; padding: 5px 13px; background: #fff; border: 1px solid #D0D8DD; border-radius: 20px; transition: all 0.15s } .jp:hover { background: #E0F2FF; border-color: #B5DEFF; color: #004491 } .st { transition: box-shadow 0.15s, border-color 0.15s } .st:hover { border-color: #B5DEFF !important; box-shadow: 0 2px 12px rgba(2, 101, 220, 0.07) } .sl { font-size: 10.5px; color: #0265DC; text-decoration: none; margin-right: 6px } .sl:hover { text-decoration: underline } .sl+.sl::before { content: "· "; color: #D0D8DD } p[data-block-id] { font-size: 1rem; } ul li p[data-block-id] { margin-bottom: 0; } ul[data-type="taskList"] li div p[data-block-id] { margin-bottom: 0; } ol li p[data-block-id] { margin-bottom: 0; } table tbody th p[data-block-id] { margin-bottom: 0; } blockquote p[data-block-id] { margin-bottom: 0 !important; } p[data-block-id]:empty::after { content: "\00A0"; } </style></div></editor360-custom-block>
