How PoolSide Works

Architecture

PoolSide continuously pulls your live position data from the Ethereum blockchain using Web3 RPC calls, calculating USD values via CoinGecko prices and converting them to your chosen currency using live FX rates — all presented seamlessly in your browser

🔗
Poolside history comes in two variants: History v1 takes snapshots and is pretty accurate for historic logging, but only starts logging once a wallet is registered. History v2 is based on simulator backtrace using historical on-chain data and reconstructed blockchain state. This is not as accurate but can give an idea of historical values.
Data Source
Ethereum Blockchain via Web3 RPC
Position details, tick ranges, and liquidity amounts are fetched directly from the Ethereum blockchain using Web3 RPC calls to Uniswap V3 smart contracts.
Pricing
CoinGecko + On-Chain
Token prices come from the CoinGecko public API. Unclaimed fees are calculated by simulating the Uniswap V3 fee math directly from on-chain contract data.
On-Chain History
Etherscan
The History V2 and V3 views pull your full transaction history directly from Etherscan, so you can see every collect, add, and remove event on-chain.
FX Rate
Live Exchange Rates
USD↔local currency conversion uses live rates from multiple providers. If one fails, the next is tried automatically.
🎮
No wallet? Try the demo. The splash screen has a Try Demo button that loads a sample wallet so you can explore the full interface without connecting anything.

Dashboard

Overview

The Dashboard is your at-a-glance command centre. It shows a snapshot of your portfolio right now, aggregated across all open positions.

CardWhat it shows
Today's Fees Earned Fees accrued since midnight (local time). Calculated by comparing the latest unclaimed fee snapshot against the first snapshot of the day, accounting for any collect transactions in between. The 🔄 button forces a fresh on-chain recalculation for just this value.
Total Unclaimed The total unclaimed fees sitting in all your open LP positions right now — not yet collected to your wallet. This is the live value from the Uniswap contracts.
Total Position Value The combined market value of the tokens locked in all your active LP positions at current prices. Click the 👁 button to blur/hide this number for privacy. The delta badge shows how much this has changed since the last Refresh.
Open Positions Count of active LP NFTs with non-zero liquidity. Closed or burned positions are not counted.

Pool Ranking Row — Below the top cards, each of your pools gets a ranked card showing today's fees earned in that pool and the average APR since you opened it. The 🏆 card is your best-performing pool for the day.

Stat CardWhat it shows
24hr Projection An extrapolation of today's current fee rate to a full 24 hours. Based on hours elapsed today ÷ fees earned so far × 24. Less than 30 minutes of data shows "—" since early projections are unreliable.
Collected Today (on-chain) The total value of fee-collect transactions that hit the blockchain today, fetched live from Etherscan. This does NOT include unclaimed fees — only fees you have explicitly collected to your wallet.
Yesterday's Fees Earned The total fees earned yesterday, calculated from the History snapshots using the same delta formula as Today's Fees. Useful as a benchmark for today's performance.
Total Earnings This Month Sum of all daily fee earnings in the current calendar month, read from the History snapshot data. The 👁 button hides this for privacy.
💡
The delta badges (e.g., +42 kr) next to values like Total Unclaimed show the change between the current Refresh and the previous one. They help you see at a glance whether things are moving up or down in real time.

Open Positions

LP Management

Every active Uniswap V3 LP position you hold is shown here as an individual card. You can search by pair name, token ID, or pool address, and filter by range status.

Each position card shows:

FieldDescription
Pair+VersionThe trading pair (e.g. WETH/SOL) and the fee tier (e.g. 0.30%).
In Range / Out of RangeGreen = the current price is within your tick range — you're earning fees right now. Red = price is outside your range — you're not earning, and you may want to rebalance.
Range BarA visual slider showing where the current price tick sits relative to your Min and Max ticks. The percentages show the current token ratio in the position.
Position ValueTotal USD market value of the two tokens currently locked in this LP position at spot prices.
Unclaimed FeesFees earned but not yet collected — still inside the position. Shown in both USD and local currency.
Token Breakdown (Unclaimed)How many of each token make up the unclaimed fees, with individual USD values.
Token Breakdown (Position)How many of each token are currently in the LP position, with individual USD values.
Pool AddressA link to the pool contract on Etherscan.
My APYYour personal APY for this pool, calculated from the historical snapshot data. This is your actual earned-fees-to-position-value ratio annualised.
Pool APYThe pool's overall APY based on the last 7 days of on-chain fee and TVL data read from the Ethereum blockchain.
🖱️
Clicking anywhere on a position card opens the Pool Info detail page for that specific position, where you can see the full historical chart, daily APR, and manually override values.

