Copy as markdown[View .md](https://docs.funnelfizz.com/troubleshooting "View the raw markdown for this page")[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ftroubleshooting.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Troubleshooting "Open this page in Claude with context")[Open in ChatGPT](https://chat.openai.com/?q=Read%20https%3A%2F%2Fdocs.funnelfizz.com%2Ftroubleshooting.md%20and%20help%20me%20with%20this%20FunnelFizz%20topic%3A%20Troubleshooting "Open this page in ChatGPT with context")

# Troubleshooting

The failures we see most often, and what to do about them. For setup-time issues, start at the relevant Getting Started page. This page is for things that worked once and stopped, or stuck states.

## Report generation[​](#report-generation "Direct link to Report generation")

### My report is stuck on "Generating…"[​](#my-report-is-stuck-on-generating "Direct link to My report is stuck on \"Generating…\"")

A report that's been generating for more than 90 seconds is almost always one of:

1. **Anthropic API hiccup.** The worker retries transient errors automatically. Wait two minutes, then refresh.
2. **Long-running quota check.** Reload the page — the row will show the current state. If it's flipped to FAILED, your quota auto-refunded.
3. **Process killed.** Rare on Railway, but a redeploy mid-generation can leave the row stuck. Click **Regenerate** to start a fresh pass; the old row stays as audit history.

If a report is stuck for >5 minutes, **Regenerate** is always safe.

### Why does my report show "Failed"?[​](#why-does-my-report-show-failed "Direct link to Why does my report show \"Failed\"?")

Common causes:

* **`AI reports are not configured on this server.`** — your `ANTHROPIC_API_KEY` is missing in the operator's environment. If you self-deploy, set it; if you're on the hosted product, email **<hello@funnelfizz.com>**.
* **`Failed to build funnel snapshot.`** — usually means the funnel doesn't have any stages or all stages are empty. Confirm the funnel canvas isn't blank, then regenerate.
* **`Monthly AI report quota reached.`** — you've used your monthly allotment. Quota resets the 1st of the month UTC.

### My score is 30 and the report is mostly setup advice[​](#my-score-is-30-and-the-report-is-mostly-setup-advice "Direct link to My score is 30 and the report is mostly setup advice")

That's the model telling you it can't see your funnel. The score caps at **30** when tracking isn't installed and at **50** when Stripe isn't connected. [Install tracking](https://docs.funnelfizz.com/getting-started/install-tracking.md) and [connect Stripe](https://docs.funnelfizz.com/getting-started/connect-stripe.md), then regenerate.

## Automations[​](#automations "Direct link to Automations")

### My automation is ACTIVE but no runs are showing[​](#my-automation-is-active-but-no-runs-are-showing "Direct link to My automation is ACTIVE but no runs are showing")

Things to check, in order:

1. **Trigger source.** A `subscription_trial` automation only fires when a Stripe subscription enters `status = "trialing"`. Form submits or stage-entry events with no Stripe link won't trigger it. See [Automations → Triggers](https://docs.funnelfizz.com/concepts/automations.md#triggers).
2. **Profile is unsubscribed or hard-bounced.** Workspace-wide suppression cancels automation runs. Check **Settings → Email → Suppressions** for the recipient.
3. **Stage's track filter.** On a split funnel, the automation is scoped to a specific track. Profiles assigned to a different track won't enroll.
4. **Existing RUNNING run.** If a profile already has an active run on the same automation, re-enrollment is blocked until that run completes or is cancelled.

### A run is parked on `WAITING_FOR_EVENT` forever[​](#a-run-is-parked-on-waiting_for_event-forever "Direct link to a-run-is-parked-on-waiting_for_event-forever")

`WAIT_UNTIL` steps park until the named event fires (or the timeout elapses). If the event never comes, the run waits indefinitely up to the timeout. Check the step's configured event and timeout in the editor.

### My drip is taking ages to send all steps[​](#my-drip-is-taking-ages-to-send-all-steps "Direct link to My drip is taking ages to send all steps")

The cron tick advances each run by **one step every 5 minutes** to keep the queue smooth. A 5-step automation with no `WAIT` blocks still takes \~25 minutes end-to-end. To compress, combine adjacent SENDs into a single SEND step or insert deliberate small `WAIT`s for honesty.

## Email & DNS[​](#email--dns "Direct link to Email & DNS")

### My email domain shows as "Pending" forever[​](#my-email-domain-shows-as-pending-forever "Direct link to My email domain shows as \"Pending\" forever")

Verification polls DNS for the four records we generate (MX, SPF, DKIM, optional DMARC). If it's been more than 30 minutes:

1. **Check your DNS records exactly.** Use [dig](https://toolbox.googleapps.com/apps/dig/) on each record. Common pitfalls: trailing dots, double-quoted TXT records, missing the leading `_` on `_dmarc`.
2. **Verify the host.** A record meant for `mail.example.com` must be created at the registrar's `mail` host, not at the apex.
3. **Wait for propagation.** Some registrars (Squarespace, GoDaddy) propagate DNS slowly — up to a few hours.
4. **Sender domain ≠ apex.** If you're sending from `mail.example.com`, your apex domain's DMARC policy still affects deliverability. A `p=reject` DMARC at the apex will silently fail your sends until you add a permissive `_dmarc.mail.example.com` record.

### Open rates look high but clicks are zero[​](#open-rates-look-high-but-clicks-are-zero "Direct link to Open rates look high but clicks are zero")

Apple Mail Privacy Protection (and similar) auto-fetch tracking pixels. That inflates open rates without a corresponding click. Trust click rate over open rate.

### Email is going to spam[​](#email-is-going-to-spam "Direct link to Email is going to spam")

The most common cause on **HOBBY** is that you're sending from the shared `funnelfizz.com` domain and the recipient's corporate filter throttles it. Upgrade to **PRO** to verify your own domain with DKIM + SPF + DMARC.

For PRO: confirm DMARC alignment, warm the domain gradually (a few hundred sends a day for the first week), and avoid spam-trigger phrases in the subject line.

## Tracking[​](#tracking "Direct link to Tracking")

### My tracking site won't verify[​](#my-tracking-site-wont-verify "Direct link to My tracking site won't verify")

Three most common causes (also covered in [Install tracking → Verify](https://docs.funnelfizz.com/getting-started/install-tracking.md#4-verify)):

1. **Meta verify tag is outside `<head>`.** Some CMS templates inject scripts into `<body>`; the meta tag must be in `<head>` to count.
2. **Token mismatch.** Confirm `YOUR_TOKEN` was replaced in both the `<meta>` tag and the `<script>` `t=` query.
3. **Ad-blocker.** Disable in your test browser; the snippet honors DNT, so privacy extensions can suppress events.

### My CONSIDERATION count looks low[​](#my-consideration-count-looks-low "Direct link to My CONSIDERATION count looks low")

* Are you on FREE? Tracking events are retained 90 days only.
* Did you register at the apex (`example.com`) or a subdomain? Subdomain registrations track each subdomain separately. Re-register at the apex if you want to track all subdomains as one site.
* Is `data-cookie-domain` set on the snippet? Without it, `_fn_vid` is host-only and a visitor moving from `example.com` to `app.example.com` looks like two profiles.

### `identify` isn't linking visitors to users[​](#identify-isnt-linking-visitors-to-users "Direct link to identify-isnt-linking-visitors-to-users")

1. **Check the call ordering.** `identify` is queued if the script hasn't loaded yet, but if it's never reaching the queue, the link won't form.
2. **`userId` is consistent.** Don't pass session IDs or per-request UUIDs — pass your durable user identifier.
3. **Network tab.** Filter for `tracking` and confirm a POST with `type: "identify"` actually goes out.

## Stripe[​](#stripe "Direct link to Stripe")

### CUSTOMER stage shows zero after connecting Stripe[​](#customer-stage-shows-zero-after-connecting-stripe "Direct link to CUSTOMER stage shows zero after connecting Stripe")

Walk this checklist:

1. Did you wait at least 15 minutes? The first sync happens on the next cron tick.
2. Are your subscriptions in the right mode (live vs test)? `rk_live_…` keys see live data only.
3. Is the product mapped to the TRIAL/CUSTOMER conversion under **Conversion → Stripe Paid → Target products**?
4. Does the connected key have all seven scopes? Re-paste the key with all seven if not.

### Stripe events look duplicated across funnels[​](#stripe-events-look-duplicated-across-funnels "Direct link to Stripe events look duplicated across funnels")

If you have multiple funnels in the same workspace and Stripe customers appear under all of them, that's a known accounting issue — each funnel needs its own product mapping under **Target products**, not just a workspace-level Stripe connection. We're tightening the per-funnel scoping; until then, mapping each funnel to a non-overlapping product list is the workaround.

***

Still stuck? Email **<hello@funnelfizz.com>** with your account email, the funnel URL, what you expected, what you saw, and a screenshot. We usually reply the same day.
