Sachez quelle source vous a rapporté de l’argent, et comment nous le savons.

Tally est un outil d’analytics de revenus qui montre son travail. Il lie chaque vente Stripe, Paddle, Lemon Squeezy, Polar, WooCommerce ou Squarespace à la visite qui a amené l’acheteur, et donne à chaque vente un justificatif : la preuve, la méthode qui l’a liée, et à quel point c’est sûr. Une boutique WooCommerce ou Squarespace se connecte en un clic, et tout autre prestataire peut envoyer ses ventes à la Payments API.

14 jours gratuits, sans carte bancaire.

Exemple
  1. Googlegoogle.comRedditreddit.com/r/SaaSChatGPTchatgpt.comNewsletterutm_medium=emailx.comt.co
  2. A lu /pricing États-UnisAustin · Safari sur iOSA lu /blog/stripe-fees AllemagneBerlin · Firefox sur LinuxA lu /compare CanadaToronto · Chrome sur macOSA lu / Royaume-UniLeeds · Edge sur WindowsA lu /launch Pays-BasUtrecht · Chrome sur Android
  3. Vente de 49,00 $US attribuée à GoogleVente de 120,00 $US attribuée à RedditVente de 49,00 $US attribuée à ChatGPTVente de 19,00 $US attribuée à NewsletterVente de 79,00 $US attribuée à x.com
yoursite.comDonnées d’exemple

Revenue

$1,636

28%vs the 7 days before

after $39 in refunds and chargebacks

Conversion

1.0%

5%vs the 7 days before

Revenue per visitor

$0.52

No changevs the 7 days before

Linked to a visitor

85%

6 payments, $234 not linked. See what to fix

Visitors

3,174

29%vs the 7 days before

Pageviews

8,306

29%vs the 7 days before

Engaged time per visit

46s

11%vs the 7 days before

Live now

4

visitors in the last 5 minutes

Visitors and revenue

  • Visitors
  • Revenue
  1. GoogleOrganic Search976$312
  2. Direct718$301
  3. x.comOrganic Social398$268
  4. RedditOrganic Social241$115
  5. ChatGPTAI Assistants235$175
  6. Hacker NewsOrganic Social184$83
  7. NewsletterEmail131$94
  8. PerplexityAI Assistants78$57

Pages

  1. /2,054$822
  2. /pricing1,129$299
  3. /blog/stripe-fees564$94
  4. /docs361$38
  5. /compare302$29
  6. /changelog184$67
  7. /blog/launch-week164$20
  8. /signup125$38

A page's revenue is what visitors who viewed it paid afterwards in this period. One sale counts on every page its buyer saw, so the column adds up to more than the total.

Countries

  1. United States1,111$414
  2. Germany342$273
  3. United Kingdom299$292
  4. India211$219
  5. Canada168$72
  6. France123$38
  7. Netherlands98$35
  8. Brazil94$63

Devices

  1. Desktop2,155$860
  2. Mobile1,129$505
  3. Tablet100$42

What Direct was

Last 7 days · 855 visitors with no referrer

Visits that came with no referrer, and our best reading of each: a guess from the page they landed on, the device and the browser, not a certainty.

Our best reading

Typed or bookmarked

416 visitors · 49% of Direct

Someone typed your address or opened a bookmark: people who already know where to find you.

How we read it: No referrer, a landing on your home page or a one-part path such as /pricing, on a desktop.

Our best reading

Back from checkout

79 visitors · 9% of Direct

A buyer coming back from the payment page in a new visit. They were already here; this visit isn't a new arrival.

How we read it: A payment provider as the referrer, or a landing on a checkout success address, at the start of a visit.

Our best reading

Instagram in-app browser

65 visitors · 8% of Direct

Opened inside Instagram's own browser, which keeps the post or profile the link was in to itself.

How we read it: Instagram's mark in the browser's user agent, and no referrer. Sources count these visits under Instagram, Organic Social.

Our best reading

TikTok in-app browser

36 visitors · 4% of Direct

Opened inside TikTok's own browser, which keeps the post or profile the link was in to itself.

How we read it: TikTok's mark in the browser's user agent, and no referrer. Sources count these visits under TikTok, Organic Social.

Our best reading

LinkedIn in-app browser

22 visitors · 3% of Direct

Opened inside LinkedIn's own browser, which keeps the post or profile the link was in to itself.

How we read it: LinkedIn's mark in the browser's user agent, and no referrer. Sources count these visits under LinkedIn, Organic Social.

Our best reading

Facebook in-app browser

14 visitors · 2% of Direct

Opened inside Facebook's own browser, which keeps the post or profile the link was in to itself.

How we read it: Facebook's mark in the browser's user agent, and no referrer. Sources count these visits under Facebook, Organic Social.

Regardez de plus près

  1. Lié à un visiteurLa part des revenus liée à une visite, avec un lien vers la liste des correctifs pour le reste.Couverture
  2. Des revenus sur chaque ligneChaque source, page et pays avec l’argent payé par ses visiteurs, et chaque vente avec son justificatif.Justificatifs
  3. Ce qu’était DirectLes visites sans référent, réparties en saisies directes, liens partagés, retours du paiement et navigateurs intégrés.Trafic
Fig. 1Le tableau de bord lui-même, sur un site d’exemple aux chiffres inventés. Choisissez une période, passez des sources aux canaux, survolez le graphique, ou choisissez une lecture de Direct.

Ce que seul Tally fait

DataFast, l’outil d’analytics de revenus que nous avons comparé fonction par fonction en octobre 2026, ne fait aucune de ces quatre choses.

  1. Exemple

    49,00 $US

    1. Première visite2 oct.
    2. Visite attribuée14 oct.
    3. Lien14 oct.
    4. Paiement14 oct.

    Métadonnées du paiement, confiance élevée

    Un justificatif pour chaque vente

    Les visites qui la précèdent, ce qui a lié le paiement à ces visites, la méthode et à quel point c’est sûr. Quand rien ne lie une vente, le justificatif le dit : rien n’est deviné.

    Voir un justificatif
  2. Exemple

    86 %lié

    CorrectifSessions Checkout sans identifiant de visiteur9 paiements, 343 $US

    metadata: { tally_visitor_id: id }

    La couverture, avec le correctif

    La part de vos revenus liée à un visiteur, chaque raison pour laquelle le reste ne l’est pas, et le code qui corrige.

    Voir la liste des correctifs
  3. Exemple

    Le plus cliqué sur /pricing

    1. #plan-pro .plan-cta424
    2. #billing-yearly31 de rage236

    Replays et cartes de chaleur à côté de l’argent

    Regardez depuis son justificatif la visite enregistrée derrière une vente, et voyez où l’on clique et jusqu’où on lit.

    Voir les replays
  4. Exemple
    L’écosystème clients du site d’exemple : des milliers de visiteurs en particules lumineuses, rassemblés en groupes nommés et colorés selon leur santé.L’écosystème clients du site d’exemple : des milliers de visiteurs en particules lumineuses, rassemblés en groupes nommés et colorés selon leur santé.

    Labs : vos clients, bien vivants

    Les visiteurs comme un écosystème vivant qui évolue semaine après semaine, et une rivière aux tons pastel de la première source à la vente, dessinés uniquement d’après ce qu’ils ont fait.

    Voir Labs

01Trafic

D’où viennent les visiteurs, sous les noms que vous leur donneriez.

Les référents deviennent des sources que vous reconnaissez : t.co, c’est x.com, chatgpt.com, c’est ChatGPT, et news.ycombinator.com, c’est Hacker News. Chaque source appartient à un canal, et les personnes envoyées par des assistants IA ont leur propre canal. Chaque ligne de la répartition montre ses visiteurs et les revenus qui vont avec.

Les robots d’IA sont comptés à part, jamais comme visiteurs ; la plupart n’exécutent jamais le script d’une page, alors quelques lignes sur votre serveur les signalent. Les autres robots et navigateurs automatisés ne sont pas comptés du tout. Et Direct, les visites sans référent, est lu pour ce qu’il était le plus probablement : saisie directe ou favori, lien partagé, retour du paiement, ou navigateur intégré d’une appli. Le tableau de bord en haut de page le montre.

  • t.co/3xYq…x.comOrganic Social
  • www.google.deGoogleOrganic Search
  • chatgpt.comChatGPTAI Assistants
  • news.ycombinator.comHacker NewsOrganic Social
  • ?utm_source=newsletterNewsletterEmail
  • Navigateur intégré d’InstagramInstagramOrganic Social

À part, pas des visiteurs

  • GPTBot
  • ClaudeBot
  • PerplexityBot
  • Bytespider
Fig. 2Comment un référent brut devient une source et un canal. Les robots d’IA sont listés à part.

Les heures de pointe répartissent la période par jour de la semaine et par heure, pour les visites, les ventes ou les revenus, et ne nomment les trois heures les plus chargées que si les données le justifient.

Exemple

Peak hours

Last 30 days · UTC

Busiest on Tuesdays, 14:00–17:00

1.9× the visits of an average three hours. Post around Tue 13:00 to be there as they arrive.

000102030405060708091011121314151617181920212223Total
Mon2,11723$954
Tue3,08636$1,417
Wed2,18123$997
Thu2,05722$942
Fri1,84421$874
Sat2,21324$1,007
Sun1,78620$827
All15,284169$7,019
Busiest three hours

