Answers

Frequently asked questions

What HVAC HQ does, what it costs, and what it does not do yet.

Getting started

What makes HVAC HQ different from ServiceTitan, Jobber or Housecall Pro?

HVAC HQ is one system for the four parts of an HVAC day that go wrong most: the phone, the board, the price book and the estimate. The AI receptionist books real jobs onto the same dispatch board your office uses, through the same rules module, so one technician cannot be sold two overlapping windows — whether the phone, your website or a dispatcher is doing the selling. The price book recalculates retail from wholesale on one target margin, and estimates are signed on a link carrying a hash of exactly what was agreed. What we do not do yet: live distributor price feeds, card processing, and texting anyone. We would rather you read that here than find it in week two.

How long does it take to get set up?

Signing up takes a couple of minutes: it creates your business, signs you in, and your own empty dispatch board is one click away. Add a technician — the board refuses a booking until there is someone to assign it to — and it can take work that day, with arrival windows and working days already defaulted. Your supplier's price sheet imports from a CSV you upload in the browser, and so do your customers, job history and open estimates/invoices — Settings has a CSV importer for each. The website assistant needs switching on, your domains listed and one script tag on your site; the AI line takes longest, since provisioning rents a real number and the line still has to be configured afterwards.

Is there a free trial, and do I need a card?

Yes to the trial, no to the card — the length is published in the pricing section, right next to the plans. Sign up and the account is usable straight away, with your plan's seat limit enforced from the first day rather than at renewal, so the seat count you try is the one you would buy. No card is collected at signup and nothing charges when the trial ends, because card billing is not connected yet. The one step that costs money is renting a number for the AI phone line, and that only happens if you deliberately ask for it.

Can I bring my existing customers, history and stock across?

Yes, for the parts that matter most. Your supplier's price sheet imports as a CSV in the Price book screen — a header row naming sku and wholesale, with part and category optional; rows missing a SKU or a usable wholesale figure are dropped without being listed back to you, and one upload takes the first 5,000 rows. Settings → Import from another system covers the rest: customers, job history and open estimates/invoices, each from its own CSV, none of them dropping a row silently — every one either lands or comes back to you with the reason it didn't. Job history lands on the customer's own record rather than the live dispatch board, so bringing over years of it doesn't bury today's work. Truck stock still gets typed in, and equipment details have no entry field at all; they fill in from what callers and website visitors tell the assistant.

What does it take to get the AI phone line answering?

Two owner actions, plus an https address for the callback. An owner rents the number, then installs the receptionist on it — both are owner-only, and provisioning asks you to confirm in a second step, because it rents a real number that bills every month. For the agent to read your board it also needs an https PUBLIC_URL and this business's own tools token; without those it still answers and can talk, but it cannot see the calendar or book, and the install step says exactly that. Readiness shows as four separate checks — number, receptionist, live data, hub tool feature — rather than one green light, alongside a blockers list naming the bridge problems it can detect. A technician is not needed for the line to answer: with nobody on the account the agent takes the details and says the office has to confirm a technician before it promises a time, rather than booking into thin air.

Platform & features

How does the voice AI assistant work?

Once the line is switched on, it answers as a receptionist for your business, greeting callers in your company name. It can do four things: look the caller up from the number the carrier reports, check which arrival windows are genuinely open, book one onto your dispatch board, and flag a life-safety emergency to the top of that board — it pages nobody, so a gas, CO or smoke caller is told to leave the building and call 911. Bookings are real jobs on the real board, checked against the same rules your office uses — and the confirmation number, arrival window and technician name are read from a written script rather than rephrased. It is instructed not to quote a repair price; pricing depends on diagnosis and stays with your office.

Can the AI transfer a caller to a person, or text my customers?

No to both, and it is worth knowing before you point your main line at it. Neither phone agent declares a transfer tool, so it cannot hand a caller to you or a technician, and none of its tools hangs up or dials out — the lines are configured inbound only, and nothing in the app places an outbound call. Nothing in HVAC HQ sends a text message: no appointment confirmations, no reminders, no "technician on the way", and no page to an on-call tech. The one thing it sends your customer is an email — the document you are asking them to sign, with its link. Until you connect your own sending domain that email leaves from the shared HVAC HQ address rather than yours, and if no verified address is connected at all the send is refused and you get the link back to pass on yourself. If you need a warm handoff or reminder texts, keep whatever you use for that today.

