Product manual
Use every part of PixoStats
Task-by-task instructions for collection, analysis, conversions, reliability, automation, API access, billing, and account operations.
01 / Start tracking
Collect trustworthy data
Create a property, install its unique tracker, verify the first pageview, then add stable product events where they create useful analysis.
Create a website
- Open Sites and choose Add Site.
- Enter a recognizable name and the public domain. Do not include an individual page path.
- Create the site. PixoStats generates a unique tracking ID and an installation snippet.
A website is the isolation boundary for analytics, API keys, goals, funnels, reports, and webhooks. Use a separate property when data must be reported or accessed separately.
Install on any HTML website
- Open the website in Sites and select HTML under Tracking Code.
- Copy the generated script tag without changing its
data-sitevalue. - Place it before
</head>on every page, then publish the site.
<script defer src="https://pixostats.com/t.js"
data-site="YOUR_TRACKING_ID"></script>The script derives the collector URL from its own origin. A custom data-api value is supported for self-hosted proxy arrangements.
Install the WordPress plugin
- Download the plugin from the website setup screen.
- In WordPress, open Plugins → Add New → Upload Plugin, upload the ZIP, install it, and activate it.
- Open Settings → PixoStats, paste the website's tracking ID, and save.
- Visit a public page while logged out or in a private browser window.
Verify the installation
- Visit a public page on the measured website.
- Return to its settings and choose Check Now. The dashboard also checks automatically while waiting.
- Confirm the status changes to Tracking active and shows a recent event.
The first accepted pageview unlocks the populated overview. Verification checks received data; it does not merely check whether a script tag exists.
Track a single-page application
PixoStats sends the initial pageview after load and observes history.pushState, history.replaceState, and browser back/forward navigation. Route changes that update the URL are collected automatically.
For a router that does not use the History API, call the exposed pageview method after the visible route and URL are updated:
window.pixostats?.pageview()Duplicate sends for the same current URL are suppressed.
Track custom events
Call the browser API with a non-empty, stable event name. The optional properties object is stored as JSON context.
window.pixostats.track('checkout_started', {
plan: 'small',
source: 'pricing_page'
})Prefer action names such as signup_completed, newsletter_subscribed, and report_exported. Renaming an event creates a new reporting identity; keep names stable after launch.
02 / Analyze traffic
Move from volume to explanation
Start broad, narrow by time and dimension, then inspect the events that explain a change.
Read the overview dashboard
The overview is a seven-day pulse for the selected website. It combines unique visitors, pageviews, sessions, bounce rate, average session duration, pages per session, active visitors, traffic shape, audience summaries, top pages, and recent events.
The monthly allowance panel is account-wide, so switching websites does not change its total. It refreshes with the dashboard every 15 seconds and links to Billing for plan management.
Compare traffic over time
- Open Analytics.
- Select 24 hours, 7, 30, 60, or 90 days.
- Read each headline change against the immediately preceding period of equal length.
- Use the chart to identify when the movement started, then inspect pages, campaigns, or events over the same range.
Bounce rate, duration, and pages per session are session metrics. Visitor and pageview movements need not move together: one visitor can create multiple sessions and pageviews.
Inspect pages, events, and referrals
Pages ranks paths by traffic and engagement. Use it to find entry points and high-volume content. Events is the recent activity log for pageviews and named product actions; use it to validate event names, paths, location, browser, and arrival time. Referrals separates direct or unknown visits from external referring domains and shows visitors, visits, pageviews, share, bounce rate, and each source's latest visit.
Use the selected website consistently. Each property's data is isolated even when several properties belong to the same account.
Follow active visitor journeys
- Open Realtime or choose View live visitors from the Overview activity panel.
- Select an anonymous active visitor to inspect their current page, session duration, browser/device context, and chronological page or custom-event timeline.
- Keep the measured website visible while testing. The list refreshes every 10 seconds and presence expires after two minutes without a heartbeat.
Visitor labels are short display aliases for daily, site-specific identifiers. They do not identify a person and cannot be used to follow someone across unrelated websites.
Analyze locations and devices
Measure UTM campaigns
Add standard UTM parameters to inbound links. PixoStats stores source, medium, campaign, term, and content from the landing URL.
https://example.com/pricing
?utm_source=newsletter
&utm_medium=email
&utm_campaign=autumn_launch- Open Campaigns and choose the website and time range.
- Compare visitors, pageviews, sessions, bounce rate, and engagement by campaign.
- Use consistent casing and spelling;
Emailandemailare distinct values.
Read aggregate history
Aggregate History preserves daily pageviews, custom events, visitors, sessions, bounce sessions, and duration after detailed rows reach their retention boundary. Use it for long-range direction; use detailed dashboards for individual paths, events, browsers, and locations.
03 / Goals & funnels
Measure outcomes and journeys
Goals count one desired condition. Funnels require an ordered sequence of exact steps within the same visitor session.
Create a conversion goal
- Open Goals, select the website, and choose Create Goal.
- Name the business outcome, not the technical trigger.
- Choose Pageview for a path or Custom Event for an event emitted by
pixostats.track. - Choose exact, contains, or regex matching and enter the path or event name.
- Optionally set a completion target, then create the goal.
Interpret goal results
Completions count every matching event. Unique completions count distinct visitors with a match. Conversion rate divides unique completions by all unique visitors in the selected range. Trend compares completion count with the preceding equal-length range. Target progress compares completion count with the optional target.
If a goal is empty, first confirm the stored event name in Events or the exact path in Pages, then confirm the goal's match mode and reporting range.
Build a funnel
A funnel requires at least two steps. Each step has a readable label plus either an exact page path or an exact custom-event name.
- Open Funnels for the selected website and choose Create Funnel.
- Name the journey, such as “Self-serve checkout”.
- Add the entry step, for example Page View
/pricing. - Add later actions in required order, for example Custom Event
checkout_startedand Page View/thank-you. - Reorder steps with the arrow controls, then create the funnel.
1. Pricing viewed Page View /pricing
2. Checkout started Custom Event checkout_started
3. Purchase complete Custom Event purchase_completedInterpret funnel drop-off
The first step shows all distinct visitors who entered. Each later step counts visitors who produced every preceding step in chronological order within the same session. Percentage is relative to step one; drop-off is relative to the immediately preceding step; overall conversion is final-step visitors divided by first-step visitors.
A later step performed in another session does not complete the funnel. Repeated matching events are allowed, but each visitor contributes once to a step count.
04 / Quality & retention
Find experience and loyalty problems
Use cohorts for return behavior, Web Vitals for performance, and grouped errors for client-side reliability.
Analyze visitor retention
- Open Retention and select a weekly or monthly cohort interval.
- Read the first column as the visitors first seen in that cohort.
- Read later columns as the share returning in subsequent intervals.
- Compare cohorts after launches, acquisition changes, or onboarding improvements.
Small recent cohorts can move sharply. Compare both the percentage and the cohort size before drawing a conclusion.
Monitor Web Vitals
Web Vitals summarizes LCP, CLS, INP, FCP, and TTFB samples from real browser visits. Measurements are page-lifecycle based, not a scheduled synthetic scan: TTFB is read once from navigation timing, FCP normally reports once when first content paints, and LCP can submit multiple candidates as a larger element becomes the current candidate. CLS accumulates layout shifts that were not caused by recent user input, while INP retains the largest observed interaction duration; both are submitted whenever the page becomes hidden, so hiding the same page more than once can produce another accumulated sample. Values arrive only when the visitor's browser supports the relevant Performance Observer entries.
The report calculates P50, P75, and P95 across stored samples in the selected 24-hour, 7-day, or 30-day range. It fetches when opened and whenever that range changes; it does not poll automatically. LCP, INP, FCP, and TTFB are measured in milliseconds, while CLS is unitless.
Investigate JavaScript errors
- Open Errors and choose a time range.
- Rank groups by occurrence and affected visitor count.
- Open a group to inspect message, path or URL, browser, operating system, and stack details.
- Reproduce on the affected route and browser family, deploy the fix, then watch whether new occurrences stop.
The tracker captures uncaught errors and unhandled promise rejections. Error payloads are not charged against monthly event usage.
05 / Reports & webhooks
Send analytics where work happens
Schedule recurring email summaries and deliver signed operational events to HTTPS, Slack, or Discord endpoints.
Schedule email reports
- Open Reports and select a website.
- Add a report, choose weekly or monthly frequency, and add one or more recipients.
- Save, then use the send-test action to confirm delivery.
- Use the toggle to pause delivery without deleting the schedule.
Weekly reports run on Mondays; monthly reports run on the first day of the month. The effective plan limits the total number of scheduled reports across the account.
Configure a webhook
- Open Webhooks for the selected website and choose Add Webhook.
- Enter an HTTPS receiver, Slack webhook, or Discord webhook URL.
- Select traffic spike, traffic drop, error spike, or goal completed events.
- Optionally set a signing secret, save, and send a test.
- Inspect Recent Delivery Logs for status code, result, and time.
Requests time out after 10 seconds and retry once after a failed attempt. Slack and Discord receive provider-specific bodies; other receivers get the native JSON envelope.
{
"event": "traffic_spike",
"site_id": "SITE_ID",
"timestamp": "2026-09-05T14:32:18.000Z",
"data": {
"current_value": 184,
"average_value": 76,
"deviation_percent": 142.1
}
}Verify webhook signatures
When a secret is configured, PixoStats sends X-PixoStats-Signature as the lowercase hexadecimal HMAC-SHA256 digest of the exact raw request body.
const expected = crypto
.createHmac('sha256', secret)
.update(rawRequestBody)
.digest('hex')
const valid = crypto.timingSafeEqual(
Buffer.from(receivedSignature, 'hex'),
Buffer.from(expected, 'hex')
)Verify before parsing or mutating the body. Reject missing or mismatched signatures, and compare fixed-length buffers with a timing-safe operation.
06 / Analytics API
Read analytics programmatically
Create a site-scoped credential, send it only from trusted code, and use response headers to pace requests.
Create and protect an API key
- Open Sites → your website → API Keys.
- Name and generate a key.
- Copy the complete
ps_…value immediately; it is shown once. - Store it in a server-side secret manager and send it as a Bearer token.
- Delete unused or exposed keys. Keys cannot be recovered after creation.
Call analytics endpoints
curl "https://pixostats.com/api/stats/summary?range=30d" -H "Authorization: Bearer ps_YOUR_API_KEY"/api/stats/summaryUnique visitors, pageviews, sessions, bounce rate, average duration, pages per session, and changes from the preceding period.
GET /api/stats/summary?range=30d/api/stats/timeseriesHourly points for short ranges and daily points for longer ranges. Each point contains visitors, pageviews, and sessions.
GET /api/stats/timeseries?range=7d/api/stats/realtimeActive visitors, events per minute, active pages, and the latest events for the key's website.
GET /api/stats/realtime/api/stats/breakdownRank a dimension. Supported dimensions: path, referrer_domain, browser, os, device_type, country, and city. Limit must be 1–100.
GET /api/stats/breakdown?dimension=country&range=30d&limit=20Supported ranges are 24h, 7d, 30d, 60d, 90d, and custom. Custom ranges require both ISO date values:
GET /api/stats/summary
?range=custom
&from=2026-08-01
&to=2026-08-31Custom ranges use YYYY-MM-DD dates and may span at most 90 days.
Handle API rate limits
Every analytics API response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Reset is a Unix timestamp in seconds.
An exhausted key receives HTTP 429. Stop requests until reset rather than retrying in a tight loop. The API request limit is independent of the monthly collected-event allowance.
07 / Plans & account
Operate usage, billing, and data
Know what counts, where the hard stop applies, and how to take your data with you.
Understand monthly usage
Pageviews and custom events share one calendar-month account allowance across every website. The dashboard and Billing page show accepted usage, base limit, 10% grace hard stop, rejected count, and reset date.
At 80% and 100%, PixoStats can send account notices. Events continue through the grace window. At the hard stop, new billable events are rejected and counted; no surprise overage charge is added.
| Plan | Events / month | Websites | Reports | Webhooks | API / hour | Detailed |
|---|---|---|---|---|---|---|
| Free | 100,000 | 10 | 1 | 1 | 600 | 90 days |
| Small | 500,000 | 25 | 5 | 5 | 2,500 | 90 days |
| Medium | 2,000,000 | 100 | Unlimited | Unlimited | 10,000 | 90 days |
| High | 5,000,000 | Unlimited | Unlimited | Unlimited | 50,000 | 90 days |
| Founder Lifetime | 500,000 | 25 | 5 | 5 | 2,500 | 90 days |
Change or manage a plan
- Open Billing & Usage.
- Compare allowance and included resources against current account usage.
- Choose an available monthly, annual, or Founder Lifetime option. Checkout is hosted by Stripe.
- For an existing Stripe subscription, use the customer portal action to manage payment details or cancellation.
Past-due plans can retain paid entitlements through a payment grace period. A canceled subscription retains access through its paid current-period end, then resolves to Free.
Export or delete account data
Billing → Account Data provides both operations. Export downloads account, subscription, usage, sites, events, sessions, integrations, goals, funnels, and related records as a streamed data file.
08 / Reference
Privacy and troubleshooting
Use these checks when collection or an integration does not behave as expected.
Understand collection and privacy
The tracker exits without collecting when the browser exposes Do Not Track as 1. PixoStats derives a daily, site-specific visitor identifier on the server from request context. The tracker does not store a visitor token in the measured browser, and identifiers cannot follow a person across unrelated websites.
Collected context can include URL, path, title, referrer, UTM values, viewport, language, parsed browser/device data, approximate location, custom properties, performance samples, and JavaScript error details. Site operators remain responsible for applicable notices, consent, and data-handling obligations.
Troubleshoot collection and integrations
No pageviews appear
Confirm the published page contains the exact tracking ID, https://pixostats.com/t.js loads successfully, only one installation method is active, and the browser is not sending Do Not Track. Ad blockers can block analytics requests.
Realtime is empty
Keep the measured tab visible. Presence starts with an immediate heartbeat, refreshes every 30 seconds, and expires after two minutes without activity. Confirm a pageview was accepted first.
Custom events are missing
Call window.pixostats.track after the tracker loads. Confirm the event name is a non-empty string and the complete request stays below 10 KB. Inspect Events for the exact stored name.
A goal has no completions
Match the exact stored path or event name, confirm the match mode, website, and range, and remember that capitalization matters.
A funnel drops to zero
Confirm every step value is exact, events occurred in the configured order, and all steps occurred within the same session. Cross-session journeys do not complete a funnel.
The API returns 401
Send the complete site API key with Authorization: Bearer ps_…. Dashboard session cookies do not authenticate the public analytics API.
The API returns 429
Read X-RateLimit-Reset and pause until that Unix timestamp. API request rate and monthly event allowance are separate boundaries.
A webhook is marked failed
Confirm the receiver accepts POST JSON within 10 seconds, returns a 2xx response, and verifies the signature against the unmodified raw body. Use Send Test and inspect the status code.
An email report does not arrive
Confirm the schedule is enabled, every recipient is valid, and a test message succeeds. Check spam handling before changing the schedule.
Usage is higher than one site
Monthly usage is account-wide across all websites. The selected dashboard site changes analytics panels, not the allowance total.
Still blocked? Contact support with the website domain, approximate request time, route or integration, and returned status code. Never send a password, API key, webhook secret, or payment detail.