TRC20 Transaction History: How to Export to CSV for Bookkeeping with Tronscan and the API

How to export the TRC20 transaction history of an address: Tronscan CSV, paginated USDT export via the TronGrid API, fees in TRX and energy, and cleanup before bookkeeping.

Overtron Editorial

Short answer: your TRC20 transaction history lives on the TRON blockchain and anyone can look it up by wallet address. To use it for bookkeeping, you can export it two ways: the CSV export button on the address page in Tronscan, which is fast but limited in volume and date range, or the TronGrid API, which lets you pull every USDT transfer for any period page by page. Export fees in TRX and burned energy separately, because the token transfer list usually doesn't include them.

A stack of glass sheets with a grid of glowing cells inside a brushed metal archive box, representing TRC20 transaction history exported to a spreadsheet for bookkeeping
The blockchain keeps an address's full history, but for bookkeeping you need to pull it into a spreadsheet and clean it up

Why export your USDT transfer history

A wallet app shows recent activity, but it is not an accounting record: there are no filters by period, counterparty, or fees, and if you switch apps the history disappears from the interface. On the blockchain it stays forever, so an export is simply a way to get the data into a usable format.

You usually need an export in four situations:

  • Reconciling with your accountant or a partner report: how much USDT came in and went out this month.
  • Calculating network fee costs: how much TRX was burned and how much energy your transfers used.
  • Investigating a disputed payment: finding the hash, time, and sender address for a specific date.
  • Preparing data for a tax return. How to treat each transaction depends on the laws of your country and your accountant; this article is not tax advice.

What an address history includes and what it doesn't

A single TRON address has several kinds of records, and different exports store them separately:

  • TRX transfers: regular transactions moving the native coin.
  • TRC-20 token transfers (USDT and others): smart contract calls that emit a Transfer event. These are what Tronscan shows in the token transfers tab.
  • System operations: freezing TRX, energy delegation, voting, permission changes, approve.
  • Fees: how much bandwidth and energy was consumed and how much TRX was burned when you lacked resources. These are fields in a transaction's receipt, not separate transactions.

One detail that matters for bookkeeping: a failed transaction with REVERT or OUT_OF_ENERGY status does not move USDT, so it is missing from the token transfer list. But the TRX for it was burned, and it belongs in your fee expenses.

What transaction statuses mean and how to read them is covered in how to check a TRC20 transaction, and why TRX burns on REVERT is explained in failed TRON transactions.

How to export TRC20 transaction history from Tronscan to CSV

This is the simplest route and requires no coding. It works well when you have few transactions and need a one-time report.

  • Open tronscan.org and paste the wallet address into search. No keys or seed phrase needed: the history is public.
  • Go to the Transfers tab and choose the TRC-20 tokens section.
  • Filter by the USDT token. Check the contract address: genuine USDT on TRON is TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t.
  • Set the period. Calendar months are the most convenient unit for bookkeeping.
  • Click the download button (Export / Download CSV). Tronscan may ask you to pass a captcha.
  • Open the file in Excel or Google Sheets. If characters or numbers look wrong, import it via Data → From Text/CSV with UTF-8 encoding and a comma delimiter.

Know the limits in advance. Tronscan caps the size and date range of a single export, and its interface changes over time. If your history is long, export month by month and check that the row count matches the number of transactions on the page. The token transfer export usually has no fee column, so fees are pulled separately.

Where to find resources, delegation, and permissions on an address page is covered in our Tronscan guide.

How to get TRC20 transaction history via API

If you have hundreds or thousands of transactions, or need the report regularly, the API is more practical. TronGrid has a dedicated endpoint for TRC-20 transfers by address:

GET https://api.trongrid.io/v1/accounts/<address>/transactions/trc20?contract_address=TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t&limit=200

Parameters that matter for bookkeeping:

  • contract_address keeps only USDT and filters out spam tokens.
  • limit sets records per page; per the documentation, the maximum is 200.
  • fingerprint is the next-page marker from the meta.fingerprint field of the previous response. Keep requesting pages as long as it is returned.
  • min_timestamp and max_timestamp set the period boundaries in milliseconds.
  • only_confirmed=true returns confirmed transactions only, so nothing that hasn't settled ends up in your report.
  • only_to or only_from returns incoming or outgoing transfers only.