Shades are each hour's average over the times this period holds it, so a weekday that comes round five times doesn't outshine one that comes round four. The totals beside and below are the period's actual sums, not averages.

Fig. 3Les heures de pointe du site d’exemple, sur les 30 derniers jours. Passez des visites aux ventes et aux revenus, ou survolez une heure.

02Visiteurs

Chaque visiteur, d’où il vient et ce qu’il a payé.

Une ligne par visiteur : un nom sympathique et un avatar tirés de son identifiant, où il se trouve et sur quoi, d’où venait sa dernière visite et les pages vues, le temps actif par visite, et ce qu’il a payé. Ouvrez une ligne et chaque visite y est ; la page de parcours détaille chaque page, objectif et paiement.

Triez par Likely to buy et le score dit ce qui le fait monter : revenir, et le temps passé sur les tarifs et le paiement. En mode sans cookie, une ligne est une visite, et la page le dit.

Exemple

11 293 visiteurs · 133 payants · 30 derniers jours

  1. Glad HamsterCustomerBerlin, Germany · Desktop · FirefoxRedditOrganic Sociallatest visit: 4 pages/blog/stripe-fees+2/thanks3 visits3m 08s median6m 42s longest$49

    Visits, last 30 days

    Whole journey
    1. RedditOrganic Social
      /blog/stripe-fees/pricing/signup/thanks

      4 pages · 6m 42s engaged · 1 goal$49 credited to this visit

    2. Directtyped or bookmark
      /pricing/docs

      2 pages · 1m 36s engaged

    3. GoogleOrganic Search
      /blog/stripe-fees/

      2 pages · 3m 08s engaged

  2. Cosy CapybaraAustin, United States · Mobile · SafariGoogleOrganic Searchlatest visit: 2 pages//pricing1 visit1m 11s engaged–

    Visits, last 30 days

    Whole journey
    1. GoogleOrganic Search
      //pricing

      2 pages · 1m 11s engaged

  3. Spry BisonToronto, Canada · Desktop · ChromeChatGPTAI Assistantslatest visit: 4 pages/compare+2/docs/api2 visits3m 57s median5m 44s longest–

    Visits, last 30 days

    Whole journey
    1. ChatGPTAI Assistants
      /compare/pricing/docs/docs/api

      4 pages · 5m 44s engaged · 1 outbound click

    2. PerplexityAI Assistants
      /compare

      1 page · 2m 09s engaged

  4. Snug CapybaraCustomerLeeds, United Kingdom · Desktop · EdgeNewsletterEmaillatest visit: 2 pages/changelog/2 visits1m 41s median2m 34s longest$120

    Visits, last 30 days

    Whole journey
    1. NewsletterEmail
      /changelog/

      2 pages · 2m 34s engaged

    2. Directtyped or bookmark
      /

      1 page · 48s engaged

  5. Bubbly LlamaUtrecht, Netherlands · Mobile · Chromex.comOrganic Sociallatest visit: 1 page/blog/launch-week1 visit1m 04s engaged–

    Visits, last 30 days

    Whole journey
    1. x.comOrganic Social
      /blog/launch-week

      1 page · 1m 04s engaged

  6. Velvet PenguinBengaluru, India · Desktop · ChromeHacker NewsOrganic Sociallatest visit: 3 pages/blog/stripe-fees/docs/pricing1 visit4m 56s engaged–

    Visits, last 30 days

    Whole journey
    1. Hacker NewsOrganic Social
      /blog/stripe-fees/docs/pricing

      3 pages · 4m 56s engaged

  7. Keen KoalaCustomerSão Paulo, Brazil · Tablet · SafariDirecttyped or bookmarklatest visit: 3 pages//pricing/signup2 visits1m 49s median3m 03s longest$29

    Visits, last 30 days

    Whole journey
    1. Directtyped or bookmark
      //pricing/signup

      3 pages · 3m 03s engaged · 1 goal$29 credited to this visit

    2. Directtyped or bookmark
      /

      1 page · 35s engaged

Fig. 4La liste des visiteurs du site d’exemple, du plus récent au plus ancien, avec les visites d’un client dépliées.

03Revenus

Chaque paiement, de n’importe quel prestataire, en dollars, hors taxes.

Connectez Stripe, Paddle, Lemon Squeezy ou Polar avec une clé que vous créez, limitée à ce que Tally lit et à l’autorisation d’ajouter son propre webhook. Il récupère d’abord les 365 derniers jours, puis chaque paiement au moment où il a lieu.

Les boutiques WooCommerce et Squarespace se connectent en un clic. Approuvez Tally sur l’écran de WooCommerce, depuis la page Integrations ou l’extension WordPress Tally, ou sur la page de confirmation de Squarespace, et une année de commandes arrive, remboursements compris. Une commande WooCommerce se lie à sa visite par la page « Commande reçue », ou par l’identifiant de visiteur que l’extension enregistre sur la commande au paiement ; une commande Squarespace, par la page de statut de commande, avec les lignes de Tally dans Code Injection. WooCommerce, pas à pas ; Squarespace, pas à pas.

Stripe va le plus loin : Checkout, Payment Links, abonnements et factures, et le snippet balise les Payment Links tout seul. Paddle, Lemon Squeezy et Polar lient une vente par l’identifiant de visiteur passé à leur page de paiement, ou par l’e-mail de l’acheteur.

Tout autre prestataire, de Gumroad ou FastSpring à votre propre facturation : votre serveur envoie chaque paiement à la Payments API, dans le corps qu’accepte DataFast, et il est lié comme les autres. Seul ce que vous envoyez arrive ; rien n’est importé.

Ventes nouvelles, renouvellements, montées en gamme, remboursements et rétrofacturations sont distingués. Les montants sont hors taxes et convertis en dollars américains au taux de la Banque centrale européenne du jour. Un paiement est compté une fois, quelle que soit la façon dont le prestataire le déclare.

  • Stripe

    Lit
    Checkout, Payment Links, abonnements et factures, avec remboursements et rétrofacturations.
    Lie une vente par
    L’identifiant du visiteur dans les métadonnées de Checkout, la marque que le snippet ajoute tout seul aux Payment Links, l’identifiant de session Stripe sur votre page de confirmation, ou l’e-mail de l’acheteur.
    Connecté avec
    Une clé restreinte
  • Paddle

    Lit
    Transactions et abonnements, avec remboursements et rétrofacturations.
    Lie une vente par
    L’identifiant du visiteur dans le customData de Paddle.js, ou dans le custom_data d’une transaction, que les renouvellements conservent ; ou l’e-mail du client.
    Connecté avec
    Une clé API limitée aux autorisations nécessaires
  • Lemon Squeezy

    Lit
    Commandes et factures d’abonnement, avec remboursements. Lemon Squeezy ne signale aucune rétrofacturation : il rembourse une commande contestée, et le remboursement arrive.
    Lie une vente par
    L’identifiant du visiteur dans les données personnalisées d’un lien de paiement, ou dans le checkout_data de l’API ; ou l’e-mail du client, seul moyen de lier les commandes antérieures à la connexion.
    Connecté avec
    Une clé API créée rien que pour cela (elles n’ont pas de portées)
  • Polar

    Lit
    Commandes et abonnements, avec remboursements, et litiges perdus comptés comme rétrofacturations.
    Lie une vente par
    Les métadonnées du paiement, le reference_id d’un lien de paiement, ou l’e-mail du client.
    Connecté avec
    Un jeton d’organisation limité aux portées nécessaires
  • WooCommerce

    Lit
    Les commandes payées et leurs remboursements, chaque remboursement avec la taxe qu’il a rendue. Toutes les 30 minutes, il relit les commandes modifiées, donc un webhook manqué ne fait rien perdre.
    Lie une vente par
    La page « Commande reçue », avec le snippet sur la boutique ; l’identifiant de visiteur que l’extension WordPress Tally enregistre sur la commande au paiement ; ou l’e-mail de l’acheteur.
    Connecté avec
    Un clic sur l’écran d’approbation de WooCommerce, depuis Tally ou l’extension WordPress Tally ; ou une clé d’API REST
  • Squarespace

    Lit
    Les commandes payées et leurs remboursements : chaque nouvelle commande en quelques secondes avec la connexion en un clic, toutes les 10 minutes avec une clé API.
    Lie une vente par
    La page de statut de commande, avec le snippet et ses lignes de commande dans Code Injection ; ou l’e-mail de l’acheteur.
    Connecté avec
    Un clic sur la page de confirmation de Squarespace, ou une clé API créée sur le site
  • Payments API

    Lit
    Les paiements de tout autre prestataire, envoyés par votre serveur : Gumroad, FastSpring, PayPal ou votre propre facturation, avec renouvellements et remboursements. Seul ce que vous envoyez arrive.
    Lie une vente par
    L’identifiant de visiteur que votre serveur envoie avec le paiement, ou l’e-mail de l’acheteur.
    Envoyé avec
    Une clé API autorisée à enregistrer des paiements, dans le corps qu’accepte l’API de DataFast
