Parse any crypto CSV or bank PDF.One API call.
Auto-detection, structured JSON output, and tax-ready formatting — built for developers and AI agents.
Integration
Three lines to parse.
Any language.
Send a base64-encoded file. Get structured JSON back. Auto-detects exchanges, normalizes dates, converts formats.
import requests
response = requests.post(
"https://api.taxformatter.com/v1/parse",
headers={"X-API-Key": "tf_live_sk8f2m..."},
json={
"file_content": base64_encoded_csv,
"filename": "coinbase_2024.csv",
"output_format": "koinly"
}
)
data = response.json()
print(f"Parsed {data['metadata']['transaction_count']} txs")
for tx in data["transactions"]:
print(f" {tx['Date']} {tx['Type']} {tx['Amount']}")Give your AI agent
financial sight.
One install. Your agent can parse crypto CSVs and bank statements without you writing a single line of integration code.
npx @taxformatter/mcp-serverWorks with Claude Code, Cursor, Windsurf, and any MCP-compatible client.
Add to your MCP config
{
"mcpServers": {
"taxformatter": {
"command": "npx",
"args": ["@taxformatter/mcp-server"],
"env": {
"TAXFORMATTER_API_KEY": "tf_live_..."
}
}
}
}Ask your agent to parse files
You say:
“Parse my Coinbase CSV from Downloads and tell me my total capital gains for 2024.”
3 MCP tools exposed
Your agent gets these capabilities automatically.
parse_crypto_csv
Parse any exchange CSV — auto-detects Coinbase, Binance, Kraken, and 11 more. Returns structured transactions in your chosen tax format.
parse_bank_statement
Extract transactions from bank statement PDFs. Supports Chase, Mercury, Navy Federal, and more. Auto-detects the bank.
list_supported_sources
Query all supported crypto exchanges, banks, and output formats. Perfect for building dynamic UIs or agent prompts.
What it parses
One endpoint. Every format.
POST a file to /v1/parse — the API handles detection, normalization, and conversion.
Crypto Exchanges
14✓verified by a fixture-backed parse test in CI — beta exchanges parse but have no fixture yet
Bank PDFs
6✓verified against real statements — beta banks are configured but not yet verified
Output Formats
Set output_format in your request. Default: Koinly.
statussummarydetected_sourcesource_typetransactions[]warnings[]metadata.processing_time_msmetadata.transaction_countPricing
One plan, two ways to use it.
Drop a file in the dashboard or call our API. Same quota, same categorization, same plan.
Free
Try it. No credit card.
- 25 files / month
- 10 requests / minute
- All 14 exchanges
- Standard insights
- JSON response
No credit card required
Starter
Solo work and side projects.
- 100 files / month
- 30 requests / minute
- All 14 exchanges
- Standard insights
- JSON response
Growth
Teams and SaaS apps. Bank PDFs unlocked.
- 500 files / month
- 60 requests / minute
- Bank PDF parsing
- Advanced insights
- All output formats
- Priority support
Business
High-volume processing, deepest insights.
- 2,000 files / month
- 120 requests / minute
- Everything in Growth
- Premium insights
- Custom integrations
Security
Engineered for paranoia.
We assume your data is toxic. Our system is designed to touch it, fix it, and let go of it within 30 days.
Deleted Within 30 Days
Your financial data is a liability. Uploads, outputs, and parsed rows are deleted within 30 days — sooner the moment you delete them from your dashboard. API payloads are never stored at all.
The Diff Guarantee
Don't trust "magic." Our engine fixes formats, not financials. We provide a cell-level audit trail for every modification. Verify every single decimal point.
No Credentials, Ever
We never ask for exchange API keys, bank logins, or wallet keys. You upload the export files your exchange or bank already gives you — there is nothing to connect and nothing we could withdraw.
API data handling
API request bodies are parsed in memory and never written to S3 or the database. Nothing from the payload outlives the invocation.
Per request we keep the key id, endpoint, status code, byte size, latency, detected source, error code, and caller IP for rate limiting — never file contents or transaction rows. Every response carries processing_time_ms in its metadata.
API keys are one-way hashed at rest. Even in a full database breach, your active keys are unreadable. Keys are prefixed tf_live_ for identification only.
Every request to api.taxformatter.com is TLS-encrypted between your app and our API Gateway. No plaintext financial data touches the wire.
Before you integrate
Things devs actually ask.
No fluff. Real answers about the API, MCP server, and how it all works.
The straight answer.
Header fingerprinting. Every exchange exports slightly different column names and ordering. We hash the headers against our registry of 14 known formats and match instantly. If we can't match, we fall back to a generic parser that looks for date + amount columns. You can also pass the exchange name explicitly to skip detection.