What happens on an emergency call?

A suspected gas leak, a carbon monoxide alarm, smoke, or no heat in freezing weather is treated as life-safety. For gas, CO or smoke the caller hears a fixed evacuation instruction word for word — leave now, take everyone, switch nothing on or off, call 911 from outside — hand-written in English and Spanish, with English as the fallback for any other language. No heat in freezing weather is flagged urgent without an evacuation. Either way an escalation goes to the top of your dispatch board marked critical, naming your on-call technician if you have one on file. Be clear on what that is: it flags the board. Nothing in HVAC HQ calls, texts or pages anyone, and the wording never claims a truck is on the way. Somebody on your side still has to look.

Does it work in Spanish?

English and Spanish, nothing else. The sentences that get read out word for word — the confirmation number, the evacuation instruction, the signing page, the estimate email — are hand-written and reviewed in both languages; the rest of the conversation is the AI speaking, and it is told to follow the caller into Spanish and stay there. Every call opens with a greeting that offers Spanish in Spanish, so there is no "press 2", and once the agent looks the caller up, a record already marked Spanish carries the rest of the call in Spanish. The website assistant offers Español from the first screen, and a language it records when someone books carries over to the phone line next time. Your own cockpit is English only for now.

How does dispatch and scheduling actually work?

Jobs sit on the board in arrival windows — the six a business starts with are two hours each, and it can redefine them — and a window is a real time interval rather than a label, so overlaps are detected properly and one technician cannot be placed in two overlapping windows on the same day. Exclusivity is per technician, not per business: a three-van shop can still sell the same window three times. One rule decides who holds a window — scheduled, dispatched and in-progress hold it, cancelled, completed and no-show release it — but nothing in the app writes those statuses yet; today it only ever writes scheduled and unscheduled. When windows are offered we count only technicians who hold the skill the job needs; when one is booked we prefer them and fall back to whoever is free. A window is refused on both the offer and the booking once its start falls inside the business's lead time. Today is the default day for every channel: the phone line and the website assistant book only onto today, while the dispatch API will also take a future date.

Can I set my working days, my own arrival windows, or my time zone?

Not yet. Every account runs on the six built-in arrival windows and an open seven-day week; there is no screen and no API route for working days, custom windows, closed dates, lead time or your time zone, so the zone falls back to the server's. The code marks that fallback as a guess internally, but nothing surfaces the warning to you. All six default windows overlap another one — four overlapping pairs — so a one-technician shop can hold at most three of them in a day, which is worth knowing before you judge the board. A clean, non-overlapping set exists in the code but cannot be selected. There is also no way to reschedule, cancel or reassign a job once it is booked.

How does the price book work with my supplier's pricing?

You export a CSV from your supplier and upload it in the browser — a header row naming sku, part, wholesale, category, plain comma-separated, since a comma inside a part name shifts that row and it gets skipped. Set one target gross margin for the business and retail recalculates from wholesale across the whole catalog using true margin math, not markup on cost, so the margin holds without re-keying line items. Import is an upsert on SKU: existing parts update, new ones are added, nothing is removed — a row needs a SKU and a numeric wholesale to land, and one upload takes the first 5,000 rows, so a bigger sheet goes up in pieces. There are no live distributor or EDI feeds — no Johnstone, Ferguson or Watsco connection — and nothing watches wholesale costs for you; retail recalculates when you re-import or move the margin. The margin is one number for the whole catalog today, not per item, category or supplier.

Can HVAC HQ handle installation proposals and get them signed?

You build an estimate as line items with a tax rate and terms, and the total is computed on the server in cents — the browser figure is only a preview. A successful send mints a signing link you can copy, and emails it as well if you enter an address and the hub reports email available; if the email fails you still get the link, and in sandbox mode the send is recorded but nothing is delivered. Mail goes from a shared HVAC HQ address unless you connect your own verified sending domain, and the send panel tells you which. You can also require an access code that you pass on separately. The customer signs on a public page with no account and no install: they type their name, tick an explicit consent box, and can draw a signature if they want. The consent wording for the language the page was showing is stored with the signature along with a hash of the document, so a later change to a line item shows as "altered since signing". What is missing: no PDF copy, no discounts or good/better/best options, and no financing; there is a price book, but the estimate builder does not pull line items from it; and the link expires, so it is not a permanent customer copy.

