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

Attribution in plain words: where the money came from. Sortable: click any column title in the day table (all time or any 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 .