The ⋯ menu (three dots) on each position card gives you quick actions:

Action
Collect Fees
Initiates a fee collect transaction via your connected wallet (MetaMask / Rabby). This moves unclaimed fees from the LP position to your wallet. Always be very careful when signing transactions! Simulation display such as the one Rabby provides (see image below) is recommended!
Action
View on Uniswap
Opens the official Uniswap app directly on this position's detail page, where you can also add/remove liquidity.
Action
Remove Liquidity
Opens the Uniswap app at the withdraw page for this position. Full or partial liquidity removal is handled by Uniswap's UI.

Collect All

When your wallet is connected, a ⬇ Collect all (N) button appears at the top of the Open Positions view. Clicking it collects fees from every currently visible position in a single transaction — you sign once and all positions are swept in one go.

Under the hood, PoolSide bundles all the individual collect operations into a single Multicall transaction sent to Uniswap's position manager contract. If any of your positions include WETH, the multicall also unwraps it to native ETH automatically before delivering everything to your wallet.

📋
Your wallet will show a Simulation Results preview before you confirm — listing every token and approximate USD value you're about to receive. This is a read-only simulation; nothing is sent until you click Begin signing process.
💡
The "Collect all" button only appears for the positions currently shown — so if you've filtered by pair or range status, only those positions are included. Clear your filters first to collect everything at once.
Rabby wallet showing Collect All simulation results

History

Snapshot Log

There are three history views, each showing your past activity from a different angle. The original History view is available on all plans.

History
Snapshot Log
A daily log built from Refresh snapshots. Each row is one calendar day. Browse by month or see the full year at once. Editable cells let you correct any snapshot that was captured with bad data.
History V2 · PRO
On-Chain Timeline
Pulls your full LP event history directly from Etherscan. Every collect, add-liquidity, and remove-liquidity transaction appears in chronological order, with USD values from CoinGecko historical prices.
History V3 · PRO
Pool View
Groups all on-chain LP activity by pool pair. See total fees collected, adds, removes, and gas spent per pool at a glance. Click any pool to drill into its individual transaction history.

History — Snapshot Log

The History page shows a daily log of your portfolio across time, broken down month by month. Each row represents one calendar day, built from the snapshot data captured each time you Refresh.

The top summary bar shows stats for the selected month or year: total fees, average fees per day, projected month total, average APR across all positions, latest position size, and position delta.

Column Reference

ColumnTypeDescription
Day read-only The calendar date of the snapshot. Rows highlighted in a lighter colour indicate today.
Fees Earned computed Calculated automatically: today_unclaimed + collected_today − yesterday_unclaimed. This is the net new fees generated on this day. Negative values can occur on days with large price swings (impermanent loss effect on the unclaimed calculation) or after a large collect.
Unclaimed Fees ✏ editable The total unclaimed fees in all positions at the time of the snapshot. You can click the cell and override this value if the automatic reading was wrong (e.g. fetched during a price spike or with stale data). Overrides are saved to the CSV file immediately.
Position Size ✏ editable The combined market value of all tokens in all LP positions at snapshot time. Click to override if the value was clearly wrong. Position size is used to calculate APR.
Position Delta computed The change in position value compared to the previous day, in both absolute and percentage terms. Green = portfolio grew, red = it shrank. This reflects both price movement (impermanent loss/gain) and any deposits or withdrawals you made.
APR (%) computed The annualised fee return for this specific day: (fees_earned / position_size) × 365 × 100. This is your actual daily fee APR, not a projection.
Collected ✏ editable Fees you explicitly collected to your wallet on this day, in local currency. This is auto-populated from on-chain data when available, but you can also enter it manually. The value is used to ensure fees-earned calculations remain correct on collect days.
Note ✏ editable A free-text field for your own notes — e.g. "added liquidity", "rebalanced WETH/RPL", or anything you want to remember about that day.
↺ (Reset) action The red circular arrow button reverts any manual overrides on that row, restoring the values from the original snapshot data.
✏️
When to override values: If a snapshot was taken during a period of extreme market volatility, or if a blockchain read returned stale or incomplete pricing context, the Unclaimed Fees and Position Size values can be unreliable. Overriding with a value you know was correct (from Uniswap app or Etherscan at that time) gives you a cleaner historical record and more accurate APR calculations.