Can I put the assistant on my own website?

Yes — one script tag puts the assistant on your site, and it runs in English or Spanish: it takes the language from what the visitor types and stays in it. It books onto the same dispatch board as the phone line through the same rules, so neither channel can commit a technician who is already in that window, and a window with nobody qualified free stops being offered at all. It stays off until you switch it on, and it will not switch on until you name at least one domain it is allowed to run on. You set a daily cap on how many jobs it may put on the board, and there are per-IP rate limits on top. It deliberately cannot look a customer up — no returning-customer greeting on the web — because that would turn your client list into something a stranger could query. A gas, CO or smoke phrase interrupts whatever step it is on and gives the evacuation instruction before it asks for anything else.

Does truck inventory replace a clipboard or a warehouse system?

A clipboard. It holds a count per SKU with a minimum threshold and an optional van label — leave the van blank and the table still prints VAN-01. Movement is one unit at a time: you tap Scan Out or Restock on the part's own row, and it refuses to go below zero. Typing a SKU is how you add a part, not how you move one. Nothing reads a barcode with a camera; the screen calls it a simulated scanner. There is no separate count per van, no movement history, and nothing deducts a part when a job closes or a part lands on an estimate. Low stock shows as a count on the dashboard and names the first few; it does not order anything.

Can technicians use it in the field?

Yes — it is a responsive web application, so it runs in the browser on the phone or tablet a tech already carries, with no app-store install to push across your fleet; each tech signs in with an account you create. There is no offline mode: no work is stored on the device, so with no signal a tech in a crawlspace cannot save anything and a reload returns nothing until they have bars again. Native iOS and Android apps with offline working are on the roadmap, not shipped.

Pricing & billing

What does it cost, and are there contracts?

Three flat monthly tiers: Starter at $199 per month (up to 1 user, 199 AI voice minutes), Growth at $399 per month (up to 3 users, 399 AI voice minutes), and Scale at $699 per month (up to 10 users, 699 AI voice minutes). The site, the app and the sales line all read those figures from one table, so they cannot disagree. Every plan is month to month: no setup fee, no minimum term, no long-term contract, and you can cancel at any time and keep access through the period you have already paid for. There is one charge on top of the tier: if you use up your plan's monthly AI voice minutes, you top up with a minute pack, priced on the pricing page and always below your plan's own per-minute rate. Seats are a hard cap, not an add-on fee: you hit the limit rather than finding it on an invoice.

How does billing actually work today?

Real, and self-serve. Signing up starts a 14-day free trial with no card. Set up billing from Settings whenever you're ready — that opens Stripe's own Checkout and starts a real monthly subscription at your plan's price, picking up whatever is left of your trial rather than shortening it. From there, changing plans, adding a seat past your limit, updating your card, seeing past invoices and cancelling are all self-serve: plan changes and extra seats ($50/mo per extra seat each) apply immediately with Stripe's standard proration, and your card, invoice history and cancellation go through Stripe's own hosted billing portal — one button in Settings, nothing custom-built to trust with a card number. If the trial ends and there is still no active subscription (or a subscription lapses — a card declines, say), the account soft-locks rather than disappearing: you can keep dispatching, viewing and signing documents, and recording payments exactly as before; only two things pause — booking a brand-new job and adding a new teammate — until billing is sorted from Settings. Voice-minute overage (below) is a separate meter and is still settled with us directly rather than charged automatically.

What happens when I hit my plan's seat limit?

Seats count sign-in accounts, and only the owner can add one. Once billing is set up, going over your plan's seat limit is not blocked — it silently adds (or increases) a $50/mo per extra seat line on your subscription, prorated by Stripe like any other change, so the team keeps growing without a support ticket. Settings shows seats used against your limit either way. The only time adding a seat over the limit IS blocked is before billing has ever been set up — the error names your plan, says every seat is in use, and points at Settings rather than a person, since that is now genuinely a one-click fix. One real gap remains: nobody can be removed yet, so a departed user's seat stays taken and counted; that one still goes to a person — the contact page has the addresses.

How do payments work inside the platform?

