agentsclimarketplace

Umami analytics web

Skill idimsh/tdds-frontend-skills/umami-analytics-web

Frontend AI agent skills (SKILL.md) for UI pre-delivery checks, accessibility audits, and fixing patterns across Next.js, React, and other web projects

Install
npx -y skills add idimsh/tdds-frontend-skills --skill umami-analytics-web

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

agent-friendly implementation guidance for Umami Analytics v3 in web projects. Use when building, reviewing, or configuring privacy-first website analytics with Umami, including tracker setup, custom events, CTAs, affiliate/outbound links, downloads, forms, promotions, revenue, UTM campaigns, pixels, links, goals, funnels, journeys, attribution, tags, distinct IDs, server-side events, and GA4-style migration or concept comparisons.

SKILL.md

9.0 KB, as published. Nobody here has run it

Umami Analytics Web

Use this skill to help a coding agent implement or review Umami Analytics in websites, landing pages, ecommerce flows, marketing campaigns, newsletters, embedded content, or privacy-first analytics setups.

Umami v3 is an open-source, cookieless, privacy-first web analytics platform. A website normally embeds one small tracker script in <head>; pageviews are auto-collected, and custom events are recorded with either HTML data-* attributes or window.umami.track().

Load the right reference

  • references/recipes.md — start here for most implementation tasks: CTAs, outbound/affiliate links, downloads, forms, promotions, checkout/revenue, distinct IDs, A/B tags, SPA patterns, consent-friendly wrappers, and QA.
  • references/event-taxonomy.md — use before adding new events so names, properties, PII rules, and funnel/revenue events stay consistent.
  • references/tracker-reference.md — use for tracker script attributes, window.umami signatures, default payloads, SPA behavior, data-before-send, server-side ingestion, ad-blocker bypass, and replay options.
  • references/pixels-and-links.md — use for Umami Pixel and Link concepts, email-open/image-pixel tracking, tracked redirect links, QR/social/ad/off-site campaigns, and when to combine them.
  • references/features-and-ga4-comparison.md — use when asked what Umami offers, how it compares to GA4, or how to translate a GA4 concept into Umami.

Operating principles

  • Prefer privacy-first analytics: avoid cookies, fingerprinting, raw PII, secrets, raw user-generated content, and full sensitive URL query strings.
  • Treat data-website-id, tracker URL, and Umami host as deployment configuration.
  • Add an analytics wrapper module instead of scattering raw umami.track() calls across components.
  • Track events that answer a decision: conversion, product usage, campaign, affiliate/revenue, UX, content, or funnel analysis.
  • Keep event names stable and put context in properties. Do not create one event name per button, page variant, product, coupon, or campaign.
  • Default to lower_snake_case event names and property names in new code. If a project already uses kebab/camel case, preserve consistency rather than mixing styles.
  • For GA4 migrations, map GA4 event intent to Umami events/goals/funnels/revenue/attribution; do not blindly copy the full GA4 ecommerce schema unless the business needs item-level detail outside Umami.

Install the tracker

Place this once in the global document head/layout:

<script
  defer
  src="https://your-umami.example.com/script.js"
  data-website-id="YOUR-WEBSITE-UUID"
></script>

Common configuration attributes:

AttributeUse
data-website-idRequired website UUID from Umami.
data-host-urlSend beacons to a different host than the script origin.
data-auto-track="false"Disable automatic pageviews/events so code calls umami.track() manually.
data-domains="example.com,www.example.com"Restrict tracking to production hostnames or known domains.
data-tag="variant-a"Stamp every event with an A/B variant, release cohort, microsite, or campaign tag.
data-performance="true"Collect Core Web Vitals/performance metrics.
data-exclude-search="true"Strip URL query strings from collected URLs.
data-exclude-hash="true"Strip URL hash fragments from collected URLs.
data-do-not-track="true"Respect the browser Do Not Track setting.
data-before-send="fnName"Globally inspect, redact, enrich, or reject outgoing payloads.

