{"record":{"id":"8cf62aae7e177fe9","repo":"OpenBB-finance/OpenBB","slug":"invalid-transformation-transform-for-symbol","errorCode":null,"errorMessage":"Invalid transformation, '{_transform}', for symbol: '{_symbol}'.","messagePattern":"Invalid transformation, '(.+?)', for symbol: '(.+?)'\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"error","filePath":"openbb_platform/providers/econdb/openbb_econdb/models/economic_indicators.py","lineNumber":246,"sourceCode":"            if \"~\" in symbol:\n                _symbol = symbol.split(\"~\")[0]\n                _transform = symbol.split(\"~\")[1]\n                if (\n                    helpers.HAS_COUNTRIES.get(_symbol) is True\n                    and _symbol in helpers.SYMBOL_TO_INDICATOR.values()\n                ):\n                    message = f\"Invalid symbol: '{symbol}'. It must have a two-letter country code.\"\n                    if len(symbols) > 1:\n                        warn(message)\n                        continue\n                    raise OpenBBError(message)\n                if _transform and _transform not in helpers.QUERY_TRANSFORMS:\n                    message = f\"Invalid transformation, '{_transform}', for symbol: '{_symbol}'.\"\n                    if len(symbols) > 1:\n                        warn(message)\n                        new_symbols.append(_symbol)\n                    else:\n                        raise OpenBBError(message)\n                elif not _transform:\n                    new_symbols.append(symbol.replace(\"~\", \"\"))\n                else:\n                    new_symbols.append(symbol)\n            # Else we need to wrap each symbol with each country code\n            # and check if the country is valid for that indicator.\n            elif countries and helpers.HAS_COUNTRIES.get(symbol) is True:\n                for country in countries:\n                    _country = (\n                        helpers.INDICATOR_COUNTRIES.get(symbol, [])\n                        if country == \"all\"\n                        else (\n                            helpers.COUNTRY_GROUPS.get(country, [])\n                            if country in helpers.COUNTRY_GROUPS\n                            else (\n                                [country.upper()]\n                                if country.upper()\n                                in helpers.INDICATOR_COUNTRIES.get(symbol, [])","sourceCodeStart":228,"sourceCodeEnd":264,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/providers/econdb/openbb_econdb/models/economic_indicators.py#L228-L264","documentation":"OpenBBError for a malformed transformation suffix: the symbol's '~' suffix (e.g. 'CPI~yoy') is not one of the supported QUERY_TRANSFORMS. Single-symbol requests raise; multi-symbol requests warn, keep the un-transformed root, and continue.","triggerScenarios":"Calling obb.economy.indicator(provider='econdb', symbol='cpi~percent') where '~percent' is not a valid transform (valid ones live in openbb_econdb.utils.helpers.QUERY_TRANSFORMS, e.g. yoy/period-over-period style keys).","commonSituations":"Guessing transform names instead of checking QUERY_TRANSFORMS; version drift if transform keys changed between provider releases; batch requests silently losing transformations (warning only) and returning level data the user mistakes for transformed data.","solutions":["Use a transform from helpers.QUERY_TRANSFORMS — inspect them at runtime: from openbb_econdb.utils import helpers; print(helpers.QUERY_TRANSFORMS).","Drop the '~suffix' entirely if you want the raw level series.","In batches, watch warnings: an invalid transform falls back to the untransformed symbol rather than failing."],"exampleFix":"# before\nres = obb.economy.indicator(provider=\"econdb\", symbol=\"cpi~pct\")\n\n# after\nfrom openbb_econdb.utils import helpers\nprint(helpers.QUERY_TRANSFORMS)  # pick a valid key\nres = obb.economy.indicator(provider=\"econdb\", symbol=\"cpi~yoy\")","handlingStrategy":"validation","validationCode":"from openbb_econdb.utils import helpers\n\ndef valid_transform(symbol: str) -> bool:\n    if \"~\" not in symbol:\n        return True\n    transform = symbol.split(\"~\")[1]\n    return not transform or transform in helpers.QUERY_TRANSFORMS","typeGuard":null,"tryCatchPattern":"from openbb_core.provider.utils.errors import OpenBBError\ntry:\n    res = obb.economy.indicator(provider=\"econdb\", symbol=s, country=cs)\nexcept OpenBBError as e:\n    if \"Invalid transformation\" in str(e):\n        res = obb.economy.indicator(provider=\"econdb\", symbol=s.split(\"~\")[0], country=cs)  # fall back to level\n    else:\n        raise","preventionTips":["Check helpers.QUERY_TRANSFORMS before using a '~suffix'.","Know that in batch mode an invalid transform silently returns UNtransformed data — verify results."],"tags":["econdb","validation","symbols","transformation"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}