> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Nasdaq Data Link

The Nasdaq Data Link connector lets your AI agent act in each user's Nasdaq Data Link account. Each user connects their own Nasdaq Data Link API key once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 6 tools.

**Authentication:** API Key
**Categories:** Accounting & Finance, Analytics
**Tools:** 6: 6 read, 0 write, 0 destructive
**Users sign in with:** API key
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=NASDAQDATALINK)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Nasdaq Data Link connection

   In **AgentKit > Connections**, create a Nasdaq Data Link connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'nasdaqdatalink'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Nasdaq Data Link:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'nasdaqdatalink_search_datasets',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "nasdaqdatalink"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Nasdaq Data Link:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="nasdaqdatalink_search_datasets",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their Nasdaq Data Link credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'nasdaqdatalink_get_database',
  toolInput: {
    database_code: '<database_code>',
  },
  connector: 'nasdaqdatalink',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="nasdaqdatalink_get_database",
    tool_input={
        "database_code": "<database_code>",
    },
    connection_name="nasdaqdatalink",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `nasdaqdatalink_get_database`

Get Database · Read-only

Get the metadata of a Nasdaq Data Link time-series database by its code.
Returns database.id, name, database_code, description, datasets_count, downloads, premium and url_name.
Use nasdaqdatalink_get_database to see what a database such as FRED holds and whether it is premium. Use nasdaqdatalink_search_datasets with database_code to list its datasets.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_code` (`string`, required): Time-series database code, such as FRED. It is the part before the slash in a dataset code like FRED/GDP.

Example input: `{"database_code":"<database_code>"}`

### `nasdaqdatalink_get_table_metadata`

Get Table Metadata · Read-only

Get the metadata of a Nasdaq Data Link data table: its name, description, columns, filterable columns and primary key.
Returns datatable.vendor_code, datatable_code, name, description, columns (name and type), filters (the column names nasdaqdatalink_query_table can filter on) and primary_key.
Use nasdaqdatalink_get_table_metadata before nasdaqdatalink_query_table to choose filters and columns. Use nasdaqdatalink_get_time_series_metadata for a time-series dataset.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `table_code` (`string`, required): Table code within the publisher: the part after the slash in a table code such as ZACKS/FC. Example: FC.
- `vendor_code` (`string`, required): Publisher (vendor) code of the data table: the part before the slash in a table code such as ZACKS/FC. Uppercase letters, digits and underscores. Example: ZACKS.

Example input: `{"table_code":"<table_code>","vendor_code":"<vendor_code>"}`

### `nasdaqdatalink_get_time_series_data`

Get Time Series Data · Read-only

Get the observations of a Nasdaq Data Link time-series dataset (Time-series API), with optional date range, row limit, single-column selection, frequency collapse and transformation.
Returns dataset_data.column_names (the first is the date), dataset_data.data (one array per date), plus frequency, start_date, end_date and the options applied. Premium databases need a subscription.
Use nasdaqdatalink_get_time_series_data for a dataset code such as FRED/GDP. Use nasdaqdatalink_query_table for a data table such as ZACKS/FC. Use nasdaqdatalink_search_datasets to find a dataset code.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_code` (`string`, required): Time-series database code: the part before the slash in a dataset code such as FRED/GDP. Uppercase letters, digits and underscores. Example: FRED.
- `dataset_code` (`string`, required): Dataset code within the database: the part after the slash in a dataset code such as FRED/GDP. Example: GDP.
- `collapse` (`string`, optional): Lower the data frequency. Each period keeps its last observation, so sums or averages are not computed. Values: none, daily, weekly, monthly, quarterly, annual. Only downsampling works; a frequency higher than the dataset's is not created. One of: `none`, `daily`, `weekly`, `monthly`, `quarterly`, `annual`.
- `column_index` (`integer`, optional): Return only one data column, by position. Column 0 is the date and is always returned; data columns start at 1. Example: 4 returns the date and the fourth data column.
- `end_date` (`string`, optional): Latest date to return, inclusive, as yyyy-mm-dd. Example: 2020-12-31.
- `limit` (`integer`, optional): Return only the first n rows after ordering. With the default newest-first order, limit 1 returns the latest observation. Example: 10.
- `order` (`string`, optional): Row order by date: desc (newest first, the API default) or asc (oldest first). One of: `asc`, `desc`.
- `start_date` (`string`, optional): Earliest date to return, inclusive, as yyyy-mm-dd. Example: 2015-01-01.
- `transform` (`string`, optional): Calculation applied before the data is returned: none, diff (change from the previous row), rdiff (percentage change from the previous row, as a fraction), rdiff_from (change from each row to the latest value, as a fraction), cumul (cumulative sum) or normalize (rebased so the first row is 100). One of: `none`, `diff`, `rdiff`, `rdiff_from`, `cumul`, `normalize`.

