{"id":16758677,"url":"https://github.com/mirgj/alphavantage-wrapper","last_synced_at":"2025-07-04T01:33:34.075Z","repository":{"id":46812343,"uuid":"153994188","full_name":"mirgj/alphavantage-wrapper","owner":"mirgj","description":"Wrapper around Alpha Vantage API with a user friendly interface","archived":false,"fork":false,"pushed_at":"2023-03-02T12:36:45.000Z","size":750,"stargazers_count":4,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-25T18:52:47.247Z","etag":null,"topics":["alphavantage","alphavantage-api","javascript","nodejs"],"latest_commit_sha":null,"homepage":"https://mirgj.github.io/alphavantage-wrapper/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mirgj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-10-21T09:58:05.000Z","updated_at":"2023-09-20T09:23:37.000Z","dependencies_parsed_at":"2025-04-10T17:14:38.744Z","dependency_job_id":"f6ec9f65-0fc3-41ce-9417-135b77d93296","html_url":"https://github.com/mirgj/alphavantage-wrapper","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/mirgj/alphavantage-wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirgj%2Falphavantage-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirgj%2Falphavantage-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirgj%2Falphavantage-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirgj%2Falphavantage-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mirgj","download_url":"https://codeload.github.com/mirgj/alphavantage-wrapper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mirgj%2Falphavantage-wrapper/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263430514,"owners_count":23465393,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alphavantage","alphavantage-api","javascript","nodejs"],"created_at":"2024-10-13T04:05:57.018Z","updated_at":"2025-07-04T01:33:33.998Z","avatar_url":"https://github.com/mirgj.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# alpha-vantage-wrapper\n\nThis small library wraps around the [Alpha Vantage APIs](https://www.alphavantage.co/) with an easy and cleaner interface. The following documentation is related to the wrapper with recalls to the [official documentation](https://www.alphavantage.co/documentation/).\n\n## Install\n\n```\nnpm install alphavantage-wrapper\n```\n\nor via Github package\n\n```\nnpm install @mirgj/alphavantage-wrapper\n```\n\n## Initialisation\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n```\n\nThe wrapper function will initialise with based on the provided configuration, the options available are the following:\n\n- `apiKey: string` (required): The API key to use\n- `baseUrl: string` (optional): The base URL to use to make the request (**default value**: `https://www.alphavantage.co/query` ideally will never change but is configurable)\n- `injectRawResponse: boolean` (optional): To use in case the parse mode is set to `transform` or `clean` to inject the raw response from the service into the output inside a property defined as `raw` (**default value**: `false`)\n- `convert: boolean` (optional): Define whether the user would like to convert the vales from the service in numbers rather than strings (**default value**: `false`)\n- `validate: boolean` (optional): Define whether the user input should be validated (**default value**: `false`); eg. validate currencies input, duration etc; to set to false if you're sure the input provided are correct\n- `parse: 'none'|'clean'|'transform'` (optional): Define the parse mode to be used handling the response from the APIs. `none` will keep the original output, `clean` will keep the original structure but clean the keys to be used easily. `transform` will change the structure/keys with a new one more friendly (**default value**: `'transform'`)\n\nAfter the Initialisation you'll get the following object with these properties:\n\n- `exchangeRate: function`: Provides the exchange rate from currency to currecy (or also crypto currency to FIAT or crypto to crypto)\n- `crypto: object`: Provides a set of functions for the crypto market\n- `forex: object`: Provides a set of functions for the forex market\n- `stock: object`: Provides a set of functions for the stock market\n- `sectors: function`: Provides the sectors statistics\n- `utils: object`: Provides some utils to be used anytime\n- (TODO: more to add)\n\nFollow the documentation to know more about the single functionalities\n\n## exchangeRate\n\nThe `exchangeRate` is used to get the exchange rate from currency A to currency B. Crypto currencies are also supported. The following example shows the conversion rate from BTC (bitcoin) to USD.\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.exchangeRate('BTC', 'USD');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n  \"from\":{\n    \"code\":\"BTC\",\n    \"name\":\"Bitcoin\"\n  },\n  \"to\":{\n    \"code\":\"USD\",\n    \"name\":\"United States Dollar\"\n  },\n  \"exchangeRate\":\"11884.15000000\",\n  \"lastRefresh\":\"2019-07-08 15:28:15\",\n  \"timeZone\":\"UTC\"\n}\n```\n\nif the `parse` mode is set to `clean` the output will be following:\n\n```js\n{\n  \"realtimeCurrencyExchangeRate\":{\n    \"from_CurrencyCode\":\"BTC\",\n    \"from_CurrencyName\":\"Bitcoin\",\n    \"to_CurrencyCode\":\"USD\",\n    \"to_CurrencyName\":\"United States Dollar\",\n    \"exchangeRate\":\"11887.26000000\",\n    \"lastRefreshed\":\"2019-07-08 15:32:33\",\n    \"timeZone\":\"UTC\"\n  }\n}\n```\n\nWhile in case `parse` mode is set to `none` the output will be the same as the API:\n\n```js\n{\n  \"Realtime Currency Exchange Rate\":{\n    \"1. From_Currency Code\":\"BTC\",\n    \"2. From_Currency Name\":\"Bitcoin\",\n    \"3. To_Currency Code\":\"USD\",\n    \"4. To_Currency Name\":\"United States Dollar\",\n    \"5. Exchange Rate\":\"11905.29000000\",\n    \"6. Last Refreshed\":\"2019-07-08 15:37:02\",\n    \"7. Time Zone\":\"UTC\"\n  }\n}\n```\n\nThe last two parse mode are the same for all the other APIs and will not be explained in the next examples as they're mostly related on how **alphavantage** provides the output.\n\nIn any case, if `injectRawResponse` is set to `true`, the original output will be replicated inside a property `raw` in the output. Example:\n\n```js\n{\n  \"from\":{\n    \"code\":\"BTC\",\n    \"name\":\"Bitcoin\"\n  },\n  \"to\":{\n    \"code\":\"USD\",\n    \"name\":\"United States Dollar\"\n  },\n  \"exchangeRate\":\"11905.29000000\",\n  \"lastRefresh\":\"2019-07-08 15:37:02\",\n  \"timeZone\":\"UTC\",\n  \"raw\":{\n    \"Realtime Currency Exchange Rate\":{\n      \"1. From_Currency Code\":\"BTC\",\n      \"2. From_Currency Name\":\"Bitcoin\",\n      \"3. To_Currency Code\":\"USD\",\n      \"4. To_Currency Name\":\"United States Dollar\",\n      \"5. Exchange Rate\":\"11905.29000000\",\n      \"6. Last Refreshed\":\"2019-07-08 15:37:02\",\n      \"7. Time Zone\":\"UTC\"\n    }\n  }\n}\n```\n\n## crypto\n\nThis module provide functions related to the **crypto currencies**. The following function are exposed through the module:\n\n- `daily`: returns daily rates of the give crypto currency\n- `weekly`: returns weekly rates of the give crypto currency\n- `monthly`: returns monthly rates of the give crypto currency\n\nEach of the method listed above will have the same signature which is the following: `[methodName](symbol: string, market: string)` where `symbol` is the crypto currency code (eg. BTC) and `market` is the referred market to use as refernce for the convertion (eg. USD)\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.crypto.daily('BTC', 'USD');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"description\":\"Daily Prices and Volumes for Digital Currency\",\n   \"currency\":{\n      \"code\":\"BTC\",\n      \"name\":\"Bitcoin\"\n   },\n   \"exchange\":{\n      \"code\":\"USD\",\n      \"name\":\"United States Dollar\"\n   },\n   \"lastRefreshed\":\"2019-07-08 23:59:59\",\n   \"timeZone\":\"UTC\",\n   \"timeSeries\":{\n      \"2019-07-08\":{\n         \"USD\":{\n            \"open\":\"11481.98207885\",\n            \"high\":\"12373.74881946\",\n            \"low\":\"11367.45957574\",\n            \"close\":\"12311.24952666\",\n            \"marketCap\":\"933835349.19382334\"\n         },\n         \"volume\":\"75852.19901291\"\n      }\n      // repeted multiple time with all the give days\n   }\n}\n```\n\n`weekly` and `monthly` will be the same but _timeSeries_ will be aggregated based on the week/month.\n\n## forex\n\nThis module provide functions related to the **forex** market. The following function are exposed through the module:\n\n- `intraday(from_currency: string, to_currency: string, interval?: IntervalType, outputSize?: OutputSizeType, dataType?: DataTypeType)`: provides intraday rates for the given currencies\n- `daily(from_currency: string, to_currency: string, outputSize?: OutputSizeType, dataType?: DataTypeType)`: provides daily rates for the given currencies\n- `weekly(from_currency: string, to_currency: string, dataType?: DataTypeType)`: provides weekly rates for the given currencies\n- `monthly(from_currency: string, to_currency: string, dataType?: DataTypeType)`: provides monthly rates for the given currencies\n\nThese are the relative parameters with the specific meaning (defined also in the service docs):\n\n- `from_currency`: Currency symbol value (eg: USD)\n- `to_currency`: Currency symbol value (eg: EUR)\n- `interval`: Time interval between two consecutive data points in the time series. The following values are supported: `1min`, `5min`, `15min`, `30min`, `60min` (default: **5min**)\n- `outputSize`: Accepts `compact` or `full` and will affect the number of output; compact will returns only the last 100 data points (default: **compact**)\n- `dataType`: Accepts `json` or `csv` and will affect the output of the API call (default: **json**)\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.forex.intraday('USD', 'EUR');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"description\":\"FX Intraday (5min) Time Series\",\n   \"from\":{\n      \"code\":\"USD\"\n   },\n   \"to\":{\n      \"code\":\"EUR\"\n   },\n   \"lastRefreshed\":\"2019-07-09 14:55:00\",\n   \"timeZone\":\"UTC\",\n   \"interval\":\"5min\",\n   \"outputType\":\"Compact\",\n   \"timeSeries\":{\n      \"2019-07-09 14:55:00\":{\n         \"open\":\"0.8924\",\n         \"high\":\"0.8924\",\n         \"low\":\"0.8920\",\n         \"close\":\"0.8920\"\n      },\n      // many others based on the interval value\n   }\n}\n```\n\n`daily`, `weekly` and `monthly` will be the same but the _timeSeries_ will be aggregated based on the day/week/month.\n\nThese methods supports also csv output based on the signature defined above. In that case the wrapper will return you the string as the service without any sort of manipulation. Feel free to use libraries like _CSVTOJSON_ or similar to handle the csv.\n\nExample\n\n```js\nconst output = await q.forex.monthly('USD', 'EUR', 'csv');\n```\n\nthe output will be a string with the following:\n\n```csv\ntimestamp,open,high,low,close\n2019-07-10,0.8794,0.8930,0.8792,0.8887\n2019-06-30,0.8953,0.8967,0.8761,0.8794\n```\n\n## stock\n\nThis module provide functions related to the **stock** market. The following function are exposed through the module:\n\n- `intraday(symbol: string, interval?: IntervalType, outputSize?: OutputSizeType, dataType?: DataTypeType)`: provides the intraday stock value based on the given symbol\n- `daily(symbol: string, outputSize?: OutputSizeType, dataType?: DataTypeType)`: provides the daily stock value based on the given symbol\n- `daily_adjusted(symbol: string, outputSize?: OutputSizeType, dataType?: DataTypeType)`: provides the daily stock value based on the given symbol including splits and dividend\n- `weekly(symbol: string, dataType?: DataTypeType)`: provides the weekly stock value based on the given symbol\n- `weekly_adjusted(symbol: string, dataType?: DataTypeType)`: provides the weekly stock value based on the given symbol including dividend\n- `monthly(symbol: string, dataType?: DataTypeType)`: provides the monthly stock value based on the given symbol\n- `monthly_adjusted(symbol: string, dataType?: DataTypeType)`: provides the monthly stock value based on the given symbol including dividend\n- `quote(symbol: string, dataType?: DataTypeType)`: provides the quote rates for the given symbol/ticker\n\nThese are the relative parameters with the specific meaning (defined also in the service docs):\n\n- `symbol`: Stock symbol value (eg: MSFT)\n- `interval`: Time interval between two consecutive data points in the time series. The following values are supported: `1min`, `5min`, `15min`, `30min`, `60min` (default: **5min**)\n- `outputSize`: Accepts `compact` or `full` and will affect the number of output; compact will returns only the last 100 data points (default: **compact**)\n- `dataType`: Accepts `json` or `csv` and will affect the output of the API call (default: **json**)\n\n### intraday, daily, weekly, monthly\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.stock.intraday('MSFT');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"description\":\"Intraday (5min) open, high, low, close prices and volume\",\n   \"symbol\":\"MSFT\",\n   \"interval\":\"5min\",\n   \"lastRefreshed\":\"2019-07-12 16:00:00\",\n   \"timeZone\":\"US/Eastern\",\n   \"outputType\":\"Compact\",\n   \"timeSeries\":{\n      \"2019-07-12 16:00:00\":{\n         \"close\":\"138.8900\",\n         \"high\":\"138.9800\",\n         \"low\":\"138.6800\",\n         \"open\":\"138.6800\",\n         \"volume\":\"1736475\"\n      }\n      // many others based on the interval value\n   }\n}\n```\n\nThis output will be the same for the some of the other methods (daily, weekly, monthly) just the timeSeries data points will be related to the required frequency.\n\n### daily_adjusted, weekly_adjusted, monthly_adjusted\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.stock.intraday('MSFT');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"description\":\"Daily Time Series with Splits and Dividend Events\",\n   \"symbol\":\"MSFT\",\n   \"lastRefreshed\":\"2019-07-12\",\n   \"timeZone\":\"US/Eastern\",\n   \"outputType\":\"Compact\",\n   \"timeSeries\":{\n      \"2019-07-12\":{\n         \"close\":\"138.9000\",\n         \"adjustedClose\":\"138.9000\",\n         \"high\":\"139.1300\",\n         \"low\":\"138.0099\",\n         \"open\":\"138.8500\",\n         \"volume\":\"18936832\",\n         \"dividendAmount\":\"0.0000\",\n         \"splitCoefficient\":\"1.0000\"\n      }\n      // many others based on the interval value\n   }\n}\n```\n\n### quote\n\nExample:\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.stock.quote('MSFT');\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"symbol\":\"MSFT\",\n   \"change\":\"0.5000\",\n   \"changePercent\":\"0.3613%\",\n   \"high\":\"139.1300\",\n   \"latestTradingDay\":\"2019-07-12\",\n   \"low\":\"138.0100\",\n   \"open\":\"138.8500\",\n   \"previousClose\":\"138.4000\",\n   \"price\":\"138.9000\",\n   \"volume\":\"17725458\"\n}\n```\n\n## sectors\n\nThe `sectors` will be used to get the statistics about the sectors and their performance over the time as per API spec.\n\n```js\nimport alphavantagewrapper from 'alphavantage-wrapper';\n\nconst q = alphavantagewrapper({\n  apiKey: '\u003cyour API key\u003e',\n});\n\nconst output = await q.sectors();\n```\n\nThe output of the example will be the following (with `parse` mode set to `transform`):\n\n```js\n{\n   \"description\":\"US Sector Performance (realtime \u0026 historical)\",\n   \"lastRefreshed\":\"10:37 AM ET 07/12/2019\",\n   \"realTimePerformance\":{\n      \"communicationServices\":\"-0.02%\",\n      \"consumerDiscretionary\":\"0.74%\",\n      \"consumerStaples\":\"0.19%\",\n      \"energy\":\"0.62%\",\n      \"financials\":\"0.06%\",\n      \"healthCare\":\"-0.97%\",\n      \"industrials\":\"1.13%\",\n      \"informationTechnology\":\"0.27%\",\n      \"materials\":\"0.79%\",\n      \"realEstate\":\"-0.44%\",\n      \"utilities\":\"-0.79%\"\n   },\n   \"oneDayPerformance\":{\n      \"communicationServices\":\"-0.09%\",\n      \"consumerDiscretionary\":\"0.16%\",\n      \"consumerStaples\":\"0.25%\",\n      \"energy\":\"0.18%\",\n      \"financials\":\"0.60%\",\n      \"healthCare\":\"0.02%\",\n      \"industrials\":\"0.71%\",\n      \"informationTechnology\":\"0.34%\",\n      \"materials\":\"0.43%\",\n      \"realEstate\":\"-1.21%\",\n      \"utilities\":\"0.04%\"\n   },\n   \"fiveDaysPerformance\":{\n      \"communicationServices\":\"0.74%\",\n      \"consumerDiscretionary\":\"1.19%\",\n      \"consumerStaples\":\"0.07%\",\n      \"energy\":\"1.89%\",\n      \"financials\":\"0.23%\",\n      \"healthCare\":\"-0.98%\",\n      \"industrials\":\"-1.05%\",\n      \"informationTechnology\":\"0.53%\",\n      \"materials\":\"-2.34%\",\n      \"realEstate\":\"-0.37%\",\n      \"utilities\":\"0.36%\"\n   },\n   \"oneMonthPerformance\":{\n      \"communicationServices\":\"6.87%\",\n      \"consumerDiscretionary\":\"5.66%\",\n      \"consumerStaples\":\"2.42%\",\n      \"energy\":\"5.31%\",\n      \"financials\":\"3.20%\",\n      \"healthCare\":\"2.71%\",\n      \"industrials\":\"1.96%\",\n      \"informationTechnology\":\"4.94%\",\n      \"materials\":\"0.73%\",\n      \"realEstate\":\"1.58%\",\n      \"utilities\":\"2.96%\"\n   },\n   \"threeMonthsPerformance\":{\n      \"communicationServices\":\"4.34%\",\n      \"consumerDiscretionary\":\"4.89%\",\n      \"consumerStaples\":\"6.29%\",\n      \"energy\":\"-4.69%\",\n      \"financials\":\"6.25%\",\n      \"healthCare\":\"1.88%\",\n      \"industrials\":\"1.85%\",\n      \"informationTechnology\":\"5.47%\",\n      \"materials\":\"0.85%\",\n      \"realEstate\":\"3.39%\",\n      \"utilities\":\"5.92%\"\n   },\n   \"oneYearPerformance\":{\n      \"communicationServices\":\"12.45%\",\n      \"consumerDiscretionary\":\"9.57%\",\n      \"consumerStaples\":\"13.51%\",\n      \"energy\":\"-16.95%\",\n      \"financials\":\"3.52%\",\n      \"healthCare\":\"7.55%\",\n      \"industrials\":\"4.75%\",\n      \"informationTechnology\":\"12.17%\",\n      \"materials\":\"-2.74%\",\n      \"realEstate\":\"14.36%\",\n      \"utilities\":\"17.32%\"\n   },\n   \"yearToDatePerformance\":{\n      \"communicationServices\":\"22.25%\",\n      \"consumerDiscretionary\":\"24.82%\",\n      \"consumerStaples\":\"17.62%\",\n      \"energy\":\"12.04%\",\n      \"financials\":\"17.99%\",\n      \"healthCare\":\"8.10%\",\n      \"industrials\":\"19.69%\",\n      \"informationTechnology\":\"29.86%\",\n      \"materials\":\"14.44%\",\n      \"realEstate\":\"21.61%\",\n      \"utilities\":\"15.23%\"\n   },\n   \"threeYearsPerformance\":{\n      \"communicationServices\":\"-6.68%\",\n      \"consumerDiscretionary\":\"52.38%\",\n      \"consumerStaples\":\"7.47%\",\n      \"energy\":\"-6.66%\",\n      \"financials\":\"51.13%\",\n      \"healthCare\":\"27.20%\",\n      \"industrials\":\"30.34%\",\n      \"informationTechnology\":\"94.58%\",\n      \"materials\":\"23.13%\",\n      \"utilities\":\"15.99%\"\n   },\n   \"fiveYearsPerformance\":{\n      \"communicationServices\":\"5.94%\",\n      \"consumerDiscretionary\":\"83.09%\",\n      \"consumerStaples\":\"31.97%\",\n      \"energy\":\"-34.26%\",\n      \"financials\":\"53.00%\",\n      \"healthCare\":\"52.04%\",\n      \"industrials\":\"40.12%\",\n      \"informationTechnology\":\"121.73%\",\n      \"materials\":\"15.79%\",\n      \"utilities\":\"41.18%\"\n   },\n   \"tenYearsPerformance\":{\n      \"communicationServices\":\"73.48%\",\n      \"consumerDiscretionary\":\"461.42%\",\n      \"consumerStaples\":\"158.62%\",\n      \"energy\":\"36.67%\",\n      \"financials\":\"212.80%\",\n      \"healthCare\":\"262.58%\",\n      \"industrials\":\"258.60%\",\n      \"informationTechnology\":\"409.33%\",\n      \"materials\":\"148.31%\",\n      \"utilities\":\"126.03%\"\n   }\n}\n```\n\n## utils\n\nThis module provides utilities functions that can be used based at any time. The following function are exposed through the module:\n\n- `cleaner`: a small utility function that will remove the space or non standard chars from your json keys, convert it to a friendly object key and give it back. It's used internally in case of parse mode set to `clean`. It can be used again in case you'd like to use the library without parse mode set to none or in case you'd like to use it for any other functionality\n\n### cleaner\n\nExample\n\n```js\nconsole.log(\n  q.utils.cleaner({\n    'not nice key': 'value',\n  }),\n);\n```\n\nthe output will be a string with the following:\n\n```js\n{\n  notnicekey: 'value';\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmirgj%2Falphavantage-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmirgj%2Falphavantage-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmirgj%2Falphavantage-wrapper/lists"}