Reporting Hub
Find the financial, project, and operational views available to you.
Financial Overview
Industry Benchmarks
FTG vs. Industry StandardsIncome Statement
Revenue to Operating Income Waterfall
Flow from revenue through direct costs, indirect costs, and operating expenses to operating income.
Balance Sheet
Statement of Cash Flows
Job and PM Overview
Project Schedules
Missing Budgets
Recap categories count each T&M job's full actual cost once. A sent recap does not prove costs were covered, approved, billed, or the job completed; no sent recap means no recorded send. If recap amounts are unavailable, the breakdown cannot be reconciled. Job 3316 overlaps the categories and reflects the other filters, even when excluded.
|
Job #
|
Description
|
Notes |
Client
|
Type
|
PM
|
Actual Cost
|
Budgeted Rev |
Budgeted Cost |
First Cost Date |
Final Cost Date |
Recap Status | Client Sent | Recap | Comment |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading missing budgets data... | ||||||||||||||
Job Budgets
Key Metrics
|
Job #
|
Description
|
Client
|
Status
|
Project Manager
|
Start Date |
Contract Value |
Projected Cost
|
Estimated Profit
|
Profit Margin
|
|||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading job data... | ||||||||||||
Job Financials
Key Metrics
|
Job #
|
Description
|
Contract Type
|
Client
|
Start Date |
End Date |
Status
|
Project Manager
|
Contract Value |
Billed Revenue |
Earned Revenue |
Over/(Under)
|
Budgeted Cost |
Act. Cost |
% Complete
|
Est. Profit |
Act. Profit |
Est Margin % |
Act. Margin % |
Backlog
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading job actuals data... | |||||||||||||||||||
Job List
Loading Procore data...
RFIs & Submittals
RFIs by Project Manager
Submittals by Project Manager
| Job # | Description | PM | RFIs | Submittals | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Overdue | Due <7 Days | Due >7 Days | Closed | No Due Date | Draft | Overdue | Due <7 Days | Due >7 Days | Closed | No Due Date | Draft | |||
Job Cost Intelligence
Commitments
Committed vs Actual vs Budget by Project Manager
| Project Manager / Job / Commitment | Vendor / Contract Company | Type | Status | Original Value | Approved COs | Revised Value | Retainage % |
|---|
Closed Job Analysis
Change-Order Waterfall — filtered set, original contract → change orders → billed → cost → profit
| Job # | Description | Client | PM | Start Date | End Date | Budgeted Revenue | Billed Revenue | Rev Diff | Budgeted Cost | Actual Cost | Cost Diff | Budgeted Profit | Actual Profit | Profit Diff | Budgeted Margin | Actual Margin | Margin Diff |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Totals / Averages | - | - | - | - | - | - | - | - | - | - | - | - | |||||
| Loading closed job data... | |||||||||||||||||
Monthly PM Report
| Job # | Description | Type | Total Contract Amt |
Total Est Cost |
Est Gross Profit |
Est Gross Margin % |
Billings to Date |
Total Costs to Date |
Current Gross Profit |
Current Gross Margin % |
% Complete |
Over/ (Under) Billed |
|---|
Revenue by Job
| Job # | Job Name | Customer | PM | Start Date | End Date | Actual Costs | Cost Budget | % Complete | Contract Value | Revenue to Date |
|---|---|---|---|---|---|---|---|---|---|---|
Contract Revenue Breakdown · July–August 2026
| Customer / Job | Job # | Contract Value | July 2026 | August 2026 | Jul–Aug Total |
|---|---|---|---|---|---|
| Loading… | |||||
Over/(Under) Billing
Key Metrics
Top 10 Overbilled Jobs
Top 10 Underbilled Jobs
|
Job #
|
Description
|
Client
|
PM
|
Type
|
Contract Value |
Est. Cost
|
Act. Cost |
% Complete
|
Billed Revenue |
Earned Revenue |
Over/(Under)
|
Status |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading data... | ||||||||||||
| Totals | - | - | - | - | - | - | - | |||||
Labor Hours
Hours by Pay Period
Hours by Job
Hours by Employee per Month
Hours by Trade per Month
Hours by Job per Month
|
Job #
|
Job Description
|
Employee Name
|
Trade
|
Regular Hours
|
OT Hours
|
DT Hours
|
Other Hours
|
Total Hours
|
|---|---|---|---|---|---|---|---|---|
| Subtotal | 0 | 0 | 0 | 0 | 0 | |||
Job History Detail Report
Trade Mix
Insights
View detailed insights
Cost by Trade
Trade Mix
Period totals are dollars in both modes.
Job Costs
Top Spend Categories as a % of Revenue
|
Job #
|
Job Description
|
Project Manager
|
Cost Code
|
Description
|
Total Cost
|
% of Total Cost
|
% of Revenue
|
|---|---|---|---|---|---|---|---|
| Loading cost code data... | |||||||
| Totals | - | 100.00% | - | ||||
Workforce Dashboard
Headcount Trend
Hires vs Terminations
Retention Rate Over Time
Retention by Trade
Employees by Trade
Tenure by Trade
Upcoming Employment Milestones
Approaching 60-Day Mark
Loading...
Approaching 90-Day Mark
Loading...
Employee Directory
| Name | Job Title | Manager | Years | Hire Date | Term Date | Type | Trade |
|---|---|---|---|---|---|---|---|
| Loading employees... | |||||||
Accounts Receivable Aging
Key Metrics
excl. retainage
AR Aging
Average Days to Pay by Customer · last 12 months ⓘ
|
Customer
|
Total Due
|
Total Incl. Ret. |
0-30 Days
|
31-60 Days
|
61-90 Days
|
90+ Days
|
Retainage
|
Notes |
|---|---|---|---|---|---|---|---|---|
| Loading AR aging data... | ||||||||
Invoice/Payment Lookup
| Loading invoice data… |
Invoice Approvals
Upload New Invoices
Invoice Approvals Aging
PM Invoice Approval Report Card
Turnaround = Notified → approval Timestamp on explicit Approved invoice lines. On time = within 5 weekdays (America/Los_Angeles; holidays counted as weekdays).
| PM | Median d | Avg d | On time | Measured | Excluded | Pending | Pending $ | Overdue | Oldest d | Unmeasured |
|---|---|---|---|---|---|---|---|---|---|---|
| Not loaded | ||||||||||
Invoice lines (0)
| Invoice | PM | Vendor | Status | Business days | Result | Quality |
|---|
Avg Days Since Notification by PM (Approved) — NOT turnaround
Average notification age of approved invoices per PM, in days since notification.
Oldest Outstanding Invoice by PM (Pending)
Days since notification, falling back to invoice date. Hover for invoice details; ties are marked oldest.
No pending invoices match the current filters.
Outstanding by Age (Pending)
Count of pending invoices grouped by invoice-date age; bar colors show age, not count.
Invoices To Be Approved
| PM / Vendor | Invoices | Total Due | 0-30 Days | 31-60 Days | 61-90 Days | 90+ Days | Days Outstanding |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
Invoices Not Approved
| PM / Vendor | Invoices | Total Due | 0-30 Days | 31-60 Days | 61-90 Days | 90+ Days | Avg Days |
|---|---|---|---|---|---|---|---|
| No invoices | |||||||
Approved Invoices
| PM / Vendor | Invoices | Total Due | 0-30 Days | 31-60 Days | 61-90 Days | 90+ Days | Avg Days |
|---|---|---|---|---|---|---|---|
| No invoices | |||||||
Accounts Payable Aging
Vendor Payment Status
Top 10 Vendors by Spend
|
Vendor
|
# Inv |
Invoice #
|
Invoice Date
|
Job #
|
Job Desc.
|
Project Manager
|
Non-Retention
|
Retention
|
Invoice Amount
|
Paid-to-Date
|
Remaining
|
Status
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Loading invoice data... | ||||||||||||
Forecast
Revenue
Total projected revenue by month.
Gross Profit & Margin
Gross profit by month with gross-margin %.
Operating Profit
Operating profit by month.
Cost Breakdown
Direct, indirect, and operating costs by month.
Potential Upcoming Jobs
Manually track prospective work (not yet won), grouped by Project Manager. Separate from the Valuation pipeline.Loading potential jobs…
Workforce Planning
| Last Name | First Name | Goes By | Job Title | Account Class | Hire Date | Term Date | Wage Type | Rate / Salary | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Annual Total |
|---|
Cash Balance & Transactions
Daily Cash Balances
Administration
Manage Dashboard operations and Dashboard staff access. FTG Portal and Client Portal accounts remain separate.
Dashboard staff accounts
Dashboard roles and sign-in only. FTG Portal membership, titles and photos are managed in FTG Portal.
Staff authentication rollout health
Bounded bootstrap and sign-out outcomes by rollout, cohort, and shell. Duplicate cross-tab receipts are de-duplicated and are not counted as initiating failures.
Runbook: correlate a rate change with the matching rollout annotation, pause the rollout, compare the affected cohort with legacy, and require one healthy observation hour before resuming. Use the kill switch for a rollout-specific regression.
Client Portal accounts are separate from staff accounts. Everyone here is a single "client" type — what each person can see is controlled by the Access Levels you assign them (or by direct job grants).
Portal sign-in link (share with clients):
Active read-only previews
Previews expire automatically. Only the staff member who issued a preview can revoke it.
Add Client
New clients receive a setup-password email so they can choose their own password.
Generate password (no email) for
This replaces their current password immediately (any active portal sessions are signed out) and no email is sent — you copy the credentials and share them yourself.
Edit access for
Effective access for
Access summary for
Usage & emails for
Access review — who can see which job
Access Levels are reusable, named sets of job visibility. Assign one to as many clients as you like — change the level once and every assigned client updates automatically.
Access Level
Every job number granted to at least one active portal client, verified against the three systems the portal joins at runtime: Foundation (job identity feed), Procore (project match + per-section cache freshness), and SharePoint (job folder + published portal documents). "No data" is labeled honestly — a tool that isn't enabled in Procore is not the same as a cache that never synced or went stale.
Client-visible invoice packet coverage
Meeting minutes auto-ingest
Every night, right after the meetings cache refresh, each job's Procore meeting minutes are filed automatically into the portal Documents page (attached PDFs as-is; typed minutes as a generated PDF). A job's very first backfill never emails clients; after that, newly posted minutes notify clients per their document preferences.
Unassigned minutes
Minutes files that arrived without a clear job/meeting match (from the Fireflies and SharePoint pipelines). The Hint column shows what the source knew — for Fireflies rows, the original transcript title and meeting date. Preview each file, then assign it to a job — and optionally a specific meeting — or dismiss it. Assigning files the PDF to that job's portal Documents and notifies its portal clients per their preferences; dismissing keeps that transcript out permanently (it is never re-queued by later polls).
SharePoint minutes folder watch
Watches each active job's SharePoint folder for a "Meeting Minutes" subfolder and auto-files any new PDF/Word document into that job's portal Documents, linked to the Procore meeting whose date matches the filename (or the file's upload date). Expected convention (read-only — folders are never created): one folder per job, named with the job number, anywhere in the Construction site's document library, with a "Meeting Minutes" subfolder either directly inside it or inside its "Meetings" folder (e.g. "12 Meetings/Meeting Minutes"). Jobs without one are skipped quietly; ambiguous folder matches park files in the Unassigned queue above. A job's first backfill never emails clients; deleting a file in SharePoint never removes it from the portal.
Folders needing attention
Procore inspection reports
Checks attachments on portal-visible Procore inspections and silently files supported PDF/Word reports under Reports & Signoffs. Clear municipal, special-inspection, and HCAI/OSHPD context is required; unsupported or uncertain files are skipped and reported here rather than guessed.
SharePoint inspection reports watch
Watches each active job's SharePoint folder for inspection-report subfolders and auto-files any new PDF/Word document into that job's portal Documents in the matching category — clients see them under “Reports & Signoffs” on the Inspections page. Folder names map to categories: “Inspection Reports”/“Municipal Inspections” → Municipal Inspection Report, “Special Inspections” → Special Inspection Signoff, “OSHPD”/“HCAI” → OSHPD Field Visit Report (a numbered prefix like “07 Special Inspections” is fine, directly in the job folder or inside its “Inspections” folder). Jobs without these folders are skipped quietly; ambiguous matches file nothing and are listed below. Auto-filed reports never email clients, and deleting a file in SharePoint never removes it from the portal.
Folders needing attention
Fireflies meeting recaps
Finished Fireflies meeting recaps (overview, notes, action items) are pulled automatically about once an hour and filed to the matching job as branded PDFs — linked to the job's Procore meeting when the dates line up. Meeting-title convention: include the 4-digit job number in the meeting title (e.g. “3316 — Weekly OAC”) so the recap files itself; recaps without a confident match land in “Unassigned minutes” above for review. The first backfill never emails clients.
Closeout package workspace
Organize job closeout files by subcontractor, save the organized copy in Construction SharePoint, and publish the client-authorized copy to the portal.
1. Subcontractor folder
Choose where these files belong. Empty folders are also visible to clients.
2. Choose source files
Insurance Certificates workspace
Choose certificates from this PC or the selected job’s Construction SharePoint tree, confirm the client-facing details, then save an organized SharePoint source copy and publish the portal-owned copy.
1. Choose source files
2. Review client-facing details
Confirm every title and effective date before publishing.
Published insurance certificates
The document library clients see on their portal Documents page. Pick a job to see exactly what its portal clients can download, upload new documents, or remove one added by mistake.
Closeout packages — completion overview
Every job with at least one closeout document, least-complete first. Click a missing category to load that job's library below with the upload form preset — attach the missing document immediately.
Upload a document to job
Everyone whose portal access includes this job sees the document on their Documents page immediately (50 MB max per file).
Import documents into job from Procore or SharePoint
Pull files that already exist in the job's Procore project documents or SharePoint job folder straight into the portal library — no re-downloading and re-uploading. Files identical to something already in this job's library are skipped automatically. Pick a closeout category (Warranty, As-Built, O&M Manual, Closeout) to fill the client's Closeout Package hub.
Lien waiver tracking — vendors expected on job
Clients see a status row for each vendor listed here (latest waiver on file, through date, final on file, Current/Outstanding). Deactivating a vendor removes its status row without touching any uploaded documents. Notes are staff-only.
Page Permissions control which portal pages and client-facing capabilities a user can use. Each card shows the level baseline. They do not change which jobs the user can see; manage job visibility separately under Access Levels or direct job grants. Required Account and Notifications pages are always on for a valid assigned level. User-wide and per-job page exceptions are identified separately, and the per-job exception wins.
Permission Level
| Date/Time | Category | Severity | User | Action | Details | IP Address |
|---|---|---|---|---|---|---|
| Loading audit log... | ||||||
Request Health — this instance only (in-memory since last restart; autoscale instances differ)
| Route (top by volume) | Count | 4xx | 5xx | Avg ms | Max ms |
|---|---|---|---|---|---|
| Loading request metrics... | |||||
Server errors (unhandled exceptions and 5xx API responses) captured automatically.
Each failed request returns an X-Request-Id header — paste it above to find the matching error.
| Time | Status | Method | Route | User | Request ID | Error |
|---|---|---|---|---|---|---|
| Loading errors... | ||||||
Every recap package / PO-nudge email records its outgoing MIME structure at send time
(inline image parts + cid: references). If a client reports a missing FTG logo,
expand the row to confirm the logo left our server intact, and download the
.eml to diff against the delivered copy.
| Sent | Kind | Job | To | Subject | Via | Logo | Raw |
|---|---|---|---|---|---|---|---|
| Loading sends... | |||||||
Import Bank Transactions (CSV)
Upload a legacy bank CSV or the new Account Activity export. The system detects the format, matches known accounts, reports unknown accounts, and skips duplicates.
Drag & drop a CSV file here, or click to browse
Accepted: Account Activity (TRC Number, Account Number, Post Date, Amount, Description, Text, Calculated Balance) or legacy bank export
Import Credit-Card Transactions (CSV)
Upload a Capital One or American Express statement export. If bank Account Activity is dropped here by mistake, it is detected and safely imported as bank activity instead of card spend.
Drag & drop a card statement CSV here, or click to browse
Capital One: Transaction Date, Description, Category, Debit, Credit · Amex: Date, Description, Amount
Stored Transaction Summary
Duplicate Transaction Audit
Scan stored transactions for suspected duplicates left by earlier failed uploads (same account, date, amount & normalized description). Review before removing anything — nothing is deleted automatically.
Outgoing Email Policy
Every outgoing email passes one policy gateway: real delivery only in the published deployment, recipients limited to the allow-list below in every environment (non-listed addresses are stripped; an empty or unreadable list fail-closes to the designated admin only), and automatic email held behind the master switch. Every attempt is recorded in the activity log.
Recipient allow-list
Activity log
Sender Control
Set a From address for each send category. Leave blank to fall through to the global default. The address must be a registered alias on the service-account mailbox — use Verify to confirm, Test to prove delivery. Changes take effect on the next send without a restart.
Global Default (Fallback)
Used for any category that has no override. Per-schedule sender overrides still take precedence over this.
Email Schedule
Send From My Address
Recap packages and order emails can send directly from your own @ftgbuilders.com address ("Send from my address"). If that isn't working, this check reports the actual reason from Google — it only tests whether a send token can be minted for your address; no email is sent.
Report Recipients
Manage who receives the Daily CFO Report, Weekly Workforce Snapshot, and CFO Distribution (manual send). These are the TO recipients — CC lists are configured per schedule above.
Monthly PM Report
Sends the full All-PMs report once a month to the recipients below. Choose whether it's on, which day of the month it goes out (clamped to the last day for short months), and what time (Pacific). This is separate from the Weekly PM Report configured in the scheduler above.
System Status Alert Emails
Each system alert category can be enabled or disabled independently. When disabled, no email sends for that category regardless of the recipient list or environment config. Recipients can be managed per category.
Job Log Changes
Who gets the once-a-day Job Log Changes email summarizing new jobs and changes to existing jobs in the SharePoint Job Log workbook. Only the people listed here receive it — if the list is empty, no email is sent. Days with no activity send no email.
Employee Hours Report
Who gets the employee-hours email: Top 10 for the last 2 weeks, Top 5 for last month, and Top 5 year-to-date, each with a Regular/OT/DT breakout and hours over the standard work week. If none are listed here, it falls back to the single backup address.
Job Log Sync
The Job Log page and job dropdowns are fed from the SharePoint workbook "Job Log NEW (USE THIS).xlsx" (Current Jobs tab). It syncs automatically about every 20 minutes.
Send reports manually using production data. Choose recipients and data scope for each report.
Sends the real current-data email of the selected type to one recipient only. The subject is prefixed [TEST]. Real recipients and schedules are never changed.
Exports job numbers, names, statuses, cost codes, and descriptions as independent dropdown lists. Auto-refreshes twice daily at 9:00 AM & 9:00 PM PT.
Daily Trend
Views by Page
| Page | Views | Unique UsersUsers | Last ViewedLast |
|---|---|---|---|
| Loading... | |||
Views by User
| User | Views | Pages | Last ViewedLast | |
|---|---|---|---|---|
| Loading... | ||||
Native storage migration
User-operated, data-only copy into an already-published native target. Follow the explicit stages Verify Source → Pause → wait for a fresh fence/drain → Preflight → Copy or resume → Activate → manual native flags/Publish. Verify Source is usable while legacy is active. Pause and Resume old app use the managed freeze-control protocol; this panel never publishes schema, changes routing, or activates an admission automatically.
Superintendents text their recap (job, vendors, notes, complete/partial, GMR yes/no) to the FTG RingCentral number. The message is parsed automatically and a recap is created on the T&M Recaps – Field page. Match each superintendent to their cell number below — texts from unknown numbers are rejected.
Morning Recap Attention Email
End-of-Day Summary Text
Once per day (only when texts came in), the recap number sends one summary text to the recipients below: how many texts arrived, from which superintendents, recaps filed, waiting on info, and photos received. Replaces RingCentral’s per-message email notifications.
Biweekly Recap Nudge
Every other week, the recap number texts the selected superintendents a friendly nudge — but only the ones who haven’t logged a T&M recap within the lookback window. Replying RECAP starts a text-in session right in the same thread. Supers without a cell number are skipped. Automated reminder texts are sent only from 7:00 AM through 3:59 PM Pacific; overnight runs are deferred.
Superintendent Cell Numbers
| Superintendent | Cell Number | T&M Clients | Card Sent | Actions |
|---|---|---|---|---|
| Loading… | ||||
Reply Health (last 7 days)
Job Recap Sessions
One card per superintendent and job. Work complete means the super reported the job done; Recap submitted means a T&M recap was filed; Office handled means staff closed it out here. Legacy Needs review items are shown as-is and have not been repaired automatically.
Recent Texts
| When | From | Message | Outcome | Reply Sent |
|---|---|---|---|---|
| Loading… | ||||
Summary Commentary
No commentary added yet. Click Edit to add summary notes.