Fig. 5Ce que fournit chaque prestataire, et ce qui lie ses ventes à une visite. Un rapprochement par e-mail suppose que votre appli indique au snippet qui est connecté ; seul un hachage de l’adresse est conservé.

Paiements, du lun. 2 au sam. 7 nov.

Exemple
JourTypeProvenanceHors taxes
lun. 2 nov.NouvelleStripePaiement49,00 $US
lun. 2 nov.NouvelleLemon SqueezyLien de paiement120,00 $US
mar. 3 nov.Montée en gammeStripeChangement d’offre, au prorata30,00 $US
mer. 4 nov.RenouvellementPaddleAbonnement mensuel49,00 $US
jeu. 5 nov.NouvellePolarPaiement, 45,00 € au taux du jour48,65 $US
jeu. 5 nov.NouvelleWooCommerceCommande en boutique39,00 $US
ven. 6 nov.NouvelleSquarespaceCommande en boutique59,00 $US
ven. 6 nov.RemboursementStripeD’une vente du 30 oct.−49,00 $US
sam. 7 nov.RenouvellementPayments APIEnvoyé par votre serveur15,00 $US
sam. 7 nov.RétrofacturationPaddleContesté par la banque de la carte−19,00 $US
Revenus de la semaine341,65 $US
Fig. 6Une semaine de paiements d’un site d’exemple, de chaque prestataire et de la Payments API. Remboursements et rétrofacturations sont déduits le jour où ils ont lieu.

04Justificatifs

Chaque vente arrive avec son justificatif.

Un chiffre de revenus invérifiable n’est qu’une supposition. Ouvrez n’importe quelle vente et Tally montre la chaîne qui la précède : la première visite de l’acheteur, les visites suivantes, celle à qui revient la vente, ce qui a lié le paiement à ce navigateur, et le paiement, chacun avec un identifiant à retrouver chez votre prestataire de paiement.

Puis la méthode qui l’a liée, et à quel point c’est sûr. Quand rien ne lie une vente, le justificatif le dit. Rien n’est jamais deviné.

Trois ventes d’exemple

49,00 $USOffre Pro, nouvel abonnementMétadonnées du paiement, confiance élevée120,00 $USOffre Team, payée sur factureRapprochement d’e-mail, confiance moyenne29,00 $USOffre Starter, nouvel abonnementAucune : non liée

Une vente est attribuée à la dernière visite de l’acheteur qui n’était pas directe. Renouvellements et remboursements suivent la vente à laquelle ils appartiennent.

JustificatifExemple

49,00 $US

Offre Pro, nouvel abonnement, payé le 14 oct., 16:42

  1. Première visite2 oct., 09:14

    Depuis Google, arrivée sur /blog/stripe-fees

    visiteur7Hq2mK…xR

  2. 2 autres visites6 oct., 14 oct.

    Direct, puis Reddit

  3. Visite attribuée14 oct., 16:31

    Depuis reddit.com/r/SaaS, arrivée sur /pricing. La dernière visite qui n’était pas directe.

    session0192f3a1-7c…

  4. Lien14 oct., 16:40

    La session Checkout porte l’identifiant du visiteur dans ses métadonnées.

    session Checkoutcs_test_b1Fz…

  5. Paiement14 oct., 16:42

    49,00 $US, hors taxes

    paiementpi_3QJx8L…

Méthode
Métadonnées du paiement
Confiance
Élevée
Attribuée à
Reddit, Organic Social

JustificatifExemple

120,00 $US

Offre Team, payée sur facture, payé le 2 oct., 11:20

  1. Première visite, attribuée28 sept., 20:05

    Depuis ChatGPT, arrivée sur /compare. La dernière visite qui n’était pas directe.

    visiteurQm81Zt…c4

  2. 1 autre visite1 oct.

    Direct, connecté à l’appli

  3. Identification1 oct., 09:12

    L’appli a indiqué à la balise qui était connecté. Seul un hachage de l’adresse est conservé.

  4. Lien2 oct., 11:20

    Le client de la facture a le même hachage d’e-mail. Aucun paiement ne portait d’identifiant.

    hachage de l’e-mail5d41402a…2a

  5. Paiement2 oct., 11:20

    120,00 $US, hors taxes

    facturein_1QH7tA…

Méthode
Rapprochement d’e-mail
Confiance
Moyenne
Attribuée à
ChatGPT, AI Assistants

JustificatifExemple

29,00 $US

Offre Starter, nouvel abonnement, payé le 6 nov., 08:12

  1. Première visiteInconnue

    Rien ne relie l’acheteur à une visite.

  2. Visite attribuéeAucune

    Aucune visite n’est attribuée, et aucune n’est devinée.

  3. LienIntrouvable

    Aucun identifiant de visiteur dans le paiement, aucun Payment Link marqué, aucune visite de la page de confirmation, aucun e-mail correspondant.

  4. Paiement6 nov., 08:11

    Créé par votre serveur sans l’identifiant du visiteur.

    session Checkoutcs_test_c9Ld…

  5. Paiement6 nov., 08:12

    29,00 $US, hors taxes

    paiementpi_3QK2rB…

Méthode
Aucune
Confiance
Aucune
Attribuée à
À personne. Elle compte contre la couverture.

La liste de couverture dit pourquoi, et quoi changer : voir 05 Couverture

Fig. 7Trois ventes d’exemple et leurs justificatifs : liée par les métadonnées du paiement, par rapprochement d’e-mail, et pas liée du tout.

05Couverture

Nous vous disons ce que nous ne voyons pas.

La couverture est la part de vos revenus liée à un visiteur. En dessous, la liste des correctifs : chaque raison pour laquelle un paiement n’a pas pu être lié, le nombre de paiements et la somme concernés, et le code qui corrige.

Un paiement que rien ne lie reste non lié et compte contre la couverture. Si une preuve arrive plus tard, comme la visite de l’acheteur sur votre page de confirmation, il est lié à ce moment-là.

Couverture, 30 derniers jours

Exemple

86 %

3 294 $US sur 3 830 $US ces 30 derniers jours sont liés à un visiteur. 14 paiements, 536 $US, ne le sont pas.

À corriger

  1. Sessions Checkout sans identifiant de visiteur9 paiements, 343 $US

    Passez l’identifiant du visiteur à la création de la session, sur l’abonnement aussi, pour que les renouvellements suivent. Des snippets pour Node, Next.js, Python, Ruby et PHP.

    const id = req.cookies._tally_vid;
    
    await stripe.checkout.sessions.create({
      // …your line items and URLs
      metadata: { tally_visitor_id: id },
      subscription_data: {
        metadata: { tally_visitor_id: id },
      },
    });
  2. Une page de confirmation qui ne dit pas de quel paiement il s’agit3 paiements, 95 $US

    Ajoutez l’identifiant de session Stripe à la page où reviennent les acheteurs, et la visite sur cette page lie la vente.

    success_url:
      "https://yoursite.com/thanks?session_id={CHECKOUT_SESSION_ID}"
  3. Paiements sans page de paiement, comme les factures2 paiements, 98 $US

    Indiquez à la balise qui est connecté. L’adresse est hachée dès son arrivée et comparée à celle de l’acheteur ; l’adresse elle-même n’est jamais conservée.

    tally('identify', { email: user.email });
Fig. 8La couverture d’un site d’exemple et sa liste des correctifs, avec le code de chaque correctif.

06Parcours d’achat

Comment les acheteurs vous trouvent, et qui conclut la vente.

Le parcours d’achat, c’est le chemin derrière les nouvelles ventes de la période : le temps que mettent les acheteurs depuis leur première visite, le nombre de visites et de pages nécessaires, et combien achètent dès la première visite. Le diagramme de flux va de la source qui a amené chaque acheteur à celle à qui la vente est attribuée.

La valeur vie client compte chaque client sous la source de sa première visite, avec tout ce qu’il a payé depuis, renouvellements, montées en gamme et remboursements compris.

Exemple

Path to purchase

Last 30 days · 112 of 133 new sales, the ones linked to a visitor

Median time to buy

3days

from their first visit

Median visits

3visits

the one they paid in included

Bought on the first visit

14%

16 of 112

Pages before buying

10.5

median pages viewed

Where buyers came from, and who closed the sale

112 new sales: where each buyer first came from, and the source credited with the sale.

51% of new sales were credited to the source that first brought the buyer in. Hover or focus a flow for its numbers.

  1. Googlecredited toGoogle27
  2. x.comcredited tox.com11
  3. Other (3 sources)credited toOther (3 sources)11
  4. Directcredited toOther (3 sources)10
  5. ChatGPTcredited toChatGPT10
  6. Redditcredited toReddit9
  7. Other (3 sources)credited toNewsletter9
  8. Googlecredited toNewsletter6

6 smaller flows in the table below.

Show the flows as a table
112 new sales: where each buyer first came from, and the source credited with the sale.
Brought them inCredited with the saleNew salesShare
GoogleGoogle2724%
x.comx.com1110%
Other (3 sources)Other (3 sources)1110%
DirectOther (3 sources)109%
ChatGPTChatGPT109%
RedditReddit98%
Other (3 sources)Newsletter98%
GoogleNewsletter65%
DirectGoogle54%
x.comGoogle54%
RedditGoogle44%
DirectReddit22%
ChatGPTGoogle22%
Other (3 sources)ChatGPT1<1%

