Skip to main content

Customer Portal Widget

The ContractorScope AI customer portal lets your clients view their estimate, ask questions, approve the scope of work, and sign contracts — all without needing to create an account or install anything. The portal widget lets you embed this experience directly on your own website so clients never leave your brand.

This guide covers generating your embed code, configuring the widget's appearance, what clients see when they open the portal, and how the approval flow works.

Customer portal widget embedded on a contractor website


What the Customer Portal Does

When a client receives an estimate link from you, they open a branded page that shows:

  • A professional summary of the scope of work
  • Itemized line items (with the option to hide pricing detail)
  • AI Visualization images (if generated — see AI Visualization)
  • A message thread so they can ask questions
  • An Accept Estimate button that collects their electronic signature
  • Optional: a deposit payment button (Stripe integration required)

Clients access the portal through a unique, secure link. No login required.


Embedding the Widget on Your Website

What the Widget Does

The customer portal widget is a small piece of embed code you add to your website. When a client visits a specific estimate link (generated by ContractorScope AI), the portal displays on your own domain instead of on contractorscopeai.com.

This keeps your brand front and center throughout the client experience.

Getting the Embed Code

  1. Go to SettingsCustomer Portal.
  2. Click Widget Setup.
  3. Copy the embed code snippet.

The embed code looks like this:

<script
src="https://cdn.contractorscopeai.com/portal-widget.js"
data-company-id="YOUR_COMPANY_ID"
defer
></script>

Adding the Code to Your Website

Paste the embed code into the <head> or just before the closing </body> tag of every page on your site. If you use a website builder:

PlatformWhere to paste
WordPressAppearance → Theme Editor → header.php, or use a "Header & Footer Scripts" plugin
WixSettings → Advanced → Custom Code → Head section
SquarespaceSettings → Advanced → Code Injection → Header
WebflowProject Settings → Custom Code → Head Code
ShopifyOnline Store → Themes → Edit Code → theme.liquid
tip

If you are not comfortable editing your website code, share the embed snippet with your web developer or web hosting support team. It is a one-time, two-minute task.

Once the code is on your site, ContractorScope AI handles the rest. When you send a client their estimate link, the portal loads on your domain automatically.

Widget setup screen with embed code and configuration options


Lead Capture Embed Form

In addition to the portal, you can embed a lead-capture form on your website so prospective customers can request a callback. New leads land directly in your account, and your AI phone assistant (Scout) can follow up — see Voice Assistant.

Getting the Form Embed Code

  1. Go to SettingsCustomer Portal.
  2. Open the Lead Capture section and copy the form embed snippet.

The snippet includes a secure embed token that ties every submission to your company. This token is required — it is how ContractorScope AI knows which account a new lead belongs to. Use the code exactly as provided; do not edit or remove the token.

Use your own embed code

Each lead-capture snippet is tied to your account through its embed token. Always copy your snippet from Settings → Customer Portal. A form without a valid token will not create leads.

What Leads See and Agree To

When a homeowner fills out the form, they see a consent disclosure before submitting. It tells them, in plain language, that by submitting they agree to be contacted — including by an automated / AI phone call (a TCPA-style consent notice). Submitting the form is their consent to that follow-up.

The form also has built-in protections so you only get real leads:

  • Automated bot submissions are quietly filtered out.
  • A repeat submission from the same phone number within 24 hours is ignored, so you don't get duplicates.
  • Submitted details are cleaned up before they reach your account.

There is nothing extra to configure for these protections — they are always on.


Configuring the Widget

Appearance Settings

Customize how the portal looks to match your brand:

  1. Go to SettingsCustomer PortalAppearance.
  2. Configure:
OptionDescription
LogoUpload your company logo. Appears at the top of the portal.
Primary ColorSets button and accent colors. Enter a hex code or use the color picker.
FontChoose from 6 professional fonts. Default is system font for fastest loading.
BackgroundLight or dark background theme.
Hide Itemized PricesShows scope of work but not individual line item prices — only the total.
Show Project ImagesToggle whether AI Visualization images appear in the portal.
  1. Click Save. Changes apply immediately to all future estimate views (and to currently open portal sessions on next refresh).

Notification Settings

Configure when you receive notifications about client activity:

  1. Go to SettingsCustomer PortalNotifications.
  2. Toggle notifications for:
    • Client viewed the estimate
    • Client sent a message
    • Client accepted the estimate
    • Client declined the estimate
    • Client requested a change
  3. Choose delivery method: Email, SMS, or both.

Customer-Facing Estimate Views

What the Client Sees

When a client opens their estimate link, they see:

  1. Header — Your logo and company name.
  2. Estimate summary — Client name, property address, estimate number, and date.
  3. Scope of work — Grouped line items with descriptions. Item prices are shown or hidden based on your settings.
  4. Project images — If you generated AI Visualization images, they appear here with a before/after comparison.
  5. Total — The estimate total, tax (if applicable), and any deposit amount.
  6. Message thread — A chat-style message area where the client can ask questions.
  7. Action buttons — Accept, Decline, or Request Changes.

Mobile Experience

The customer portal is fully responsive. Clients opening the link on a phone or tablet see a clean, single-column layout optimized for small screens. The accept button is large and prominent.

By default, estimate links expire 90 days after the estimate was created. You can change this per estimate or set a default:

  • Per estimate: Open the estimate → click Share → set a custom expiration date.
  • Default: Go to SettingsCustomer Portal → set Default Link Expiration.

If a client tries to open an expired link, they see a message asking them to contact you for a refreshed link.


Approval Flows

How a Client Accepts an Estimate

  1. The client reviews the scope of work and total.
  2. They click Accept Estimate.
  3. A signature panel appears. The client types their full name and clicks I Agree and Sign.
  4. The signed estimate is recorded in ContractorScope AI with a timestamp and IP address.
  5. You receive an instant notification (email and/or SMS based on your settings).
  6. The estimate status changes to Accepted in your dashboard.

Electronic Signature

The client's typed name and timestamp constitute the electronic acceptance. The signed record includes:

  • Client name as typed
  • Date and time (UTC)
  • Client IP address
  • Estimate number and version

You can download a PDF of the signed estimate from the estimate detail page. The PDF includes a signature block at the bottom.

Collecting a Deposit

Deposit collection pays out directly to your own connected Stripe account (not ContractorScope's) — so before you can require a deposit, you need to activate payments once:

  1. Go to Settings → Deposits.
  2. Click Activate payments. This creates a Stripe Connect account for your company and sends you through Stripe's hosted onboarding (business details, bank account for payouts).
  3. Once Stripe confirms onboarding is complete, the deposit settings unlock.

With payments activated, require a deposit as part of the acceptance flow:

  1. Open the estimate.
  2. Click Payment Settings.
  3. Enable Require Deposit and enter the deposit amount or percentage.
  4. Save the estimate.

When the client clicks Accept Estimate, they are prompted to pay the deposit via Stripe before the acceptance is finalized. The deposit is a destination charge routed straight to your connected Stripe account (no platform fee) and appears in your own Stripe dashboard, not ContractorScope's.

note

If you try to collect a deposit before finishing Stripe onboarding, the request is rejected (connect_not_onboarded) rather than silently charging through ContractorScope's account. Finish the Activate payments step in Settings → Deposits to clear this.

Requesting Changes

If the client clicks Request Changes, they can type a message describing what they want changed. This message appears in the estimate's message thread and triggers a notification to you.

After you update the estimate, resend the link. The client receives a new notification and can review the updated scope before accepting.


Next Steps

Once your portal is live, explore these related features: