Skip to content

[coinbase]: Coinbase imports dont work for USD #277

@ASTRELION

Description

@ASTRELION

Describe the bug
I'm working on adding some converters for some brokers and looking at the Coinbase converter for inspiration, and it seems that the Coinbase converter doesn't work if you change the currency from EUR to USD.

Version
Ghostfolio 2.219.0, in Docker

Expected behavior
Coinbase conversion should succeed and allow import into Ghostfolio.

Provide error input
Using samples/coinbase-export.csv, with EUR replaced with USD.

Ghostfolio error

[Nest] 7  - 11/26/2025, 12:12:59 AM   ERROR [YahooFinanceService] Error: BTC-USD is not valid

    at YahooFinanceDataEnhancerService.getAssetProfile (/ghostfolio/apps/api/main.js:1:507330)

    at YahooFinanceService.getAssetProfile (/ghostfolio/apps/api/main.js:1:501057)

    at DataProviderService.getAssetProfiles (/ghostfolio/apps/api/main.js:1:23299)

    at ImportService.validateActivities (/ghostfolio/apps/api/main.js:1:933577)

    at async ImportService.import (/ghostfolio/apps/api/main.js:1:928927)

    at async ImportController.import (/ghostfolio/apps/api/main.js:1:921885)

[Nest] 7  - 11/26/2025, 12:12:59 AM   ERROR [DataProviderService] AssetProfileInvalidError: No valid asset profiles have been found

    at DataProviderService.getAssetProfiles (/ghostfolio/apps/api/main.js:1:23441)

    at async ImportService.validateActivities (/ghostfolio/apps/api/main.js:1:933546)

    at async ImportService.import (/ghostfolio/apps/api/main.js:1:928927)

    at async ImportController.import (/ghostfolio/apps/api/main.js:1:921885)

[Nest] 7  - 11/26/2025, 12:12:59 AM   ERROR [class ImportController{constructor(e,t,a){this.configurationService=e,this.importService=t,this.request=a}async import(e,t="false"){const a="true"===t;if(!(0,T.hasPermission)(this.request.user.permissions,T.permissions.createAccount))throw new O.HttpException((0,P.getReasonPhrase)(P.StatusCodes.FORBIDDEN),P.StatusCodes.FORBIDDEN);let r=this.configurationService.get("MAX_ACTIVITIES_TO_IMPORT");this.configurationService.get("ENABLE_FEATURE_SUBSCRIPTION")&&"Premium"===this.request.user.subscription.type&&(r=Number.MAX_SAFE_INTEGER);try{return{activities:await this.importService.import({isDryRun:a,maxActivitiesToImport:r,accountsWithBalancesDto:e.accounts??[],activitiesDto:e.activities,assetProfilesWithMarketDataDto:e.assetProfiles??[],tagsDto:e.tags??[],user:this.request.user})}}catch(i){throw O.Logger.error(i,o),new O.HttpException({error:(0,P.getReasonPhrase)(P.StatusCodes.BAD_REQUEST),message:[i.message]},P.StatusCodes.BAD_REQUEST)}}async gatherDividends(e,t){return{activities:await this.importService.getDividends({dataSource:e,symbol:t,userId:this.request.user.id})}}}] Error: activities.2.symbol ("BTC-USD") is not valid for the specified data source ("YAHOO")

    at ImportService.validateActivities (/ghostfolio/apps/api/main.js:1:934191)

    at async ImportService.import (/ghostfolio/apps/api/main.js:1:928927)

    at async ImportController.import (/ghostfolio/apps/api/main.js:1:921885)

Additional context

This error is confusing to me because if you look on Yahoo Finance, BTC-USD (with a dash) is the slug for BTC. This is also the case for BTC-EUR. But if you remove the dash (BTCUSD) it will correctly import.

In contrast, importing BTC-EUR (with a dash) seems to work.

I'm not sure if this is a Ghostfolio issue or an issue with these converters, or maybe I'm missing something.

Also somewhat adjacent to this, if you import USD/USD or USD=X, it will import as the ticker for USD (which is not the currency USD as it probably should be). I'm new to Ghostfolio, so I'm not sure what is going on here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions