Privacy Policy

This policy describes what data the ZendIQ browser extension collects, why, and how it is handled. We've written it to be readable, not just legally defensible.

1 Who we are

ZendIQ is a browser extension for Chrome and Brave that provides real-time risk analysis for Solana swaps on Jupiter, Raydium, and pump.fun. Both extensions are provided by the ZendIQ project and are fully open source:

For questions about this policy, contact us at privacy@zendiq.ai.

2 What data ZendIQ collects

Both ZendIQ Lite and ZendIQ Pro send anonymous usage events to our backend (zendiq-backend.onrender.com). Every event is identified by an install_id — a UUID-v4 generated on first install and stored locally in chrome.storage.local. No wallet address, no name, no email, and no IP address is ever stored.

install_id is a random UUID-v4 generated by ZendIQ on first install. It is not tied to any account, wallet, or identity. It is not exposed to any website. It resets on reinstall. Its sole purpose is to group events from the same installation for aggregate analytics.

There are seven event categories:

Install — fired once on fresh install or extension update

FieldWhy
OS (windows / mac / linux)Understand platform distribution
Browser (brave / chrome)Understand browser distribution
Locale (e.g. "en-US")Aggregate language distribution — no sub-region precision
Country (2-char ISO derived from browser locale)Understand global reach — not from geolocation
Reason (install / update) + previous versionTrack upgrade paths

Session — fired when a wallet is detected on page load and on page close

FieldWhy
Type (start / end)Measure session duration
Wallet adapter name (e.g. "phantom")Which wallets are most used — never the public key
DEX site (jup.ag / raydium.io / pump.fun)Which DEX the session was on

Trade — fired after the user makes a swap decision (optimise, proceed, or cancel)

FieldWhy
dexWhich DEX executed the trade
input_mintToken sold — needed to measure routing gain accuracy
output_mintToken bought — needed for risk signal accuracy
trade_usdTrade size in USD — capped at $50k (Lite) / $500k (Pro)
user_actionWhat the user chose: optimised / proceeded / cancelled
successWhether the transaction landed on-chain
tx_sigTransaction signature — deduplication + on-chain verification. Publicly visible on Solana block explorers.
risk_scoreOverall risk score (0–100) at time of decision
bot_risk_scoreMEV / sandwich risk score (0–100)
token_risk_scoreOutput-token risk score (0–100)
net_benefit_usdEstimated routing gain minus fees at time of sign
routing_gain_usdRaw routing gain vs Jupiter's concurrent quote
mev_value_usdStatistical MEV protection value from Jito tip
fees_usdPriority fee + Jito tip cost
jito_tip_lamportsJito tip used — verifiable on-chain
profileWhich protection profile was active
auto_signWhether auto-accept fired
exec_pathWhich route was used: zendiq / jupiter / raydium
route_chosenRoute type: AMM / RFQ / gasless / bundle
failure_reasonHuman-readable failure description (≤80 chars) when success=false
data_jsonExtra fields not in fixed columns — future-proofs schema (≤4KB)

Not collected: wallet public key, full transaction bytes, counterparty wallet.

MEV detection — fired when detectSandwich() identifies a sandwich attack around a user swap

FieldWhy
tx_sigTransaction signature of the user swap being attacked — deduplication; publicly visible on Solana
detectedWhether an attack was confirmed
loss_usdEstimated USD loss from the attack — measures real-world impact
loss_bpsAttack severity in basis points
attacker_hashSHA-256 of attacker wallet, truncated to 12 hex chars — not sufficient to reconstruct the full wallet address
methodDetection method: vault_neighbor / bonding_curve_pda / front_run_only
time_to_detect_sHow quickly ZendIQ identified the attack — measures detection latency
prevented_countAttacks in the same block that Jito tips blocked

Not collected: user wallet address, transaction bytes, victim identity beyond the public tx signature.

Error — fired when an internal error degrades protection (wallet hook failure, injection failure, RPC failure)

FieldWhy
categoryError class (e.g. wallet_hook, rpc, injection) — routes alerts
detailHuman-readable description (≤120 chars) — no stack traces, no user data
rpc_endpointWhich RPC endpoint failed — diagnoses provider reliability
latency_msRPC latency — diagnoses slow-provider issues
dexWhich DEX context the error occurred in

Funnel — key UX steps in the widget flow

FieldWhy
eventwidget_shown / quote_fetched / sign_clicked / cancel_clicked / auto_signed
dexWhich DEX
widget_render_msWidget render latency — UX performance metric

Measures where users drop off between "widget appears" and "trade optimised" without any user-identifying data.

Heartbeat — at most once per UTC calendar day on service-worker wake

FieldWhy
dayCalendar date (YYYY-MM-DD) — deduplication key: one install = one heartbeat/day
siteWhich DEX site triggered the wake

Powers DAU/WAU/MAU metrics without any persistent user identifier beyond install_id.

3 Why we collect this data

We do not use this data for advertising, profiling, or any purpose beyond the above.

4 Data we do NOT collect

Transaction signatures (tx_sig) are collected for trade and MEV events. A transaction signature is a public on-chain identifier — visible to anyone on Solana block explorers (Solscan, SolanaFM, etc.). It does not contain your wallet address, trade amounts, or personal data. We store it solely for deduplication (preventing double-counting) and on-chain quote accuracy verification.

5 Data storage and retention

Events are stored in a SQLite database on our backend server hosted at Render.com (US region). Render's infrastructure privacy policy is available at render.com/privacy.

We retain event data for 12 months, after which it is automatically purged. Aggregated counts (totals with no individual event rows) may be retained indefinitely.

6 Data sharing

We do not sell, rent, or share individual event data with any third party. The only external services that receive data as part of a normal extension session are:

These are read-only lookups. ZendIQ does not send wallet addresses or trade data to any of these services.

7 Local storage

ZendIQ stores the following data locally in your browser using chrome.storage.local:

This data stays on your device and is never transmitted to our backend. You can clear it at any time via Chrome's extension storage settings.

8 ZendIQ Pro

ZendIQ Pro is live on the Chrome Web Store as of April 2026 and uses the same seven event categories and the same privacy guarantees as Lite. No wallet address or public key is ever transmitted by Pro.

Pro's trade events include additional fields not present in Lite:

Pro's MEV detection events include the same attacker hash (12-char SHA-256 truncation, not reconstructable) and add the Jito bundle state and on-chain confirmation status.

Pro uses the same install_id as Lite — there is no separate Pro account or identity.

9 Your rights

ZendIQ events do not contain personal data as defined under GDPR or equivalent regulations. The install_id cannot be linked to any individual. Transaction signatures are public on-chain identifiers. There is therefore nothing to access, correct, or delete on an individual basis.

If you believe data was sent in error or have a privacy concern, contact us at privacy@zendiq.ai. We will investigate and respond within 30 days.

If you are in the EU/EEA and believe we have processed personal data about you, you have the right to lodge a complaint with your local data protection authority.

10 Changes to this policy

We will update this page when our data practices change. The "Last updated" date at the top of this page reflects the most recent revision. Significant changes will also be disclosed in the extension's release notes.

11 Open source

Both ZendIQ Lite and ZendIQ Pro are fully open source. You can inspect exactly what data is collected and when in each repository: