DocumentationSakurato Crypto Portfolio Tracker

Documentation

A WordPress plugin to track, visualize, and share your cryptocurrency portfolio — directly from your website.

👋 Introduction

Sakurato Crypto Portfolio Tracker lets you record your crypto investments, track performance over time, and embed live portfolio data anywhere on your WordPress site using shortcodes.

It is designed for long-term investors, content creators, and bloggers who want to share their portfolio with an audience — not for day trading or real-time exchange data. Prices are refreshed every 5 minutes via the CoinGecko API.

What it does
  • Record buy, sell, withdraw & transfer transactions
  • Calculate P&L, ROI, and cost basis automatically
  • Display charts and tables on any page via shortcodes
  • Save historical snapshots for performance charts
  • Share portfolio screenshots on social media
  • Import & export data in JSON and CSV formats
What it does NOT do
  • Real-time tick-by-tick price data
  • Direct exchange / broker integration
  • Automated trading or alerts
  • Tax reporting (use CSV export for that)
  • Derivatives, futures, or margin tracking
🔒
Your data stays on your server — 100% private

All portfolio data (transactions, snapshots, settings) is stored exclusively in your own WordPress database. Nothing is sent to Sakurato servers. The only external connection is to CoinGecko for live prices — only coin identifiers are transmitted, never any personal data.

ℹ️
Free plugin vs Sakurato CPT Pro

The free plugin supports 1 portfolio and includes a Reports summary (period metrics). The optional Sakurato CPT Pro add-on (installed separately, available at sakurato.tech) unlocks unlimited portfolios and full Reports tables (Buy, Sell, Withdrawal, Tax Summary) with CSV export.

⚙️ Requirements

RequirementMinimumRecommended
WordPress5.86.4 or later
PHP7.48.1 or later
MySQL / MariaDBMySQL 5.6MySQL 8.0 / MariaDB 10.4+
Browser (admin)Any modern browserChrome, Firefox, Edge (latest)
Internet accessRequired — the plugin fetches live prices from CoinGecko
⚠️
PHP 7.4 end-of-life

PHP 7.4 reached end-of-life in November 2022 and no longer receives security updates. We strongly recommend upgrading to PHP 8.1 or later.

📦 Installation

Method A — Install from WordPress.org (recommended)

1
Open the Plugins screen

In your WordPress admin, go to Plugins → Add New Plugin.

2
Search for the plugin

Type "Crypto Portfolio Tracker" or "Sakurato" in the search box.

3
Install and activate

Click Install Now, then click Activate once the installation completes.

4
Done

The plugin creates its database tables automatically. You will see a new Crypto Portfolio menu item in the left sidebar.

Method B — Manual upload

1
Download the ZIP file

Download crypto-portfolio-tracker.zip from the plugin's WordPress.org page.

2
Upload the ZIP

Go to Plugins → Add New Plugin → Upload Plugin, choose the ZIP file, and click Install Now.

3
Activate the plugin

Click Activate Plugin on the confirmation screen.

Recommended: add a free CoinGecko API key

The plugin works without a key, but the anonymous public endpoint is capped at just 5–15 calls/min. A free Demo key (no credit card) raises this to a stable 30 calls/min. See API Settings for setup instructions.

🚀 First Steps

After activating the plugin, follow these steps to get up and running:

1
Name your portfolio

Go to Crypto Portfolio → Portfolios. A default portfolio is created automatically on activation — rename it (e.g., "Main Holdings") and choose a color.

2
Add your transactions

Go to Crypto Portfolio → Transactions. Add each buy or sell with the coin name, amount, date, and price paid. The plugin calculates your cost basis and current P&L automatically.

3
Save your first snapshot

Go to Crypto Portfolio → Snapshots and click Save Snapshot Now. Snapshots power all historical charts. After the first manual one, the plugin saves them automatically every hour.

4
Embed on your site

Create or edit a page, paste a shortcode such as crypto_portfolio, and publish. Your live portfolio data will appear on the frontend — visible only to users you choose.

💡
Tip: charts fill up automatically

The plugin saves snapshots every hour in the background — no action needed. The longer the plugin runs, the more data your charts will have.

🖥️ Dashboard

The main dashboard (Crypto Portfolio → Dashboard) gives you a real-time overview of your portfolio. It is divided into these areas, top to bottom: the command bar, four metric cards, a two-column chart grid, a Portfolio Health row, and then the collapsible sections — Performance Chart, Portfolio Holdings, and Share Portfolio.

