Skip to main content
This page lists the rules that decide how a source’s rows become numbers in your Model: how a CSV is read, what each column becomes, when data refreshes, and how much history loads. A saved query is the query that brings a source’s rows into your Model; see Saved queries. For the path data takes, read How connected data reaches your Model. For a file’s or a connection’s messages, see Connection statuses and actions.

CSV files

A CSV you upload as a data source loads as one table. A report exported from an accounting, payroll, or payments tool often has title lines above the table and totals below it. The loader does not skip those lines, so such a file fails with The file couldn’t load. To load it, delete those lines or let Ari clean up a copy; see Upload a CSV as a data source. The Upload button does not take Excel workbooks or PDFs. Attach those to a chat and ask Ari to load the table you need.

Dates in CSV files

cfo.ai decides how to read dates for a whole column at once.
  • It reads every value in the column and picks the one day and month order that reads them all. A column that holds 13/04/2026 is read day-first throughout.
  • A column whose values all read either way, such as 03/04/2026, is read month-first.
  • A column that needs both orders is not a date column, and it loads as text.
  • A date with a clock, such as 2026-09-25 00:56, loads as a timestamp.
  • Plain digit strings, such as 2024 or 20240229, stay numbers. Only a column whose name is exactly yyyyMMdd reads compact dates such as 20260131.
A column named Date does not place the rows on the calendar by itself. Tell Ari which column dates the rows, such as an invoice date or a period column, and Ari saves it as the source’s date column. A table that shows a source with no date column by month cannot calculate it; see Table calculation notices.

How columns become Variables and Dimensions

Each column a saved query returns becomes a Variable or a Dimension when it first loads. A name marks an identifier when its last word is “id”, including a camel-case ending such as dealId, or when it ends in “account number” or “account code”. Customer ID, deal_id, P&L Account Number, and SalesDefaultAccountCode load as Dimensions. Amount Paid, Account Balance, and Number of Accounts still add up. The first load fixes each column’s role and stored type, and later loads keep them. To change a column’s role, ask Ari, for example “Load Store Code as a Dimension instead.” Ari switches it in place, so formulas, tables, and filters that use the column keep working. The stored type does not change, so a number column that becomes a Dimension has number items; to keep leading zeros, the query must return the column as text under a new name. A column that feeds a Dimension other queries also feed cannot switch roles for one query.

Starting formulas

When a column first loads, its Variable or Dimension gets a saved starting formula, which you can open, edit, or delete like any other formula: A starting formula has no formula range, so it reads source rows in every period, including months after Last close. A Variable with no saved formula, because it loaded before starting formulas existed or someone deleted its formula, reads its source only through Last close, and its type’s default after that, 0 for a number or an empty value. See How formulas work.

Accounting statement columns

An amount whose account has no classification loads into the statement’s unclassified amount, which stays part of the statement’s total. Normal activity is positive within its category, and refunds and reversals reduce it. Entity holds the company’s name, so each company’s rows stay apart. When a second connection of the same integration loads for the first time, such as a second QuickBooks Online company, its compatible Dimensions, such as Entity, Currency, and the account, join the ones the first connection created, so both companies share one Entity Dimension. Dimensions from different integrations, such as QuickBooks Online and Xero, do not join on their own. See Dimension mappings and shared Dimensions and Consolidate entities.

Source logos

A Variable or Dimension shows its integration’s logo on table row and column labels and in formula reference chips when every reference in its formulas reads imported columns of one integration. Two connections of the same integration count as one. A formula that mixes integrations, or reads another Variable, shows no logo. An MCP server or API added by its address shows its company’s logo when the address is a public company domain.

Saved queries

Refresh schedule

The nightly refresh and refreshes you ask for work the same on every active plan, including a trial. A workspace with no plan, or whose billing is locked, does not refresh until it has an active plan again. A connection’s last loaded time counts only syncs that finished; a failed or canceled sync does not move it.

How much history loads

Sync setups for MCP servers and APIs

A sync setup copies the results of one read-only tool or endpoint into your data on each sync. Ari creates and edits them; the connection’s page lists them under Syncs as Enabled or Paused, with Last warehouse sync or Not synced to the warehouse yet. A setup saves the tool’s definition as the server described it when Ari saved the setup, and each sync page checks the server’s current definition against it. If the server changes the tool, the sync stops without saving a result, and Ari must save the setup again. Ari cannot save an enabled setup while the server’s tool list cannot be read. A sync that reaches a limit stops without saving a partial result, and the data from the last complete sync stays. The tool or endpoint must be set to Allow.