The Year view aggregates the entire year, one row per day. The Jan, Feb… month tabs filter to that specific month and show the same data at the same granularity.


History V2 — LP Fee Backtest

PRO

History V2 is an alternative view of your earnings history that calculates fee income directly from on-chain data — pool fee rates and your share of liquidity at each point in time — rather than relying on daily snapshots. Think of it as a fee backtest: it reconstructs what you should have earned hour-by-hour while your position was active and within range.

Summary Cards
Total Earned / Daily Avg / Best Day / Active Days
Four headline stats across the top of the page show aggregate performance for your selected time window. "Active Days" counts only days where at least one of your positions was in range and earning.
Stacked Bar Chart
Daily Fees by Position
A visual breakdown of your fee income each day, colour-coded per position. Hover over any bar to see a tooltip with the exact fee amount earned by each position on that day. The best day is highlighted automatically.
Position Cards
Per-Position Summary
Below the chart, each open position gets its own card showing total fees earned, a fee/day average, percentage share of total earnings, and a sparkline of daily fee activity — so you can see which positions are pulling their weight.
Daily Breakdown Table
One Row Per Day
A detailed table listing fees earned per position for every day in the selected range. Use the 👁 button to blur all values for privacy, and click any column header to sort by that metric.
ControlWhat it does
Range (7d / 30d / 60d / 90d / YTD)Changes the time window for the entire view — charts, cards, and the breakdown table all update to cover the selected period.
↻ RefreshRe-fetches the latest on-chain data from the Ethereum blockchain via Web3 RPC, recalculating all fee estimates for the current window.
👁 Hide ValuesBlurs all numeric values in the breakdown table for privacy. Useful when sharing your screen. Click again to reveal.
💡
History V2 vs History V1: The main History page (V1) is based on daily snapshots taken by PoolSide's server. History V2 derives earnings mathematically from on-chain data. The two views may differ slightly, particularly on days with volatile prices or when your position was near the edge of its range. V2 is generally more accurate for long-running positions.

Open Position Logging

Per-Position Detail

Each of your open LP positions has its own dedicated log page, accessible by clicking the position card in the Open Positions view or navigating to the Pool Info page. This per-position view gives you a granular history of that single position — useful when you hold multiple positions in different pools or tick ranges.

The position log combines a live chart with a snapshot table that you can manually edit, giving you both the automated record and the ability to annotate or correct it.

Position Header
Pair, Fee Tier & Token ID
The top of the page shows the pool pair, fee tier badge, your position's NFT token ID, and its current in-range / out-of-range status. The tick range (Min / Max) is shown so you can quickly assess how close the price is to your boundaries.
Performance Chart
Daily Fees + Position Value
A dual-axis chart plots your daily fee earnings as bars alongside your position value as a line. Out-of-range periods are visible as flat stretches with zero fee bars — making it easy to spot when rebalancing would have helped.
Snapshot Table
Editable Daily Record
The same editable table as the main History view, but filtered to this position only. Columns for Fees Earned, Unclaimed, Position Size, Position Delta, APR, Collected, and Note — all with the same override and reset controls.
Multiple Token IDs
Aggregated View
If you hold more than one position NFT in the same pool (e.g. two overlapping tick ranges), the Pool Info page aggregates their fees. Each token ID gets its own column in the table, and totals are summed at the row level.
📌
The URL for each position log includes the pool address and token ID — you can bookmark it to jump directly to a specific position without navigating through the dashboard every time.
✏️
All manual edits in the position log (overridden values and notes) are saved immediately. They persist independently from the main History snapshots, so correcting a value here does not affect your wallet-wide history and vice versa.

LP Simulator

What-If Analysis

The LP Simulator lets you model a hypothetical Uniswap V3 position before you commit any capital. Enter a pool, a deposit amount, and a price range — and the simulator estimates how much you could earn in fees per day, week, and month based on the pool's recent trading activity.

It's a planning tool, not a guarantee. Fee income depends on trading volume staying consistent and your position remaining in range — both of which can change at any time.

