Theme

Start for free

Developer tools

For UI component libraries: do people who copy the free components buy the pro ones?

A component library gives away a free core and sells pro components, blocks or templates as a one-off licence, per developer or per team. Tally counts copy clicks on the free components as goals and ties each licence to the visits behind it, so the free side is measured by what it sells.

Start for free

14 days free, no card needed.

01How they sell

  • One-offLifetime licences for pro components, priced per developer or for a team, with access to updates.
  • FreemiumAn open-source or free core that developers copy and install, with pro blocks shown beside it.
  • SubscriptionSome sell yearly access to new components, renewing on the purchase date.

02Payments it reads

  • Lemon SqueezyLicences through Lemon Squeezy checkout links, with the visitor's id in custom data; orders and refunds are read.
  • StripeCheckout or Payment Links for personal and team licences; refunds are read.
  • PaddleLibraries sold to companies worldwide use Paddle to handle VAT on team licences; transactions and adjustments are read.

What Tally can't read

  • Installs of the free package from npm aren't visits or sales.
  • Access granted through a private package registry or repository after purchase isn't read.
  • Sales on a theme marketplace that pays you out, such as ThemeForest, aren't read.

03Where buyers come from

  • GitHubThe free core's repository sends developers to the docs and the pro gallery.
  • X and ThreadsShort clips of a component in motion send designers and developers to its page.
  • Component searchesSearches for a Tailwind pricing table, a React data grid or a dashboard layout land on a component page.
  • Framework communitiesDiscord servers and forums for a framework recommend libraries by name.
  • AI assistantsCoding assistants mention component libraries in answers, and those visitors arrive in the AI channel.

04What Tally answers

  1. Do people who copy free components go on to buy?

    Send tally('copy', { component }) from each copy button, and the goals view gives copies, converting visitors and their revenue, so the free core's effect on sales is counted.

    Goals and funnels
  2. Which component pages do buyers see before paying?

    Path to purchase lists the pages buyers saw on the way, with the median time and visits, so the components that lead to a licence stand out.

    Path to purchase
  3. Is a team licence bought by someone who came alone first?

    The buyer's journey in the visitor list shows every visit before the payment, so a developer who copied free components for weeks before buying a team licence is plain to see.

    Visitors and journeys
  4. Which framework's pages sell, React or Vue?

    The page breakdown carries revenue beside visitors for each landing page, so framework sections compare on licences sold.

    Sources with revenue
  5. Do visitors use the live previews?

    The click heatmap shows presses on preview toggles, the code tab and copy buttons, and the scroll map how far down a long gallery people go.

    Heatmaps

05Numbers worth watching

Goal conversion
The share of visitors who copy a free component, the habit that a pro licence builds on.
Engaged time
Time actually spent in the docs and gallery, worth comparing between buyers and everyone else.
Revenue per visitor
Revenue per visitor by landing page, ranking component pages by what they sold.
First-visit buyers
How many buy on their first visit, such as a developer with a deadline and a design to match.

06An example

Example
  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

Fig. 1The visitor list on the example site, with a buyer's visits open. For a component library, count the docs and component visits that came before the licence.

07Setting up

  1. React and ViteIf the docs site is a Vite single-page app, put the tag in index.html; component pages reached through client routing count as pageviews.
  2. Lemon SqueezyAdd tally_visitor_id to the custom data of each checkout link on the pricing page.
  3. Send a goal from every copy button with the component's name, so copies can be compared by component and by source.

08Questions

  • Will npm installs of the free package show up?

    No. Installs aren't read. Visits to your docs and component pages are, along with the copy goals you send.

  • A developer buys a personal licence, then a team one. How does that show?

    As two payments on one customer's row, each with its own receipt and credited visit; lifetime value counts both under the customer's first source.

  • Do long reading sessions in the docs count as engaged time?

    Yes, while the tab is in view and the reader moved in the last 30 seconds; a tab left open in the background stops counting.