Time from first visit to purchase

  1. 16Same visit: 16 sales (14%), bought in their first visit
  2. 13Same day: 13 sales (12%), a later visit, under 24 hours after the first
  3. 311–3 days: 31 sales (28%), 1 to 3 days after the first visit
  4. 204–7 days: 20 sales (18%), 4 to 7 days after the first visit
  5. 161–2 weeks: 16 sales (14%), 8 to 14 days after the first visit
  6. 112–4 weeks: 11 sales (10%), 15 to 28 days after the first visit
  7. 51–3 months: 5 sales (4%), 29 to 90 days after the first visit
  8. 03+ months: 0 sales (0%), 91 days or more after the first visit

Pages buyers saw before paying

Share of the 112 buyers who viewed each page before paying

  1. /pricing96%, 108 of 112 buyers
  2. /71%, 80 of 112 buyers
  3. /signup64%, 72 of 112 buyers
  4. /docs38%, 43 of 112 buyers
  5. /blog/stripe-fees26%, 30 of 112 buyers
  6. /compare22%, 25 of 112 buyers
  7. /changelog8%, 10 of 112 buyers
  8. /blog/launch-week6%, 7 of 112 buyers

Only new sales count here. Renewals and upgrades belong to the visit that won the subscription, so counting them would count that journey again.

Fig. 9Le parcours d’achat sur le site d’exemple : les médianes, le flux de la première source à la source attribuée, le temps nécessaire et les pages vues par les acheteurs. Survolez un flux.
Exemple

Lifetime value by first source

All time: every payment since 1 Nov 2025. The period above doesn't apply.

First sourceCustomersLifetime revenueAverage valueRenewalsRepeat rate
GoogleOrganic Search285$35,568$12574152%
ChatGPTAI Assistants110$18,396$16734161%
Direct156$15,964$10232844%
NewsletterEmail83$15,330$18531569%
Hacker NewsOrganic Social74$10,343$14020055%
x.comOrganic Social101$8,949$8914133%
RedditOrganic Social74$7,942$10714141%
PerplexityAI Assistants37$5,587$1518957%
Every source920$118,081$1282,29651%

A customer is a visitor linked to a sale, counted under the source of their first visit. Lifetime revenue is net of refunds and chargebacks; repeat rate is the share who paid more than once (a renewal, an upgrade or another purchase). $11,540 from 374 payments not linked to a visitor is in no row.

Fig. 10La valeur vie client par première source sur le site d’exemple.

07Ce qu’ils lisent

Le temps passé sur une page, compté seulement pendant la lecture.

Le chrono tourne tant que l’onglet est visible et que le visiteur a fait défiler, tapé, touché l’écran ou bougé le pointeur dans les 30 dernières secondes. Un onglet resté ouvert 8 heures derrière les autres n’ajoute rien. Le tableau de bord montre la médiane par visite, donc un onglet oublié ne peut pas la gonfler.

Une page vue

Exemple

Ouverte8 min 35 s

Actif2 min 05 s

  1. 1 min 10 sLecture et défilementCompté
  2. 30 sPas encore d’action : le chrono continue 30 secondesCompté
  3. 2 min 30 sToujours aucune action : le chrono s’arrêteNon compté
  4. 4 min 00 sUn autre onglet au premier planNon compté
  5. 25 sDe retour, défile à nouveauCompté
Fig. 11Une page vue d’exemple : ouverte 8 minutes 35 secondes, active 2 minutes 5.

Pages ajoute jusqu’où l’on fait défiler : le temps de lecture et la profondeur de chaque page, combien atteignent la fin, et comment les acheteurs lisent une page avant de payer, comparés à tous ceux qui n’ont pas acheté.

Exemple

Reading time

38s

median per pageview

Scroll depth

59%

average depth, of 25,694 views measured

Read to the end

27%

of measured views reached 90% or more

What they read

27,628 pageviews · last 30 days

Open a page to see how far down people read it, and how buyers read it before paying.

  1. /pricing5,217 views78% scrolled on average58s reading time, median

    58s

    reading time, median per view

    78%

    scrolled, on average

    5,217 views · 4,904 with a measured depth

    How far down they read

    Share of measured views that scrolled at least this far

    1. 25% — reached a quarter of the page:95%
    2. 50% — reached half of the page:84%
    3. 75% — reached three quarters of the page:69%
    4. 90%+ — reached the end of the page:48%

    Buyers before paying vs didn't buy

    • Buyers, before paying159 views · 114 buyers96% scrolled on average,1m 41s reading time, median
    • Didn't buy5,020 views · 3,585 visitors61% scrolled on average,44s reading time, median

    38 views by buyers after paying are left out of both.

    Buyers are visitors whose first sale came after viewing this page; only their views before that payment count.

Reading time runs only while the tab is visible and the visitor is active; it's the median per view. A view with no engagement report counts as 0s of reading. Its scroll depth is unknown, so it's left out of every scroll figure rather than counted as 0%. 25,694 of 27,628 pageviews have a measured depth.

Fig. 12Ce qu’ils lisent sur le site d’exemple, page des tarifs ouverte : jusqu’où elle est lue, et les acheteurs comparés à tous les autres.

08Replay et cartes de chaleur

Regardez la visite qui a acheté, et voyez où tout le monde clique.

Activez le replay pour un site, et ses visites enregistrées se rejouent avec chaque page, objectif, clic de rage et paiement sur la frise. Le parcours d’un acheteur et son justificatif renvoient directement à l’enregistrement. Chaque saisie est masquée et les mots de passe ne sont jamais enregistrés.

Les cartes de chaleur dessinent clics, clics de rage, clics morts et profondeur de défilement sur la page elle-même, pour ordinateur, tablette et téléphone.

Fig. 13Les visites enregistrées du site d’exemple, chacune ouvrant le lecteur.
Exemple
Une carte de chaleur des clics sur la page des tarifs du site d’exemple : les clics brillent sur les boutons des offres, avec des clics de rage sur le sélecteur de facturation.Une carte de chaleur des clics sur la page des tarifs du site d’exemple : les clics brillent sur les boutons des offres, avec des clics de rage sur le sélecteur de facturation.
Fig. 14Une carte de chaleur des clics sur la page des tarifs du site d’exemple, dessinée sur la page d’une visite enregistrée : où l’on clique, et où l’on clique par frustration.

Carte de chaleur de /pricing, 30 derniers jours

Exemple

09En direct

Qui est sur le site en ce moment.

Les cinq dernières minutes sur un globe ou une carte à plat, avec une liste à côté : le drapeau, la page, la ville et la source de chaque visiteur. Une nouvelle arrivée apparaît dans un anneau ; une vente éclate en corail sur la ville de l’acheteur. Cliquez sur un visiteur pour le retrouver, et rejouez les huit dernières heures par pas de 15 minutes.

Exemple
Le globe en direct du site d’exemple : les visiteurs des cinq dernières minutes épinglés sur leurs villes, en Europe et dans les Amériques, avec une vente qui éclate en corail.Le globe en direct du site d’exemple : les visiteurs des cinq dernières minutes épinglés sur leurs villes, en Europe et dans les Amériques, avec une vente qui éclate en corail.

Live

The globe and the map need JavaScript. The list beside them is as of loading this page.

5 visitors

in the last 5 minutes, from 4 countries

Fig. 15La vue en direct du site d’exemple : qui est là dans les cinq dernières minutes, épinglé là où il se trouve, avec la liste à côté. « Lancer » allume le vrai globe.

10Labs

Vos clients, en écosystème vivant et en rivière.

Deux vues expérimentales, dessinées uniquement à partir des signaux dont Tally dispose. L’écosystème place chaque visiteur des 90 derniers jours selon ce qu’il a fait, les rassemble en groupes nommés d’après ce qui les distingue, et les colore selon leur santé ; lancez-le et il évolue semaine après semaine.

La rivière suit les visiteurs de la source qui les a amenés, à travers les pages atteintes, jusqu’à l’achat ou non, semaine après semaine, colorée par source, par expérience ou par résultat. La santé est notre lecture des renouvellements, remboursements, rétrofacturations et de la récence, jamais une prédiction.

Exemple

Labs

Customer ecosystem

Experimental

5,000 most recent of 32,059 visitors from the last 90 days. Each is placed by what they did, gathered with the ones most like them, and coloured by health.

L’écosystème clients du site d’exemple : des milliers de visiteurs en particules lumineuses, rassemblés en groupes nommés et colorés selon leur santé.L’écosystème clients du site d’exemple : des milliers de visiteurs en particules lumineuses, rassemblés en groupes nommés et colorés selon leur santé.

more engaged time, more visits, longer visits than the median

more revenue, more renewals, more quick exits

The picture needs JavaScript and WebGL 2. Everything it shows is in the table below.

What the picture shows, and what feeds it