Pool Selector
Search or Browse Pools
Type a token name or paste a pool address to load a specific pool. The pool header shows the current live price, fee tier, and TVL so you can gauge how active the pool is before simulating.
Deposit Amount
Set Your Capital
Enter the total USD value you'd like to deposit. The simulator automatically splits this across the two tokens based on your chosen price range and the current price ratio, showing you the exact token amounts you'd need to provide.
Price Range
Min & Max Price
Set a lower and upper price boundary using the input fields or the interactive range slider. The wider the range, the safer (more time in range), but your capital efficiency and fee earnings per dollar decrease. The slider shows where the current price sits relative to your range.
Fee Projection
Daily / Weekly / Monthly
The estimated fee card shows projected earnings at three time horizons, based on the pool's average daily fees and your share of the liquidity at your chosen range. A projected APR is also displayed so you can compare against other opportunities.
Output MetricWhat it means
Estimated Daily FeesYour projected share of the pool's average daily trading fees given your deposit size and price range.
Weekly / MonthlySimple multiples of the daily estimate (× 7 and × 30). No compounding is assumed.
Projected APRAnnualised return based on the daily fee estimate divided by your deposit: (daily_fees × 365 / deposit) × 100.
Your Share of LiquidityThe percentage of total pool liquidity your deposit would represent at the selected range, compared to everyone else currently providing liquidity in that range.
Token SplitHow your deposit would be divided between the two tokens at the current price and your chosen range boundaries.
⚠️
Simulator projections are estimates based on recent historical volume and current TVL. Actual results will vary. Volume can spike or collapse, and if the price moves outside your range you earn zero fees until it re-enters. Always treat projections as a planning guide, not a forecast.
💡
Try loading one of your existing positions in the simulator by selecting the same pool and entering the same tick range. Comparing the simulator's projection to your actual earnings in History V2 is a useful way to calibrate your intuition for range width and capital efficiency.

Discovery

PRO

The Discovery page lets you browse the top Uniswap V3 pools on Ethereum Mainnet, ranked by TVL, APR, and daily fees. It's designed to help you find new pools worth considering — whether you want high APR, high TVL stability, or a specific token pair.

It is accessible from the navigati
ControlWhat it does
Window (1d / 7d / 14d / 30d)Sets the time window over which APR and average daily fees are calculated. Shorter windows reflect very recent activity; longer windows smooth out volatility.
Min TVLFilters out pools below a minimum Total Value Locked threshold. Useful for hiding micro-liquidity pools that may have inflated APRs but very low volume.
Token FilterSearch by token name or symbol to narrow results to pools containing a specific asset.
Per PageControl how many pools are shown at once (20, 50, 100, or All).
ColumnDescription
PoolThe trading pair and fee tier. Token icons are shown where available.
TVLTotal Value Locked — the combined USD value of all liquidity in the pool right now.
Avg Daily FeesAverage fees generated per day over the selected time window, in USD.
APRAnnualised fee return based on average daily fees divided by TVL. Higher APR = more fees relative to capital, but can also mean more volatility.
Fee/TVLAverage daily fees as a percentage of TVL — a quick way to compare fee productivity across pools of different sizes.
VolumeTotal trading volume over the selected window. Higher volume generally means more fees and tighter spreads.
💡
All columns are sortable — click a header to rank pools by that metric. The default sort is by APR descending, so the highest-returning pools appear first. A summary bar above the table shows aggregate stats for all pools currently loaded.

Transactions

On-Chain Activity

The Transactions view shows your wallet's recent on-chain activity on Ethereum Mainnet, fetched live from Etherscan. It focuses on LP-related transactions but shows all activity for the selected date.

ColumnDescription
Transaction HashThe unique hash of the transaction on Ethereum. Clicking it opens Etherscan in a new tab.
MethodThe contract method called. collect = fee collection from an LP position. multicall = a bundle of multiple operations in one transaction.
BlockThe Ethereum block number where the transaction was included. Clicking it opens that block on Etherscan.
AgeTime elapsed since the transaction was confirmed (e.g. "6h 26m ago").
From / ToThe sender and recipient addresses. Your wallet is highlighted in orange.
ValueThe raw ETH value transferred in the transaction (most LP operations send 0 ETH).
Txn FeeThe gas fee paid for this transaction, in ETH.
Details ▶Click to expand the row and see the ERC-20 token transfers inside the transaction, with amounts and USD values. This is especially useful for collect transactions to see exactly which tokens and amounts were received.
📅
The date selector at the top lets you browse transactions from past dates. The Today (live) option fetches the latest data directly from Etherscan. The total collected value shown in green is automatically calculated from any collect method calls on that day.

Pool Info Page

Per-Pool Detail

When you click on a position card in Open Positions, it opens a dedicated detail page for that specific pool/position. This page is similar to the History page but scoped to a single pool.

