# Recover Missing Solana Transactions for Koinly & CoinLedger (`sefran1/solana-wallet-tax-export`) Actor

Recover Solana transactions your Koinly or CoinLedger sync missed: closed token accounts, pump.fun trades and fees. Get a correction CSV (Koinly, CoinLedger, Awaken) plus a fix list of transactions that need review. Free preview first. Public address only.

- **URL**: https://apify.com/sefran1/solana-wallet-tax-export.md
- **Developed by:** [Iberia Channel Desk](https://apify.com/sefran1) (community)
- **Categories:** Developer tools, AI, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 export credits

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Missing Solana transactions in Koinly or CoinLedger? Recover them here

Your tax tool synced your Solana wallet, but trades are missing, balances are off, or pump.fun fees never showed up. That usually happens because tokens bought and sold on pump.fun sit in **token accounts that were closed afterwards**, and most wallet syncs only read the accounts that still exist.

This Actor takes a **public Solana wallet address**, finds those closed token accounts in the wallet’s own history, reads their transactions, and gives you:

1. A **correction CSV** for a **Koinly** universal import, **CoinLedger** universal import, or **Awaken**, including the recovered trades and pump.fun fees.
2. A **fix list**: a factual list of transactions that need review (what, when, signature), such as recovered closed-account round trips, creator-fee receipts, token-creation costs, burns, dust and unsolicited tokens.

**Free preview first.** Check any wallet at [api.stillroach.com/docs/wallet-export](https://api.stillroach.com/docs/wallet-export) and see the first rows and fix-list counts, including how many closed token accounts were found, before you pay for anything.

The Actor uses a public address only. It never asks for a private key, seed phrase, or exchange login.

> **What this is, and is not.** Stillroach is a software export tool. It retrieves publicly visible Solana transaction data for the address you submit, formats supported records for import into third-party software, and flags records that need review. It does not calculate tax, determine tax treatment or cost basis, recommend a filing position, prepare or submit a tax return, or provide legal, accounting, financial, or tax advice. The export may be incomplete. Check it against your other records and consult a qualified tax professional for your jurisdiction before filing.

### Why use this to recover missing Solana transactions?

- **Recover closed token accounts.** The export finds token accounts that were opened and closed again, including closed ATAs and temporary wrapped-SOL accounts, and crawls them for their transactions. The `coverage` output shows how many it found.
- **Recover pump.fun trades and fees.** It recognizes pump.fun, PumpSwap, Jupiter, Raydium, and other DEX swaps, and flags pump.fun token-creation costs and creator-fee receipts as transactions that need review.
- **Get a fix list with the correction CSV.** Every recovered or unusual item is counted or listed. The list is factual. It does not say how any item should be treated for tax.
- **Avoid double counting.** Import the correction CSV into a separate file-import wallet, or remove the synced transactions for the same address first, so the same transactions are not imported twice.
- **Choose a destination format.** Koinly universal CSV, CoinLedger universal import CSV, Awaken CSV, or any combination.
- **Run it through Apify.** Start a run in the Console, schedule it, call the Apify API, or run it through an AI agent. Results stay in the run’s storage.

### What data does the Solana wallet export produce?

| Output | Where | What it is |
|---|---|---|
| `koinly-csv` | Key-value store | Koinly universal CSV |
| `coinledger-csv` | Key-value store | CoinLedger universal import CSV |
| `awaken-csv` | Key-value store | Awaken CSV |
| `fix-list-md` | Key-value store | Transactions that need review before import |
| `rows` | Dataset | Number of CSV rows |
| `counts` | Dataset | Trades, receives, sends, burns, creator-fee receipts (key `income`), costs, complex, failed |
| `fix_list_counts` | Dataset | Dust/spam, unsolicited tokens, burns to review, recovered closed token accounts, and more |
| `coverage` | Dataset | Wallet signatures read, current token accounts found, and closed token accounts found |
| `truncated` | Dataset | `true` if the wallet has more transactions than the selected size |

### How to export Solana transactions to CSV for Koinly, CoinLedger, or Awaken

1. Enter your **public Solana wallet address**.
2. Choose how many of the newest transactions to cover: **up to 1,000** or **up to 5,000**.
3. Click **Start** and wait for the export. Busy wallets can take longer.
4. Open **Storage → Key-value store** and download `koinly-csv`, `coinledger-csv`, or `awaken-csv`.
5. Read `fix-list-md` (the transactions that need review), then import the CSV into your tax tool as a custom or universal CSV file.

Use `koinly-csv` for a Koinly Solana import, `coinledger-csv` for a CoinLedger Solana import, or `awaken-csv` for an Awaken Solana CSV import.

#### Koinly Solana import: upload the CSV

In Koinly, add a wallet, choose **Import from file**, and upload `koinly-csv`. If you already synced the same address, remove those synced transactions first so the same transactions are not imported twice.

#### Why might CoinLedger or Koinly be missing Solana transactions?

Most wallet syncs read the main address and the token accounts that still exist. Tokens bought and sold on pump.fun often use token accounts that are closed afterwards, so those trades may not appear in the sync. This export finds closed token accounts from the wallet’s own history and includes their transactions.

#### Pump.fun trades: what this export includes

This export records each pump.fun buy and sell with its SOL and token amounts, and flags token-creation costs and creator-fee receipts as items to review. It does not decide how any of them is treated for tax. That depends on where you live, so ask your tax tool's support or a qualified tax professional.

### How much does a Solana wallet tax export cost?

This Actor is **pay per event**. You pay only for a **finished export with at least one row**.

| Export | Price |
|---|---:|
| Up to 1,000 transactions | $5.00 |
| Up to 5,000 transactions | $15.00 |

#### Credits and prices (one table)

Apify shows pay-per-event prices per 1,000 events, so the charge is billed in **Actor export credits at $0.005 each**. That is why the price card reads "$5.00 / 1,000 export credits".

| Export | Actor export credits charged here | Price here (Apify) | Same export bought directly on api.stillroach.com |
|---|---:|---:|---|
| Up to 1,000 transactions | 1,000 credits × $0.005 | **$5.00** | 100 pack credits = 5 USDC |
| Up to 5,000 transactions | 3,000 credits × $0.005 | **$15.00** | 300 pack credits = 15 USDC |

- **Actor export credits and Stillroach pack credits are different units and cannot be exchanged.** An Actor credit is $0.005; a pack credit is $0.05 (1 pack credit = 10 Actor credits in dollar terms). Credits bought on one side are not usable on the other.
- The dollar price per export is the same on both sides. You never pay more than the table above for one export. Direct purchases do not include Apify billing, and Apify's own fees and taxes are shown by Apify.
- Direct pack credits are valid for 365 days and are bought in packs of 100 credits at [api.stillroach.com](https://api.stillroach.com/docs/wallet-export).

**Invalid input, empty wallets, timeouts, and upstream errors are free.** The free preview linked above shows a wallet’s first rows before you pay. Set **Max cost per run** to at least the price of one export.

### Input

See the **Input** tab for all options. Only `wallet` is required.

```json
{ "wallet": "YourPublicSolanaAddress", "tier": "up_to_1000", "formats": ["koinly", "coinledger", "awaken"] }
```

### Output

Each run produces one dataset item, which you can download as JSON, CSV, Excel, or HTML, plus the selected CSV files in the key-value store.

```json
{
  "status": "done",
  "wallet": "86xC…2MMY",
  "tier": "up_to_1000",
  "rows": 761,
  "truncated": true,
  "bigger_tier": "up_to_5000",
  "counts": { "transactions": 1000, "trades": 0, "receives": 758, "burns": 3, "failed": 82 },
  "fix_list_counts": { "dust_spam": 12, "unsolicited_tokens": 179, "tokens_without_ticker": 86, "closed_token_accounts_recovered": 0 },
  "files": { "koinly": "https://api.apify.com/v2/key-value-stores/…/records/koinly-csv", "fix_list": "…/records/fix-list-md" },
  "charged": true
}
```

### Tips

- If `truncated` is `true`, the wallet has more history than the selected size. Run again with `up_to_5000` to cover more.
- Each export covers the wallet’s newest transactions. If you need a full tax year for a very busy wallet, check the period covered at the top of the fix list.
- Run it from code with the Apify API, or call it from an AI agent through Apify’s MCP server. See the **API** tab for examples.

### FAQ, disclaimer, and support

**Is my wallet safe?** The Actor only reads public on-chain data for the address you provide. Never enter a private key or seed phrase.

**Is this tax advice?** No. This is a software export tool: it formats public Solana data and flags transactions that need review. It does not calculate tax, determine tax treatment or cost basis, recommend a filing position, or prepare a return. The export may be incomplete, so check it against your other records and consult a qualified tax professional before filing.

**Why are transactions missing from my Koinly or CoinLedger Solana sync?** Most syncs read the main address and token accounts that still exist. Closing a token account removes its live state but does not rewrite the earlier confirmed transactions, so those transactions can still be found from the wallet’s history. This export looks for them. If a transaction still does not appear, the export may be incomplete, and the fix list shows what period it covered.

**Will a complex DEX transaction show up as one swap?** Solana records instructions and inner instructions, not a universal "swap" label. Recognized swaps are written as trades; transactions the parser cannot map cleanly are counted as `complex` and listed in the fix list for review.

**Does it cover NFTs and compressed NFTs?** Regular token transfers are included. Compressed NFTs use a different data model and are not decoded; they may appear in the fix list or not at all.

**Will Koinly or CoinLedger accept the file?** The CSVs follow each tool’s published universal/custom CSV template. Import rules can change, so check the import preview in your tax tool before confirming.

**Privacy.** Solana addresses and their activity are public. A CSV you share reveals the activity it contains, so share it only with people you trust.

**Something looks wrong?** Open an issue in the **Issues** tab with the run ID and what you expected. We read every one.

The Actor reads only public data from the Solana blockchain. Wallet addresses can still be personal data in some places, including under the GDPR in the European Union. Only export wallets you own or have a legitimate reason to process. If you’re unsure, consult your lawyers.

# Actor input Schema

## `wallet` (type: `string`):

Replace the example with your public Solana address (base58). The example address is empty, so a run with it returns no rows and is free. Only public on-chain data is read. Never paste a private key or seed phrase.

## `tier` (type: `string`):

How many of the wallet's newest transactions to cover. If the wallet has more, the result says so and older history is not included.

## `formats` (type: `array`):

Which tax tool CSVs to save to the key-value store. All three are saved by default.

## `maxWaitSecs` (type: `integer`):

How long to wait for the export to finish. If it takes longer, the run stops and nothing is charged.

## Actor input object example

```json
{
  "wallet": "GAa95LKudEvusFSYtV8aLLXDcespaQu1m6u1bSrTdGZc",
  "tier": "up_to_1000",
  "formats": [
    "koinly",
    "coinledger",
    "awaken"
  ],
  "maxWaitSecs": 900
}
```

# Actor output Schema

## `summary` (type: `string`):

No description

## `koinly` (type: `string`):

No description

## `coinledger` (type: `string`):

No description

## `awaken` (type: `string`):

No description

## `fixList` (type: `string`):

No description

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "wallet": "GAa95LKudEvusFSYtV8aLLXDcespaQu1m6u1bSrTdGZc"
};

// Run the Actor and wait for it to finish
const run = await client.actor("sefran1/solana-wallet-tax-export").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "wallet": "GAa95LKudEvusFSYtV8aLLXDcespaQu1m6u1bSrTdGZc" }

# Run the Actor and wait for it to finish
run = client.actor("sefran1/solana-wallet-tax-export").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "wallet": "GAa95LKudEvusFSYtV8aLLXDcespaQu1m6u1bSrTdGZc"
}' |
apify call sefran1/solana-wallet-tax-export --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sefran1/solana-wallet-tax-export"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5Qii4v8SV84yPZm9f/builds/GeA03GZSIsCEyV4Vw/openapi.json
