Need a crash course on Bitcoin layers?
→ READ OUR FREE GUIDE
Need a crash course on Bitcoin layers?
→ READ OUR FREE GUIDE
Need a crash course on Bitcoin layers?
→ READ OUR FREE GUIDE
Need a crash course on Bitcoin layers?
→ READ OUR FREE GUIDE
Need a crash course on Bitcoin layers?
→ READ OUR FREE GUIDE

How CoinTracker Verifies Stacks Data With Hiro Tools

Hi, this is Khalid Akbary. I’m a Product Manager at CoinTracker, and in this post, I’ll talk about how we were able to launch Stacks support in CoinTracker in just a few weeks, in large part thanks to Hiro tools.

Type
Deep dive
Topic(s)
Stacks
Ecosystem
Published
March 17, 2025
Author(s)
Product Manager, CoinTracker
Cointracker Case Study
Contents

CoinTracker is a product that helps users file their crypto taxes. Our platform ingests all of a user’s exchange and onchain activity, helps them categorize and label their transactions, and ultimately generates the tax forms users need to file in their corresponding jurisdiction.

To date, we’ve helped 2.5M users file their taxes.

Today, we support 500+ crypto integrations across 60+ blockchains, and we enable users to file taxes in 5 different jurisdictions. To date, we’ve helped 2.5M users file their taxes.

For that many users to trust us with their taxes, they must trust that our data is comprehensive and accurate.

The Challenge of Supporting New Ecosystems

When considering adding support for a new ecosystem, we first consider how to get the data. This is one of the most complex parts of building our products.

We need comprehensive transaction data for our users, and we need to understand what comprehensive means for a particular ecosystem integration (understanding transaction format for a particular chain, how their metadata is structured, ensuring we have all the metadata we need, etc.).

And in that hunt for a comprehensive data set, we’ve found that missing data is often a problem. For example, one API may not return specific contract calls as transactions or the data returned by a partner may be incomplete. Oftentimes, specific asset types may be missing from the transaction history endpoints.

So we must do our due diligence and vet every data pipeline we integrate. And depending on the ecosystem, we’ve found several different solutions. For example, we may partner with an exchange or a wallet for one integration. For another, we may partner with a third party node or API provider. Sometimes we even run our own nodes.

Once we have that comprehensive data, we can begin working on the second problem: identifying the transactions we care about and giving them the appropriate category for tax purposes. That can also be a hard problem.

Anyone who has troubleshooted a transaction has felt this problem: it’s often hard to parse the transaction data available onchain to understand what each transaction is actually doing.

This problem is particularly acute for interactions with DeFi apps, where a transaction may return some metadata about what contract function was called, but there’s no context on what that function call does.

To solve this second problem, there’s often a manual process where our team has to check out the DeFi app, look at the contract code, view transactions on explorers, and manually identify a specific transaction’s tax category. Then, we can create a tax category and apply it to any transactions that match the same patterns.

There’s manual overhead in solving both of these problems, but when it came to integrating with Stacks, Hiro tooling helped us with these issues and made verifying balances and categorizing transactions more straightforward, saving our team a lot of time.

Verifying Stacks Data

As for how Hiro helped, we used their tools to help us integrate Stacks in 2 core ways.

Comparing Address Balances

When pulling Stacks data into CoinTracker, there is a question of “is this data accurate?” Further, users can manually add and edit transactions to their CoinTracker account themselves, which changes their token balances and introduces a need to double check their work for accuracy.

API speed and performance add up here — luckily Hiro’s API is highly performant and able to handle the number of requests coming from us.

As we ingest a wallet’s transaction history (and any manual edits from our users), we calculate the running total of each asset held by that wallet, then compare that to Hiro’s account balances endpoint in their Stacks API for validation. This comparison happens daily upon every wallet sync, so API speed and performance add up here — luckily Hiro’s API is highly performant (99.9% uptime) and able to handle the number of requests coming from us.

This helps us ensure we have the complete and accurate transaction history for each wallet, so that we can calculate the user’s taxes with confidence. And if those balances in CoinTracker and from the Stacks API differ, we can prompt our users to review and verify their transactions in CoinTracker and possibly manually add some transactions that our data didn’t pick up.

Interpreting and Labeling Transactions

The other significant way Hiro tools help us at CoinTracker is interpreting transactions. As I mentioned above, once we have all the transaction data, we have to figure out what each transaction is doing to correctly categorize those transactions for tax purposes. For example, depositing an asset into a staking pool may be taxed differently than an asset swap.

So we need to understand all of a user’s transactions to have accurate data for tax purposes, which means we need a solid understanding of an ecosystem’s smart contracts, what different function calls do, and what transactions that interact with those functions are actually doing.

We found Hiro’s block explorer to be one of the most human readable block explorers that we’ve worked with, making this a much smoother process for us.

When it came to Stacks, we found Hiro’s Stacks Explorer to be helpful in getting context on different transactions and understanding them. When looking at function calls, not only do individual transaction pages clearly show what function is being called and from what contract, but the page also lists all of the onchain events triggered by the function call, any post-conditions associated with the contract, and even the source code of the contract itself. We found Hiro’s block explorer one of the most human-readable block explorers we’ve worked with, making this a much smoother process for us.

A screenshot of the Explorer's transaction page

With all of that context, we could confidently apply the right tax category to transactions with our internal labeling system, giving our users more accurate tax forms up front and saving them time.

Conclusion

In just a matter of weeks, we were able to launch Stacks support in CoinTracker, in large part thanks to Hiro tools. If you want to learn more about CoinTracker, or use our tax services for your Stacks transactions, check out our website. Stay tuned for better Stacks asset coverage coming soon and get product updates by following us on X. We’ll be adding prices and logos for more tokens and improving auto-categorization on Stacks.

And if you want to get started with Hiro tooling, check out documentation for the Stacks API and access the Stacks Explorer.

Product updates & dev resources straight to your inbox
Your Email is in an invalid format
Checkbox is required.
Thanks for
subscribing.
Oops! Something went wrong while submitting the form.
Copy link
Mailbox
Hiro news & product updates straight to your inbox
Only relevant communications. We promise we won’t spam.

Related stories