Blog
Monthly vs Quarterly Revenue in Stripe: What Actually Counts
· Matt
If you ask three people for “monthly revenue” from Stripe, you’ll often get three different numbers.
Not because anyone is wrong, but because Stripe exposes multiple timestamps, and each one answers a different business question.
This post explains:
which Stripe dates exist and what they actually mean
why monthly and quarterly revenue numbers drift
how to choose the right timestamp for your reports
Stripe does not have a single “revenue date”
Stripe records revenue-related activity across several timestamps. The most important ones are:
Invoice created date
Invoice finalized date
Payment succeeded date
Charge created date
Service period start/end (for subscriptions)
Each of these can produce a valid, but different, monthly or quarterly revenue number.
Invoice created date: what you billed
Using invoice creation date answers the question:
How much did we bill in this period?
Characteristics:
includes invoices that may not be paid yet
aligns well with sales activity
common for bookings and pipeline-style reporting
Problems:
overstates cash if invoices go unpaid
mismatches revenue and cash timing
Payment succeeded date: what you actually collected
Using payment success date answers:
How much cash did we collect in this period?
Characteristics:
clean for cash flow reporting
easy to reconcile with bank deposits
Problems:
annual prepayments distort monthly revenue
upgrades and proration can spike single months
does not reflect service delivery
Charge created date: a lower-level view
Charges are tied closely to payments but can diverge when:
invoices contain multiple charges
retries occur
partial payments happen
Charge dates are rarely the right choice for high-level revenue reporting, but they matter for reconciliation.
Service period dates: what you actually earned
For subscriptions, Stripe records a service period on invoice line items.
Using service period answers:
What revenue should be recognized in this period?
Characteristics:
smooths annual plans across months
aligns revenue with delivery
required for accrual accounting
Problems:
requires allocating line items across time
not available on all Stripe objects by default
more complex to implement
Why quarterly revenue often “doesn’t match” monthly totals
A common confusion:
Monthly revenue (payment-based) ≠ Quarterly revenue (invoice-based)
Reasons include:
invoices created in one quarter but paid in another
annual plans paid upfront
refunds applied later
proration adjustments crossing boundaries
If different reports use different timestamps, totals will never reconcile.
Pick one definition per report (and document it)
Good Stripe revenue reporting follows a simple rule:
One report → one timestamp → one definition
Examples:
Monthly cash revenue: payment succeeded date
Quarterly billed revenue: invoice created date
Monthly recognized revenue: service period allocation
Once chosen, every downstream calculation must use the same rule.
How to implement this cleanly
Best practice:
Anchor on invoice line items
Store the relevant Stripe timestamps explicitly
Pre-aggregate by month or quarter
Never mix timestamps in the same report
This prevents silent drift as your data grows.
Key takeaway
Stripe gives you the raw ingredients for monthly and quarterly revenue, but it does not choose the recipe.
If your numbers feel inconsistent, the problem is usually not Stripe. It’s an undefined, or inconsistently applied, time dimension.
In the next post, we’ll look at revenue by customer and why even that breaks down once refunds, multiple subscriptions, and identifiers enter the picture.
Stop rebuilding Stripe reports from CSV exports. SyncStaq keeps Stripe billing data synced into Google Sheets every hour, so you can use Sheets for reporting, reconciliation, and analysis without maintaining custom scripts. Start a 14-day free trial.