TruShine Window Cleaning
Your report will be updated in 50:24 min

Reusable customer install

TruShine reporting data layer

Each Service Pilot customer gets its own customer folder, provider connection records, sanitized data snapshots, and import jobs. The report UI reads the customer snapshot; provider credentials stay outside the deployed static site.

Current mode: scheduled_import. Last page build: 5/27/2026, 5:17:55 AM.

Provider auth

3/3
Ready

3 of 3 providers authorized

Provider auth and importer data both have to be complete before automatic refresh is live.

Imported data

3/3
Snapshot loaded

3 providers have at least one imported row

Meta and GHL have imported snapshots; Google still needs its first import.

Refresh path

Not real-time
Worker required

38 Meta campaigns, 6 Google rows

Use a scheduled worker or server route to rebuild this customer snapshot.

Customer isolation

Per customer
Required

Credentials must be encrypted and server-only

Do not copy one customer token into another customer's folder or build artifact.

Connection actions

Each customer uses its own OAuth/token connection. The connect links start the provider login flow and the refresh action rebuilds the customer snapshot from whatever is already connected.

Provider setup

This is the operator/customer setup view for every copied Service Pilot reporting account.

Facebook / Meta Ads

oauth

Connected

Uses campaign spend, impressions, clicks, lead forms, campaign status, and source labels.

Customer step
Connect the customer's Meta ad account with their own login.
System step
Store only encrypted refresh credentials, then run the Meta campaign importer.
Rows
38
Last import
Never

Google Ads

oauth

Connected

Uses campaign/ad group/keyword rows, spend, clicks, calls, forms, and conversion labels.

Customer step
Connect the customer's Google Ads account with their own Google login.
System step
Store only encrypted refresh credentials, then run the Google campaign importer.
Rows
6
Last import
Never

GoHighLevel

private token

Connected

Provides booked jobs, won jobs, revenue, junk/spam filtering, and ROAS matchback.

Customer step
Connect the customer's GHL location or private integration token.
System step
Map opportunities, contacts, source labels, booked status, won revenue, and pipeline stage.
Rows
100
Last import
Never

Current limitation

cPanel static hosting can show the latest generated snapshot, but it cannot securely complete OAuth or refresh tokens on its own. Automatic updates need a scheduled worker, Vercel/Supabase function, or another server-side job that writes fresh customer snapshots.

Reusable install contract

1. Create a customer folder with `config.json`, `connections.status.json`, and `data/*.csv`.

2. Let the customer authorize Meta and Google with their own account.

3. Connect the customer's GHL location/private integration token.

4. Run the scheduled importer and rebuild/revalidate the report snapshot.

Credential rule

Customer usernames, passwords, OAuth refresh tokens, and GHL private tokens must never be copied into the static app, CSV files, or repo. Store only encrypted server-side credentials and write sanitized report rows for the UI.