Skip to content

Finance Numbers in Snowflake Without Waiting for the Nightly Run

Why the warehouse is usually the last place to hear about a financial change, and how to fix it. This guide covers real-time sync between Rillet and Snowflake: how a change-level engine differs from a scheduled ETL job, which ledger objects are worth landing in the warehouse, how to model them so board reporting and operator metrics agree with the ERP, and why the return path from Snowflake back into Rillet matters more than most teams expect.

Author
Ruben Burdin · Founder & CEO
Published
July 21, 2026
Read time
7 min read
Finance Numbers in Snowflake Without Waiting for the Nightly Run
ARTICLE

Ask a finance team where the numbers live and you get two answers. The authoritative one is the ERP. The one everybody actually opens is a dashboard built on the warehouse, next to the product and marketing data, because that is where a question about revenue by segment can be answered without three exports.

The problem is that the warehouse copy is usually the last to hear about anything. A nightly job lands the ledger some time after midnight, so for most of the working day the dashboard is describing yesterday. On an ERP built to run a continuous close, that gap is the one thing standing between finance and reporting that is actually current.

Timeline of a finance change: entry posted in Rillet, captured at the field level a second later, updated in Snowflake seconds after that, dashboards matching the ledger all day

Real-time sync between Rillet and Snowflake closes it. Ledger changes land in the warehouse in seconds, the dashboards agree with the ERP all day, and the return path lets warehouse-only attributes flow back into the ledger. Here is how it works and what to land.

Why the warehouse is always behind

The nightly window is a habit inherited from a time when the source systems could not be read during business hours without hurting them. It survives because the tooling is built around it: schedulers, orchestration graphs, and the assumption that a table can be dropped and rebuilt while nobody is looking.

That assumption has three costs. Freshness is the obvious one. The second is load shape: a full reload arrives as a spike, which means warehouse compute is sized for the batch rather than the business. The third is subtler and matters most to finance, which is that a snapshot-based pipeline cannot tell you what changed between two runs, only that the numbers are different.

For a general ledger that last one is the deal breaker. When a reported figure moves, the useful question is which entry moved it. A nightly snapshot cannot answer that. A change-level sync answers it by construction, because the change is the unit of work.

How real-time sync differs from a pipeline

Instead of a scheduled job that reads Rillet and writes Snowflake, a sync engine watches for changes and applies them as they occur. It works at the field level, so an amended journal line writes one row rather than reloading a table, and it stamps each write with its origin and time.

Flow from the Rillet ledger through the sync engine into Snowflake tables and BI dashboards, with no nightly batch window
No nightly window. The warehouse tracks the ledger as it moves.

There is no orchestration graph to maintain and no window to protect. There is also no transformation happening in flight, which is deliberate: the landing tables mirror the ledger, and your existing models build on top of them on whatever schedule your reporting needs. Keeping those two concerns separate is what stops a real-time feed from turning into a real-time compute bill.

What the topology looks like

In most stacks the warehouse is not only reading from Rillet. It is also reading from the CRM, the billing platform, and the product database, and the value of putting the ledger next to them is that a revenue number can finally be sliced by things the ERP does not know about.

Topology: Rillet general ledger, sub-ledgers, and dimensions flowing through Stacksync into Snowflake tables and BI, with a return path for enriched attributes
The ledger, its sub-ledgers, and its dimensions in the warehouse, with a path back for enriched attributes.

The arrow pointing back is the one teams underuse. Segment, tier, region, and cleaned-up account hierarchies are usually defined in the warehouse because that is where the modelling happens. Writing them back onto the Rillet records means finance reports on the same definitions everyone else uses, rather than maintaining a parallel mapping that drifts.

What to land in Snowflake

Start narrow. The core plus its dimensions answers most reporting questions; sub-ledger detail is what turns a dashboard number into something an analyst can defend.

From RilletLands asWhat you can report on
Journal and GL linesFact tableThe base for every financial model
Accounts and entitiesDimensionsConsolidation and entity-level reporting
Customers and contractsDimensionsRevenue by customer, cohort, and contract term
Revenue schedulesFact tableRecognized versus deferred, without a manual roll-forward
Invoices and paymentsSub-ledger detailTie a reported figure back to a transaction
Periods and close statusReference tableModels know which periods are final
Segment and tier attributesWritten back to RilletFinance reports on the same definitions as the business