Historical Chart
Daily Fees + Position
A chart showing daily fees earned and position value over time for this specific pool, so you can spot trends and out-of-range periods.
Snapshot Table
Same edit features
The same editable table as History — override Unclaimed, Position Size, Collected, and Note. All edits are saved immediately to the per-pool CSV file.
Navigation
← Dashboard
The back button returns to the main dashboard. The URL includes the pool address and token ID so you can bookmark a specific position.
💡
If you hold multiple token IDs in the same pool (e.g. two WETH/RPL positions with different tick ranges), the Pool Info page aggregates all of them. Each position gets its own column in the snapshot table, and fees are summed for the pool-level view.

Settings

Preferences
SettingDescription
Theme Changes the colour accent of the entire dashboard. Options: Default (purple), Grey, Glass, Aurora, Terminal, Pink, Light, Red, Orange, Green, Purple, Yellow. The chosen theme is persisted and applies to all pages.
Primary Currency Replaces all USD dollar ($) values throughout the app. Set to USD by default. Changing to EUR, GBP, etc. converts all primary values using live exchange rates. The FX rate is displayed in the header.
Secondary Currency Replaces all NOK (kr) values throughout the app. Internally all calculations use NOK as the base, and the secondary currency is applied as a display conversion. Set to NOK by default.
Wallet / Connect Connect a MetaMask or Rabby browser extension wallet to enable fee collection directly from the dashboard. Alternatively, append ?wallet=0x… to the URL to watch any read-only address without connecting an extension.
Subscription Plan Shows your current plan tier (FREE, BASIC, or PRO) and lets you upgrade. PRO unlocks History V2, History V3, and Pool Discovery. Payment is made on-chain with USDC or USDT from your connected wallet. Monthly and annual billing options are available.

Key Concepts

Reference
Uniswap V3
Concentrated Liquidity
Unlike V2, V3 lets you set a specific price range (ticks) where your liquidity is active. You only earn fees when the price is inside your range — but when it is, your capital efficiency is much higher.
Ticks
Price Range Boundaries
Tick numbers encode price boundaries on a log scale. The Min and Max ticks shown on each position card define the exact price range where your liquidity is deployed.
APR vs APY
Annualised Returns
PoolSide shows APR (simple annual rate, no compounding). Your actual return depends heavily on how often you collect and reinvest fees, and whether the price stays in range.
Impermanent Loss
Position Delta Risk
When token prices move, the ratio of your two tokens shifts to maintain the constant-product formula. Negative Position Delta days reflect this — your position value declined more than fees earned.
Fee Tiers
0.01% / 0.05% / 0.30% / 1%
Uniswap V3 pools come in four fee tiers. Higher-fee pools pay more per trade but tend to have less volume. The fee tier is shown on each position as a badge (e.g. 0.30%).
NFT Positions
ERC-721 Token IDs
Each Uniswap V3 LP position is minted as a unique NFT. The token ID (e.g. #1199114) is how PoolSide identifies each position. Closed positions (burned NFTs) are not shown.

Plans & Pricing

Subscription

PoolSide offers three plan tiers. Your current plan is shown on the Settings page, along with an option to upgrade. Payment is made on-chain using USDC or USDT directly from your connected wallet — no account registration or card details required.

PlanWhat's included
FREE Live dashboard with all open positions, real-time unclaimed fees and position values, fee collection (Collect & Collect All), the main History V1 snapshot view, Transactions page, and Pool Info per-position pages. No time limit — the free tier is fully functional for day-to-day monitoring.
BASIC Everything in FREE, plus access to the LP Simulator so you can model positions before deploying capital. Ideal for users who want planning tools but don't need advanced analytics.
PRO Everything in BASIC, plus History V2 (on-chain fee backtest), History V3 (advanced analytics), and Pool Discovery (browse and filter top pools across Ethereum Mainnet). The full PoolSide experience.
Billing Cycle
Monthly or Annual
Both BASIC and PRO are available on a monthly or annual billing cycle. Annual plans offer a meaningful discount compared to paying month-to-month.
Payment Method
On-Chain · USDC or USDT
Subscriptions are paid directly from your connected wallet using USDC or USDT on Ethereum. No credit cards, no accounts. The transaction is visible on Etherscan like any other on-chain payment.
Upgrades
Instant Activation
Once your payment transaction is confirmed on-chain, your plan upgrades automatically. PRO features become available the next time you load or refresh any PoolSide page.
💳
To upgrade, open Settings from the sidebar, scroll to the Subscription Plan row, and click Upgrade. Select your desired plan and billing cycle, then confirm the transaction in your wallet.