Each record includes transaction_id (the hash), block_timestamp, from, to, value, and token_info with the number of decimals. For a report, make three conversions: divide value by 10 to the power of decimals (USDT has six, so 1,000,000 in value equals 1 USDT); convert the time from UTC milliseconds to your time zone; and determine direction by comparing from and to with your own address.

Without an API key, strict request limits apply. A free key is issued in the TronGrid dashboard and passed in the TRON-PRO-API-KEY header. The key only grants read access to public data and has nothing to do with your funds.

The full method description and parameters are in the TronGrid documentation.

How to add fees to your report: energy and burned TRX

The TRC-20 transfers endpoint does not return fees. You get them per transaction hash with the gettransactioninfobyid method. The response has a fee field with the TRX burned, in SUN (1 TRX = 1,000,000 SUN), and a receipt: energy_usage_total is the total energy for the transaction, energy_fee is the SUN burned for missing energy, and net_usage and net_fee are the same for bandwidth.

Reference points for sanity checks: a USDT transfer to an address that already holds USDT uses about 64,500–65,000 energy; to an empty address, roughly twice as much, about 131,000. With no own or rented energy, the network burns about 6.5 TRX, or about 13 TRX for an empty address. If identical transfers in your export show noticeably different usage, check whether the contract had a higher dynamic energy multiplier that day.

What a TRON fee consists of is explained in energy, bandwidth, and SUN explained.

How to clean up the export before bookkeeping

  • Remove zero and dust incoming transfers from look-alike addresses. They are traces of an address poisoning attack, not real payments.
  • Keep only contract TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Tokens named USDT with a different contract are fakes.
  • Remove duplicates by hash: with paginated exports, one record can appear twice at a page boundary.
  • Separate transfers between your own wallets from external ones, or your turnover will be double counted.
  • Keep the hash in every row: it lets you verify any transaction on Tronscan years later.
  • For exchange deposits and withdrawals, also download the exchange's own statement. On-chain you only see its hot wallet addresses, and internal exchange operations never reach the network.

How to spot poisoned transfers in your history and avoid copying a scammer's address is covered in address poisoning attacks.

What to do with your fee total

An export with fee and energy_usage_total shows what you actually pay the network. If your report has many rows with burned TRX, your transfers went out without energy. For frequent transfers, renting solves this: energy is delegated to your address for a set period, and you never share keys or wallet access.

You can calculate and buy TRON energy for your transfers on our site. The final cost depends on the market and rental period, and delivery speed depends on the network and providers.

The blockchain already keeps the books for you. Your job is to pull the data correctly: transfers separately, fees separately, and a hash in every row.

Want fewer burned TRX in your next export? Calculate energy for your address in @overtronbot.

Read also

FAQ

Where can I see the TRC20 transaction history of an address?

On tronscan.org: paste the address into search and open the TRC-20 token transfers tab. The history is public, and you don't need any keys to view it.

How do I download USDT TRC20 transaction history to Excel?

On the address page in Tronscan, select the USDT token and a period, click the CSV export button, and open the file in Excel via CSV import with UTF-8 encoding.

Why doesn't the Tronscan export include all my transactions?

The export is limited in size and date range, and failed transactions don't appear in the token transfer list. Export month by month or use the API with pagination.

How do I find out how much TRX I spent on fees this month?

Get the fee field for each transaction hash with gettransactioninfobyid and add up the values for the period. Fee is in SUN: 1 TRX = 1,000,000 SUN.

Can I export the history without an API key?

Yes, via CSV on Tronscan or the TronGrid API without a key, but with tight request limits. For regular or large exports, a free TronGrid key is more convenient.

Is it risky to share my address so someone can export my history?

Your address is already public and only allows viewing history. Sharing your seed phrase or private key is what's dangerous, and an export never needs them.

Why are there 0 USDT transfers in my history that I never made?

Usually it's an address poisoning attack: a scammer sends a transfer from a look-alike address hoping you'll copy it. Remove these rows from your records.

Will transfers between my exchange accounts show up on-chain?

No. Internal exchange operations never reach the blockchain. Only deposits and withdrawals are visible, so complete records also need the exchange's own statement.