A starting map. Land the GL and its dimensions first, add sub-ledger detail once the models settle.

One modelling note worth stating: keep the period and close-status table in scope from the start. Models that do not know which periods are closed will happily report on a period still being worked, and that is the kind of dashboard error that costs credibility rather than time.

Book a Stacksync demo: land Rillet ledger changes in Snowflake in seconds, with no nightly batch

What changes for the reporting team

The first difference is that the daily flash actually reflects the day. Revenue, bookings, and cash positions move as the underlying entries move, so an operator question at four in the afternoon does not get answered with last night's picture.

The second is that the reconciliation conversation changes shape. When the warehouse and the ledger disagree, the audit trail shows which write produced the difference and when, so the work is investigating one change rather than comparing two snapshots and inferring what happened between them.

The third is scope. Once the ledger is streaming into Snowflake alongside CRM and billing data, the models that were impossible become routine: recognized revenue by product tier, cohort retention against actual invoiced amounts, or margin by segment. That is the argument for putting finance data in the warehouse in the first place, and it only works if the data is current.

Stop reporting on yesterday

An ERP that closes continuously and a warehouse that refreshes nightly are a mismatch, and the nightly half is the one holding the other back. Syncing Rillet to Snowflake at the change level removes the window, keeps the two agreeing, and gives the reporting team an audit trail instead of a diff.

To see Rillet and Snowflake synced in real time, book a demo, look at the Rillet and Snowflake integration, or read the broader guide to an enterprise iPaaS for Rillet. For the systems feeding the ledger in the first place, see syncing Rillet and Stripe.

Keep Rillet and Snowflake in step in real time

FAQ

Frequently asked questions

How do I sync Rillet with Snowflake in real time?
Connect Rillet and Snowflake to Stacksync, choose the ledger objects you want in the warehouse, map them to tables, and turn the sync on. Changes are detected at the field level as they happen and applied to Snowflake in seconds, so the warehouse reflects the ledger continuously rather than as of the last scheduled run. No pipeline code, no orchestration DAG, and no nightly window to protect.
How is this different from an ETL pipeline into Snowflake?
An ETL job runs on a schedule and usually reloads whole tables, so the warehouse is stale between runs and the load arrives as a spike. A real-time sync engine works from individual changes: only what moved is written, it is written as it happens, and each write carries its origin. In practice that turns a nightly batch and its failure modes into a stream you can build dashboards on.
Which Rillet objects should land in Snowflake?
The journal and general ledger lines are the core, plus the dimensions that make them useful: accounts, entities, customers, contracts, and periods. Sub-ledger detail such as invoices, payments, and revenue schedules is what lets analysts tie a reported number back to a transaction. Most teams start with the GL and the dimensions, then add the sub-ledgers once the reporting models are stable.
Can data flow from Snowflake back into Rillet?
Yes, and it is more useful than it sounds. Warehouses hold attributes the ERP does not have, such as product usage tiers, customer segments, or a cleaned-up account hierarchy. Writing those back onto the matching Rillet records means finance reports on the same segmentation the rest of the company uses, without anyone maintaining a second mapping in a spreadsheet.
Does real-time sync mean higher Snowflake costs?
Not by default. Cost in Snowflake follows compute, not the arrival of rows, and a change-level sync writes far less data than a nightly full reload of the same tables. The pattern that gets expensive is running heavy transformations on every arrival, so keep the landing layer thin and let scheduled models do the heavy lifting on the cadence your reporting actually needs.
Will the warehouse and the ERP still agree?
That is the main reason to sync at the change level rather than in batches. Each row carries the origin and timestamp of the write, so a number in a dashboard can be traced back to the ledger entry that produced it. When reconciliation is needed, the question is which change caused a difference, not which of two nightly snapshots to believe.

About the author

Ruben Burdin
Ruben Burdin
Founder & CEO

Ruben Burdin is the Founder and CEO of Stacksync, the first real-time and two-way sync for enterprise data at scale. Ruben is a Y Combinator alumni with a strong background in software engineering and business.

All posts by Ruben Burdin

About Stacksync

Stacksync powers real-time, two-way sync between CRMs, ERPs, and databases. Engineers sync data at scale and automate workflows, not dirty API plumbing.

Coworkers laughing in front of a laptop in a casual office setting

Your last integration took months.
Your next one takes a prompt.