Reading it

  • Position: Each particle is a visitor of the last 90 days, placed by its signals (below), standardised and projected to two directions with PCA, computed on our server the same way every time. Particles near each other did similar things.
  • Left to right: more engaged time, more visits, longer visits than the median (48% of the variation). The other way: less engaged time, fewer visits, shorter visits than the median.
  • Bottom to top: more revenue, more renewals, more quick exits (15% of the variation). The other way: less revenue, fewer renewals, fewer quick exits.
  • Clusters: k-means on the picture's three main directions, with the number of clusters chosen by how cleanly they separate (silhouette). Names come from each cluster's standout traits by fixed rules.
  • Size: for customers, lifetime net revenue; for everyone else, the visitor list's likely-to-buy score (a point a visit up to 10, two a minute on pricing and checkout pages up to 20).
  • Glow: how recently they were seen, brightest today and gone after two weeks.
  • Weeks: the slider replays the particles shown as they were at the end of each week. Each appears from its first visit in the 90 days, so the early weeks hold only those already around then.
  • Trails: where a particle was in the three weeks before the one shown, for the cluster you pick, and faintly for everyone while the weeks play.

Colour: customers' health

  • RenewingA customer whose last purchase or renewal is within their renewal cycle (30 days until they have one), or who has visited within it.
  • QuietA customer with no renewal and no visit for longer than their renewal cycle (30 days until they have one) and a few days' grace.
  • LostA customer whose most recent payment was refunded or charged back, with no purchase since.

Colour: everyone else's engagement

  • HotNot a customer; engagement 0.75 or more.
  • WarmNot a customer; engagement 0.5 to 0.75.
  • CoolNot a customer; engagement 0.25 to 0.5.
  • ColdNot a customer; engagement under 0.25.

Engagement is half engaged time a visit against the site's median, a quarter recency and a quarter return visits. Health and engagement are our reading of renewals, refunds, chargebacks and recency, not a prediction.

