Customer Portal Setup

Enable and configure the Customer Portal so your customers can view their jobs, estimates, invoices, and inspection information.

Overview

Setting up the Customer Portal involves verifying your company subdomain, ensuring your customer contacts have email addresses, and sharing the portal URL. The portal is available on a dedicated domain (cp.forz.io) and uses your existing customer and contact data β€”there is no separate portal configuration to enable.

Before You Begin

Prerequisites:

  1. You have the Admin role.

  2. Your Forz account has a subdomain configured (set during onboarding).

  3. At least one customer record exists with a linked contact that has an email address.

Verifying Your Portal URL

Your portal URL is determined by your company subdomain. Every Forz account has a subdomain set during onboarding.

  1. Navigate to Settings > Company.

  1. Locate your company subdomain value.

  2. Your portal URL is: https://cp.forz.io/[your-subdomain

Expected result: Visiting that URL in a browser displays the Customer Portal login page with your company branding.

Note: The subdomain is typically set during onboarding. If you need to change it, contact Forz support. Changing the subdomain changes all portal URLs, so update any shared links afterward.

Preparing Customer Data for Portal Access

For a customer to access the portal, three things must be in place:

  1. A Customer record exists in Forz.

  2. The customer has at least one Contact with a valid email address.

  3. The contact is linked to the customer via a contact linkage.

Adding a contact to a customer

  1. Navigate to Customers and open the customer record.

  2. Add or verify a contact with a valid email address.

  3. Confirm the contact is linked to this customer.

Expected result: The contact's email address is now associated with the customer. When the contact enters this email on the portal login page, Forz sends a verification code and grants access to this customer's data.

Tip: If a contact person manages multiple customer accounts (e.g., a property manager), link the same contact to each customer record. The portal presents a customer selection page when that contact logs in.

Sharing the Portal URL

Share the portal URL with your customers through any channel:

  • Email: Include the URL in your email footer, estimate emails, or invoice emails.

  • Website: Add a "Customer Portal" link to your company website.

  • Print materials: Add the URL to invoices, business cards, or service agreements.

  • Text message: Send the URL via SMS after completing a job.

Example email text

You can check the status of your jobs, estimates, and invoices at any time. Visit our Customer Portal at https://cp.forz.io/acme-plumbing and log in with your email address.

What Data Is Exposed

The portal shows customers a filtered, read-only view of their records. Understanding what is visible helps you control what customers see before sharing the URL.

Visible data

Record Type

What Customers See

What is Hidden

Jobs

Number, status, title, job type, system type, service address

Jobs with "Unscheduled" status, internal notes, assignee details, cost information

Estimates

Number, status, amount, date, expiration date, line items, PDF

Estimates in "Draft" status

Invoices

Number, status, amount, balance, date, due date, line items

Invoices in "Draft" status

Inspections

Number, date, system type, pass/fail/bypass results, PDF

Inspections on "Unscheduled" jobs

Dashboard summary

The portal dashboard also shows aggregate counts:

  • Open Estimates count (status "Sent" or "Viewed").

  • Outstanding Invoices count and total balance (excluding "Void" and "Paid").

  • Open Jobs count (excluding "Completed").

  • Latest Inspections count (created in the last 30 days).

Account information

The dashboard displays the customer's organization name, the logged-in contact's full name, email address, and phone number (if present on the customer record).

Warning: All non-draft estimates, invoices, and non-unscheduled jobs are visible to the customer as soon as you share the portal URL. Review your records before sharing access if you have sensitive pricing or internal notes that should not be exposed.

Controlling When Records Appear

Use status values to control when customers can see records in the portal:

  • To hide a job: Keep its status as "Unscheduled" until you are ready for the customer to see it.

  • To hide an estimate: Keep it in "Draft" status until you are ready to share it.

  • To hide an invoice: Keep it in "Draft" status until you are ready to bill.

  • To hide an inspection: Inspections follow their parent job's visibility β€” if the job is "Unscheduled," the inspection is hidden.

Tip: This gives you full control over timing. Create records in draft or unscheduled status while you prepare them, then update the status when you want the customer to see them.

Branding

The Customer Portal uses your company branding automatically. The portal layout displays your company name and uses the Forz branding associated with your account. No additional branding configuration is required for the portal.

Security and Access Control

Email-based verification

The portal uses one-time verification codes instead of passwords:

  • Codes are 6 characters (hexadecimal).

  • Each code expires after 15 minutes.

  • A new code invalidates any previous code.

  • The Resend Code button has a 60-second cooldown to prevent abuse.

Data isolation

  • Customers only see records belonging to their customer account.

  • Contact-to-customer linkages are verified on every request.

  • If a contact's linkage is removed, they lose access immediately.

  • The portal verifies the contact belongs to the correct Forz account (app account) on every page load.

Session management

  • Customer sessions are stored server-side.

  • Logging out clears the session completely.

  • If a contact is linked to multiple customers, switching requires a new login.

Common Scenarios

Setting up portal access for a commercial HVAC customer

Metro Climate Services creates a customer record for "Downtown Office Tower" and adds the building manager, Patricia, as a contact with her email (patricia@downtowntower.com). They send Patricia an email: "View your HVAC service history and upcoming work at https://cp.forz.io/metro-climate." Patricia visits the URL, enters her email, receives a verification code, and sees the dashboard with her building's open jobs and inspection reports.

Preparing an estimate for portal viewing

Sparks Electrical creates a draft estimate for rewiring a restaurant kitchen. While the estimate is in "Draft" status, the customer cannot see it in the portal. Once Sparks updates the status to "Sent," the estimate appears under the customer's Estimates tab and on the dashboard as an open estimate.

Troubleshooting

Problem

Solution

Portal URL shows "Account Not Found"

Verify your subdomain in Settings > Company. The URL must use the exact subdomain value (case-sensitive, including hyphens).

Customer cannot log in but their email is correct

Check that the contact record has a linkage to the customer. The email must belong to a contact that is linked to a customer in your account.

Customer sees another customer's data

This should not happen β€” the portal enforces data isolation by customer linkage. If reported, escalate to Forz support immediately with the contact ID, customer ID, and account ID.

Records are visible that should be hidden

Check the record status. Move jobs to "Unscheduled" or estimates/invoices to "Draft" to hide them from the portal.