Money since the start
Source: each block below names its source and as-of in its caption. Gap marks: – = source had not started yet or has no value; RED = a day that should exist and is missing (never filled with 0); true 0 = a real zero. A gap is shown as a dash or RED, never as a made-up number. All columns are always kept, even when empty.
In plain words
Pick a period
Source: Stripe (money, orders), GA4 (sessions, PROVISIONAL). Previous period = the same number of days right before.
Money by channel
Source: Stripe charges, channel tied by the buyer tracing (ties). Refunds are not split by channel in the data, so they are shown only on the total row. As of .
What changed
Good days vs bad days (top quarter vs bottom quarter by gross)
Source: Stripe, email system (R5 sends), Instagram, GA4. Averages per day over the chosen period. As of .
Every day, all columns in one table
Click a header to sort (the chosen period, newest first by default). Sources: Stripe (Gross to Failed $), GA4 (sessions, PROVISIONAL), Clarity, MailerLite sends, R5 email money, Instagram, Facebook page. Failed = failed tries (not people). Day = Europe/Sofia day.
Best 15 and worst 15 days
Best 15
Worst 15
Source: Stripe gross per day; the three columns on the right are what was behind the day (email sent, Instagram views, Facebook impressions). Months end at the period end.
Sessions
Top 12 traffic sources (GA4 source / medium)
Weekly: GA4, Clarity and TFF
Source: GA4 daily (PROVISIONAL for the newest day), Clarity daily sessions, Stripe TFF product. Weeks start Monday. Clarity may end earlier than the other sources; see the source row at the top.
Clarity: what people do on the page
Source: Microsoft Clarity, saved daily reads plus Victor's Clarity day file (20 Sep to 20 Oct). Clarity visits are not sales; money stays Stripe. A day with no read is RED, never 0. "Partial" = the read covers only part of that day (hours shown).
Every UTM, every day
Source: GA4 sessions and GA4 purchases by day x source / medium x campaign x content (every UTM tag GA4 saw). Money here is GA4's own purchase revenue, not Stripe (Stripe orders carry no UTM tag, so Stripe money per tag stays not known; Stripe money by channel is on the Money tab). The newest day is PROVISIONAL (GA4 is about 24 h behind). A day with no GA4 read is RED, never 0. "(not set)" = the visit carried no tag in that slot.
One row per UTM, for the chosen dates
Day by day: every UTM seen that day
R5 email money, email by email
Source: R5 primary sends file (money per person who bought after the email) and the old R5 sends file (open and click rates, from 2026-10-11 only). Window open = still counting, money can still grow.
Failed payments
The list for the setter (email, amount, product, about 20 minutes after the fail) is private and kept outside this page. We tell the setter; we do not email the people from here.
Source: Stripe failed charges. People = one per customer, no later success. Tries = every failed attempt. As of .
Buyer journey
Source: buyer tracing (ties): time from first guide (list join) to first tied purchase. Which post brought the guide lives on the separate posts page.
Best weekday
Best hours and days after one post are on the separate posts page (also posts-cf.pages.dev). Here is the honest day-of-week view of the chosen period.
Source: Stripe gross per Europe/Sofia day, averaged by weekday.
Converging: theory, not proof (click for the method)
Method in plain words: we do not guess which post made which sale. We take only sales that are tied to a channel, and show each channel's share of the money in the chosen period. Where a sale is not tied, it stays in the Not tied yet row and is never given to a post.
A post-by-post chance (percent per post) is a theory built on top of this, and it lives on the posts page with its method and what proves or breaks it. This page shows no money per post.
How it works
Time zone: every day on this page is a Europe/Sofia (Varna) day, for Stripe, emails and posts.
Look: own warm editorial style, light and dark by your device setting, text 18 px and up. Not a copy of the Stripe dashboard.
Stitch API: not used. The look is our own palette and the Lexend font.
Split: this page holds the money. Posts, thumbnails, post columns (wants, buying power, connection, text on slides, comments per slide) live on the separate posts table.
Post columns are on the separate posts page, not here.
Post thumbnails: shown on the separate posts page (posts-cf.pages.dev), not on this page.
Near real-time failed-payment ping (Stripe hook): not built yet, daily only.
Instagram views: pulled by script each run; a missing day shows RED. A separate checker of the IG pull is not on this page.
Built by code, not by a chat: rebuilds 10:00 and 22:00 Varna by daily.sh; the publish is blocked if the tests fail.
Link: one stable Cloudflare Pages address (project money-table). Publishing needs Victor's OK.
Speed: one file, no libraries, data inside (412 KB data). Page opens without waiting for a server.
Built from saved files only. As of .