Accepting cryptocurrency payments introduces new considerations for your accounting workflow. This guide covers best practices for tracking, reconciling, and reporting crypto transactions.
Record-Keeping Fundamentals
For each payment, record:
|-------|-------------|---------|
pay_abc123order_12345a1b2c3...Daily Reconciliation
Step 1: Export Transactions
Download your daily transaction report from the dashboard:
Step 2: Match with Orders
Cross-reference external_id with your order system:
SELECT
o.order_id,
o.total,
p.amount,
p.net_amount,
p.status
FROM orders o
LEFT JOIN payments p ON o.order_id = p.external_id
WHERE p.created_at >= '2025-01-15'
Step 3: Verify Totals
Ensure totals match:
Fee Tracking
Track fees separately for accurate reporting:
Processing Fees (Expense Account)
βββ January: $45.30
βββ February: $52.10
βββ March: $61.20
Access fee details via API:
GET /api/v1/merchant/payments?from=2025-01-01&to=2025-01-31
Response includes fee breakdown:
{
"payments": [...],
"summary": {
"total_gross": 5000.00,
"total_fees": 65.00,
"total_net": 4935.00,
"count": 150
}
}
Tax Considerations
Disclaimer: This is general guidance. Consult a tax professional for your jurisdiction.
Common Approaches
What to Track
Reporting
Monthly Reports
Generate monthly summaries for:
Quarterly Review
Webhook Data for Accounting
Use webhook payloads to automate accounting entries:
app.post('/webhook', async (req, res) => {
const { event, payment } = req.body;
if (event === 'payment.confirmed') {
await createAccountingEntry({
date: new Date(payment.confirmed_at),
gross: payment.amount,
fees: payment.fee_amount,
net: payment.net_amount,
reference: payment.external_id,
tx_hash: payment.tx_hash
});
}
res.status(200).send('OK');
});
Settlement and Withdrawals
Pulse2Pay settles to your specified wallet. Track: