Loading tutorials…
Loading tutorials…
Plausible's goal system is brutally simple — and that simplicity is what makes it powerful. Three types: pageview goals, custom events, and revenue goals. Most owners set up the wrong type, fire too many events, and blow past their plan. This is the discipline that prevents both.
Who this is forOwners with Plausible installed who need to start tracking conversions — signups, purchases, demo bookings, downloads. If you came from GA4 and are used to marking everything as a Key Event, you need to unlearn that pattern. Every Plausible event costs money.
What you'll need
Step 1
Pageview goal, custom event goal, revenue goal. Each has a use case. Mixing them up is the most common rookie mistake.
Pageview goal — fires when a user visits a specific URL. Use this for: thank-you pages (signup confirmation), pricing-page-views, blog-post-reads. Example: /thank-you, /pricing, /docs/getting-started.
Custom event goal — fires when JavaScript explicitly calls plausible("EventName"). Use this for: button clicks, form submits that don't redirect, video plays, scroll depth (if you really need it).
Revenue goal — a custom event with a revenue amount attached. Use this for: completed purchases, paid subscription upgrades. Example: plausible("Purchase", {revenue: {amount: 49.99, currency: "USD"}}).
Pick the simplest type that works. If a signup ends on a /welcome page, a pageview goal is enough — no custom event needed. Custom events are only worth the cost when you do NOT have a unique URL to track.
Plausible bills every custom event AND every revenue event the same as a pageview. They pool against your plan limit. Discipline matters.
Step 2
Site Settings → Goals → Add Goal → Pageview. Enter the URL pattern. Wildcards supported via *.
In Plausible, navigate to Site Settings → Goals (or the gear icon → Goals).
Click Add goal. Pick Pageview.
Page URL: enter the URL pattern. /thank-you tracks exact matches. /thank-you* tracks /thank-you, /thank-you-purchase, /thank-you-signup. /thank-you/* tracks /thank-you/anything-after.
Display name: optional — defaults to the URL pattern. Set this to something human-readable like "Signup Completed" or "Demo Booked" so the dashboard reads clean.
Save. The goal will start counting on the next pageview matching the pattern. Historical data is NOT backfilled — only forward-counting.
Verify: go to your dashboard, scroll to the Goal Conversions section. Trigger the goal once (visit the URL yourself). Within 30 seconds it should appear in the goal list with count = 1.
Step 3
For events that do NOT have a unique URL (button clicks, modal opens, form submits without redirect), use a custom event. Two ways: JavaScript or HTML tagged-events.
Method A — JavaScript: in your site code, call window.plausible("EventName"). Example for a contact form submit: form.addEventListener("submit", () => window.plausible("Contact Form Submitted")).
Method B — HTML tagged-events: requires the plausible.tagged-events.js variant (see tutorial #2). Add class="plausible-event-name=ButtonClick" to any HTML element. Example: <button class="plausible-event-name=BookDemo">Book a demo</button>. The script auto-fires the event on click.
After firing the event once: Site Settings → Goals → Add Goal → Custom event. Event name: enter the EXACT name you used (case-sensitive). Save.
Until you fire the event once AND add it as a goal, it does not appear in the dashboard. Both steps are required.
Naming convention: use Title Case ("Signup", "Demo Booked", "Whitepaper Downloaded"). No spaces or use them consistently. Plausible is case-sensitive — "signup" and "Signup" are different events.
Step 4
A custom event with a revenue amount attached. Plausible aggregates revenue per goal in the dashboard. Requires Business plan or higher.
Revenue tracking is a Business plan feature ($19/mo+). Growth plan does not include it.
Fire a revenue event in JavaScript: window.plausible("Purchase", {revenue: {amount: 49.99, currency: "USD"}}). Amount is a number (not string). Currency is ISO 4217 (USD, EUR, GBP).
On Shopify: in your order confirmation Customer Event (see tutorial #2), call plausible("Purchase", {revenue: {amount: parseFloat(order.totalPrice), currency: order.currency}}).
After firing once: Site Settings → Goals → Add Goal → Custom event → enter "Purchase". Then in the Goal settings, enable Revenue tracking and pick the currency.
Plausible Business shows revenue per source/medium/campaign — so you can answer "which UTM brought in the most revenue last month?" directly in the dashboard. This is the killer feature for ad attribution.
Step 5
Every custom event is billable. After adding goals, watch the daily event count for 7 days. If you are bursting through your plan, ax the noisy events.
Site Settings → General → Monthly stats. Shows your current month's pageview + custom event count vs plan limit.
After adding events, monitor this daily for 7 days. Bad events show up fast.
Common offender: "scroll depth" events. A site with 10K pageviews/mo can fire 80K scroll events if you track every 25% threshold. That puts you on a $69/mo plan instead of $9.
Other common offenders: every-button-click events ("Header Link Clicked", "Footer Link Clicked", "CTA Hover"). These are noise. Track outcomes, not behaviors.
Rule of thumb: if a custom event fires more than 10x per pageview on average, kill it. You are paying to track noise.
Step 6
Once you have 3+ goals, you can build a funnel from them — see tutorial #4 for the full walkthrough.
Funnels are a Business plan feature. Once you have 3+ goals defined, navigate to Funnels in the left sidebar.
Click + New funnel. Add steps in order — each step is a goal you previously defined.
Example signup funnel: Step 1 = pageview goal /signup, Step 2 = custom event goal "Email Entered", Step 3 = custom event goal "Account Created".
Plausible shows conversion rate from step to step and drop-off counts.
Build at most 3-5 funnels per site. Too many funnels and you stop looking at any of them. See tutorial #4 for the funnel-design discipline.
Step 7
For each goal, trigger it once on the live site. Confirm it appears in the dashboard within 30 seconds with the correct count + properties.
For each goal you defined, open an incognito browser (no plausible_ignore flag set).
Trigger the action that fires the goal: visit the URL (pageview goal), click the button (custom event), complete a test purchase (revenue goal).
Open the Plausible dashboard. Scroll to Goal Conversions. The goal should show count = 1 within 30 seconds.
For revenue goals, click the goal name to drill in. Confirm the revenue amount + currency match what you fired.
Bonus: Open DevTools → Network → filter "plausible". For a custom event you should see TWO requests: one for the pageview (auto) and one for /api/event with the event name in the payload.
Common mistakes
Tracking too many custom events
What goes wrong: You add 'scroll-depth-25%', 'scroll-depth-50%', 'scroll-depth-75%', 'header-click', 'footer-click', 'CTA-hover' as custom events. Each fires every page. Your 10K pageview site is now firing 60K events/mo. Bill jumps from $9 to $39. The reports become noise nobody reads.
How to avoid: Track outcomes (signup, purchase, demo booked), not behaviors (scroll, hover, click). 3-5 custom events total is plenty for most sites. Audit weekly for 30 days and kill anything that does not drive a decision.
Using custom events when a pageview goal would work
What goes wrong: Your signup flow ends on /welcome. Instead of using a free pageview goal, you add a custom event 'SignupCompleted' that fires on the welcome page. You pay for an event that the pageview already captures.
How to avoid: If the conversion has a unique URL (thank-you, welcome, success page), use a pageview goal. Free. Custom events only for actions without a unique URL.
Inconsistent event naming (case sensitivity)
What goes wrong: You fire 'SignUp' in one place and 'signup' in another. Plausible treats them as different events. Your goal report shows 'SignUp = 47' and 'signup = 51' — fragmented, hard to read.
How to avoid: Pick a naming convention (Title Case is standard) and document it. Always copy/paste event names instead of retyping. Plausible is case-sensitive.
Firing revenue events with string amounts instead of numbers
What goes wrong: You fire plausible('Purchase', {revenue: {amount: '49.99', currency: 'USD'}}). Plausible accepts the event but the revenue total shows $0 because the amount must be a number, not a string. Your revenue-by-source report is empty.
How to avoid: Always pass amount as a JavaScript number, not a string. parseFloat(order.total) or Number(order.total) before passing.
Forgetting to add the goal in Plausible after firing the event
What goes wrong: You add plausible('Custom Event Name') calls in your code. You ship. Two weeks later you notice the event is not in the dashboard. You spend an hour debugging the JavaScript — it is firing correctly. The problem: you forgot to add it as a goal in Site Settings → Goals.
How to avoid: Two-step process: (1) fire the event in code, (2) add it as a goal in Site Settings → Goals. Both required. Until both steps are done, the event is silently collected but not displayed.
Not validating goals after deploy
What goes wrong: You add 5 new goals across the site. You ship to production. You assume they work. Two weeks later, an investor asks for the conversion rate. You discover that 3 of the 5 goals never fired because of a JavaScript error or missing script variant.
How to avoid: After every goal-adding deploy, manually trigger each goal in incognito within the first hour of deploy. Confirm it appears in the dashboard. Document the validation in a deploy checklist.
Recap
Done — what's next
How to install Plausible tracking on any site
Read the next tutorial
Hand it off
Picking the right goals is a 1-hour conversation that defines what your team optimizes for. Get it wrong and you spend 6 months looking at noisy reports. A vetted Plausible specialist can lock in your goal taxonomy + tagged-events + revenue tracking in one focused session — usually $80-200 total at $14-16/hr.
See specialist rates
Events are the raw signal (every pageview, every click). Goals are events you have flagged as business-meaningful. A pageview to /thank-you fires regardless — but it only shows in the Goal Conversions section if you have explicitly added /thank-you as a goal. Goals are the curated subset of events.
Plausible has no hard cap. Practically, 3-7 goals per site is the sweet spot. Beyond that, the dashboard becomes cluttered and nobody looks at any single goal anymore. Pick the 3-5 that drive real decisions and skip the rest.
Yes for pageview goals — when you add a new pageview goal, Plausible counts ALL historical matching pageviews from your site's start date. For custom event goals, no backfill — only forward counting from the moment the event first fires.
Easiest: redirect form submissions to a thank-you page and use a pageview goal on that page. If you cannot redirect (AJAX forms), fire a custom event on submit success: form.addEventListener("submit", e => { /* ...your submit logic... */ window.plausible("Form Submitted") }). Then add Form Submitted as a custom event goal.
Yes via the props parameter: plausible('Demo Booked', {props: {plan: 'enterprise', team_size: '50+'}}). Then in the dashboard you can filter the goal by property. Requires the Business plan + the plausible.pageview-props.js script variant (or the basic script for custom events with props). See tutorial #5 for the full walkthrough.
Yes if you have configured subdomain tracking (one Plausible site spanning multiple subdomains). The goal applies wherever the matching URL pattern or custom event fires, regardless of subdomain. For separate Plausible sites per subdomain, goals are per-site.
Plausible Analytics
Plausible has the simplest install of any analytics tool — one script tag. That's also why it's the easiest to install wrong: pick the wrong script variant, miss the data-domain attribute, or install through GTM without unblocking outbound clicks, and half your tracking silently breaks.
Plausible Analytics
Plausible funnels are deceptively simple — you pick 3-8 goals, click Save, and it draws the chart. The real work is upstream: do the goals exist, are they ordered correctly, and is the funnel actually answering a question the team will act on?
Plausible Analytics
Custom properties are how Plausible lets you slice the data without GA4-level complexity. Logged-in vs anonymous, free vs paid, mobile vs desktop — every dimension you want to filter by needs to be a prop. Most owners never set them up. This is the walkthrough.
Plausible Analytics
Plausible does not have a native Google Ads integration like GA4 does. It tracks UTMs on inbound links, full stop. Get the UTM templates right and Plausible delivers cleaner ad attribution than GA4. Get them wrong and your spend looks attributed to '(direct) / (none).'