Choose the correct tracking method

  • Static click in rendered HTML: use data-umami-event plus data-umami-event-* attributes.
  • Dynamic values, typed numbers/booleans/dates, revenue, delayed callbacks, SPA/framework handlers: use window.umami.track(name, data) through a wrapper.
  • Session annotation or privacy-safe user stitching: use window.umami.identify() with a hashed/opaque ID or session properties.
  • Backend events, webhooks, jobs, or mobile/API activity: use Umami server-side ingestion or a client library described in tracker-reference.md.
  • Email opens, RSS, partner embeds, or no-JavaScript contexts: use Umami Pixel.
  • Shareable off-site campaign URLs, social bios, paid ads, QR codes, podcast notes, SMS, or affiliate redirects: use Umami Link.

Event API quick reference

umami.track();                                  // pageview for current page
umami.track('event_name');                      // custom event
umami.track('event_name', { foo: 1 });          // custom event with data
umami.track(payload);                           // custom payload, replaces defaults
umami.track(props => ({ ...props, url: '/x' })); // merge into default payload

umami.identify('opaque_user_id');               // assign distinct ID
umami.identify('opaque_user_id', { plan: 'pro' });
umami.identify({ plan: 'pro' });                // session properties only

Event constraints to respect:

  • Event names: 50 characters or less.
  • Data attributes send event property values as strings.
  • JavaScript tracking preserves types and is preferred for revenue/numeric analysis.
  • Event data strings should stay 500 characters or less; numbers have max precision of 4; objects should stay at 50 properties or fewer; arrays are serialized to strings.

Coding-agent requirements

When adding Umami to code:

  1. Create analytics helpers such as track(), identify(), trackAffiliateClick(), trackPromoViewOnce(), and trackPurchase().
  2. Guard browser-only calls with typeof window !== 'undefined' and window.umami checks.
  3. Use no-op or queue behavior so app logic does not break if the tracker is blocked or delayed.
  4. Keep event payloads flat, compact, and privacy-safe.
  5. Use JavaScript tracking for revenue and other numeric data.
  6. Use data-before-send to redact query strings, drop admin/internal pages, remove accidental PII, or normalize URLs.
  7. For promotions, track both exposure and click (promo_view, promo_click) so CTR can be computed.
  8. For affiliate/outbound links, capture destination_domain, placement, merchant/partner, campaign, and cta_id where available before navigation.
  9. For funnels/goals/attribution, ensure each step has a stable URL or event name.
  10. Validate in Umami Events/Properties, then create Goals, Funnels, Journey, Revenue, Attribution, or UTM views from the collected events.

Recommended default events

Use these unless the project already has a taxonomy:

EventUse
cta_clickMajor CTA click.
affiliate_clickClick to partner/merchant/affiliate destination.
outbound_clickNon-affiliate external link.
promo_viewPromotion/banner/offer becomes visible.
promo_clickPromotion/banner/offer is clicked.
promo_applyCoupon/offer is applied.
lead_submitLead/demo/contact form submitted successfully.
signup_start / signup_completeSignup funnel.
checkout_start / checkout_complete / purchaseCheckout and revenue funnel.
searchSite search performed.
downloadFile/resource download.
video_playVideo engagement starts.

Common pitfalls to prevent

  • Do not duplicate SPA pageviews: Umami already listens to History API in normal SPAs.
  • Do not send raw email addresses or full user IDs; use opaque IDs or hashes and keep distinct IDs within Umami's limit.
  • Do not rely on data attributes when numeric aggregation matters; use JavaScript.
  • Do not include secrets or personal data in url, event names, or properties.
  • Do not mix Umami Links with in-site click events unless both the redirect and the on-site interaction are intentionally needed.
  • Do not assume email pixel opens are exact human opens; image proxying and prefetching can inflate pixel metrics.
  • Do not treat Umami as a one-for-one GA4 replacement for Google Ads optimization, BigQuery pipelines, app+web, predictive audiences, or detailed item-level ecommerce reporting.

QA checklist

Before finishing an implementation, verify:

  • Tracker script loads once in production and pageviews appear.
  • Staging/dev traffic is excluded with data-domains, separate websites, or environment gates.
  • Event names follow one convention and are 50 characters or less.
  • Properties are visible and filterable in Umami Events > Properties.
  • Revenue events use numeric revenue and ISO 4217 currency.
  • data-before-send redacts or rejects unsafe payloads.
  • Goals/funnels use stable events/pages and meaningful conversion steps.
  • UTM parameters are preserved unless deliberately excluded.
  • Links/Pixels are used only where redirect/pixel semantics fit the channel.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.