Thank you for helping keep this dataset accurate and up to date. This guide explains how to contribute data changes, add new exchanges, or report outdated information.
- Code of Conduct
- Updating Existing Data
- Adding a New Exchange
- Reporting Outdated Data
- Data Quality Rules
- What Is NOT Accepted
- Running Validation Locally
This is a public data project. Be respectful, factual, and cite your sources. PRs without verifiable sources will be closed without review.
- Fork this repository and create a new branch from
main. - Open
data/exchanges.jsonand locate the exchange you want to update. - Make your change. Common updates:
fees.maker/fees.taker— use decimal notation (see Data Quality Rules)operational_details_br.accepts_pix— booleanoperational_details_br.bcb_authorized— booleanoperational_details_br.cnpj— must match format00.000.000/0000-00
- Update
updated_atto the current UTC datetime in ISO 8601 format:"updated_at": "2026-04-15T00:00:00Z" - Run validation:
npm run validate - Open a Pull Request using the provided template. Include the source URL.
-
Fork and create a branch.
-
Add a new object to the end of the array in
data/exchanges.json. -
Fill in all required fields — see
schema/exchange.schema.jsonfor the complete field list and types. -
Required fields at a glance:
Field Notes idUnique, lowercase, hyphen-separated slug. Must not duplicate an existing id.nameOfficial name as shown on the exchange's website. slugShould match id.websiteFull URI including https://.logo_urlFull URI. Use https://assets.bitsark.com/logos/<id>.svgas a placeholder if you don't have a hosted URL.operational_details_br.cnpjRequired if the exchange has a Brazilian CNPJ. Format: 00.000.000/0000-00. Otherwisenull. Verify on Receita Federal.operational_details_br.bcb_authorizedtrueonly if the BCB authorization is confirmed.operational_details_br.accepts_pixtrueif the exchange supports Pix deposits/withdrawals in Brazil.operational_details_br.main_jurisdiction_isoISO 3166-1 alpha-2 code of the exchange's primary legal jurisdiction (e.g. BR,KY,SC).fiscal_details_br.tax_regimeOne of: domestic_exchange,domestic_exchange_foreign_origin,offshore_law_14754.monitored_by_dolarmapSet to falsefor new community entries (manually reviewed by staff).fiscal_details_br.monthly_brl_trade_exemptionMonthly BRL volume below which the exchange is exempt from IN 1888 reporting. Use 0for offshore.fiscal_details_br.exchange_rfb_reportsArray of report codes filed by the exchange with Receita Federal. Use []if none.fiscal_details_br.user_rfb_action_monthlyArray of monthly actions the user must take with Receita Federal. Use []if none.fees.maker/fees.takerDecimal (e.g., 0.001for 0.1%). Must be the standard beginner tier — see Data Quality Rules.fees.fee_urlDirect link to the official fee schedule. updated_atSet to today's date in ISO 8601. -
Run
npm run validate— it must exit 0. -
Open a Pull Request with the template filled out completely.
If you notice that data is incorrect but don't want to submit a PR yourself, open a GitHub Issue and include:
- Exchange name and
id - The field(s) that are incorrect
- The correct value
- A source URL (official exchange page, BCB registry, etc.)
These rules are enforced during code review. Violating them will result in your PR being returned for corrections.
⚠️ Always use the standard beginner tier fee.
Primary Source Rule: Data MUST come directly from the exchange's official domain. Screenshots or links to blogs, news articles, or third-party comparison sites are NOT valid sources and will result in PR rejection.
Every exchange publishes fee tiers based on 30-day trading volume or other criteria. We always record the fee for the lowest tier — i.e., the rate that applies to a brand-new account with no trading history and no special benefits.
Never submit:
- VIP, Pro, or high-volume tier fees
- Fees that require holding a platform token (e.g., BNB, OKB, BGB) to achieve
- Fees from referral programs, institutional accounts, or invite-based promotions
- Any rate that is not immediately available to anyone who opens a standard account
If the exchange's fee page shows a table of tiers, always pick the first row (the entry-level tier with no volume or balance requirements).
makerandtakermust be decimals, not percentages.- ✅ Correct:
"maker": 0.001(means 0.1%) - ❌ Wrong:
"maker": 0.1or"maker": "0.1%"
- ✅ Correct:
fee_urlmust be a direct link to the exchange's official fee schedule page. It must be accessible without login.
- Format must be exactly
00.000.000/0000-00(dots, slash, and hyphen required). - Must be verified against the Receita Federal CNPJ query tool.
operational_details_br.cnpjmust benullif the exchange has no Brazilian legal entity.
- Must be a full ISO 8601 datetime string:
YYYY-MM-DDTHH:mm:ssZ. - Must reflect the date on which you personally verified the data — not the date you submitted the PR or copied data from another source.
operational_details_br.bcb_authorized,operational_details_br.accepts_pixmust all betrueorfalse(JSON booleans, not strings).
The following types of contributions will be rejected without review:
- Unverified data. If you did not personally check the exchange's official page, do not submit a PR. Do not copy data from aggregator sites (CoinGecko, CoinMarketCap, etc.) without independent verification.
- Non-beginner tier fees. Fees from VIP levels, high-volume tiers, token-discount programs, or any rate not available to a standard new account will be rejected. Always use the standard beginner tier (see Data Quality Rules → Fees).
- PRs that only update
updated_atwithout a corresponding data change and source. Refreshing the date without verifying the data is misleading. - Inaccessible exchanges. Do not add exchanges that are geo-blocked, offline, or in shutdown/wind-down status.
- Exchanges without a verifiable fee schedule URL. The
fee_urlmust be a publicly accessible page on the exchange's official domain. - Promotional or sponsored entries. This is a neutral, open data repository. We do not accept paid placements or affiliated links.
- Changes to
monitored_by_dolarmaporfiscal_details_br. These fields are managed by the BitsARK team only and will not be accepted via community PRs.
# Install dependencies
npm install
# Run schema validation
npm run validate
# Run fee staleness check
node scripts/check-fees.jsThe validate script will:
- Parse
data/exchanges.json - Validate every entry against
schema/exchange.schema.json - Check for duplicate
idfields - Exit
0on success,1on failure
Your PR must pass the validate-schema GitHub Actions workflow to be merged.