# Troubleshooting and FAQ

> Answers to the most common Revfaro questions and fixes for missing visits, unattributed payments, duplicate or missing revenue, locked dashboards and bot setup.

**In short:** Most problems have a quick fix. No visits usually means the script is missing, blocked, on another domain or switched off with `?rf_ignore=true`. Payments without a source usually mean the checkout didn't carry the visitor and no return page is set up. A locked dashboard means the monthly events are used up or the plan has ended.

## Visits

### No visits show up at all

Go through [Verify your installation](https://revfaro.com/docs/verify-installation/). The usual causes:

- The script isn't in the `<head>` of the page you opened, or the website ID is wrong (the request answers `404`).
- The page isn't on the website's domain or a subdomain of it (the request answers `403`). `localhost` and preview domains are never recorded.
- You opened `?rf_ignore=true` in this browser earlier. Open `?rf_ignore=false` or use a private window.
- An ad blocker or a Content Security Policy blocks the script. Allow your Revfaro address in `script-src` and `connect-src`, or [proxy the script](https://revfaro.com/docs/proxy/).
- The workspace's trial or subscription has ended, so new events aren't recorded.

### Some pages or visitors are missing

- An [exclusion rule](https://revfaro.com/docs/exclude-traffic/) matches them. The **Exclusions** card shows how many events were excluded in the last 7 days.
- The page loads the script more than once, or not at all. Each page needs it exactly once.
- Ad blockers hide a share of visitors on every analytics tool. Payments are never lost, because they arrive by webhook.

### Visits from my staging site show up

Add its hostname, such as `staging.example.com` or `*.preview.example.com`, under **Website settings › Tracking › Exclusions › Hostnames**.

### Locations look wrong

Locations are approximate and come only from verified Cloudflare headers. VPNs and mobile networks can place people far away. Missing location information stays unknown. If you [proxy the script](https://revfaro.com/docs/proxy/) and forward the visitor's address, the visit remains unlocated because Cloudflare sees your proxy's location. Use the direct Revfaro endpoint when you need location reporting.

## Revenue

### Payments don't appear at all

- Check the webhook in your provider: the address must end with your website ID, the right events must be selected, and recent deliveries should succeed (a `2xx` answer).
- Check the signing secret: paste it again in **Connect payments** and click **Save**. A wrong secret rejects every delivery.
- Make sure the webhook is in the right mode or organization: Lemon Squeezy test-mode orders are never counted, and a Stripe endpoint only receives events from its own mode.
- Your plan must include revenue attribution. Without it, deliveries succeed but your provider's log shows the answer `"ignored": "plan without revenue attribution"`.

### Payments appear without a source

The payment couldn't be linked to a visitor. In order of impact:

1. **Pass the visitor to the checkout** (step 3 of your provider's guide), or use checkout links on your pages, which the script tags.
2. **Set up the return page** with the payment's ID (`?session_id=`, `?payment_id=`, `?checkout_id=` or `?order_identifier=`), and make sure that page loads the script and isn't excluded.
3. **Identify signed-in users**, so payments can be matched by email.
4. Click **Try matching again** in the **Journey** tab; it explains why each payment did or didn't match.

See [how payments are matched](https://revfaro.com/docs/revenue-attribution/#how-are-payments-matched-to-visitors).

### Revenue looks too high

- **The same store sends to several websites.** Lemon Squeezy and Polar send every order to every webhook, and one Dodo Payments account can sell products for several websites. See the notes on several websites in the [Dodo Payments](https://revfaro.com/docs/dodo-payments/#one-dodo-account-several-websites), [Lemon Squeezy](https://revfaro.com/docs/lemon-squeezy/) and [Polar](https://revfaro.com/docs/polar/#one-organization-several-websites) guides.
- **Several currencies.** Revenue isn't converted between currencies, so a payment of 100 in another currency adds 100 to your total. Charge in the [website's revenue currency](https://revfaro.com/docs/add-a-website/#revenue-currency) where you can.
- **Test payments.** A webhook in a sandbox organization or test mode sends test payments as real ones.

The same payment is never counted twice: payments are identified by your provider's payment ID.

### Revenue looks too low

- Refunds are subtracted, including partial ones.
- Renewals are credited to the month they're paid in, not to the first purchase.
- Check that `invoice.paid` (Stripe) or `subscription_payment_success` (Lemon Squeezy) is selected, so renewals arrive.

## Dashboards

### The dashboard says it's locked

- **Monthly event limit reached**: the workspace used its events for this month. Tracking keeps running; upgrade to see your data now, or wait for the 1st (UTC).
- **Your plan is inactive**: the trial or subscription has ended. New events aren't recorded until the owner picks a plan.

See [Plans, billing and usage limits](https://revfaro.com/docs/billing/).

### I can't see Website settings

Workspace owners, admins and members with **Manager** access to that website can open its settings. Ask an owner or admin to edit your website access under **Workspace settings › Members**. Read-only members can still use the dashboards they are allowed to see.

### Times or days look shifted

The dashboard uses the website's timezone, shown at the bottom of the dashboard. Change it under **Website settings › General**.

### Payments arrived while our plan was inactive

Webhooks keep recording payments while a trial or subscription has ended. They show up in your dashboard, with their sources, as soon as a plan is active again.

## Signing in

### Logging in says "Confirm your email"

Open the confirmation link Revfaro emailed you when you signed up. Can't find it? Check your spam folder, or click **Resend email** on that screen.

### Continue with Google didn't work

You're taken back to the login page with the reason:

- **Timed out or started in another tab**: start **Continue with Google** again from the same tab.
- **Cancelled**: you closed Google's window; try again, or log in with your email and password.
- **Already linked to a different Google account**: your email is connected to another Google account. Continue with that account, or log in with your password.
- **Account disabled**: contact support.

## Bots

### The bot check never arrives

- The middleware must run for the page you request. On Next.js, check the `matcher` and that the file is called `middleware.ts` (`proxy.ts` on Next.js 16) in the right folder.
- `REVFARO_API_KEY` must be set in the server's environment, with the current key.
- Use the exact check command from **Website settings › Bots**, then click **Check again**.

See [Bot traffic](https://revfaro.com/docs/bot-traffic/).

## Still need help?

Write to us from the [contact page](https://revfaro.com/contact) with your website's domain and what you tried. Please never send your API key or webhook secrets.

## Frequently asked questions

### Why is Revfaro not showing any visitors?

Check that the script is in the `<head>` of the page, that the page is on your website's domain (not `localhost`), that your browser isn't excluded with `?rf_ignore=true` and that no ad blocker or Content Security Policy blocks it. [Verify your installation](https://revfaro.com/docs/verify-installation/) walks through every check.

### Why do my payments show Not attributed?

The payment arrived without a visitor ID, and the return page, an earlier payment, an identified email and checkout timing couldn't find the buyer. Pass the visitor to your checkout, set up your provider's return page, identify signed-in users, then click **Try matching again** in the Journey tab.

### Why don't my Revfaro numbers match Google Analytics?

Tools count differently. Revfaro never counts bots or automated browsers, ignores pages outside your website's domain, and starts a new visit after 30 minutes without activity. Ad blockers also affect each tool differently.

### Why do visitors from Safari come back as new visitors?

Safari keeps cookies set by JavaScript for at most 7 days, so a Safari visitor returning after a week counts as new. Identifying signed-in users recovers most of their payments by email.

### Can I import data from another analytics tool?

Not at the moment. Revfaro starts recording when the script is installed.

---

Source: https://revfaro.com/docs/troubleshooting/ · Last updated 2026-11-02
