Why finance and marketing never agree on revenue (checklist from 6 months of pain)
Contents
Every month same meeting. Marketing dashboard say revenue X, finance report say Y, difference 4-8%, and data team (me) is asked to explain. After 6 months I made a checklist. Sharing in case it help someone.
Where the numbers split
- Gross vs net. Marketing count order value at checkout. Finance count after cancellations, refunds and returns. Biggest gap is always this one.
- Which date. Order date, payment date, shipped date, delivered date. Finance recognise revenue on delivery (for us). Marketing use order date. At month end this alone move a few %.
- Day boundary timezone. Our warehouse is UTC, business is Singapore (UTC+8). Order at 7am SGT on the 1st is still the 31st in UTC. Every daily number shift by 8 hours if you are not careful.
- Tax. Prices shown include GST (9% now in Singapore). Finance report revenue without GST. Marketing tool import the price with GST.
- Vouchers. Is a $10 voucher a revenue reduction or a marketing expense? Depends who you ask. Need one decision.
- Currency. Cross-border orders: which FX rate, of which day. Store the rate and its source on each row.
- Test and internal orders. Staff orders, QA orders in production, B2B bulk orders. Finance exclude some, marketing exclude none.
- Attribution tools. Ad platform revenue use its own attribution window and count conversions it "influenced". It will never match your database, stop trying.
What worked
We wrote one page "metric contract" with finance and marketing in the same room. For revenue: net of refunds, recognised on delivery date, SGT day boundary, excluding GST, vouchers as revenue reduction, internal orders excluded.
Then one dbt model fct_revenue with explicit columns for each variant: gross_order_value, net_revenue, order_date_sgt, delivered_date_sgt. Dashboards are not allowed to compute revenue themselves, they only pick a column. Every chart title say which definition.
Last, weekly reconciliation query between fct_revenue and the finance ledger export. Difference must be under 0.5% or it alert. First month it alert every week. Now almost never.
Meeting is now 10 minutes. Sometimes cancelled. Honestly best result of the whole project.
Written by
Lin Wei
Data engineer at e-commerce company, Singapore. dbt, Airflow, Spark, too many dashboards. Trying to make the numbers match between finance and marketing.
Get the best of #my-model-is-fine weekly
One email each Monday with the most useful posts. No spam; unsubscribe in one click.
Comments
Sign in to join the conversation.
Sign in to comment