Command Bar

ElementDescription
Portfolio selectorShows the active portfolio name. If you have more than one portfolio (requires Sakurato CPT Pro), a dropdown lets you switch between them instantly.
Cache badgeA coloured dot with the label Live prices and the age of the price cache in minutes. Green dot = fresh; grey = stale (older than 5 minutes).
Refresh buttonFetches the latest prices from CoinGecko immediately and reloads the page with updated values.
Buy / Sell / WithdrawOpen the corresponding transaction modal without leaving the dashboard.
ShareScrolls the page to the Share Portfolio section at the bottom so you can generate and share a portfolio image.
Theme toggle (🌙)Switches between light and dark mode.

Metric Cards

Four cards below the command bar summarise your portfolio's financial performance.

💰 Portfolio Value

Current market value of all holdings combined. The sub-rows show Total Invested (real FIAT deposits only) and Cost Basis (total acquisition cost of coins you still hold).

📈 Total P/L

Your overall profit or loss compared to the money you actually deposited (Invested Capital). Shown as an absolute amount and a percentage. Green = profit, red = loss.

📊 Unrealized P/L

Paper profit or loss on coins you still hold. Calculated as current market value minus cost basis of current holdings. Changes whenever prices refresh.

✓ Realized P/L

Locked-in profit or loss from coins you have already sold. Calculated using FIFO cost basis. Shows "No sales yet" until you record your first sell transaction.

ℹ️
Hover the ? icon on any card for a tooltip

Each P/L card has a small ? badge. Hover it to see a plain-language explanation of exactly what that number represents.

Portfolio ROI Performance chart

Below the metric cards, the left column shows the Portfolio ROI Performance chart. Three summary figures appear above it:

  • Current ROI — your return on investment right now, as a percentage
  • Peak ROI — the highest ROI reached in the selected time range, with the date
  • Lowest ROI — the lowest (worst) ROI in the selected time range, with the date

Use the time-range buttons (24H · 7D · 1M · 3M · 1Y · ALL) to zoom in or out.

Holdings Distribution

A donut chart that visualises how your portfolio is split across coins by current market value. The centre shows total value and number of assets.

Portfolio Health

🚀 Best 7D

The coin in your portfolio with the highest price gain over the last 7 days.

⚠️ Worst to Watch

The coin with the largest price drop over the last 7 days.

Portfolio Health score

A composite 0–100 score: Poor, Fair, Good, or Excellent. Reflects diversification and profitability.

Performance Periods (collapsible)

Seven period cards — 24H · 7D · 1M · 3M · 180D · 1Y · ALL — each showing the P/L change for that period in both % and USD. Toggle individual periods on or off; your preference is saved per user. The period P/L is isolated from deposits and withdrawals so it reflects pure market movement.

Performance Chart (collapsible)

Shows your total portfolio value in USD over time as an area chart, with a second line for Invested Capital. Toggle Compare with BTC to overlay Bitcoin's performance.

Portfolio Holdings (collapsible)

A detailed table of every coin you currently hold. Columns include: current price, average buy price, 24 h / 7 d / 360-day price change, a 7-day sparkline, 24 h volume, market cap, total holdings value, and individual P/L.

Share Portfolio (collapsible)

Lets you generate a portfolio screenshot and share it on social media. Reach it quickly via the 🔗 Share button in the command bar.

💡
Empty portfolio state

If no transactions exist yet, the dashboard shows a prompt with Add Transaction and Switch Portfolio buttons instead of the metric cards and charts.

📁 Portfolios

A portfolio is an independent collection of transactions with its own performance metrics, charts, and shortcode display.

ℹ️
Free plugin vs Sakurato CPT Pro

The free plugin supports 1 portfolio. Installing the optional Sakurato CPT Pro add-on removes this limit and allows unlimited portfolios.

Your portfolio (free plugin)

The free plugin includes one portfolio created automatically on activation. Go to Crypto Portfolio → Portfolios to rename it, change the description, or update the color. You can add unlimited transactions to it.

Creating additional portfolios Pro

1
Go to Crypto Portfolio → Portfolios

Click the Add New Portfolio button (visible after installing the Sakurato CPT Pro add-on).

2
Fill in the portfolio details

