Accointing Integration
Accointing (now part of Glassnode) is a crypto tax service popular in the German-speaking EU market (Germany, Austria, Switzerland), supports German tax legislation (Jahresfrist rule — exemption after 1 year).
Accointing CSV Format
interface AccointingRow {
transactionType: "order" | "deposit" | "withdraw" | "income" | "airdrop" | "staking" | "mining" | "fork" | "ignore";
date: string; // "MM/DD/YYYY HH:mm:ss"
inBuyAmount: string;
inBuyAsset: string;
outSellAmount: string;
outSellAsset: string;
feeAmount: string;
feeAsset: string;
classification: string; // "airdrop" | "staking" | "hard_fork" | "payment" | "cashback" | "gift" | ""
operationId: string;
walletName: string;
walletProvider: string;
}
function exportToAccointing(transactions: InternalTransaction[]): string {
const headers = [
"transactionType", "date", "inBuyAmount", "inBuyAsset",
"outSellAmount", "outSellAsset", "feeAmount", "feeAsset",
"classification", "operationId", "walletName", "walletProvider"
];
const rows = transactions.map(tx => [
mapToAccointingType(tx),
format(tx.timestamp, "MM/dd/yyyy HH:mm:ss"),
tx.amountIn?.toString() ?? "",
tx.assetIn ?? "",
tx.amountOut?.toString() ?? "",
tx.assetOut ?? "",
tx.feeAmount?.toString() ?? "",
tx.feeCurrency ?? "",
mapToAccointingClassification(tx.taxCategory),
tx.id,
tx.walletName ?? tx.source ?? "",
tx.source ?? "",
].join(","));
return [headers.join(","), ...rows].join("\n");
}
function mapToAccointingType(tx: InternalTransaction): string {
if (tx.taxCategory === TaxCategory.TRANSFER) return tx.amountIn ? "deposit" : "withdraw";
if (tx.taxCategory === TaxCategory.STAKING_REWARD) return "deposit";
if (tx.amountIn && tx.amountOut) return "order"; // swap/trade
if (tx.amountIn && !tx.amountOut) return "deposit";
return "withdraw";
}
Special Feature for German Users
Accointing correctly handles the German tax exemption rule after 1 year (Haltefrist). When exporting, it is important not to lose the timestamp — Accointing calculates the holding period itself.
// For German market: rule on staking (can extend holding period)
// With staking reward, Germany in some interpretations
// resets holding period of staked coins — need to explicitly indicate
function markStakingForGermany(tx: InternalTransaction): AccointingRow {
return {
...exportToAccointingRow(tx),
classification: tx.taxCategory === TaxCategory.STAKING_REWARD ? "staking" : "",
// Important: Accointing understands that staking reward creates a new lot
};
}
Accointing integration via CSV export with correct classification for EU market — 2-3 business days.







