Support & Help

Last updated: July 7, 2026 β€” v9

Quick Start β€” Option A (easiest)

  1. Click Make a Copy β€” the Sheet and script wrapper come with it
  2. Refresh the sheet β€” the ⚑ Balances menu appears
  3. Run ⚑ Balances β†’ Setup / Create Dashboard once
  4. Run ⚑ Balances β†’ Add chain sheet β€” give it a name like Ethereum, then paste an RPC URL when prompted
  5. Replace the sample rows in column B with your real wallet addresses
  6. Click ⚑ Balances β†’ Fetch this sheet
πŸ’‘ Column A (Sr No) fills in automatically after your first fetch β€” you never need to type row numbers yourself.

Quick Start β€” Option B (add to existing sheet)

  1. Open your Google Sheet β†’ Extensions β†’ Apps Script
  2. Left sidebar β†’ Libraries + β†’ paste Script ID:
    1yM1l94RPOknc3QMz7l4eRnNRHRFR0vow0sIEmYBh22nZ_kUBbfreBee1
  3. Click Look up β†’ set Identifier to exactly WalletTracker β†’ click Add
  4. Replace everything in Code.gs with this block (use the Copy button β€” don't retype it):
    function onOpen()                { WalletTracker.registerMenu(); }
    function onInstall()             { WalletTracker.registerMenu(); }
    function wt_fetchCurrentSheet()  { WalletTracker.fetchCurrentSheetAllChains(); }
    function wt_fetchAllSheets()     { WalletTracker.fetchAllSheetsAllChains(); }
    function wt_fetchOneChain()      { WalletTracker.promptFetchOneChain(); }
    function wt_startAutoFetch()     { WalletTracker.startAutoFetch(); }
    function wt_stopAutoFetch()      { WalletTracker.stopAutoFetch(); }
    function wt_triggerFetch()       { WalletTracker.triggerFetch(); }
    function wt_setupDashboard()     { WalletTracker.setupDashboard(); }
    function wt_addWalletSheet()     { WalletTracker.addWalletSheet(); }
    function wt_addTokenColumn()     { WalletTracker.addTokenColumn(); }
    function wt_setFallbackRpc()     { WalletTracker.setFallbackRpc(); }
    function wt_refreshPortfolio()   { WalletTracker.refreshDashboardSummary(); }
    function wt_clearDecimalsCache() { WalletTracker.clearDecimalsCache(); }
    function wt_setDustThreshold()   { WalletTracker.setDustThreshold(); }
    function wt_clearSheetBatch()    { WalletTracker.clearSheetBatch(); }
    function wt_clearAllCache()      { WalletTracker.clearAllCache(); }
    function wt_help()               { WalletTracker.showHelp(); }
  5. Press Ctrl+S β†’ close the tab β†’ refresh your sheet β†’ ⚑ Balances menu appears
⚠️ The identifier must be WalletTracker exactly β€” wrong capitalisation causes a ReferenceError.
⚠️ wt_triggerFetch is not in the menu but must exist in Code.gs β€” it is the background auto-fetch trigger target. Without it, auto-fetch installs but silently does nothing.

Sheet layout (v9)

  • B2 β€” RPC URL for this chain (e.g. https://eth.llamarpc.com)
  • Row 1 col C+ β€” column header: coin or token name (e.g. ETH, USDC)
  • Row 2 col C β€” leave blank β†’ fetches native coin balance
  • Row 2 col D+ β€” paste a contract address β†’ fetches ERC-20 token balance
  • Col A row 3+ β€” Sr No, auto-filled after each fetch β€” leave it alone
  • Col B row 3+ β€” wallet addresses (0x…, exactly 42 characters)
  • Cell A2 β€” optional minimum balance filter (see below)

To add a token column: ⚑ Balances β†’ Add ERC-20 token β€” enter the ticker and contract address. If the contract has an on-chain name that differs from what you typed, you'll be asked whether to use the contract's official name instead.

⚠️ You only need public wallet addresses (0x…). Never enter private keys or seed phrases.

Duplicate & invalid addresses

The tracker checks column B every time you fetch:

  • Duplicate addresses β€” if the same address appears more than once on a sheet, every copy is still fetched (so nothing goes unfetched), but you'll get a toast listing the row numbers. Duplicates are counted once per occurrence in your chain sheet totals and in Portfolio, so remove them if you want accurate totals.
  • Invalid addresses β€” anything that starts with 0x but isn't exactly 42 valid hex characters gets marked INVALID in amber and is skipped during fetch. Plain text that doesn't start with 0x (like blank rows or notes) is ignored silently β€” it's never flagged.

Minimum balance filter (dust filter)

If you're tracking hundreds of wallets and only care about ones holding a meaningful balance, set a floor:

  1. Run ⚑ Balances β†’ Set min balance filter
  2. Enter a number β€” e.g. 0.01 β€” or leave it blank to turn the filter off
  3. Rows with a native balance below your threshold are dimmed (not deleted, not hidden) so they're easy to visually skip

The current setting is shown in cell A2 of the chain sheet. Clearing the filter un-dims everything immediately.

ERC-20 token tracking

  1. Go to the chain sheet where you want the token
  2. Run ⚑ Balances β†’ Add ERC-20 token
  3. Enter the token ticker (e.g. USDC)
  4. Paste the contract address for that token on that chain
  5. Run ⚑ Balances β†’ Fetch this sheet
πŸ’‘ Token decimals are fetched automatically on first run and cached per chain β€” the same contract address on two different chains is cached separately, so decimals never leak across chains. If you ever see wrong decimal places, run ⚑ Balances β†’ Clear decimals cache and re-fetch.

Where to find contract addresses: Etherscan (search the token name β†’ copy the Contract field) or CoinGecko (token page β†’ Contract tab).

Portfolio summary

Run ⚑ Balances β†’ Refresh Portfolio to create a PORTFOLIO sheet with live totals across all your chain sheets and token columns. It also rebuilds automatically the moment a full fetch completes on any chain sheet β€” no manual refresh needed in normal use.

The Wallets column counts only addresses that exactly match the 42-character format the tracker actually fetches β€” it does not count malformed or placeholder text, so the number always reconciles with what's really being queried on-chain.

Balance change tracking

After each fetch, hover any balance cell to see a tooltip showing the change since the last run β€” for example ↑ +1.234500 (prev: 0.000000).

Fallback RPC

Run ⚑ Balances β†’ Set fallback RPC and paste a second RPC URL. When more than half a batch returns errors from the primary RPC, failed wallets are automatically retried against the fallback.

Large wallet lists β€” batch mode

Google Apps Script has a 6-minute execution limit. The tracker handles this automatically by batching, with batch sizes tuned differently for native coin balances versus ERC-20 tokens (native balances can be checked in much larger batches per run than tokens):

  • Cells that haven't been fetched yet show β€” so you can see what's pending
  • Re-run Fetch this sheet to continue β€” it always picks up from where it stopped
  • A single bad network response no longer discards an entire batch's worth of already-fetched results β€” only the wallets actually affected are retried
πŸ’‘ For very large lists, use ⚑ Balances β†’ Start auto-fetch. This installs a background trigger that runs every minute and stops itself when all wallets are done.

Auto-fetch (large lists)

  1. Set up your chain sheet with RPC URL and wallet addresses
  2. Run ⚑ Balances β†’ Start auto-fetch
  3. Google will ask for permission to run background triggers β€” click Allow
  4. The tracker fetches batches every minute in the background and stops itself automatically when done
  5. To stop early: ⚑ Balances β†’ Stop auto-fetch

Resetting a stuck sheet

If one sheet's batch progress looks stuck or wrong, you don't need to reset everything:

  • ⚑ Balances β†’ Clear stuck batch β€” resets only the active sheet's saved batch position, without touching decimals cache, fallback RPC, or any other sheet
  • ⚑ Balances β†’ Clear ALL cache β€” full reset across every sheet; use this only if the targeted reset above doesn't help

Getting updates

The library is versioned. How you receive updates depends on how you installed it.

If you used Option A (copied the Sheet)

Your copy has a fixed library version from the day you made the copy. To update manually:

  1. Open your Sheet β†’ Extensions β†’ Apps Script
  2. Left sidebar β†’ Libraries β†’ click WalletTracker
  3. Change the Version dropdown to the highest available number
  4. Click Save β†’ close the tab β†’ refresh your Sheet
  5. Replace Code.gs with the current wrapper block (see Option B setup above)

If you used Option B (added the library manually)

Same steps as above. Alternatively, set Version to HEAD (development mode) to always receive the latest deploy automatically.

⚠️ HEAD means instant updates. If a broken version is ever deployed, your Sheet breaks until it is fixed. A fixed version number is safer if you need stability.

How to know a new version is available

Open the Version dropdown in Apps Script β€” if a higher number exists than what you have selected, an update is available. Release notes are posted on GitHub Releases.

Common Issues

❌ ReferenceError: WalletTracker is not defined

  • The library isn't linked β€” go to Libraries + and add it first
  • The identifier must be exactly WalletTracker (case-sensitive)

❌ "RPC error" in cells

  • Check the URL in B2 is correct and starts with https://
  • The RPC provider may be rate-limiting you β€” try a private key from Alchemy or Infura
  • Make sure the RPC matches the chain β€” an Ethereum RPC won't work for Polygon
  • Set a fallback RPC: ⚑ Balances β†’ Set fallback RPC

❌ Wrong token balance / wrong decimal places

  • Run ⚑ Balances β†’ Clear decimals cache then re-fetch
  • Verify the contract address in row 2 matches the correct chain

❌ A row shows "INVALID" and I didn't type anything wrong

  • Check for extra spaces, a missing character, or a wrong length in that address β€” anything starting with 0x that isn't exactly 42 characters gets flagged
  • Placeholder text that doesn't start with 0x is never flagged, so this only appears on genuine near-miss addresses

❌ Portfolio numbers look off

  • Duplicate wallet addresses on the same sheet are fetched and counted per occurrence β€” remove duplicates if you want a strict unique count
  • The Wallets column only counts exact 42-character addresses, so malformed or placeholder rows are correctly excluded

❌ Auto-fetch installed but nothing happens

  • Check Code.gs has the wt_triggerFetch wrapper β€” it is required
  • In Apps Script β†’ Triggers β€” verify a trigger for wt_triggerFetch exists

❌ Tracker seems stuck or looping

  • Try ⚑ Balances β†’ Clear stuck batch first β€” it only resets the active sheet
  • If that doesn't help, ⚑ Balances β†’ Clear ALL cache then re-run Fetch or Start auto-fetch

❌ No "⚑ Balances" menu

  • Refresh the sheet β€” the menu only appears after a full page reload
  • Check Code.gs has all 18 wrapper functions
  • Run onOpen manually from the Apps Script editor once

FAQ

Is my data stored on your servers?

No. Everything stays in your Google Sheet and your Google account's Apps Script properties. We operate no servers that receive or log your wallet data.

Which blockchains are supported?

Any EVM-compatible chain with a public RPC β€” Ethereum, Polygon, BSC, Arbitrum, Optimism, Avalanche, Base, and hundreds more.

Which tokens are supported?

Any ERC-20 token on any EVM chain, given its contract address on that specific chain.

Can I ignore wallets with tiny/dust balances?

Yes β€” ⚑ Balances β†’ Set min balance filter dims any wallet below a threshold you choose.

Do I need a paid RPC?

No. Free public RPCs work for personal use. For 100+ wallets, ERC-20 tokens, or frequent refreshes, a free Alchemy or Infura account gives you higher rate limits and better reliability.

Is this free?

Yes, completely free. No subscription, no paywalls, no hidden costs.

Free RPC URLs

Paste any of these into cell B2 of a chain sheet:

  • Ethereum: https://eth.llamarpc.com
  • Ethereum: https://eth.drpc.org
  • Polygon: https://polygon-rpc.com
  • BSC: https://bsc-dataseed.binance.org
  • Arbitrum: https://arb1.arbitrum.io/rpc
  • Optimism: https://mainnet.optimism.io
  • Base: https://mainnet.base.org
  • Avalanche: https://api.avax.network/ext/bc/C/rpc
  • Sepolia testnet: https://rpc.sepolia.org

More chains: chainlist.org β€” search any chain and copy the RPC URL directly.

Get Help

πŸ“§ Email

ravikumar699121@gmail.com

Response within 2–3 business days

πŸ› GitHub Issues

Open an issue

Bugs and feature requests

Blockchain Explorers

Removing the library

  1. Open your Google Sheet β†’ Extensions β†’ Apps Script
  2. Left sidebar β†’ Libraries β†’ click WalletTracker
  3. Click Remove
  4. Delete all 18 wrapper functions from your Code.gs
  5. Save β€” the ⚑ Balances menu disappears on next reload