Signals

  • Visits · visits in the last 90 days
  • Engaged time · engaged time (the tracker's visible-and-active clock), outlier visits left out
  • Pages a visit · pageviews ÷ visits
  • Days since the last visit · days from the last visit to the snapshot
  • From search · share of visits from Organic and Paid Search
  • From social and video · share of visits from Organic and Paid Social and Video
  • From AI assistants · share of visits from AI assistants (ChatGPT, Claude, Perplexity …)
  • Direct · share of visits with no referrer
  • From links, email and ads · share of visits from referrals, email, affiliates and display
  • Pricing page views · views of pricing and plans pages
  • Checkout page views · views of checkout, cart, buy, upgrade, subscribe and billing pages
  • Goals completed · goals sent by the site's tag
  • Net revenue · payments linked to the visitor, refunds taken off (all time, US dollars)
  • Renewals · renewal payments
  • Refunds and chargebacks · refunds and chargebacks
  • Rage clicks · rage clicks per recorded visit (only where sessions were recorded)
  • Dead clicks · dead clicks per recorded visit (only where sessions were recorded)
  • Quick exits · share of visits with one page and under 10 s engaged
  • Engaged time against the site's median · the visitor's median engaged time a visit ÷ the site's median
  • Scroll depth · how far down pages were scrolled, on average (where the tag reports it)

Not yet: support tickets and reviews. They aren't connected, so nothing here is read from them.

The ecosystem as a table

The same clusters, with customers first by lifetime revenue and everyone else by likely to buy. Names open each journey.

Clusters, now
ClusterMembersCustomersNet revenueWhat sets it apart
Quick leavers2,0190$0Engaged time against the site's median: 0.1× on average, against 3.4× across everyone; Scroll depth: 33% on average, against 64% across everyone; Engaged time: 8s on average, against 11m 35s across everyone; Mostly from Google: 37% of them
Deep readers1,5070$0Scroll depth: 86% on average, against 64% across everyone; Quick exits: 0% of visits, against 31% across everyone; Engaged time against the site's median: 3.8× on average, against 3.4× across everyone; Mostly from Google: 42% of them
Deep readers who come direct1,0680$0Pages a visit: 5.5 on average, against 2.7 across everyone; Engaged time: 32m 05s on average, against 11m 35s across everyone; Visits: 4.3 on average, against 2.4 across everyone
Paying renewers who come direct406406$48,881Net revenue: $120 on average, against $9.78 across everyone; Goals completed: 9.2 on average, against 1.1 across everyone; Renewals: 2.1 on average, against 0.2 across everyone
Quick leavers: the first 3 of 2,019 visitors
VisitorHealthValueVisitsLast seen
Zippy Raccoon CoolLikely to buy 2 of 302
Sincere Ibex CoolLikely to buy 2 of 302
Calm Moose CoolLikely to buy 2 of 302
Deep readers: the first 3 of 1,507 visitors
VisitorHealthValueVisitsLast seen
Twinkly Fennec HotLikely to buy 14 of 304
Dandy Fennec HotLikely to buy 14 of 303
Rustic Squirrel HotLikely to buy 13 of 304
Deep readers who come direct: the first 3 of 1,068 visitors
VisitorHealthValueVisitsLast seen
Nifty Fennec HotLikely to buy 28 of 308
Glad Lynx HotLikely to buy 28 of 308
Upbeat Wombat HotLikely to buy 28 of 308
Paying renewers who come direct: the first 3 of 406 visitors
VisitorHealthValueVisitsLast seen
Merry Hare Renewing$693 lifetime11
Spry Raccoon Renewing$693 lifetime10
Curious Gecko Renewing$594 lifetime10
Fig. 16Labs : l’écosystème clients du site d’exemple. Chaque visiteur des 90 derniers jours placé selon ce qu’il a fait, groupé et nommé d’après ce qui distingue chaque groupe, coloré selon sa santé.
Exemple

Labs

Flow riverExperimental

Where visitors come from, where they go, what it earns and how it went, week by week.

21,486 visitors · $8,806 net revenueLast 8 weeks

Flows · Last 8 weeks

First touchLanding pageKey page reachedOutcomeGoogle → /: 1,214 visitors (6%), $361 net revenue, Cool (−0.20)Google → /blog/*: 2,882 visitors (13%), $365 net revenue, Cool (−0.23)Google → /docs/*: 639 visitors (3%), $277 net revenue, Warm (+0.37)Google → /pricing: 622 visitors (3%), $494 net revenue, Neutral (+0.10)Google → /compare/*: 361 visitors (2%), $293 net revenue, Neutral (−0.05)Google → /changelog: 251 visitors (1%), $51 net revenue, Cool (−0.22)Google → /signup: 251 visitors (1%), $446 net revenue, Warm (+0.32)Direct → /: 2,540 visitors (12%), $914 net revenue, Cool (−0.16)Direct → /blog/*: 298 visitors (1%), $114 net revenue, Neutral (−0.09)Direct → /docs/*: 535 visitors (2%), $254 net revenue, Warm (+0.34)Direct → /pricing: 628 visitors (3%), $644 net revenue, Warm (+0.19)Direct → /compare/*: 94 visitors (<1%), $34 net revenue, Neutral (−0.03)Direct → /changelog: 136 visitors (<1%), $0 net revenue, Cool (−0.24)Direct → /signup: 319 visitors (1%), $516 net revenue, Warm (+0.27)x.com → /: 1,359 visitors (6%), $400 net revenue, Cool (−0.51)x.com → /blog/*: 754 visitors (4%), $127 net revenue, Cool (−0.40)x.com → /docs/*: 50 visitors (<1%), $79 net revenue, Warm (+0.27)x.com → /pricing: 159 visitors (<1%), $142 net revenue, Neutral (+0.01)x.com → /compare/*: 53 visitors (<1%), $0 net revenue, Cool (−0.18)x.com → /changelog: 150 visitors (<1%), $42 net revenue, Cool (−0.38)x.com → /signup: 49 visitors (<1%), $68 net revenue, Neutral (+0.10)Reddit → /: 389 visitors (2%), $196 net revenue, Cool (−0.13)Reddit → /blog/*: 844 visitors (4%), $41 net revenue, Cool (−0.16)Reddit → /docs/*: 180 visitors (<1%), $78 net revenue, Warm (+0.37)Reddit → /pricing: 89 visitors (<1%), $168 net revenue, Warm (+0.21)Reddit → /compare/*: 90 visitors (<1%), $37 net revenue, Neutral (+0.01)Reddit → /changelog: 71 visitors (<1%), $0 net revenue, Cool (−0.28)Reddit → /signup: 35 visitors (<1%), $44 net revenue, Warm (+0.22)ChatGPT → /: 417 visitors (2%), $137 net revenue, Cool (−0.13)ChatGPT → /blog/*: 154 visitors (<1%), $75 net revenue, Neutral (+0.01)ChatGPT → /docs/*: 122 visitors (<1%), $63 net revenue, Warm (+0.39)ChatGPT → /pricing: 239 visitors (1%), $162 net revenue, Warm (+0.20)ChatGPT → /compare/*: 516 visitors (2%), $252 net revenue, Neutral (+0.01)ChatGPT → /changelog: 16 visitors (<1%), $0 net revenue, Neutral (−0.04)ChatGPT → /signup: 44 visitors (<1%), $81 net revenue, Warm (+0.39)Hacker News → /: 282 visitors (1%), $88 net revenue, Neutral (−0.03)Hacker News → /blog/*: 663 visitors (3%), $93 net revenue, Neutral (−0.07)Hacker News → /docs/*: 124 visitors (<1%), $45 net revenue, Warm (+0.33)Hacker News → /pricing: 61 visitors (<1%), $14 net revenue, Warm (+0.32)Hacker News → /compare/*: 64 visitors (<1%), $0 net revenue, Neutral (+0.11)Hacker News → /changelog: 50 visitors (<1%), $0 net revenue, Cool (−0.16)Hacker News → /signup: 24 visitors (<1%), $41 net revenue, Warm (+0.32)Other sources → /: 937 visitors (4%), $387 net revenue, Cool (−0.13)Other sources → /blog/*: 1,089 visitors (5%), $193 net revenue, Neutral (−0.09)Other sources → /docs/*: 540 visitors (3%), $162 net revenue, Warm (+0.37)Other sources → /pricing: 337 visitors (2%), $375 net revenue, Warm (+0.35)Other sources → /compare/*: 312 visitors (1%), $161 net revenue, Neutral (+0.04)Other sources → /changelog: 351 visitors (2%), $177 net revenue, Cool (−0.13)Other sources → /signup: 102 visitors (<1%), $115 net revenue, Warm (+0.35)/ → Signup: 664 visitors (3%), $929 net revenue, Warm (+0.30)/ → Pricing: 1,740 visitors (8%), $1,320 net revenue, Neutral (+0.07)/ → Docs: 507 visitors (2%), $161 net revenue, Warm (+0.25)/ → No key page: 4,227 visitors (20%), $75 net revenue, Cool (−0.44)/blog/* → Signup: 268 visitors (1%), $412 net revenue, Warm (+0.40)/blog/* → Pricing: 677 visitors (3%), $530 net revenue, Warm (+0.21)/blog/* → Docs: 348 visitors (2%), $14 net revenue, Warm (+0.19)/blog/* → No key page: 5,391 visitors (25%), $51 net revenue, Cool (−0.33)/docs/* → Signup: 177 visitors (<1%), $334 net revenue, Warm (+0.43)/docs/* → Pricing: 145 visitors (<1%), $136 net revenue, Warm (+0.44)/docs/* → Docs: 1,868 visitors (9%), $489 net revenue, Warm (+0.35)/pricing → Signup: 660 visitors (3%), $1,127 net revenue, Warm (+0.31)/pricing → Pricing: 1,475 visitors (7%), $872 net revenue, Neutral (+0.12)/compare/* → Signup: 179 visitors (<1%), $341 net revenue, Warm (+0.43)/compare/* → Pricing: 587 visitors (3%), $396 net revenue, Warm (+0.17)/compare/* → Docs: 75 visitors (<1%), $39 net revenue, Warm (+0.32)/compare/* → No key page: 649 visitors (3%), $0 net revenue, Cool (−0.40)/changelog → Signup: 61 visitors (<1%), $164 net revenue, Warm (+0.53)/changelog → Pricing: 113 visitors (<1%), $67 net revenue, Warm (+0.24)/changelog → Docs: 103 visitors (<1%), $40 net revenue, Warm (+0.28)/changelog → No key page: 748 visitors (3%), $0 net revenue, Cool (−0.46)/signup → Signup: 824 visitors (4%), $1,311 net revenue, Warm (+0.31)Signup → Bought: 138 visitors (<1%), $4,616 net revenue, Warm (+0.54)Signup → Goal: 1,471 visitors (7%), $0 net revenue, Warm (+0.48)Signup → Left: 1,224 visitors (6%), $0 net revenue, Warm (+0.28)Pricing → Bought: 100 visitors (<1%), $3,322 net revenue, Warm (+0.49)Pricing → Goal: 771 visitors (4%), $0 net revenue, Warm (+0.55)Pricing → Left: 3,866 visitors (18%), $0 net revenue, Neutral (+0.07)Docs → Bought: 23 visitors (<1%), $742 net revenue, Very warm (+0.66)Docs → Goal: 412 visitors (2%), $0 net revenue, Warm (+0.56)Docs → Left: 2,466 visitors (11%), $0 net revenue, Warm (+0.34)No key page → Bought: 5 visitors (<1%), $126 net revenue, Warm (+0.38)No key page → Goal: 337 visitors (2%), $0 net revenue, Warm (+0.33)No key page → Left: 10,673 visitors (50%), $0 net revenue, Cool (−0.43)
SourceLandingKey pageOutcomeGoogle → /: 1,214 visitors (6%), $361 net revenue, Cool (−0.20)Google → /blog/*: 2,882 visitors (13%), $365 net revenue, Cool (−0.23)Google → /docs/*: 639 visitors (3%), $277 net revenue, Warm (+0.37)Google → /pricing: 622 visitors (3%), $494 net revenue, Neutral (+0.10)Google → /compare/*: 361 visitors (2%), $293 net revenue, Neutral (−0.05)Google → /changelog: 251 visitors (1%), $51 net revenue, Cool (−0.22)Google → /signup: 251 visitors (1%), $446 net revenue, Warm (+0.32)Direct → /: 2,540 visitors (12%), $914 net revenue, Cool (−0.16)Direct → /blog/*: 298 visitors (1%), $114 net revenue, Neutral (−0.09)Direct → /docs/*: 535 visitors (2%), $254 net revenue, Warm (+0.34)Direct → /pricing: 628 visitors (3%), $644 net revenue, Warm (+0.19)Direct → /compare/*: 94 visitors (<1%), $34 net revenue, Neutral (−0.03)Direct → /changelog: 136 visitors (<1%), $0 net revenue, Cool (−0.24)Direct → /signup: 319 visitors (1%), $516 net revenue, Warm (+0.27)x.com → /: 1,359 visitors (6%), $400 net revenue, Cool (−0.51)x.com → /blog/*: 754 visitors (4%), $127 net revenue, Cool (−0.40)x.com → /docs/*: 50 visitors (<1%), $79 net revenue, Warm (+0.27)x.com → /pricing: 159 visitors (<1%), $142 net revenue, Neutral (+0.01)x.com → /compare/*: 53 visitors (<1%), $0 net revenue, Cool (−0.18)x.com → /changelog: 150 visitors (<1%), $42 net revenue, Cool (−0.38)x.com → /signup: 49 visitors (<1%), $68 net revenue, Neutral (+0.10)Reddit → /: 389 visitors (2%), $196 net revenue, Cool (−0.13)Reddit → /blog/*: 844 visitors (4%), $41 net revenue, Cool (−0.16)Reddit → /docs/*: 180 visitors (<1%), $78 net revenue, Warm (+0.37)Reddit → /pricing: 89 visitors (<1%), $168 net revenue, Warm (+0.21)Reddit → /compare/*: 90 visitors (<1%), $37 net revenue, Neutral (+0.01)Reddit → /changelog: 71 visitors (<1%), $0 net revenue, Cool (−0.28)Reddit → /signup: 35 visitors (<1%), $44 net revenue, Warm (+0.22)ChatGPT → /: 417 visitors (2%), $137 net revenue, Cool (−0.13)ChatGPT → /blog/*: 154 visitors (<1%), $75 net revenue, Neutral (+0.01)ChatGPT → /docs/*: 122 visitors (<1%), $63 net revenue, Warm (+0.39)ChatGPT → /pricing: 239 visitors (1%), $162 net revenue, Warm (+0.20)ChatGPT → /compare/*: 516 visitors (2%), $252 net revenue, Neutral (+0.01)ChatGPT → /changelog: 16 visitors (<1%), $0 net revenue, Neutral (−0.04)ChatGPT → /signup: 44 visitors (<1%), $81 net revenue, Warm (+0.39)Hacker News → /: 282 visitors (1%), $88 net revenue, Neutral (−0.03)Hacker News → /blog/*: 663 visitors (3%), $93 net revenue, Neutral (−0.07)Hacker News → /docs/*: 124 visitors (<1%), $45 net revenue, Warm (+0.33)Hacker News → /pricing: 61 visitors (<1%), $14 net revenue, Warm (+0.32)Hacker News → /compare/*: 64 visitors (<1%), $0 net revenue, Neutral (+0.11)Hacker News → /changelog: 50 visitors (<1%), $0 net revenue, Cool (−0.16)Hacker News → /signup: 24 visitors (<1%), $41 net revenue, Warm (+0.32)Other sources → /: 937 visitors (4%), $387 net revenue, Cool (−0.13)Other sources → /blog/*: 1,089 visitors (5%), $193 net revenue, Neutral (−0.09)Other sources → /docs/*: 540 visitors (3%), $162 net revenue, Warm (+0.37)Other sources → /pricing: 337 visitors (2%), $375 net revenue, Warm (+0.35)Other sources → /compare/*: 312 visitors (1%), $161 net revenue, Neutral (+0.04)Other sources → /changelog: 351 visitors (2%), $177 net revenue, Cool (−0.13)Other sources → /signup: 102 visitors (<1%), $115 net revenue, Warm (+0.35)/ → Signup: 664 visitors (3%), $929 net revenue, Warm (+0.30)/ → Pricing: 1,740 visitors (8%), $1,320 net revenue, Neutral (+0.07)/ → Docs: 507 visitors (2%), $161 net revenue, Warm (+0.25)/ → No key page: 4,227 visitors (20%), $75 net revenue, Cool (−0.44)/blog/* → Signup: 268 visitors (1%), $412 net revenue, Warm (+0.40)/blog/* → Pricing: 677 visitors (3%), $530 net revenue, Warm (+0.21)/blog/* → Docs: 348 visitors (2%), $14 net revenue, Warm (+0.19)/blog/* → No key page: 5,391 visitors (25%), $51 net revenue, Cool (−0.33)/docs/* → Signup: 177 visitors (<1%), $334 net revenue, Warm (+0.43)/docs/* → Pricing: 145 visitors (<1%), $136 net revenue, Warm (+0.44)/docs/* → Docs: 1,868 visitors (9%), $489 net revenue, Warm (+0.35)/pricing → Signup: 660 visitors (3%), $1,127 net revenue, Warm (+0.31)/pricing → Pricing: 1,475 visitors (7%), $872 net revenue, Neutral (+0.12)/compare/* → Signup: 179 visitors (<1%), $341 net revenue, Warm (+0.43)/compare/* → Pricing: 587 visitors (3%), $396 net revenue, Warm (+0.17)/compare/* → Docs: 75 visitors (<1%), $39 net revenue, Warm (+0.32)/compare/* → No key page: 649 visitors (3%), $0 net revenue, Cool (−0.40)/changelog → Signup: 61 visitors (<1%), $164 net revenue, Warm (+0.53)/changelog → Pricing: 113 visitors (<1%), $67 net revenue, Warm (+0.24)/changelog → Docs: 103 visitors (<1%), $40 net revenue, Warm (+0.28)/changelog → No key page: 748 visitors (3%), $0 net revenue, Cool (−0.46)/signup → Signup: 824 visitors (4%), $1,311 net revenue, Warm (+0.31)Signup → Bought: 138 visitors (<1%), $4,616 net revenue, Warm (+0.54)Signup → Goal: 1,471 visitors (7%), $0 net revenue, Warm (+0.48)Signup → Left: 1,224 visitors (6%), $0 net revenue, Warm (+0.28)Pricing → Bought: 100 visitors (<1%), $3,322 net revenue, Warm (+0.49)Pricing → Goal: 771 visitors (4%), $0 net revenue, Warm (+0.55)Pricing → Left: 3,866 visitors (18%), $0 net revenue, Neutral (+0.07)Docs → Bought: 23 visitors (<1%), $742 net revenue, Very warm (+0.66)Docs → Goal: 412 visitors (2%), $0 net revenue, Warm (+0.56)Docs → Left: 2,466 visitors (11%), $0 net revenue, Warm (+0.34)No key page → Bought: 5 visitors (<1%), $126 net revenue, Warm (+0.38)No key page → Goal: 337 visitors (2%), $0 net revenue, Warm (+0.33)No key page → Left: 10,673 visitors (50%), $0 net revenue, Cool (−0.43)
What the river shows

Colour: first touch

  • Googlepeach
  • Directperiwinkle
  • x.comlilac
  • Redditmint
  • ChatGPTrose
  • Hacker Newsbutter
  • Other sourcesgrey

Each first touch has its own pastel, and its visitors keep it through every stage, so you can follow a source from where it lands to how the week ended. Each band fades a little toward the page it reaches. Point at a source to follow it alone.

A source keeps its colour from week to week, in every segment and on every visit; well-known sources have the same colour on every site. The colour says where visitors came from, nothing about how it went: colour by experience for that. Every band also names itself when you point at it, and the table lists every flow.

Width

Visitors: each counts once in each week they came, in exactly one node of every stage.

Every visitor is counted; nothing is sampled. Sources and landing pages past the six busiest are grouped as Other.

Glow

A coral glow around a flow, over any colouring, is the net revenue credited to its visits by attribution: every payment, refunds and chargebacks taken off. The more revenue, the stronger the glow; no revenue, no glow.

Stages

First touch is the source of the visitor's first visit Tally has. The landing page is the week's first visit's entry page, by its first path segment. The key page is the furthest of signup or checkout, pricing and docs pages the week's visits reached, by the words in their paths. The outcome is bought (a purchase credited to the week's visits), else a goal completed, else left.

How it went: the experience temperature

Cool: friction, worse than this site's usualWarm: better than usual

Grey: no signal could be read. It is never guessed.

In every hover card and in the table (colour by experience paints the river with it). Each flow is read against this whole site over the same weeks: the average of the signals below that it has, each from −1 to +1. A flow with few visits leans toward the site's usual, as if it had ten more visits like the site's, so a handful of visits can't paint it.

  • Engaged timeVisits longer than the site's median visit, against shorter ones: three in four longer reads fully warm on a busy flow, three in four shorter fully cool.Site median: 52s
  • Quick exitsVisits of one page with under 10 s engaged. 25 points fewer than the site's share is fully warm, 25 more fully cool.Site: 24% of visits
  • Scroll depthHow far down their pages visitors scrolled. 25 points deeper than the site's average is fully warm.Site average: 62% over 64,847 pages
  • Rage clicksThree or more clicks within a second in one spot, in recorded sessions only. 10 points fewer of the recorded visits than the site's share is fully warm.Site: 3% of 5,538 recorded visits
  • Dead clicksA click that changed nothing within a second, in recorded sessions only. 20 points fewer than the site's share is fully warm.Site: 3% of 5,538 recorded visits
  • Refunds and chargebacksRefunds and chargebacks per purchase credited to the flow. 25 points fewer than the site's rate is fully warm.Site: 20% of 266 purchases

Not yet: support tickets, reviews. They aren't connected, so they never colour a flow.

Fig. 17Labs : la rivière de flux du site d’exemple sur huit semaines, du premier contact au résultat. La largeur, ce sont les visiteurs, la couleur le premier contact, et la lueur les revenus.

11Alertes

Un message pour chaque vente, là où vous les lisez.

Un message pour chaque vente, avec la provenance de l’acheteur et la façon dont la vente a été liée ; un pic ou une chute par rapport à l’habituel pour cette heure ; un problème avec un prestataire de paiement ; et un récapitulatif quotidien ou hebdomadaire. Les heures de silence les retiennent jusqu’au matin.

Exemple

Une vente

Objet : yoursite.com: New sale: $49.00 from Reddit

First came from Google on 1 Nov; 3 visits; bought on a visit from Reddit: /blog/stripe-fees → /pricing → /signup → /thanks.͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ 

Le récapitulatif quotidien

Objet : yoursite.com: Tuesday 10 November

Hacker News sent 36 visitors, up from 7 the day before.͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ 
  • SlackUn webhook entrant vers un canal.
  • DiscordLe webhook d’un salon.
  • TelegramVotre propre bot, vers une discussion ou un canal.
  • WebhookDu JSON vers votre endpoint, signé.
Fig. 18Une alerte de vente et un récapitulatif quotidien du site d’exemple, tels que le produit les écrit, et les cinq endroits où ils peuvent arriver.

12API, CLI et MCP

Vos chiffres dans vos propres outils.

Créez une clé en lecture seule sur la page Setup d’un site ; seul un hachage en est conservé. L’API REST répond avec les chiffres mêmes du tableau de bord, la ligne de commande les affiche en tableaux, et le serveur MCP permet à un assistant IA de poser ses propres questions. Cochez Record payments, et une clé permet aussi à votre serveur d’envoyer à la Payments API les paiements de tout autre prestataire.

Exemple

REST API

$ curl -H "Authorization: Bearer $TALLY_API_KEY" \
    "$TALLY_API_URL/api/v1/sites/k3xq2mfa7twp/breakdown/source?period=30d&sort=revenue"
{
  "dimension": "source",
  "linked_revenue": { "cents": 529030, "currency": "USD", "exponent": 2 },
  "rows": [
    {
      "channel": "Organic Search",
      "label": "Google",
      "paying_visitors": 29,
      "payments": 29,
      "revenue": { "cents": 111800, "currency": "USD", "exponent": 2 },
      "share": 0.2686,
      "value": "Google",
      "visitors": 3033
    },
    …
  ],
  "sort": "revenue",
  "total_visitors": 11293
}

Ligne de commande

$ tally sources --by revenue --period 30d
Last 30 days · 2026-10-13 to 2026-11-11 · UTC
11,293 visitors · by revenue

SOURCE       CHANNEL         VISITORS  SHARE    REVENUE  SALES
Google       Organic Search     3,033  26.9%  $1,118.00     29
Direct       –                  2,218  19.6%  $1,070.48     27
x.com        Organic Social     1,273  11.3%    $988.40     25
ChatGPT      AI Assistants        806   7.1%    $692.18     18
Reddit       Organic Social       880   7.8%    $483.66     12
Newsletter   Email                432   3.8%    $358.23      9
Hacker News  Organic Social       671   5.9%    $348.86      9
Perplexity   AI Assistants        274   2.4%    $230.48      6

Serveur MCP : 16 outils en lecture seule

  • list_sites
  • get_overview
  • get_breakdown
  • compare_periods
  • list_sales
  • get_receipt
  • get_coverage
  • list_visitors
  • get_visitor
  • get_realtime
  • get_goals
  • get_funnels
  • get_customer_value
  • get_peak_hours
  • get_engagement
  • get_purchase_paths
Fig. 19Les sources du site d’exemple par revenus sur les 30 derniers jours, via l’API et la ligne de commande, et les outils du serveur MCP.

13Confidentialité

Trois façons de compter, et ce que chacune ne voit pas.

Choisissez un mode pour chaque site. Quel que soit votre choix :

  • L’adresse IP du visiteur sert à trouver sa ville, puis elle est écartée. Elle n’est jamais conservée, journalisée ni écrite sur disque.
  • Le mode sans cookie n’a besoin d’aucun cookie. Il compte un visiteur par un hachage de l’adresse IP et du navigateur, avec un sel qui change chaque jour puis est supprimé, si bien que personne ne peut être suivi d’un jour à l’autre. Le hachage est conservé ; l’adresse, jamais.
  • Les identifiants de visiteur n’apparaissent jamais dans les journaux.

La politique de confidentialité (en anglais) dit ce qui est conservé, combien de temps et qui le traite, et l’accord de traitement des données (en anglais) couvre les données de vos visiteurs.

Avec cookie

Un cookie propriétaire reconnaît les visiteurs qui reviennent d’un jour à l’autre.

Cookie
Un cookie propriétaire, pour un an
Visiteurs qui reviennent
Reconnus d’un jour à l’autre
Stripe Payment Links
Marqués avec le visiteur, donc la vente se lie

Sans cookie

Aucun cookie. Chaque visiteur est compté une fois par jour.

Cookie
Aucun
Visiteurs qui reviennent
Comptés une fois par jour
Stripe Payment Links
Non marqués, faute d’identifiant de visiteur à ajouter

Consentement d’abord

Sans cookie jusqu’à ce que votre bandeau signale le consentement, puis avec un cookie.

Cookie
Aucun tant que votre bandeau ne dit pas oui
Visiteurs qui reviennent
Reconnus à partir de la visite où ils consentent
Stripe Payment Links
Marqués dès qu’ils consentent
Fig. 20Les trois modes, et ce que chacun montre.

14Quitter DataFast

Vous venez de DataFast ? Changez une balise.

Tally lit ce que lit la balise de DataFast, donc le code de vos pages continue de fonctionner : les objectifs window.datafast(), les attributs data-fast-goal avec leurs propriétés data-fast-goal-*, et data-website-id à la place de data-site.

Les visiteurs qui reviennent gardent leur datafast_visitor_id, donc le code de paiement qui le lit déjà continue de lier les ventes, tout comme le datafast_visitor_id de vos métadonnées Stripe.

  1. Supprimer : <script defer data-website-id="dfid_…" data-domain="yoursite.com" src="https://datafa.st/js/script.js"></script>
  2. Ajouter : <script defer data-site="k3xq2mfa7twp" src="https://t.tallybyoutpost.com/script.js"></script>
  3. <button data-fast-goal="signup">Start free</button>
  4. window.datafast("checkout_started", { plan: "pro" });
Fig. 21La seule ligne qui change sur vos pages. Les lignes en dessous continuent de fonctionner telles quelles.

15Installation

Une balise, puis regardez arriver la première visite.

La balise pèse environ 3 KB, se charge avec defer et n’a aucune dépendance, donc elle ne ralentit jamais votre page. Le temps actif, les objectifs et les clics vers d’autres sites sont inclus. Un objectif, c’est tally('signup') ou un attribut data-tally-goal sur un bouton.

  1. Ajoutez votre site

    Son nom, son domaine, et lequel des trois modes compte ses visiteurs.

  2. Collez une balise

    Dans le head de chaque page. Les routes des applications monopages sont suivies d’elles-mêmes.

  3. Voyez la première visite

    La page de configuration l’attend et dit d’où elle vient.

  4. Connectez les paiements

    Stripe, Paddle, Lemon Squeezy, Polar, WooCommerce ou Squarespace, avec une clé que vous créez ; les 365 derniers jours arrivent d’abord. Votre serveur envoie les paiements de tout autre prestataire à la Payments API.

<script defer data-site="k3xq2mfa7twp" src="https://t.tallybyoutpost.com/script.js"></script>

Ça marche. Les visites arrivent.

Premier visiteur : AllemagneBerlin · Chrome sur macOS · depuis x.com

Exemple
Fig. 22L’installation, et la vérification en direct de la page de configuration, ici avec un premier visiteur d’exemple.

16Tarifs

Une offre. Tous les sites. Au prix des événements.

Tout ce que fait Tally, sur autant de sites que vous en gérez. Le prix suit le nombre d’événements que vos sites envoient en un mois, et un événement est une page vue ou un objectif.

9 $US par mois

Jusqu’à 10 k événements par mois, facturés chaque mois.

Commencer gratuitement

14 jours gratuits, sans carte bancaire. Choisissez une offre avant la fin de l’essai ; résiliez quand vous voulez.

Chaque offre comprend

  • Tous vos sites, dans une seule offre
  • Les revenus par source, avec justificatif et couverture pour chaque vente
  • Stripe, Paddle, Lemon Squeezy, Polar, WooCommerce, Squarespace et la Payments API
  • La liste des visiteurs, les objectifs et les entonnoirs
  • Replay de session et cartes de chaleur
  • Alertes et récapitulatifs par e-mail, Slack, Discord, Telegram ou webhook
  • Une API REST, une CLI et un serveur MCP
Tous les paliers, en dollars américains
Événements par moisMensuelAnnuel
10 k9 $US81 $US6,75 $US par mois
100 k19 $US171 $US14,25 $US par mois
200 k29 $US261 $US21,75 $US par mois
500 k49 $US441 $US36,75 $US par mois
1 M69 $US621 $US51,75 $US par mois
2 M89 $US801 $US66,75 $US par mois
5 M129 $US1 161 $US96,75 $US par mois
10 M169 $US1 521 $US126,75 $US par mois
  • Annuel

    Douze mois pour le prix de neuf.

  • Membres fondateurs

    Les 100 premiers clients ont 30 % de remise avec le code FOUNDING, tant qu’ils restent abonnés.

  • Clients Outpost

    50 % de remise tant que vous avez aussi une offre Outpost.

Les remises fondateur et Outpost ne se cumulent pas : vous obtenez la plus élevée. Les deux s’appliquent aux offres annuelles. Plus de 10 M événements par mois ? Écrivez à hello@tallybyoutpost.com.

Questions

  • Combien ça coûte ?

    Une offre avec tous les sites, au prix des événements : de 9 $US par mois pour 10 k événements à 169 $US par mois pour 10 M. À l’année, cela coûte 9 mois. Chaque compte commence par un essai gratuit de 14 jours, sans carte bancaire : choisissez une offre avant la fin pour continuer le suivi, et résiliez quand vous voulez.

  • Quels paiements lit-il ?

    Ceux de Stripe, Paddle, Lemon Squeezy, Polar, WooCommerce et Squarespace, chacun connecté avec une clé que vous créez (WooCommerce et Squarespace aussi en un clic), et ceux de tout autre prestataire que votre serveur envoie à la Payments API. Stripe va le plus loin : Checkout, Payment Links, abonnements et factures, avec remboursements et rétrofacturations. Les ventes Paddle, Lemon Squeezy et Polar se lient par l’identifiant de visiteur passé à leur page de paiement, ou par l’e-mail de l’acheteur ; les commandes WooCommerce, par la page « Commande reçue », avec le snippet sur la boutique ; les commandes Squarespace, par la page de statut de commande, avec le snippet dans Code Injection.

  • Est-ce que ça marche avec WooCommerce ?

    Oui. Connectez la boutique en un clic sur l’écran d’approbation de WooCommerce, depuis la page Integrations ou avec le bouton Connect WooCommerce to Tally de l’extension WordPress Tally ; une clé d’API REST fonctionne aussi. Une année de commandes arrive, remboursements compris, puis chaque commande en quelques secondes. L’extension ajoute aussi la balise à chaque page et enregistre l’identifiant de visiteur de l’acheteur sur la commande, pour que chaque vente se lie à sa visite.

  • À qui une vente est-elle attribuée quand l’acheteur est venu plusieurs fois ?

    À sa dernière visite qui n’était pas directe, ou à sa dernière visite si toutes l’étaient. La première visite est aussi enregistrée, et le justificatif montre les deux.

  • Ai-je besoin d’un bandeau cookies ?

    Le mode sans cookie ne dépose aucun cookie. Le mode avec cookie dépose un cookie propriétaire, qui dans l’UE et au Royaume-Uni demande généralement un consentement ; le mode « consentement d’abord » reste sans cookie jusqu’à ce que votre bandeau appelle tally('consent', true).

  • La balise va-t-elle ralentir mon site ?

    Elle pèse environ 3 KB compressée, se charge avec defer et ne retarde jamais une page ni un lien.

  • Qu’enregistre-t-il sur mes visiteurs ?

    Les pages, le temps actif, la profondeur de défilement, les objectifs et les clics vers d’autres sites, avec la ville et le navigateur. L’adresse IP sert à trouver la ville, puis elle est écartée ; elle n’est jamais conservée. Le replay de session est désactivé tant que vous ne l’activez pas ; il masque chaque saisie et n’enregistre jamais de mot de passe.

  • Qui le fait ?

    Tally est conçu par l’équipe derrière Outpost, la plateforme de croissance, chez Tesseract Systems Corporation. C’est un produit à part entière.

Autre chose : hello@tallybyoutpost.com