Example input: `{"database_code":"<database_code>","dataset_code":"<dataset_code>"}`

### `nasdaqdatalink_get_time_series_metadata`

Get Time Series Metadata · Read-only

Get the metadata of a Nasdaq Data Link time-series dataset, without its observations.
Returns dataset.id, dataset_code, database_code, name, description, column_names, frequency, type, premium, refreshed_at, and the oldest and newest available dates.
Use nasdaqdatalink_get_time_series_metadata to check a dataset's columns, frequency and date coverage before nasdaqdatalink_get_time_series_data. Use nasdaqdatalink_get_table_metadata for a data table.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_code` (`string`, required): Time-series database code: the part before the slash in a dataset code such as FRED/GDP. Uppercase letters, digits and underscores. Example: FRED.
- `dataset_code` (`string`, required): Dataset code within the database: the part after the slash in a dataset code such as FRED/GDP. Example: GDP.

Example input: `{"database_code":"<database_code>","dataset_code":"<dataset_code>"}`

### `nasdaqdatalink_query_table`

Query Table · Read-only

Query rows from a Nasdaq Data Link data table (Tables API), with row filters on the table's filterable columns, column selection and cursor paging.
Returns datatable.columns (name and type of each returned column), datatable.data (one array per row, in column order) and meta.next_cursor_id, which is null on the last page. Free tables work with any key; premium tables need a subscription.
Use nasdaqdatalink_query_table to pull table rows such as fundamentals or prices. Use nasdaqdatalink_get_table_metadata first to learn which columns can be filtered. Use nasdaqdatalink_get_time_series_data for a dataset code such as FRED/GDP.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `table_code` (`string`, required): Table code within the publisher: the part after the slash in a table code such as ZACKS/FC. Example: FC.
- `vendor_code` (`string`, required): Publisher (vendor) code of the data table: the part before the slash in a table code such as ZACKS/FC. Uppercase letters, digits and underscores. Example: ZACKS.
- `columns` (`array`, optional): Columns to return, by column name. Omit for every column. Example: ["ticker", "per_end_date", "tot_revnu"].
- `cursor_id` (`string`, optional): Cursor for the next page: the meta.next_cursor_id value from the previous call with the same filters and columns. Omit for the first page.
- `filters` (`object`, optional): Row filters as an object keyed by column name. Only columns listed in the table's metadata filters can be used. A string or a list matches any of the values; an object of operators (gt, gte, lt, lte) sets a range. Example: {"ticker": ["AAPL", "MSFT"], "per_end_date": {"gte": "2020-01-01", "lte": "2023-12-31"}}. Large tables may refuse a call without filters.
- `per_page` (`integer`, optional): Number of rows per page, from 1 to 10000. The API's own default page size applies when omitted. Example: 100.

Example input: `{"table_code":"<table_code>","vendor_code":"<vendor_code>"}`

### `nasdaqdatalink_search_datasets`

Search Datasets · Read-only

Search Nasdaq Data Link time-series datasets by keyword, optionally within one database.
Returns datasets with id, dataset_code, database_code, name, description, column_names, frequency, premium and available date range, and meta with current_page, total_pages and total_count.
Use nasdaqdatalink_search_datasets to find a dataset code for nasdaqdatalink_get_time_series_data. Use nasdaqdatalink_get_time_series_metadata when the code is already known.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `database_code` (`string`, optional): Restrict results to one time-series database, by code. Example: FRED.
- `page` (`integer`, optional): Page number to return, starting at 1. Use meta.next_page from the previous response. Example: 2.
- `per_page` (`integer`, optional): Number of results per page. Example: 20.
- `query` (`string`, optional): Search words matched against dataset names and descriptions. Separate words with spaces. Example: crude oil price.

Example input: `{}`

## Related

Other Accounting & Finance connectors ([all 45](/agentkit/connectors/?category=accounting-finance)):

- [QuickBooks](/agentkit/connectors/quickbooks/): Scalekit connector, OAuth, 117 tools
- [Xero](/agentkit/connectors/xero/): Scalekit connector, OAuth, 94 tools
- [Stripe](/agentkit/connectors/stripe/): Scalekit connector, Access token, 178 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