Name — required, up to 100 characters. Description — optional. Color — hex color used in the UI (default: #3b82f6).

3
Save

The portfolio is created instantly. You can now add transactions to it.

Managing portfolios

  • Edit — rename, change description, or change the color at any time
  • Delete — permanently removes the portfolio and all its transactions and snapshots. This cannot be undone.
  • Switch active portfolio — the currently selected portfolio determines which data is shown

Using multiple portfolios Pro

Each portfolio gets its own portfolio_id, which you pass to any shortcode to display that portfolio on a specific page.

crypto_portfolio portfolio_id="2"
crypto_portfolio_chart portfolio_id="2"
crypto_portfolio_pie portfolio_id="2"
⚠️
Deleting a portfolio is permanent

All transactions, snapshots, and metrics are deleted from the database. Use Import & Export → Export JSON before deleting if you want to keep a backup.

💱 Transactions

Transactions are the source of truth for all calculations. Every buy, sell, or withdrawal you record updates your holdings, cost basis, and profit/loss figures in real time.

Transaction types

Buy

You acquired cryptocurrency — either with new fiat money, or by converting a stablecoin (USDT/USDC). Increases your holdings and cost basis.

Sell

You disposed of cryptocurrency for fiat or a stablecoin. Reduces holdings and triggers a realized P&L calculation.

Withdraw

You moved cryptocurrency to an external wallet, exchange, or bank. Reduces holdings but is tracked separately from a sale.

Form fields

FieldTypeDescription
CoinAutocomplete textStart typing the coin name or ticker. The plugin searches the CoinGecko database (20,000+ coins).
QuantityNumberHow many units you bought, sold, or withdrew. Supports up to 8 decimal places (e.g., 0.00250000 BTC).
Price (USD)NumberThe price per unit at the time of the transaction, in USD.
DateDate & timeWhen the transaction occurred.
Payment sourceDropdownBuy only. New funds = fresh fiat (counted in invested capital). USDT / USDC = converted from a stablecoin (not counted as new capital).
DestinationDropdownWithdraw only. Where the coins went: External wallet, Bank account, Exchange, or Other.
NotesText (optional)Any personal note — exported with the transaction in both JSON and CSV formats.

How P&L is calculated

Invested capital

Only BUY transactions with Payment source = New funds count toward invested capital.

Formula
Invested Capital = SUM( quantity × price_per_unit ) for all buys with source = new_funds

Unrealized P&L

The paper profit or loss on coins you still hold. Changes every time prices refresh (every 5 minutes by default).

Formula
Unrealized P&L = Current Market Value − Cost Basis of Current Holdings

Realized P&L

The locked-in profit or loss from coins you have already sold. Calculated using FIFO (first-in, first-out) cost basis.

Formula
Realized P&L = Sale Proceeds − (Cost Basis Per Unit × Quantity Sold)

Total P&L

Formula
Total P&L = Current Portfolio Value − Invested Capital Total P&L % = ( Total P&L / Invested Capital ) × 100
💡
Tip: entering historical transactions

You can backfill your entire transaction history. Enter each trade with its original date and price paid. The plugin will reconstruct your cost basis correctly.

⚠️
Coin not found in autocomplete?

Less common coins may not appear in the top-500 preloaded list. Try typing the full coin name or its CoinGecko ID.

📸 Snapshots

A snapshot is a point-in-time record of your portfolio's value. Snapshots are the data source for all historical charts.

What is stored
  • Total invested capital at that moment
  • Total portfolio value (market prices)
  • Profit / loss in USD
  • Profit / loss %
  • Total withdrawn cost & value
  • Date & time of the snapshot
Snapshots are immutable

Once saved, a snapshot cannot be edited — only deleted. This preserves the integrity of your historical data.

If you saved a snapshot with wrong data, delete the snapshot, fix the transaction, then save a new one.

Manual snapshots

Go to Crypto Portfolio → Snapshots and click Save Snapshot Now. A snapshot is created immediately. Manual snapshots bypass all automatic safety checks.

Automatic snapshots (cron)

The plugin registers a WordPress cron job that runs every hour and automatically records a snapshot for each of your portfolios.

Cron jobFrequencyWhat it does
Auto snapshotEvery 1 hourRecords portfolio value for all portfolios (subject to safety checks)
Background price refreshOn demand (async)Stale prices (older than 5 minutes) are refreshed in the background — the page never blocks waiting for CoinGecko
Top coins preloadEvery 24 hoursPre-fetches the top 250 / 500 coin list from CoinGecko for instant price autocomplete

Automatic safety checks

  • 80%+ value drop — if the current portfolio value is less than 20% of invested capital and total invested is over $100, the snapshot is skipped.
  • Cron lock active — if a previous cron run is still executing, the new run waits up to 2 minutes before giving up.
⚠️
WP-Cron depends on site traffic

WordPress cron runs on page load, not on a real system timer. On low-traffic sites, the hourly job may fire less frequently. Consider setting up a real server-side cron to trigger wp-cron.php.

🎯 Target Price & Portfolio Goal

Set price targets for your investments and track progress toward them in real time. Targets are set on the Crypto Portfolio Dashboard and visible only to the portfolio owner — they are not shown in front-end shortcodes.

Per-coin target price

In the dashboard Holdings table, the Target column lets you set a price goal for each coin individually.

  • The input field itself doubles as a progress bar that fills as the current price approaches the target
  • Color states: purple (far from target) → amber (close) → green (goal reached)
  • Hint below shows "+X% needed" (the actual price gain required to hit the target) or "goal reached"
  • Stablecoins are automatically excluded from targets
Portfolio Goal widget

Above the holdings table, the Portfolio Goal widget shows progress toward a total portfolio target value.

  • Set a total target (e.g. $100,000) for the whole portfolio
  • Progress bar shows current value vs. target
  • Hint shows "+X% needed" and the dollar amount still to go
  • Switches to a "goal reached" state when current value meets or exceeds the target

How "+X% needed" is calculated

The hint shows the price gain required from the current price to reach the target — not a progress ratio. For example, if a coin trades at $20 and your target is $90, the hint reads "+350% needed", because the price has to rise 350% from $20 to reach $90.

ℹ️
Targets are private

Target prices and the Portfolio Goal are admin-only features. They appear on the dashboard for the portfolio owner and are never exposed through front-end shortcodes or public charts.

Full dark / light mode

The Target column and Portfolio Goal widget adapt to your WordPress admin color scheme — progress bars, hints, and labels all support dark and light modes.

📊 Reports

The Reports tab gives you a structured summary of all your transactions for any year, month, and portfolio. It is located at Crypto Portfolio → Reports.

ℹ️
Free: period summary metrics · Sakurato CPT Pro: full transaction tables

The free plugin shows period summary metrics — total invested, transactions count, net capital flow, and more — for any selected year/month. The optional Sakurato CPT Pro add-on adds full Buy, Sell, Withdrawal, and Tax Summary tables with column sorting, pagination, charts, and CSV export.

Filters
  • Year — select any year with recorded transactions
  • Month — narrow down to a specific month, or view the full year
  • Portfolio — filter by a single portfolio or view all combined
Summary metrics
  • Total Invested — sum of all buy transaction values
  • Total Sold — sum of actual asset sales (excl. internal swaps)
  • Withdrawals — total value of outgoing transfers
  • Net Capital Flow — new funds minus withdrawals
  • Avg Buy / Sell Price — average cost and proceeds per transaction

Buy Transactions

All purchases grouped by coin. Shows transaction count, total quantity, total value in USD, and a breakdown between From New Funds (fresh capital) and From Crypto/Stablecoin (funded from existing holdings). Includes a funding-source donut chart.

Sell Transactions

Actual asset sales — coins converted to stablecoins or fiat. Internal portfolio swaps (e.g. USDT spent to fund another purchase) are automatically excluded so only real sales appear. Includes a monthly sales bar chart.

Withdrawals

Outgoing transfers — coins sent to external wallets, exchanges, or marked as spent. Grouped by coin and destination. Includes a destination donut chart.

Tax Summary

An overview per coin showing total cost basis (buys), total proceeds (sells), and total withdrawn value for the selected period. Useful as a starting point for tax reporting.

⚠️
Not tax advice

The Tax Summary shows raw transaction data only. No tax rules, rates, or country-specific calculations are applied. Always consult a qualified tax professional for official reporting.

Table features

Every table in Reports supports column sorting (click any header), pagination (10 rows per page), and CSV export — download the section data as a spreadsheet-ready file.

🧮 Calculators

Six handy crypto tools in one tab — quick math without leaving WordPress. Find them at Crypto Portfolio → Calculators. Most run instantly in your browser; only the Converter fetches live prices from CoinGecko.

💰 Profit / Loss

See your gain or loss, ROI %, and fees for a single trade. Enter buy price, sell price, quantity, and optional fees — the result includes both the absolute P/L and the percentage return.

⚖️ Break-even

Find the exact sell price needed to get your money back after fees, plus the price required to hit a target profit. Useful for planning exits in advance.

📉 DCA Average

Enter your past buys to find your real average cost per coin and unrealized profit / loss at the current market price. Great for reviewing a position you have built up over time.

📈 DCA Plan

Project how a recurring investment (with an optional starting amount) grows over years with compounding. Adjust the monthly contribution, time horizon, and assumed annual return to see the projected portfolio value.

🥧 Portfolio Allocation

Enter your current holdings and target weights — the calculator tells you exactly how much to buy or sell to rebalance to your goal allocation.

🔄 Converter

Convert between any cryptocurrency and USD / EUR / PLN at live market prices. The only calculator that fetches data from CoinGecko.

Instant calculations, no data saved

Calculator inputs are not stored — each calculator is a stateless tool. Refresh the page and the inputs reset. Nothing you type here affects your portfolio data.

Pro add-on: "Load from portfolio"

With Sakurato CPT Pro installed, the Portfolio Allocation calculator gains a "Load from portfolio" button — one click fills the rows with your current holdings at live market value, so you only need to set the target weights.

🔗 Shortcodes

Shortcodes let you embed live portfolio data anywhere on your WordPress site. All shortcodes accept a portfolio_id parameter.

💡
Where to find your portfolio ID

Go to Crypto Portfolio → Portfolios. The ID is shown next to each portfolio name, or visible in the URL when you open the portfolio.

Full display
crypto_portfolio

Full interactive portfolio table with all holdings, current prices, cost basis, and P&L.

crypto_portfolio theme="dark" show_metrics="true" show_logos="true" sort_by="value" sort_order="desc" portfolio_id=""
ParameterDefaultAccepted values
theme"dark""dark" | "light"
show_metrics"true""true" | "false" — show summary bar above the table
show_logos"true""true" | "false" — show coin logo images
show_zero"false""true" | "false" — include coins with zero balance
sort_by"value""value" | "name" | "change" | "percent"
sort_order"desc""desc" | "asc"
portfolio_id""numeric ID, or empty for the default portfolio
crypto_portfolio_snapshots

Historical snapshots table — shows each saved snapshot date with total invested, portfolio value, and P&L.

crypto_portfolio_snapshots limit="50" theme="dark" portfolio_id=""
ParameterDefaultAccepted values
limit50any positive integer — max number of rows to display
theme"dark""dark" | "light"
portfolio_id""numeric ID, or empty for the default portfolio
Charts
crypto_portfolio_chart

Line chart comparing invested capital vs current portfolio value over time. Includes interactive time-range buttons.

crypto_portfolio_chart height="400" theme="dark" show_controls="true" time_range="all" portfolio_id=""
ParameterDefaultAccepted values
height"400"numeric pixels (e.g., "300", "500")
theme"dark""dark" | "light"
show_controls"true""true" | "false" — show time-range buttons
time_range"all""24h" | "7d" | "1m" | "3m" | "1y" | "all"
portfolio_id""numeric ID, or empty for the default portfolio
crypto_portfolio_roi

ROI percentage chart over time — color-coded green/red. Optionally overlays a Bitcoin ROI comparison line.

crypto_portfolio_roi height="400" theme="dark" show_controls="true" time_range="all" chart_type="line" show_btc="false" portfolio_id=""
ParameterDefaultAccepted values
height"400"numeric pixels
theme"dark""dark" | "light"
show_controls"true""true" | "false"
time_range"all""24h" | "7d" | "1m" | "3m" | "1y" | "all"
chart_type"line""line" | "area"
show_btc"false""true" | "false" — overlay Bitcoin ROI
portfolio_id""numeric ID, or empty for the default portfolio
crypto_portfolio_pie

Donut / pie chart showing how your portfolio is distributed across assets by current market value.

crypto_portfolio_pie theme="dark" height="320" title="" layout="vertical" max_items="7" portfolio_id=""
ParameterDefaultAccepted values
theme"dark""dark" | "light"
height"320"numeric pixels
title""any string — displayed as chart heading
layout"vertical""vertical" | "horizontal" — legend position
max_items7positive integer — coins beyond this are grouped as "Other"
portfolio_id""numeric ID, or empty for the default portfolio
crypto_portfolio_performance

7 period cards showing P/L change for each time period — % change, $ change, and a sparkline SVG. Periods: 24H · 7D · 1M · 3M · 180D · 1Y · ALL.

crypto_portfolio_performance theme="dark" periods="24h,7d,1m,3m,180d,1y,all" show_values="true" show_current_value="true" portfolio_id=""
ParameterDefaultAccepted values
theme"dark""dark" | "light"
periods"24h,7d,1m,3m,180d,1y,all"comma-separated list of periods to display
show_values"true""true" | "false" — hide $ amounts (useful for public embedding)
show_current_value"true""true" | "false" — show current portfolio value in card header
portfolio_id""numeric ID, or empty for the default portfolio
Inline values

These shortcodes output a single formatted number — useful for embedding live values directly inside paragraphs or headings.

Example: "As of today my portfolio is worth crypto_portfolio_total_current."

ShortcodeOutput
crypto_portfolio_total_purchaseTotal cost basis — sum of all purchase costs
crypto_portfolio_total_currentCurrent market value of all holdings
crypto_portfolio_invested_capitalTotal new funds invested (excludes stablecoin conversions)
crypto_portfolio_profitTotal P&L in USD — color-coded green (profit) or red (loss)
crypto_portfolio_real_profitRealized P&L in USD from sold assets
crypto_portfolio_real_profit_percentRealized P&L as a percentage

All inline shortcodes accept a portfolio_id parameter:

crypto_portfolio_profit portfolio_id="2"
Tips for content creators

Use theme="light" on light-colored sites and theme="dark" on dark themes.
Embed crypto_portfolio_roi show_btc="true" to let readers see how your portfolio compares to simply holding Bitcoin.
Use crypto_portfolio_pie layout="horizontal" in narrow columns or sidebars.

📤 Social Share

The Social Share widget lets you generate a snapshot image of your portfolio and share it directly to X/Twitter, Discord, Telegram, or copy it as text. Find it on the main Crypto Portfolio → Dashboard page.

Generating the image

1
Click "Generate Image"

The plugin renders a snapshot of your current portfolio as an SVG image directly in the browser. No external service is used.

2
Preview the result

The generated image appears in the preview panel on the left side of the widget.

3
Download or share

Use the toolbar buttons below the preview to save or share the image.

Toolbar buttons

ButtonWhat it does
Download SVGSaves the generated image as an .svg file to your computer. SVG is a vector format — it stays sharp at any size.
Copy Image URLCopies a direct URL to the SVG file hosted on your WordPress site.

Share buttons

X / Twitter

Opens a pre-filled tweet in a new tab with your portfolio summary and a link.

Discord

Copies a Discord-formatted embed code to your clipboard.

Telegram

Opens a pre-filled Telegram share link.

Copy as Text

Copies a plain-text portfolio summary to the clipboard.

⚠️
SVG and social platform compatibility

Some platforms (including X/Twitter) do not support direct SVG uploads. Use Copy Image URL to share a link instead, or take a screenshot for a PNG version you can upload directly.

💾 Import & Export

Go to Crypto Portfolio → Import & Export to back up your data, move it between sites, or analyze it in a spreadsheet.

Exporting data

FormatContainsBest for
JSONTransactions, snapshots, portfolio settings, notesFull backups & migrating between WordPress sites
CSVTransactions and notes only (no snapshots)Spreadsheet analysis, tax calculations, Excel / Google Sheets
ℹ️
JSON preserves everything — CSV does not

Only JSON export includes your historical snapshots. Use JSON for backups you intend to restore from.

CSV column format

Date, Type, Coin ID, Coin Symbol, Amount, Price USD, Fee, Notes

Download a blank template from the Import & Export page (Download Template button).

Importing data

1
Choose a file

Click Choose File and select a .json or .csv file. Maximum file size: 10 MB.

2
Preview & validate

The plugin validates the file and shows a preview: format, date range, number of transactions, and unique coins.

3
Choose an import mode
Create New

Creates a brand-new portfolio from the file. Existing portfolios are untouched.

Merge

Adds the imported transactions to an existing portfolio. Duplicate detection prevents adding the same transaction twice.

Replace

Deletes all existing transactions in the target portfolio, then imports the file. Use this to fully restore from a backup.

4
Confirm & import

Click Import. The plugin processes the file and reports how many transactions were added, skipped (duplicates), or failed.

Recommended backup schedule

  • Monthly JSON backup — full restore capability including snapshots
  • After major changes — export before bulk-editing or deleting transactions
  • Before plugin updates — always good practice
⚠️
Replace mode is irreversible

Replace mode deletes all existing transactions in the target portfolio before importing. Export a JSON backup first.

🔑 API Settings

The plugin fetches cryptocurrency prices from CoinGecko. Go to Crypto Portfolio → API Settings to configure your API key.

Free (Demo) vs Pro API

Demo — Free
  • API key Required (free account)
  • Rate limit 30 calls / minute
  • Monthly cap 10,000 calls
  • Coin cache Top 250 coins
  • Endpoint api.coingecko.com
  • Cost Free, no credit card
Pro — Paid
  • API key Required
  • Rate limit 500–1,000 calls / minute
  • Monthly cap 500,000 calls
  • Coin cache Top 500 coins
  • Endpoint pro-api.coingecko.com
  • Cost From $129 / month
⚠️
No API key at all = very low limits

Without any API key the plugin uses the anonymous public endpoint, capped at just 5–15 calls/minute shared across all users. Registering a free Demo key raises this to a stable 30 calls/minute — it takes 2 minutes and requires no payment.

Get a free Demo key — it takes 2 minutes

Register at coingecko.com, open the Developer Dashboard, and click Add New Key. No credit card required.

Configuring an API key

1
Get a free API key from CoinGecko

Register at coingecko.com/en/developers/dashboard and create a Demo API key. It looks like: CG-xxxxxxxxxxxxxxxxxxxxxxxx

2
Select API type

Set the dropdown to Demo (Free) or Pro to match your CoinGecko plan.

3
Paste the key and save

Paste your key into the API Key field and click Save Settings.

Troubleshooting 429 errors

HTTP 429 means "Too Many Requests" — CoinGecko has temporarily rate-limited your IP or API key.

  • Wait 15–20 minutes. CoinGecko rate limits reset automatically.
  • Do not spam the Refresh Cache button. Clicking it repeatedly while rate-limited will extend the lockout.
  • Add a Demo API key if you are using the plugin without one.
  • Upgrade to a Pro key if 429 errors happen regularly.
ℹ️
Prices still show while rate-limited

The plugin caches the last successful price fetch. Even during a 429 lockout, your portfolio will display the most recently cached prices.

FAQ

No. The plugin works out of the box using the public CoinGecko endpoint — no account or API key required. Adding a free Demo API key is recommended because it gives you a stable rate limit (30 req/min) and enables the top-250 coin price cache.

You can get a free Demo key at coingecko.com/en/developers/dashboard.

Charts require snapshot data. Fix it in two steps:

  1. Go to Crypto Portfolio → Snapshots and click Save Snapshot Now.
  2. The hourly cron will add more snapshots automatically going forward.

The performance chart needs at least two snapshots at different points in time to draw a line.

  • Type the full coin name instead of the ticker symbol.
  • Try the coin's CoinGecko ID (e.g., bitcoin, ethereum, uniswap).
  • Go to API Settings and click Refresh Cache Now.
  • Add a Demo API key — it expands the cache from 250 to 500 coins.

Prices are cached locally and refreshed approximately every 5 minutes. This plugin is designed for long-term portfolio tracking, not real-time trading.

Yes — with the optional Sakurato CPT Pro add-on. The free plugin supports one portfolio. With CPT Pro installed you can create unlimited portfolios, each with its own transaction history, charts, and shortcodes.

crypto_portfolio portfolio_id="2"
crypto_portfolio_chart portfolio_id="3"

Total purchase cost is the sum of all buy transactions — every USD spent acquiring coins, regardless of payment source.

Invested capital counts only the real new money you brought into the system. Buys funded from USDT or USDC you already held are excluded.

Example: you deposit $1,000 → buy USDT → buy BTC with that USDT. Invested capital = $1,000, total purchase cost = $2,000.

There is no direct exchange integration. However, most exchanges let you export your trade history as a CSV. Reformat that CSV to match the plugin's column format:

Date, Type, Coin ID, Coin Symbol, Amount, Price USD, Fee, Notes

The Coin ID column must contain the CoinGecko ID (e.g., bitcoin, not BTC).

All data is stored exclusively in your own WordPress database — on your server, under your control. Sakurato never receives, accesses, or stores any of your portfolio data.

The only external connection the plugin makes is to CoinGecko for live cryptocurrency prices. Only coin identifiers (e.g., bitcoin, ethereum) are sent — no personal data, no transaction amounts, no portfolio values.

Shortcodes embedded on public pages do display portfolio data to anyone who visits that page. If you want to keep your portfolio private, place shortcodes on password-protected pages or member-only content.

When you delete the plugin through the WordPress admin, the uninstall routine permanently removes all plugin data from your database: portfolios, transactions, snapshots, settings, and scheduled cron jobs.

Simply deactivating (without deleting) does not remove any data. Always export a JSON backup before uninstalling.

🔧 Troubleshooting

Common issues and how to resolve them.

Charts are empty or show "No data available"

Cause: No snapshots have been saved for this portfolio.

  • Go to Crypto Portfolio → Snapshots and click Save Snapshot Now.
  • The performance chart needs at least two snapshots at different times to draw a line.
  • Verify you are using the correct portfolio_id in the shortcode.
Portfolio table shows $0.00 for all prices

Cause: Prices have not been fetched yet, or a 429 rate-limit error occurred.

  • Go to API Settings and check the cache status. If it shows an error, click Refresh Cache Now.
  • If you see a 429 error, wait 15–20 minutes and try again — do not click Refresh repeatedly.
Shortcode outputs nothing on the frontend

Cause: The shortcode is placed in a context where it is not rendered, or the portfolio has no transactions.

  • Make sure you are logged in as the portfolio owner — shortcodes display the current user's data.
  • Add at least one transaction to the portfolio before embedding shortcodes.
  • In Elementor, use a Shortcode widget or HTML block rather than pasting into a text field.
Automatic snapshots are not being saved

Cause: WordPress cron depends on site traffic. On low-traffic sites, the hourly job may not fire on schedule.

  • Verify the cron is registered: install WP Crontrol and check for the cpt_record_snapshot event.
  • If the event is missing, deactivate and reactivate Crypto Portfolio Tracker.
  • For reliable scheduling, set up a real server cron to call wp-cron.php every hour.
Import fails or shows "Invalid file format"

Cause: The file does not match the expected format, or exceeds the 10 MB size limit.

  • For JSON: the file must contain an export_version field and a transactions array.
  • For CSV: the header row must match exactly: Date, Type, Coin ID, Coin Symbol, Amount, Price USD, Fee, Notes.
  • Make sure Coin ID contains the CoinGecko ID (e.g., bitcoin), not the ticker (BTC).
"Multiple portfolios require Sakurato CPT Pro" error

Cause: The free plugin supports one portfolio only.

  • You can continue using the existing portfolio — all free features remain fully available.
  • To create additional portfolios, install the Sakurato CPT Pro add-on available at sakurato.tech.
Reports shows only summary metrics — where are the transaction tables?

Cause: Full transaction tables (Buy, Sell, Withdrawal, Tax Summary) are part of the Sakurato CPT Pro add-on. The free plugin shows period summary metrics only.

  • This is expected behaviour — not a bug.
  • Install Sakurato CPT Pro (available at sakurato.tech) to unlock full Buy/Sell/Withdrawal/Tax tables, charts, and CSV export per section.
P&L figures look incorrect after editing a transaction

Cause: Metrics are recalculated on page load, but a cached value may be stale.

  • Reload the admin page after saving a transaction edit.
  • Verify the transaction type and payment source are set correctly.
  • Check for duplicate transactions: two identical buys will double the cost basis.
The "Refresh Cache Now" button spins indefinitely

Cause: A previous cache refresh is still running, or the request timed out.

  • Wait 30 seconds and reload the API Settings page.
  • Check your server's PHP execution time limit (max_execution_time). A limit below 30 seconds may cause the request to time out.
Unlock the full potential of your portfolio

The free version tracks one portfolio and covers all the basics.
Premium removes every limit — manage multiple portfolios, get advanced analytics, and stay ahead of the market with the full feature set.

One-time purchase per site · 14 -day money-back guarantee