The payments screen is a manual ledger. You record who paid and how much, and it adds to an undeposited balance you can mark as deposited. No card is processed and no money moves — no gateway is wired in, and the deposit response states plainly that it records the movement without transferring funds. One caveat about the screen as it stands: the balance card is still headed "Instant Payout" and stamps every row "Paid", so the honest wording currently lives in the API response, the Settings connection list and the support answers rather than on the button. Recorded payments are flushed to disk on write, and a database that is configured but rejecting writes returns an error instead of a false confirmation; if SQLite is unavailable the app runs in memory only and says so at boot and on /api/health. Card processing and bank payouts are on the roadmap.

How are my AI voice minutes counted?

Your plan's allowance is set by its price: at $1 a minute, a plan includes as many minutes as its monthly fee buys. Run the allowance out and you top up with a minute pack rather than being charged an open-ended overage — every pack costs less per minute than the plan rate, so planning ahead is never punished. Call length comes from the phone platform's own per-call record, so usage is measured rather than estimated; a call that arrives without a recorded length is shown as unmeasured instead of being guessed at. If auto top-up is on — it is by default — a pack is added the moment the allowance runs out, so the line never stops answering mid-season. You can switch that off in Settings. What is not automated is the money: there is no card on file, so a pack is recorded as owed and settled with us directly rather than charged.

Security & data

How secure is my data?

Your business records — jobs, customers, technicians, price book, documents, balances — are scoped on the server from your session cookie, never from a body field, query parameter or header. Ask for another business's record and you get a not-found rather than a permission error, so ids cannot be probed. Two surfaces sit outside the cookie deliberately and carry their own per-business secret instead: the phone agent's data bridge, signed with your line's own token, and the embedded website widget's key. A signing link is the credential for the customer holding it. Passwords and technician PINs are stored only as scrypt digests and session tokens only as hashes, and those digests are stripped before any response. Sign-in is throttled on the account and the IP together, and a request-screening layer with per-IP rate limits on the API sits in front of the app. What we will not overstate: those throttles are in-memory per server process, the phone-line admin screen spans the whole install rather than one business, the database file is not encrypted at rest, and HTTPS depends on how your instance is deployed.

Are you SOC 2, ISO 27001, HIPAA or PCI certified?

No. HVAC HQ holds no SOC 2 report, no ISO 27001 certificate, and no HIPAA or PCI attestation — we are not putting a badge on the page we cannot back. Two different things touch a card here, and neither one puts your PCI scope on us: taking YOUR customers' card payments through HVAC HQ is not connected (the payments screen is a ledger of money you collected elsewhere), and starting a trial takes no card either. Your own subscription to HVAC HQ, when you set it up, runs through Stripe's own Checkout and hosted billing portal — we never see or store a card number for that either. If an insurer or a commercial customer needs a specific attestation, ask us what we can actually evidence before you commit to it.

Who on my team can see what?

Enforcement is simple today: owner, and everyone else. Owners are the only ones who can add a teammate or a technician, provision, configure or test the phone line, switch on the website assistant or rotate its key, and open the install-wide lines view. Everyone else with a login sees the rest of your business — customers, jobs, documents, the price book, the payment ledger — and can record a payment or change the target margin. Past that one owner check the server authorises by business, not by job title: the role you pick when you add someone (owner, dispatcher, technician) changes which number leads their dashboard and grants nothing extra. One action needs more than a login at all — halting an emergency escalation asks for the assigned technician's PIN. Hand logins out with that in mind.

Are my calls recorded, and how is voice data handled?

Calls are transcribed, and that transcript is part of what you get. Speech is converted to text in real time so the agent can take the details, book into a real window and triage an emergency — and what lands in your account is the call log with its transcript and metadata, a summary row per call, plus whatever the call produced: a job, an emergency, a customer record. Raw call audio is a different matter: it is kept only as long as processing requires and deleted once that is done. Recording a call to keep the audio is a separate per-line setting that is off unless someone turns it on. The spoken conversation itself runs on our platform's telephony service. Either way, the call-recording and notification rules where you and your callers are located still apply to you — see the Privacy Policy for what is kept and for how long.

Who owns my data, and can I export or delete it?

You do. We do not sell your business data and we do not share it between businesses on the platform. Self-serve export and self-serve account deletion are not built yet — email privacy@hvac-hq.com and a person handles it. The same goes for removing an individual call-log row: there is no button for it today.

Still have a question?

Ask the assistant in the corner of this page, or send us a note — a person answers.