Troubleshooting delivery

Read delivery health, and find out why events aren't arriving.

Open a destination and go to its Health tab. Four numbers tell you almost everything, and the fifth thing you need — the status breakdown — tells you the rest.

Delivery health

  • Delivered — events accepted by the platform in the selected window.
  • Success rate — delivered as a share of attempted sends. Skipped and suppressed events are not attempts, so they don’t drag it down.
  • Failures — sends the platform rejected or that never completed.
  • p95 latency — the 95th percentile round-trip to the platform, in milliseconds. A rising p95 with a flat failure count usually means the platform is throttling you, not that anything is broken.

The five delivery statuses

Every event/destination pair lands on exactly one status:

StatusMeaning
sentThe platform accepted it.
skippedNot applicable — no enabled mapping, or gated by consent.
retryingA transient failure; it will be attempted again with backoff.
failedA permanent failure. No further attempts.
suppressedWithheld by traffic-quality rules — never offered to the platform.

The distinction that matters most: skipped and suppressed are decisions, not errors. Skipped means Pivolio had no instruction to send it. Suppressed means Pivolio deliberately decided not to. Neither will ever appear as a failure, which is why a destination can look healthy and deliver nothing.

Error codes

CodeCause
TRANSFORM_ERRORThe event can’t be shaped into the platform’s payload. Deterministic — never retried.
TIMEOUTThe platform didn’t answer in time.
NETWORK_ERRORThe request never completed.
API_ERRORThe platform returned an error response.
AUTH_ERRORCredentials rejected — a 401 or 403.

Retryable versus permanent

  • 2xx — sent.
  • 429 or any 5xx — retryable. Backed off and re-attempted.
  • 401 or 403AUTH_ERROR. An auth failure that survives a fresh token is a dead grant: the credentials must be re-authorized, and retrying only burns budget, so it stops.
  • Any other 4xx — permanent. The platform is telling you the payload is wrong; sending it again produces the same answer.
  • Transform failures — never retried, by design.

TikTok is special: it returns HTTP 200 with the real outcome in the body’s code field. Pivolio classifies on the body code, so TikTok can show failures against requests your own network logs call successful.

Symptom → cause

SymptomLikely causeCheck
Events visible in the Live Debugger, nothing delivered anywhereNo active plan or trial. Collection is on every plan; dispatch is the paid part.Billing
Nothing delivered to one destination, no failuresThe destination is disabled, or every event is skipped.The destination’s enable toggle, then its mappings
Google Ads connected and authorized, zero delivered, zero failedGoogle is mapping-only — it sends nothing until each event points at a conversion action.Google Ads mapping step
One event type never arrives, everything else doesThat mapping is missing or switched off.Event mappings
Delivered count collapsed after a consent-banner changeEvents are being gated — look for a spike in skipped.Consent rules
AUTH_ERROR on every sendToken revoked, expired, or never had access to the pixel. For Google, the OAuth grant was revoked.Re-paste the token, or reconnect OAuth
Everything suppressedTraffic-quality rules are classifying your traffic as risky — datacenter IPs, proxies, bot signatures. Common with load tests and internal QA traffic from a VPN.Traffic quality settings
Reddit rejecting events, other destinations fineReddit rejects events older than 7 days — the only platform with an age cap. Backlogs older than a week can’t be recovered.Reddit
Delivered fine, but match quality is poorConsent stripped identifiers, or you pre-hashed PII. Send raw email and phone; Pivolio normalizes and hashes them.The event’s identifier list in the Live Debugger
p95 latency climbing, failures flatPlatform-side throttling. Retries will absorb it.Nothing to fix

Verifying a fix

Fire a real event through the Live Debugger and watch the per-destination outcome on that single event. It shows the status and, on failure, the error code — which is faster than waiting for aggregate health to move, and it tells you whether the event was skipped, suppressed, or genuinely attempted.