Netice app revenue data infrastructure
Report currency and FX for app revenue data
Report currency is the currency Netice uses for presentation and analytics fields in app revenue outputs. It does not erase the original source currency, it does not make daily app-sales rows final payout truth, and it does not turn provider-native raw reports into normalized finance data.
What report currency means
In Netice app revenue outputs, report currency is the configured presentation currency used for selected analytics or finance fields. For example, a task may use EUR as the report currency so downstream teams can compare Apple App Store and Google Play revenue in one reporting currency.
Report currency is not the same thing as the provider’s source currency, payout currency, merchant currency or customer charge currency. Netice keeps native/source context visible where the output family supports it. This matters because app stores can report amounts in different currencies, with different fee visibility, different tax behavior and different report families.
A safe mental model is: native values preserve provider context; report-currency values support analysis and presentation. You should not use report-currency fields without reading the source report, method fields, FX fields and output-family boundary.
What report currency does not mean
Report currency does not make daily app-sales rows final payout, settlement, tax, audit or accounting-close truth. It does not guarantee exact parity with a provider dashboard. It does not replace native values. It does not create missing finance data. It does not turn raw provider reports into a unified schema.
Netice separates Daily App Sales, Finance Unified and Raw Reports. Each output family has its own currency behavior. The same configured report currency can appear in more than one place, but the meaning of the fields still depends on the source and output family.
Native currency vs report currency
Native/source currency is the currency context coming from the platform report or the platform-side economic event. Report currency is the currency selected for customer-facing presentation fields. Both can be useful, but they answer different questions.
| Concept | Meaning | How to read it safely |
|---|---|---|
| Native currency | The source or platform-side currency context. | Use it to preserve source truth and provider semantics. |
| Report currency | The configured presentation currency for selected Netice output fields. | Use it for analytics and comparison, with FX and method context. |
| FX field | The rate or component conversion context used for report-currency fields. | Do not assume missing FX means rate 1. |
| Method field | Explains how an amount was derived or estimated. | Do not treat estimated method values as source-truth finance facts. |
| Null value | Unknown, unavailable, unsupported or not safely derivable. | Do not silently convert unknown finance values to zero. |
Daily App Sales currency fields
Daily App Sales uses the google_apple_app_sales workflow. It is the daily operational analytics layer for Apple App Store and Google Play sales-style reporting. The current daily schema evidence uses fields such as report_currency, estimated_gross, estimated_net, estimated_tax and estimated_fee for report-currency analytics.
Daily App Sales also preserves native/local context through fields such as native_currency, gross_local, net_local, tax_local and fee_local. Apple-specific proceeds context can appear in apple_proceeds_currency and apple_proceeds_native. These Apple fields should not be flattened into Google rows.
The current daily layer uses component-specific FX fields: gross_fx, net_fx, tax_fx and fee_fx. It should not be documented as having one generic public daily fx_rate column.
| Daily App Sales field group | Representative fields | Boundary |
|---|---|---|
| Report-currency amounts | estimated_gross, estimated_net, estimated_tax, estimated_fee |
Operational analytics, not final finance close. |
| Native/local amounts | native_currency, gross_local, net_local, tax_local, fee_local |
Preserves source/local amount context. |
| Apple proceeds | apple_proceeds_currency, apple_proceeds_native |
Apple-specific; blank or null for Google rows. |
| Component FX | gross_fx, net_fx, tax_fx, fee_fx |
Amount-specific conversion context. |
| Method fields | net_method, fee_method, tax_method |
Explains derivation; not optional decoration. |
Apple and Google daily source differences
Apple and Google Play do not expose identical daily report facts. Netice keeps that difference visible instead of pretending that every amount has the same source truth.
Apple Summary Sales does not itemize commission and tax in the same way a finance ledger would. Daily Apple fee and tax values therefore need method context. Google Play Estimated Sales does not itemize service fee like Google Play monthly Earnings. Google tax can be source-truth when taxes collected are present and tax_method says so, but that should not be generalized to every tax value.
| Provider | Daily source family | Currency/fee/tax boundary |
|---|---|---|
| Apple App Store | Sales and Trends / Summary Sales style reporting | Apple daily commission and tax are not itemized as separate source facts; read fee_method and tax_method. |
| Google Play | Estimated Sales style reporting | Service fee is not itemized like monthly Earnings; tax is source-truth only when the method supports that interpretation. |
Finance Unified currency fields
Finance Unified is separate from Daily App Sales. It is the monthly platform finance output for Apple financeReports and Google Play Earnings where configured. Its rows use source_kind = 'FINANCE' and preserve native finance values separately from report-currency presentation fields.
| Finance field | Meaning | Important interpretation |
|---|---|---|
native_currency |
Platform-native payout or merchant currency context. | Do not replace it with report currency. |
native_net_proceeds |
Signed developer-side finance amount in native currency. | Primary native finance amount. |
native_customer_charge |
Customer-side charge amount where applicable. | Can be null on fee, tax or adjustment rows. |
report_currency |
Configured presentation currency. | Not necessarily the platform-native currency. |
report_net_proceeds |
Native proceeds converted where FX is available. | Missing cross-currency FX leaves this null. |
report_customer_charge |
Native customer charge converted where present and FX is available. | Null follows native customer-charge availability. |
fx_rate |
Native-to-report conversion factor. | Same-currency can be 1; missing cross-currency is not 1. |
In Finance Unified, unknown finance values remain null. Real zero remains zero. Missing cross-currency FX does not become rate 1. That distinction matters because fake zeros and fake FX rates can corrupt finance review logic.
Same-currency and missing cross-currency FX
Same-currency conversion is straightforward: if the native currency and report currency are the same, the finance FX rate can be 1. Cross-currency conversion is different. If a required FX rate is not available, finance report-currency fields should remain null or be surfaced as a quality issue rather than silently producing fake amounts.
| FX case | Finance behavior | Unsafe interpretation to avoid |
|---|---|---|
| Native currency equals report currency | fx_rate = 1; report values can equal native values. |
Do not generalize this to all missing rates. |
| Cross-currency FX available | Report fields can be populated from native values and rate. | Do not treat as provider-native value. |
| Cross-currency FX missing | fx_rate and converted report fields remain null. |
Do not silently use 1 or 0. |
| Native proceeds exist but report proceeds missing | Can be a quality issue when report currency is configured. | Do not hide it with COALESCE(..., 0). |
Raw reports do not use report currency or FX conversion
Raw Reports are provider-native artifacts. They are separate from Daily App Sales and Finance Unified. Raw report output does not apply report currency, currency normalization, FX conversion, fee methods or tax methods.
This is an important product boundary. If you need source-native provider files, use Raw Reports. If you need daily report-currency analytics, use Daily App Sales. If you need monthly finance-period rows with native and report currency fields, use Finance Unified where configured.
| Output family | Report currency behavior | FX behavior |
|---|---|---|
| Daily App Sales | Uses configured report currency for estimated analytics fields. | Uses component FX fields such as gross_fx and net_fx. |
| Finance Unified | Preserves native values and adds report-currency presentation fields. | Uses fx_rate; missing cross-currency FX remains null. |
| Raw Reports | No report-currency normalization. | No FX conversion. |
Null-not-zero behavior
In finance output, null is not zero. Null can mean unknown, unavailable, unsupported, not disclosed or not applicable. Zero means a known zero. Treating these as the same can create false finance facts.
Google Play Earnings fee or tax rows can have null customer-charge fields because those rows are not customer charge events. Apple finance output should not fabricate separate Apple commission or tax rows when Apple does not disclose those as separate finance facts. Missing cross-currency FX should not become a fake zero amount.
| Situation | Correct handling | Why |
|---|---|---|
| Unknown finance amount | Keep null. | Unknown does not mean zero. |
| Real source value is zero | Keep zero. | Zero is meaningful when known. |
| Missing cross-currency FX | Keep report fields null or surface quality issue. | Missing FX is not rate 1. |
| Raw provider report | Do not add report-currency fields. | Raw output is source-native. |
Safe synthetic examples
The examples below are synthetic. They show the relationship between report currency, native currency, FX and null handling without using real app IDs, SKUs, source rows, object paths, datasets, tables, hashes, task IDs, logs or customer data.
Daily App Sales example row
revenue_date,platform,app_id,source_kind,source,country,report_currency,estimated_gross,estimated_net,estimated_tax,estimated_fee,native_currency,gross_local,net_local,tax_local,fee_local,gross_fx,net_fx,tax_fx,fee_fx,net_method,fee_method,tax_method,data_completeness,source_report,event_has_revenue,item_id,source_row_hash
2026-02-10,ANDROID,com.example.app,SALES,GOOGLE_PLAY,US,EUR,9.990000,6.990000,1.500000,1.500000,USD,10.990000,7.690000,1.650000,1.650000,0.909000,0.909000,0.909000,0.909000,GOOGLE_ESTIMATED_NET_FROM_CHARGED_AMOUNT_MINUS_ESTIMATED_FEE,GOOGLE_ESTIMATED_FEE_30PCT_FROM_SOURCE_STANDARD,GOOGLE_TAXES_COLLECTED,T_PLUS_2_STABILIZED,GP_ESTIMATED_SALES,true,premium_monthly,synthetic_hash_google_001
Finance Unified same-currency example
platform,source,source_kind,source_report,fiscal_period,app_id,sku,event_type,native_currency,native_net_proceeds,native_customer_charge,report_currency,report_net_proceeds,report_customer_charge,fx_rate,source_row_hash
ANDROID,GOOGLE_PLAY,FINANCE,GOOGLE_PLAY_EARNINGS,2026-02-01,com.example.app,premium_monthly,SALE,EUR,7.000000,7.000000,EUR,7.000000,7.000000,1.000000,synthetic_finance_hash_001
Finance Unified missing cross-currency FX example
platform,source,source_kind,source_report,fiscal_period,app_id,sku,event_type,native_currency,native_net_proceeds,native_customer_charge,report_currency,report_net_proceeds,report_customer_charge,fx_rate,source_row_hash
IOS,APPLE_APP_STORE,FINANCE,APPLE_FINANCE_DETAIL,2026-02-01,com.example.app,premium_monthly,SALE,USD,6.990000,9.990000,EUR,,,,synthetic_finance_hash_002
Daily report-currency analytics query
SELECT
revenue_date,
platform,
report_currency,
source_report,
SUM(estimated_net) AS estimated_net_report_currency
FROM `example_project.example_dataset.app_sales_daily`
WHERE revenue_date BETWEEN DATE '2026-02-01' AND DATE '2026-02-28'
AND source_kind = 'SALES'
GROUP BY revenue_date, platform, report_currency, source_report
ORDER BY revenue_date, platform, source_report;
Finance FX coverage query
SELECT
fiscal_period,
platform,
report_currency,
COUNTIF(native_net_proceeds IS NOT NULL AND report_net_proceeds IS NULL) AS rows_missing_report_net
FROM `example_project.example_dataset.finance_unified`
GROUP BY fiscal_period, platform, report_currency
ORDER BY fiscal_period, platform;
The daily query is for operational analytics. The finance query is a coverage check. Neither query is accounting close, payout reconciliation, tax advice or audit evidence.
FAQ
What is report currency in Netice app revenue data?
Report currency is the configured presentation currency used for selected analytics or finance fields. It helps teams compare app revenue in one reporting currency while preserving native/source context separately.
Does report currency replace native currency?
No. Report currency does not replace native or source currency. Native/source fields remain important for understanding provider context.
Which daily app-sales fields are in report currency?
Daily App Sales uses report-currency fields such as estimated_gross, estimated_net, estimated_tax and estimated_fee.
Why does Daily App Sales have gross_fx, net_fx, tax_fx and fee_fx?
Daily App Sales uses component-specific FX fields because gross, net, tax and fee values can have different derivation and availability contexts.
Does the daily app-sales schema have an fx_rate column?
Current daily app-sales evidence supports component FX fields such as gross_fx, net_fx, tax_fx and fee_fx, not one generic public daily fx_rate field.
What happens when finance FX is missing?
Missing cross-currency finance FX leaves report-currency fields null and can surface as a quality issue. It should not silently become rate 1 or zero.
Is same-currency FX always rate 1?
In Finance Unified, same native/report currency conversion can use fx_rate = 1. That rule should not be applied to missing cross-currency FX.
Why can daily analytics and monthly finance numbers differ?
They can differ because Daily App Sales and Finance Unified use different report families, period semantics, fee/tax visibility, FX handling, finality concepts and source boundaries.
Are Apple and Google fee/tax values always source-truth?
No. Apple Summary Sales does not itemize commission and tax, and Google Play Estimated Sales does not itemize service fee like monthly Earnings. Method fields and source reports must be read before interpreting the values.
Can I use report-currency fields for accounting close?
Report-currency fields are useful for analytics and finance review, but this page does not claim accounting close, audit, GAAP, IFRS, ASC 606, tax or bank-reconciliation status.
Related guides
- Product overview
- Product documentation
- Unified daily app sales schema
- Monthly platform finance schema
- Finance Unified monthly platform finance
- Daily app sales vs platform finance reports
- Null not zero policy
- Google Play Estimated Sales vs Google Play Earnings
- Apple Summary Sales vs Apple financeReports
- App revenue to BigQuery
- Security policy
- Pricing
Use report currency without losing source meaning
Netice keeps report-currency analytics, native source context, FX fields, method fields and finance null behavior visible so app teams can analyze revenue without flattening away the boundaries that matter.