Financials is available under Experimental when enabled for your workspace and account. Your financial access grants determine which reports and settings you can open.
It combines Xero actuals and bank balances with opportunities, contract billing schedules, targets, and planned events.
The page title and report filters appear in the top header, keeping the forecast and report content higher on the page. Use the year and line-of-business controls there; Forecast Accuracy also keeps its metric and month controls in the header, and Contracts keeps its search there. These controls remain available while individual cards, charts, and tables load. Each section shows a placeholder until its figures are ready. If a section fails, the other sections remain available. Refresh the page to retry the failed section. Access grants still determine which reports and figures you can see.
Monthly comparison and cash charts open on January–December of the selected year. Use the arrows at the far left or right to move the twelve-month view backward or forward by three months, including across year boundaries. Select Calendar year to return to January–December.
Use the chart series buttons to show or hide a series. Hidden series have dimmed, crossed-out labels and are omitted from hover details. Keyboard users can focus a series button with Tab and toggle it with Enter or Space.
Financial headline amounts keep their larger text when linked to ledger details. Net income uses distinct colors for profits, losses, and zero. Forecast variance shows No change when actuals match the saved forecast.
Core contracts and payment schedules are the source for revenue planning. Previously imported financial records remain available to review and manage in Core.
Forecast Readiness
Open Financials → Forecast Readiness to check whether projected profit has reliable inputs. It checks integration freshness, missing payment schedules or billable contacts, unmatched renewals and Xero contacts, unclassified opportunities, expired active contracts, and overlapping active renewal contracts.
Compensation and operating-unit allocation checks appear only when you have the matching staff-data access. Hidden checks are not included in your readiness result.
Connected assistants run forecast tools in the workspace attached to their connection, even if your account can access several workspaces. Report access and sensitive-account grants still apply. If a report times out, try again. An access error requires the matching financial grants. Unavailable match checks show an error rather than a zero issue count.
- Review the displayed issues and their actions menus.
- Select Show all issues to include matches that need judgment.
- Review proposed schedule amounts and their calculation source before saving a draft.
- Apply clear billable-item fixes or open the related contract for a manual decision.
A resolved row disappears as the checklist refreshes. Contract and integration pages remain available when your role can use them but lacks broader Financials access.
Review renewal and accounting matches
The overview's Needs attention card links to outstanding renewal and Xero contact matches.
HubSpot renewals
Open Financials → Contracts to review a renewal deal and the Core contract it extends. Core first checks the customer using a saved company association, matching company domain, or explicit alias. Other customers' contracts never appear as suggestions. Contracts must also pass date, existing-link, and overlapping-term checks. Hour blocks and time-and-materials contracts are not service renewal predecessors.
For eligible contracts, Core reviews the renewal's service, price, term, and payment schedules with a reasoning model. A price increase, a longer term, or a continuing service after implementation can still be a clear match. Core saves the reason when it links a clear match automatically. If a decision is needed, or the model cannot complete its review, the renewal stays open with an explanation. If no eligible predecessor exists, the explanation asks for the signed contract or a deal correction.
The daily Renewal Matches email lists only renewals that still need a decision, with the reason for each. Automatically linked renewals do not appear in that list. A deal merged into another HubSpot deal counts as already linked when its original deal ID is saved on the contract; Core updates the link to the surviving ID.
Core reads open, won, and lost status from HubSpot's stage information, not its close date. Open and won renewals are reviewed using the same customer and term checks. Only renewals that still need a decision appear in Renewal Matches emails. A confirmed won stage takes precedence over a stale open copy and sets renewal probability to 100%. Once the daily renewal check confirms the closed-won stage, a connected AI agent can link that review to its Core contract with link_reconciliation_match, and the contract is marked renewal confirmed. A closed-lost renewal can't be linked. Skip its review instead.
If the contract is missing, upload its signed file from the renewal match. Review the extracted contract details, payment schedule, and service scope before creating the contract. The service scope identifies included, excluded, conditional, and escalation work with supporting contract language. You can edit it and rate the extraction.
Approved exclusions and escalation clauses warn technicians when ticket work appears out of scope. They can escalate to managers and billing admins or proceed with a recorded reason; the response is retained in the audit trail.
Xero contact matches
Open Financials → Settings → Xero matches to link contracts to Xero contacts or ignore an inapplicable match. Review the candidate's details and recent invoice evidence.
A unique exact company-name match can link automatically. Names differing only by punctuation or legal suffixes, or duplicate names, need invoice evidence that identifies one matching billing contact. Other suggestions, including invoice text or email-domain matches, require review.
Use Confirmed links to change a wrong match or clear one contract's link. Clearing it returns the contract to review. Marking a reconciliation row resolved does not create the Xero link.
If suggestions cannot load, search for a contact or ignore an inapplicable contract. Select Retry suggestions to try loading candidates again.
Billing Health
Billing Health highlights missing schedules, low scheduled revenue, and missing billable contacts. Financial admins can review a proposed schedule before saving, apply clear assignment fixes, or ask Core AI about the same checks.
The reconciliation queue also contains ticket-driven billing reviews for onboarding, offboarding, or contact activity that may require adding, moving, or removing a per-contact assignment.
Access
Workspace owners have financial access by default. Other users need explicit grants for the reports they use. Platform admins and billing admins do not automatically receive full financial access.
Salary and compensation access is separate from ordinary financial reporting. Financial admins can grant salary visibility for everyone or selected people from Financials → Settings → Team. Salary viewers who already have Financials and capacity-management access can open the Team page to view permitted salaries, including who else can access them. Excluded salaries remain hidden, and permission-management controls are available only to authorized financial admins.
The Team page provides one capacity-and-compensation save form. Salary visibility alone does not allow edits; creating or changing structured compensation history requires compensation access. Review the save confirmation to verify that the change reached salary history.
Company-wide financial access is divided into these grants:
| Access key | Unlocks |
|---|---|
financials:overview | Dashboard summaries, targets, non-sensitive account classifications, app settings, assistant overview tools |
financials:revenue | Revenue dashboard, HubSpot deals/opportunities, contract revenue schedules, T&M projections, renewal assumptions, renewal matching, Xero contact matching |
financials:expenses | Expense P&L detail and ordinary expense actuals |
financials:cash | Cash-flow views and aggregate bank balance summaries |
financials:bank_accounts | Bank-account-level balances, bank monthly activity, bank transactions, bank transaction lines |
financials:payroll | Payroll actuals and payroll forecast inputs |
financials:compensation | All resource compensation rollups and allocation-sensitive resource planning data |
financials:owner_draw | Owner draw account classifications and owner-draw account detail |
financials:admin is an override for other company-wide financial access keys, but it is still explicit. It does not replace per-person salary grants.
Financials navigation and overview modules only show reports when the user has the full access-key combination for that report.
Reports and forecasts
Projection seasonality
In Financials → Settings → Run rate, turn on Apply seasonality to projections to adjust projected revenue for each line of business by its usual monthly pattern. This company-wide setting affects the Profit, Revenue and Net Income charts and the forecasts that use the same projections.
Core averages each calendar month's revenue multiplier across the prior three closed years of Xero history. The multiplier applies to remaining contract, pipeline, usage and variable revenue projections. Posted revenue and expenses stay unchanged. A line of business without historical revenue uses a multiplier of 1. Turn the switch off to use the original projections.
Overview
/financials requires overview, cash, bank-account, revenue, expense, payroll,
compensation, and sensitive-accounting access because its summary combines all
of those inputs. The current-month forecast combines posted month-to-date revenue,
remaining contract schedules, weighted pipeline and renewal revenue, and the variable
revenue still expected for T&M or other non-scheduled work. Revenue and expenses reconcile
across the dashboard, Net Income, Profit by LOB, saved forecasts, and financial tools.
Variable revenue left in the current month is the median of unscheduled invoicing in the same number of days at the end of each of the last three closed months. For example, on October 22 nine days remain, so it uses July 23–31, August 23–31, and September 22–30. Months without synced Xero invoices are skipped. Invoices for contacts with a contract schedule or usage estimate in that month are excluded, and schedules still projected this month for contracts without a Xero contact are subtracted so they are not counted twice. One-offs are excluded too: milestones, one-time or onboarding charges, annual fees, hardware, pass-through costs, lines posted outside revenue accounts, and lines billed for a future month. Month-to-date variable revenue is not extrapolated, so a large milestone or prebilled invoice does not raise the rest of the month. The ledger line shows the window, each month's amount, and the one-offs excluded. Without synced Xero invoices for those months, the forecast falls back to the month-to-date pace.
Contract schedule revenue counts each installment once. An approved or active schedule supplies its months' amounts even when older billing charges have no link to its lines. A recurring schedule replaces a billing rate's charges when it has an installment in every month that rate charges. A one-off installment, such as a setup fee, or a schedule that ends before the rate is counted beside the rate. Itemized lines associated with specific billing items replace only those items' generated charges, so separate per-user and per-unit charges remain. A Unified monthly amount replaces rate-generated charges in that contract's service month. A stale schedule charge yields only to its own schedule's amount for that month; a charge without a known schedule remains. Linked charges and recognized legacy installment twins count once. Legacy twins must share a contract, service date, amount, and installment identity from the two creation paths. Separate rows with equal amounts remain separate. Older Unified schedules retain their installments when they have no canonical monthly amount, including installments already billed or never linked to a billing charge. An explicit monthly amount, including zero, takes precedence over older installments on that schedule. Distinct live lines, per-unit charges, and separate billing items remain separate. Historical and future months use the same schedule rules, and matching invoices clear the remaining installment. Billing Health schedules and Unified month totals replace rate-generated charges in the months they cover. Dates follow the America/Chicago business calendar. Report emails show observed Xero amounts under Month to date (posted). Projected totals stay separate. The combined weighted pipeline figure includes renewal revenue.
Shared forecast source lines
Forecasts have one shared ledger of source lines. Each line identifies its month, operating unit, revenue or expense kind, source, and calculation rule. It also keeps the calculation date, explanatory inputs, and source freshness where available. Revenue and expense adjustments use signed amounts, so the sum is net income. Deal details show the actual Forecast category, such as Best case, beside its probability. Deal stage does not determine the category weight or ledger grouping. Every financial page, connected forecast tool, and saved forecast reads the same ledger, built once per request. Net income always equals revenue minus expenses. Rolling twelve-month summaries include all twelve months across year boundaries. Authorized historical totals include protected-account expenses without revealing those accounts. Payroll classification uses both account names and categories. Cash projections retain posted bank receipts and payments, then add remaining estimated revenue and expenses after subtracting their observed P&L actuals.
When the forecast extends into the next year, current-month reconciliation applies only to the current year's revenue series. Contract and deal lines keep their source details and operating units across the year boundary.
Lines distinguish actuals, committed revenue, typical unscheduled work, usage, weighted pipeline, best-case upside, payroll, recurring expenses, the residual expense run rate, planned events, and overhead allocations. The headline groups those lines into three separate layers.
Forecast inputs and totals
These labels describe Core forecast calculations, not HubSpot deal stages or forecast categories. HubSpot categories help set deal probabilities.
- Baseline combines posted actuals, signed contract schedules and signed renewals, and the recurring baseline. The baseline includes typical unscheduled work, hourly usage estimates, payroll, recurring expenses, the residual expense run rate, and planned changes. It is a planning baseline, not a promise that all estimated revenue has been signed.
- Probability-adjusted deals adds probability-weighted non-large open deal revenue and unsigned renewals. HubSpot deals retain their saved Forecast category probability until the next sync. Requested Proposal identifies the source stage and retains its saved probability, including existing 50% weights. Explicit HubSpot overrides replace the base probability; the stage label does not replace category settings or manually authored opportunity values. Timing and stale-deal decay remain unchanged.
- Additional deal upside adds the remaining unweighted upside of eligible non-large deals in HubSpot's Best Case, Commit, or Strong / Verbal categories. This is additional upside above the weighted amount, so a deal is not counted twice. Timing and stale-deal adjustments still apply.
- Expected total is Baseline plus Probability-adjusted deals.
- Upside total is Expected total plus Additional deal upside. Deals listed under Independent large-deal upside are shown separately and excluded from both totals. A saved decision can keep a qualifying large deal in Expected total.
Each input layer shows its own revenue, expenses, and net income. Monthly chart
lines show Baseline, Expected total, and Upside total, each with a short definition
and matching legend style. The labelled zero line separates positive and negative
amounts. Upside total is an optimistic scenario. Unsigned renewal deals belong to
Probability-adjusted deals, including deals
linked to an ending contract. Signed successor contract schedules remain in
Baseline. Revenue probability, overrides, timing, and seasonality do not create
expense estimates. Staffing and contractor costs, recurring expenses, actuals,
and explicit planned expenses determine forecast spending; Core does not add a
percentage of deal revenue as a delivery cost. Add any extra hiring or project
spending to the corresponding expense plan. The historical expense baseline
continues to cover costs without a more specific source.
Dashboard home, Net Income, Profit, Revenue, and
get_company_forecast expose these same layers. The tool returns a layers
object and independent large-deal upside.
Hover or tap a month in the forecast chart to see exact Baseline, Expected total, and Upside total amounts. Keyboard users can focus a month and use the arrow keys to move between months; Escape closes the details. Distinct colors and line patterns identify each scenario, with matching colors in the layer cards and monthly table. Negative net income remains red in the details.
Independent large-deal upside
Forecast warnings, saved deal choices, source freshness, and accounting checks are available from Forecast notes in the top header. When items need attention, the button shows N to review instead. Select it to review the source status, saved choices, and accounting checks without expanding the page header.
An open deal is large when its weighted revenue in any month exceeds the tenant's monthly threshold, which defaults to $50,000, or exceeds 25% of that month's revenue before large deals are excluded. Finance can change the dollar threshold in Projection settings. The percentage test still applies. Revenue and Profit readers use the same configured threshold even when they cannot open Overview or projection settings. Source metadata keeps its existing financial report and company-scope access checks.
By default, the base forecast and Expected exclude large deal revenue from every layer. Financial admins can choose Include in Expected beside a deal in the concentration warning. The saved decision includes its existing category-weighted revenue, without changing its probability. The warning remains visible. Choose Use default forecast rules to reverse the decision. Large deals then appear separately from Expected. Saved inclusion decisions remain available below the warning when the deal no longer crosses the alert thresholds. Automatically separated deals also have inclusion controls when the configured alert thresholds suppress the warning. Each automatically separated large deal appears as independent upside, even when multiple deals belong to the same company. Every month shows that deal's full unweighted revenue and net effect. Its probability is information only and never scales those upside amounts. There is no combined weighted total for automatically separated large deals. Accepted and non-large deals keep their existing weighting. Each upside retains the HubSpot deal ID, name, stage, original amount, and close date, with a source link when available. Revenue-only readers see revenue without delivery-cost or net-income details.
Assistant drilldown links retain the original qualification months, so a deal that qualifies in January stays outside the base when the visible year ends in December, unless you have saved a decision to keep it in Expected. Select an upside amount to inspect that deal's full source lines.
Click any headline or monthly figure to open its ledger lines. The lines load when the panel opens, 50 at a time, and are checked against your current financial access each time. Filter the detail by month, layer, operating unit, and revenue source. Contract revenue and pipeline card links match the source and next-twelve-month period. Historical year selections load their source lines too. The shared panel groups lines by layer and source. Each line shows its amount, probability and probability source, override reason and setter, calculation policy, inputs and freshness. Source links open the contract, HubSpot deal or Xero account when its external identity is known. Cash detail includes the opening bank balance, forecast receipts and payments, and closing cash bridge. The same filters are carried in the URL for a shareable explanation.
New daily snapshots save the base forecast headline without large-deal revenue alongside source evidence for each independent upside. This methodology takes effect for new snapshots after deployment. Historical snapshots and Forecast Accuracy history are not rewritten. Snapshots require fresh Xero inputs and passing component checks. Retries can promote provisional or invalid months. A month's first valid lines and totals remain fixed across daily, weekly, and month-start checkpoints. Source-line history is retained for three years going forward, without backfilling older snapshots.
Live reports, connected assistants, and snapshots use the same employee payroll, recurring expense, and residual expense baseline for the current month. Loading one report first does not change another report's estimate.
Connected assistants can use get_forecast_ledger to read a saved snapshot's lines
for one Chicago calendar month or an inclusive month range. They can filter by
operating unit or layer and request up to 50 lines per page. Totals cover all
matching lines, including later pages. The tool returns the snapshot date and a
next_offset for further pages. Reuse the returned date as as_of to read the same
snapshot throughout. Omitting as_of selects the latest saved snapshot, rather
than recalculating a live forecast. Reading these lines requires overview,
revenue, expenses, payroll, compensation, and sensitive-accounting access.
Company-restricted access cannot read the shared financial ledger.
What changed between saved forecasts
Open What changed on the dashboard or Net Income. In Compare saved forecasts,
choose the Forecast month you want to investigate and two Saved on dates.
The month is the period being predicted; the dates identify when Core saved each
version. The default selects the earliest and latest usable dates for that month.
Dates without a saved forecast or its source details are disabled. At least two
different saved dates are required; the panel explains when history is insufficient.
Saved forecasts with all-zero totals remain usable even without source lines. The
panel shows revenue, expense and net changes for every ledger layer, followed by
the largest source changes. Reasons distinguish new deals, stage or probability
changes, close-date moves, signed or ended contracts, posted actuals and changed
policies or inputs. These reasons describe saved evidence, not a provider audit
log. Missing source history is labelled unavailable instead of counted as zero.
Connected assistants use get_forecast_changes for the same comparison. It
returns complete base layer totals and up to 50 top drivers. Independent
large-deal changes stay separate from base changes, with full unweighted monthly
amounts and probability shown as information only. Comparisons preserve the
methodology recorded by each saved forecast. Posted actuals are matched
by account and operating unit, so refreshing unchanged Xero rows creates no
added or removed drivers.
Month breakdown
On the Profit page, select any month in Fully Loaded Monthly Net Income by Line of Business. Select the all-lines panel for the company or a line of business, such as Managed IT, for that line. A panel opens with three views:
- Explainer describes the month's net income, the change from the prior month, the largest changes and the share of predictive amounts. For a closed month, it also compares actuals with the last forecast saved before the month began, when a saved forecast is available. A prior month remains in progress before books close or while its posted actuals are incomplete.
- Changes shows the change from each source line, largest first. Red bars lower profit; green bars raise profit. Each row names its line of business and shows both months' revenue or cost amounts.
- Table lists every line with its amount, prior-month amount, change, layer, and source.
Select Net income, Revenue, or Expenses at the top of the panel to open its changes. Revenue and expense selections filter both Changes and Table; expense amounts are positive costs, so an increase means higher spending. A line that appears in only one of the two months is labelled Only in that month. Prior-month-only Xero Sales rows can appear separately from the next month's forecast sources. This does not establish that sales were lost or a contract ended; compare the total revenue and inspect the forecast sources.
Each line shows its source. Closed books come from posted Xero actuals and are high confidence. In the in-progress month, posted amounts are labelled month to date. Predictive lines come from contract schedules, renewals, pipeline probability, usage, the unscheduled baseline, the payroll baseline, recurring expenses, or the run rate. They have a dashed badge and dashed chart bars. Each chart row includes its source. Lines link to the contract, HubSpot deal, or Xero account when a link is available. Large-deal upside is not included in the totals. The breakdown requires the same access as forecast source lines.
You can also choose a month below each chart and select Breakdown using the keyboard.
Concentration and stale inputs
A deal triggers a concentration warning when its weighted revenue exceeds the configured share of a whole month's expected revenue, 25% by default, or exceeds the configured large-deal threshold. Projection settings controls both limits. The forecast shows one summary per deal, with its monthly detail collapsed. Readiness shows the forecast as ready with warnings rather than blocked. A successful Xero or HubSpot sync evaluates the forecast and creates one in-app inbox notification for financial admins when a deal first crosses in the evaluated months. Retries and additional months for an already flagged deal do not repeat it. Once all of the deal's months drop below the limits, it can notify again. These notifications do not send email, Slack or push.
Source freshness lists Xero, HubSpot, contracts and schedules, payroll inputs and the recurring register. Synced sources show the last successful sync; manual inputs show their latest recorded refresh or update. After 36 hours, or when refresh evidence is missing, the panel shows the sum of the signed dependent ledger contributions in the current and next two Chicago calendar months. Expense contributions are negative. A line can depend on more than one source, so source risk figures can overlap and should not be added together. Click a risk amount to inspect its dependent lines.
Automatic closed-month checks
The first successful post-month-end Xero sync with final actuals, with no
partial_through marker, compares Core actuals against that sync's independent
P&L evidence. It checks revenue, expenses, net income and accounts, including
operating units with Xero tracking. Untracked amounts are assigned to the default
operating unit in both Core totals and the comparison evidence. Core records the
result once per month.
A difference over $1 blocks readiness and sends financial admins an inbox-only
notification with the differing accounts. Retrying the job does not create a
second result or notification. Accounting-authorized assistant requests include
these checks even when staff-compensation checks are omitted. No data is repaired
automatically.
Forecast accuracy history
The existing Forecast Accuracy report compares each past month's revenue, expenses and net income with forecasts made 90, 60, 30 and 7 calendar days before the first day of that month, plus month start. Each horizon uses the nearest valid snapshot within three days. Ties prefer the earlier date, then the official monthly cadence. No eligible snapshot produces an explicit missing-history row.
Only snapshots marked valid with finite amounts are scored. Provisional, invalid,
gap and unverified older snapshots remain visible with their exclusion reasons.
The report shows dollar and percentage error, mean absolute percentage error by
horizon, and over- or under-forecast bias. Percentage error is undefined for zero
actuals. Saved ledger layers explain the miss when their totals reconcile with
the snapshot. Actuals are subtracted from the actual layer, so layer errors add
back to the total miss. get_forecast_accuracy gives connected assistants bounded
summaries and five checkpoints per month under full financial-detail access.
Summaries omit daily journeys and include at most one excluded snapshot example
per checkpoint, with counts and truncation flags. Use view: "journey" for daily
history, with offset and limit for pages of at most 50 points across all metrics
and months. Continue from nextOffset until it is null. Journey points are ordered
by revenue, expenses, then net income, followed by descending target month and
ascending snapshot date.
What is included in a projected month
Open What's in this forecast on Net Income or Profit to see each month’s revenue sources, expense components, and net income. The Top drivers panel lists the ten largest deal, contract, renewal, baseline, and usage contributions with weighted revenue, delivery cost, net effect, and share of the month. A concentration warning appears when one driver contributes more than 25% of the month’s revenue. Deal drivers also show their probability. Revenue charts and month details show the same named revenue sources.
- Actual (Xero) is posted accounting revenue. Completed months use actuals only.
- Contracted remaining is the canonical signed billing schedule that remains to be invoiced. Signed contract schedule reference lines are informational and are not added to revenue a second time.
- Projected renewals extend existing contracts using linked renewal assumptions.
- Weighted pipeline is open deal value multiplied by probability, spread over the term. Non-hourly deals receive a whole month in their close month, even for a November 30 close. Hourly time-and-materials deals start in the following month because they bill in arrears. Both cover exactly the contract duration in months, without automatically adding expenses. Separate opportunities for one customer each contribute independently.
- Typical unscheduled work (3-month average) carries forward routine work outside contract schedules for future months. For each unit, Core averages the positive difference between actual revenue and that same month’s canonical scheduled revenue over the last three closed months. Milestones, one-time charges, annual fees, hardware, pass-through costs, and bills for a later month are left out of that average unless the same amount is already on that contact’s schedule for the same unit and month. The exclusion uses the current-month invoice classifier. Split invoice and schedule lines also match when their remaining totals agree within that same unit, contact, and month. It uses historical schedules, so a contract ending next month still reduces the forecast. The current month keeps its existing variable-work estimate instead of adding this baseline.
- Usage estimates reflect variable hourly work and follow its billing timing. For future months, customer invoice history identifies routine usage already included in typical unscheduled work, so only the additional usage is added. When a usage estimate has no customer match, it first uses the unit's existing routine allowance. Tracked invoice amounts cover usage in their own operating unit first. Any untracked invoice amounts then cover the customer's remaining usage proportionally across units. Excess tracked coverage stays with its unit. Arrears billing places service-month usage in the following invoice month. Contract end dates apply to the service month, so final usage remains included when its invoice month falls after the contract ends.
Projected expenses include employee pay-date payroll, registered recurring expenses, the residual expense run rate, allocated overhead, and planned changes. Pipeline, renewals, signed deals, and best-case revenue do not generate additional expenses. Core does not infer a delivery-cost percentage from revenue or historical margins. Additional staffing, contractors, or other project spending must be recorded in its corresponding expense source.
HubSpot date-only close dates keep their calendar date, including values sent as midnight UTC. Close dates with other times use the Chicago calendar date. The next normal HubSpot sync corrects previously imported close dates, even when the deal has not changed in HubSpot. Forecast timing, past-close probability reductions, and stale-deal readiness all use the imported date.
Open deals whose close date has passed start from the current Chicago-local month, with probability reduced by one ninetieth for each day past close. At 45 days, half of the original probability remains. At 90 days or more, the deal contributes zero. Hourly deals start in the following month. Forecast Readiness lists these stale pipeline deals with days past close, original and reduced weighted monthly revenue, and dollars at risk. It also identifies active contracts ending within the forecast horizon without a successor renewal deal or successor contract. An old contract schedule after its end date does not satisfy this check. Contract-end anchored renewals continue to follow the contract end date. Source freshness uses the last successful sync; a failed latest run is shown separately and cannot appear fresh. Xero shows the last successful sync and the latest completed actuals month. Readiness, forecast breakdowns, and connected assistants flag Xero actuals when the last successful sync is older than 36 hours or unavailable.
Xero and HubSpot sync automatically every 6 hours. Financial admins can also select Sync now in Financials settings or on the integration's card under Settings → Integrations, which shows the same last successful sync and failure status. Each Xero sync refreshes invoices dated in the last 60 days, every invoice changed in Xero since the last successful sync, and older invoices Core still shows as authorised. A payment or void recorded later in Xero updates the invoice's status and paid and due amounts on the next sync, whatever the invoice date.
Integration badges show a warning when the latest sync fails. If authorization is no longer valid, the badge says Reconnect needed. Open the integration's actions menu and select Reconnect to authorize it again.
Renewal matching requests optional HubSpot company and line-item read access. Reconnect HubSpot to grant these scopes from the integration's actions menu. Without line-item access, matching still uses available deal and company evidence. Without company access, matching requires an existing exact deal-to-customer mapping; otherwise the renewal stays in review as a judgment call.
Pipeline probabilities
Financial admins can set separate HubSpot forecast-category percentages for new deals and renewals in Financials settings. Renewal Commit starts at 100% so committed renewal revenue stays fully represented, while Best Case, Pipeline, and other categories can be tuned independently. Core uses the deal's Forecast category property in HubSpot for its probability. Category weight changes apply on the next HubSpot sync. A saved custom Forecast category such as Requested Proposal keeps its configured percentage, including 50%. A deal stage with that name does not replace its Forecast category. Without an explicit override, missing, unrecognized, and omitted forecast categories contribute no pipeline revenue. Deal stages do not supply fallback probabilities. The line-of-business renewal percentage on Projections remains a fallback for renewals without a deal or contract renewal probability.
Set a deal probability in HubSpot
Sales can set these optional deal properties in HubSpot:
- Open the deal and find
core_forecast_probability_override. - Enter a number from 0 to 100. For a signed LOI expected to close at 70%, enter
70. - Set
core_forecast_override_reasonto a short explanation, such as "LOI received; final legal review pending". - Save the deal. Core imports the value on the next HubSpot sync.
Your HubSpot administrator must make these properties available in the portal. Core only reads HubSpot data. Core never creates properties or changes deals. Financial admins can configure different internal names in Financials → Settings → Projections. If a property is absent, settings shows "property not found in HubSpot" after sync. Sync continues with the existing probability rules.
An explicit deal override takes precedence over the saved probability. Otherwise, HubSpot sync selects the Forecast category probability, without a deal-stage fallback. Existing Requested Proposal source lines keep their saved probability, including a saved 50% weight, until the next sync. An override replaces the base probability. It does not change the close-month rule, 90-day stale-deal decay. A 70% override on a deal 45 days overdue has a 35% effective probability. Clear the HubSpot override to restore the usual probability on the next sync. An empty reason does not invalidate an override.
Top drivers and connected assistants show the base probability and its source. Overrides also show the value, reason, setter, and time when HubSpot history makes them available. Reconnect existing HubSpot connections to authorize owner lookup for override author names. Missing authorization stops sync with a reconnect message and preserves previously synced data. Source user IDs remain available when HubSpot has no matching owner. The ledger stores these inputs with each deal's calculation rule.
Strong / Verbal is an optional Core forecast category, defaulting to 70%. Set the HubSpot category value or option label in Projection settings, then edit its probability in the existing category editor. Category mapping changes apply on the next sync. A deal override takes precedence.
Review payroll and recurring expenses
Projection settings includes employee pay frequency and a known pay date. The compensation model supplies employment dates, salary or base hourly pay, effective compensation dates, and employer tax and benefits loading. The burden multiplier applies to both salaried and hourly employees. Contractor hourly rates are used as entered, without employee burden. Weekly and biweekly schedules repeat from the known date. Monthly schedules use its day, clamped to month-end. Semimonthly schedules use that day in the first half and 15 days later, clamped to month-end. A 14th anchor pays on February 14 and 28 in a non-leap year. A 15th anchor pairs with month-end. Payroll lines identify the employee and pay date, so three-pay-run biweekly months contain three runs.
If an employee, compensation, loading, employment date, or schedule input is missing, Core uses that unit's trailing Xero payroll average instead of a partial employee total. The ledger labels the fallback rule. Forecast Readiness compares the employee model with the last three closed months of Xero payroll accounts and shows the variance. Current-month fallback reasons also appear as readiness warnings, even when the historical model reconciles. Contractor allocations do not establish an employee roster.
Core detects recurring accounts by operating unit from six closed months of Xero history. Every month must have positive expense within 20% of the six-month mean. Stable whole-account totals supply the total. Within a mixed account that varies, Core can instead detect stable monthly vendors, assigned through Xero unit tracking. Covered vendor amounts must reconcile within the account's monthly expense. Core uses each transaction source once, so an invoice and its bank payment cannot create two forecast lines. Detected lines count immediately with a detected label. Finance can confirm, adjust, or end them in Projection settings. Sync preserves finance's changes. Vendor expense coverage remains available to authorized expense readers without access to bank accounts. Accounts reclassified as payroll or compensation stop contributing recurring forecast lines so payroll does not count twice.
Payroll accounts and whole accounts covered by the recurring register are removed before Core calculates the residual run rate from three closed months. Vendor lines remove only the covered vendor amounts, preserving the mixed account's other spend. Ended recurring accounts and vendors stay excluded. This prevents ended expenses from reappearing through the run rate. Posted payroll and recurring coverage are removed from current-month actuals to isolate other posted spend. That spend floors the residual estimate. Payroll is at least its posted actuals for each month and operating unit before recurring and residual expenses are added. Payroll account categories count toward reconciliation and residual exclusions, so loaded benefits do not count twice. Scheduled payroll and recurring expenses are added independently, so future pay cannot absorb an overrun already posted to another expense account.
Renewals connect a predecessor contract to a renewal deal or a successor contract. Use Renewal successor contracts in Projection settings to search for and link the predecessor and successor contracts. The predecessor emits no revenue after its end date. A successor deal starts the following month, weighted by its renewal probability. A successor contract's schedule wins over the renewal deal, so the overlap contributes once.
Recurring Managed IT service agreements that end within the forecast horizon receive an assumed renewal when they have no linked renewal deal or successor contract. The estimate starts in the month after the contract ends and continues through the horizon at the current monthly contract value times the operating unit's renewal percentage. It belongs to Weighted pipeline, even at 100%, and does not add expense estimates. Its source details show the contract, end date, monthly value, unit, probability, and assumption reason. Revenue access includes the contract-type and operating-unit metadata needed for this classification. Editing that metadata and viewing restricted cost rates still require their separate permissions.
App Development and Systems Consulting receive no assumed renewals by default. One-time projects, milestones, payment plans, and contracts without a recurring service classification receive none. Contracts marked non-renewing or linked to a closed-lost renewal also receive none. Contracts already expired before the current forecast month are not revived. A real linked renewal deal replaces the assumption at the deal's value, and a successor contract replaces it with its own schedule. For a December 31 ending, the assumption first contributes in January, leaving November and December unchanged.
Dynamic contract values
Hourly (time-and-materials) contracts can be set to a dynamic value instead of a fixed total. Core estimates the contract's value from the hours already tracked plus the hours resourced ahead across the projects it covers, and updates it as work is logged and scheduled. In the forecast this appears as a separate, variable usage estimate. Forecasts place service-month usage in the following invoice month. Posted invoices and current-month estimates are reconciled so hourly usage is not added on top of revenue already billed. Usage is never counted as committed revenue. Forecast Readiness flags any dynamic contract whose hours have no resolvable bill rate, since those hours contribute nothing until a rate is set.
Contract operating units
A contract uses the operating unit set on it in Financials → Contracts. If none is set, it uses the unit its linked projects share. Projects billed through another project are not counted. If the linked projects have different units, or none of them has a unit, the contract has no operating unit until you set one.
Contracted revenue, contract coverage, and usage estimates by operating unit use this unit. So do searching Financials → Contracts by unit name, its Unit column, and its unassigned filter. Forecast payment schedules that belong to one project use that project's unit first. Company totals do not change; only the unit that revenue counts toward does.
The Contracts missing operating units readiness check counts only active contracts that have no unit this way. Its link lists every unarchived contract without a unit, including drafts and ended contracts. A unit that comes from linked projects reads From linked project in the list, and the contract sheet names it under Operating unit. Choose a unit there only to override it. Who can see the inherited unit follows project access: a user who cannot view the linked projects sees the contract as unassigned.
Revenue and readiness
/financials/revenue, /financials/contracts, contract revenue schedules, opportunities, forecast probability, renewal probability, renewal matching, and Xero contact matching require financials:revenue.
/financials/readiness requires revenue access. Compensation completeness is
shown only to viewers with compensation access, and staff allocation
completeness is shown only to viewers with tenant-wide capacity-read access.
Hidden checks are not queried or counted in readiness status.
Profit by line of business
/financials/profit is visible with financials:revenue. Revenue-only viewers
receive completed-month aggregate Profit by LOB totals without raw expense
accounts or individual compensation. Current-month detail and
compensation-backed forecasts require financials:expenses,
financials:payroll, financials:compensation, and
financials:accounting_sensitive as well.
Historical Profit uses authorized month-and-unit aggregates to include protected expenses without exposing account or payroll details to aggregate readers. Fully loaded results require usable staff allocation ratios for each report month with shared overhead. Empty months do not block the report.
For viewers with full Profit access, line-of-business expenses, profit, and margin are fully loaded by default across the Financials overview, Profit report, and Financial Assistant. Shared company overhead is allocated to each revenue-generating line using the configured staff allocations. Direct Xero figures remain available only when they provide accounting context: the revenue-only aggregate table, selected cost-center activity, and the labeled direct comparison beside allocated overhead. Company-wide totals are unchanged by allocation because it only redistributes costs between operating units. Planned events assigned to an overhead cost center change that center's costs before allocation, so each revenue line receives its share of the adjusted cost.
Use the Profit page's Line of business filter to compare several lines in one report. The filter matches any selected line; clear it to return to All lines. Revenue-generating selections use fully loaded totals. If a selection also contains an overhead cost center, its net cost is already represented in the allocated overhead on the selected revenue lines, so Core does not add the cost-center row again. Selecting only cost centers shows their direct Xero activity instead.
Net income and forecast accuracy
/financials/net-income requires financials:revenue, financials:expenses,
financials:payroll, financials:compensation, and
financials:accounting_sensitive so its expense and net-income totals cannot
silently exclude restricted accounts, payroll actuals, or compensation-based
forecast inputs.
/financials/forecast-accuracy requires that same complete P&L access. It
scores the latest valid prediction available on or before the first day of each
closed month, keeping the comparison cutoff consistent and free of month-end
hindsight. The scorecard reports accuracy weighted by non-zero actual dollars,
average dollar miss, months within 10%, and average high/low bias for revenue,
expenses, and net income. Months with a zero actual still contribute to dollar
miss and bias, but not to percentage-based accuracy or within-10% measures.
Select a closed month to see its retained daily prediction checkpoints through
month-end beside the final Xero actual. Within the selected year, the prior
calendar month remains available while its Xero actual is still open; its
journey shows the retained forecasts with the actual pending, and Core does not
score it until the month closes. When multiple cadences share a date,
Core shows the month-start checkpoint first, then weekly, then daily. Snapshot
history is retained going forward and is not backfilled for older months.
Forecast dates use America/Chicago. Daily checkpoints require a successful Xero sync on the same local date, with complete revenue and expense inputs. A checkpoint is provisional while those inputs are stale, incomplete, or unverified. A later successful sync can replace that day's provisional checkpoint with a valid one. A checkpoint is invalid when its components fail validation, including revenue or expenses below 25% of the trailing closed-month baseline. Forecast Accuracy lists each excluded checkpoint and its reason, with no prediction or miss shown. Only valid checkpoints contribute to accuracy scores and prior-forecast comparisons. Existing daily, weekly, and month-start checkpoints are classified retroactively using the same component and baseline checks. The baseline uses the latest three complete closed months as of each snapshot date; the previous month closes on the 10th. Missing metric groups, inconsistent net income, or revenue or expenses below 25% of a positive baseline are invalid. Without a completed Xero sync earlier on the same Chicago date than the saved checkpoint, history remains provisional. Valid historical checkpoints count toward accuracy and are labelled classified retroactively. Historical numbers stay unchanged, including excluded predictions; live excluded writes have no values.
Historical missing daily dates between each tenant's first and latest daily checkpoint also receive gap markers. On each run, Core detects missed dates since the last daily checkpoint and records gap markers. A gap has no forecast value because past point-in-time inputs cannot be reconstructed. Forecast Accuracy leaves the chart broken at excluded checkpoints and lists their dates and reasons. Forecast Readiness reports gaps and provisional or invalid snapshots so interrupted history needs attention even when Xero itself is connected. Snapshot attempts and failures also appear in integration job history. They do not count toward Xero sync health or completion rates, including in connected assistants.
Xero actuals keep company totals separate from operating-unit detail. Company reports and connected assistants select company totals by default; an explicit operating-unit filter selects only that unit's rows. Core never adds company and operating-unit copies of the same actuals together. A custom operating unit for untracked amounts stays separate from company scope, so reconciliation keeps its allocation target without hiding the company total.
The Profit dashboard explains month-to-month fully loaded net income changes, including the largest revenue, expense, overhead, planned-event, and line-of-business drivers.
For the in-progress month, the company forecast is the accounting control total and Profit by LOB allocates it with cent-exact rounding. Daily forecast snapshots sum those same reconciled unit rows for every projected month. Line-of-business revenue, expenses, and net income therefore add back exactly to each saved company snapshot.
Cash
/financials/cash requires financials:cash, financials:bank_accounts,
financials:revenue, financials:expenses, financials:payroll,
financials:compensation, and financials:accounting_sensitive access because it
combines account-level cash with trailing and forecast P&L totals.
Settings and targets
/financials/settings and all integration/admin mutations require financials:admin.
On the Financials overview, financial admins can edit the company-wide profit target and cash floor from the Targets card. Those values are the same targets used by the dashboard and health score; you no longer have to hunt for them in settings.
The health score reads the workspace's current company-wide revenue target on every overview load.
On the Staff allocations settings tab, employees and contractors show an Employee or Contractor badge, and their open engagements show No end date. Ended or scheduled-to-end engagements show Last working day with the date. Current staff with a scheduled end date stay in the list. People whose last working day has passed are marked Former and appear only when Show former staff is selected. A person with separate employee and contractor records has a separate row for each record.
Ask Core AI
Financial questions go through Core AI (sidebar / header Core AI). Financial tools only appear when the workspace has experimental financials and the signed-in user has the matching financial access grants. Every tool runs as that user under RLS and re-checks can_access_financial_data before returning results — salary, compensation line items, and other sensitive settings stay withheld unless the grant allows, and tools return aggregates rather than inventing person-level pay. Contract import from a signed PDF remains a human UI flow under Contracts, not an AI auto-apply path.
Administrator data migrations
Before migrating financial data, keep a private backup from bun run financials:export-admin-data, confirm the source and target workspace, and run DRY_RUN=1 bun run financials:import-admin-data. Review the dry-run results before applying any changes.
The non-dry-run production import must wait until the matching Core code and schemas are deployed and the SaaS owner explicitly approves the production restore or import. Export files contain sensitive financial and compensation data; keep them out of source control and shared logs.