← Back to Blog
Guides · September 2026 · 11 min read

Stocklake + n8n: The Community Node for Self-Hosted Instances

M
Michael · Builder & owner of Stocklake
1
Run several lookups at once
One trigger, three Stocklake nodes fanning out in parallel
2
Give an agent a market-data tool
Same node, auto-generated as a Tool for an AI Agent
3
Scheduled screener → research
A daily oversold screen, fanned into per-stock AI research
Three ways to use the n8n-nodes-stocklake community node — typed dropdowns and a credential test button, not raw MCP JSON

n8n-nodes-stocklake is a community node published on npm that turns Stocklake's market-data API into regular n8n building blocks: a Resource dropdown (Stock, Screener, Market, Signals, Earnings, News, Watchlist), an Operation dropdown per resource, autocomplete-friendly symbol fields, and a credential type with a working Test button. Because the node is marked usableAsTool, n8n also generates a second version of it automatically — Stocklake Tool — that an AI Agent node can call with parameters the model fills in itself.

One thing worth being upfront about, since it explains the "self-hosted only" framing of everything below: this is a community node, not a verified one. n8n's own review team looked at it and made a fair point — every operation the node exposes round-trips through the same public MCP server that n8n's built-in MCP Client node can already call directly, so from their side it doesn't add a capability their own node doesn't already reach. They're building a dedicated registry for MCP-shaped integrations like this one rather than accepting them into the general community-node catalog. Until that exists, the node installs and runs perfectly well on self-hosted n8n via npm — it just isn't (yet) something n8n Cloud will let you install, since Cloud restricts community installs to the verified catalog. Nothing below is locked behind the node either way: the built-in MCP Client and MCP Client Tool nodes reach the exact same data, pointed at the same endpoint, with zero installation.

A couple of terms, before diving in
Community node
A third-party node published on npm and installed by package name from n8n's own Settings screen — distinct from a node built into n8n itself.
Node vs. MCP Client
n8n-nodes-stocklake gives every operation its own typed Resource + Operation dropdown. n8n's built-in MCP Client node instead takes a tool name and a raw JSON arguments blob for whatever MCP server you point it at.
Tool variant
n8n's automatic second version of a usableAsTool node — same operations, but callable by an AI Agent via $fromAI() instead of manually-set parameters.
Guest / Free / Pro
Stocklake's three tiers. Guest needs no key (25 calls/day, IP-limited); Free (200/day) is a stable key; Pro (5,000/day) adds AI research, insider activity, and the live signals feed.

Installing the community node

This works on self-hosted n8n only — Cloud restricts community-node installs to n8n's verified catalog, and this one isn't in it (see the FAQ below for why). If you're on Cloud, skip ahead to No install? Use the built-in MCP Client.

  1. Open Settings → Community Nodes.
  2. Click Install a community node.
  3. npm Package Name: n8n-nodes-stocklake
  4. Check the box acknowledging you're installing unverified code from a public npm registry, and confirm.
  5. The Stocklake node (and its auto-generated Stocklake Tool variant, plus both credential types) show up in the node panel immediately — no restart needed.
Two settings your instance needs, both defaults on a fresh self-hosted install: N8N_COMMUNITY_PACKAGES_ENABLED=true (community nodes at all) and N8N_UNVERIFIED_PACKAGES_ENABLED=true (unverified ones specifically, which n8n-nodes-stocklake currently is). If Install a community node doesn't appear as an option at all, one of those two is set to false in your instance's environment.

Package: npmjs.com/package/n8n-nodes-stocklake

No install? Use the built-in MCP Client

Everything in the three workflows below still works with zero installation, on Cloud or self-hosted: point n8n's built-in MCP Client node (or MCP Client Tool, for the agent workflow) at https://api.stocklake.dev/mcp, authentication set to None for the guest tier or a Bearer token for a Free/Pro key. You lose the typed dropdowns and the credential test button; you don't lose any data or any tool — it's the same MCP server either way.

Credentials

The node ships two credential types. Neither is required — every operation works unauthenticated, as a guest, on n8n's own request.

CredentialWhat it needsNotes
Stocklake APIAn API key (optional)Leave it blank to call as a guest (25/day). Paste a Free or Pro key to raise the limit and unlock Pro-only fields. Has a Test button that calls get_stock(AAPL) and reports back which tier resolved.
Stocklake OAuth2 APINothing to pasteConnect my account opens Stocklake's real login/consent screen. Uses Dynamic Client Registration — n8n registers itself with Stocklake automatically on first connect, since every self-hosted instance has a different callback URL and there's no single client ID to hardcode.

Node vs. the built-in MCP Client

 n8n-nodes-stocklakeBuilt-in MCP Client
Choosing an operationTyped Resource + Operation dropdownsA tool name picked from a list, plus a raw JSON arguments field
CredentialDedicated credential type with a Test buttonManual header/auth config per node
Agent-ready variantAutomatic (Stocklake Tool)A separate MCP Client Tool node, same raw JSON args
Works onSelf-hosted only, todayAnywhere — Cloud and self-hosted
All three workflows below paste directly onto an empty canvas — copy a file's JSON from the appendix, click the canvas, and Ctrl+V. No import dialog needed. Credentials are deliberately left unset in the JSON: n8n auto-selects a matching credential on paste only when exactly one of that type exists. If you have both a Stocklake API and a Stocklake OAuth2 API credential saved, open each node afterward and pick the one you want.

1. Run several lookups at once

Manual Trigger
click to run
S
Get Stock
AAPL
S
Screener
oversold, sorted by RSI
S
Market Pulse
VIX, Fear & Greed, breadth

One execution, three independent Stocklake nodes running in parallel off the same trigger

The simplest shape: a Manual Trigger fanning out into three Stocklake nodes with no dependency between them — Stock → Get for one symbol, Screener → Screen with the oversold preset, and Market → Get Pulse. Every operation here works on the free tier, including with no credential attached at all (guest, 25 calls/day). This is the workflow to paste in first just to confirm the node installed correctly and your credential (if you set one) resolves to the tier you expect.

Show workflow JSON — Stocklake Common Actions
Copy, then paste (Ctrl+V) onto an empty n8n canvas
{
  "name": "Stocklake — Common Actions",
  "nodes": [
    {
      "parameters": {},
      "id": "a1000000-0000-4000-8000-000000000001",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -40,
        300
      ]
    },
    {
      "parameters": {
        "resource": "stock",
        "operation": "get",
        "symbol": {
          "__rl": true,
          "value": "AAPL",
          "mode": "id"
        }
      },
      "id": "a1000000-0000-4000-8000-000000000002",
      "name": "Get Stock — AAPL",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        100
      ]
    },
    {
      "parameters": {
        "resource": "screener",
        "operation": "screen",
        "preset": "oversold",
        "limit": 10,
        "additionalFields": {
          "sortBy": "rsi",
          "sortDir": "asc"
        }
      },
      "id": "a1000000-0000-4000-8000-000000000003",
      "name": "Screener — Oversold",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "resource": "market",
        "operation": "getPulse"
      },
      "id": "a1000000-0000-4000-8000-000000000004",
      "name": "Market Pulse",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        500
      ]
    }
  ],
  "connections": {
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Get Stock — AAPL",
            "type": "main",
            "index": 0
          },
          {
            "node": "Screener — Oversold",
            "type": "main",
            "index": 0
          },
          {
            "node": "Market Pulse",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

2. Give an agent a market-data tool

💬
Chat Trigger
on message received
A
AI Agent
chat model + Stocklake tool
Reply
back to the chat

The auto-generated Stocklake Tool node, wired to an AI Agent’s tool list

This is the Stocklake Tool variant — the node's automatically-generated second form, attached to an AI Agent node's tool input instead of running as a linear step. The symbol field is set to {{ $fromAI('symbol', 'The stock ticker symbol, e.g. NVDA', 'string') }}, so the model extracts the ticker from whatever the user actually asked ("what's the RSI on NVDA?") rather than it being hardcoded. The Agent's system message explicitly tells it to always call the tool for real numbers rather than answer from memory — worth keeping in any agent you attach this to, since an LLM asked for a stock price without a tool will happily make one up.

You'll need a chat model attached to the Agent (the example workflow points at an OpenAI-compatible endpoint — set the model name and base URL to whatever you run). Any tool-calling model works; the node is only useful to an agent that can actually invoke it.

Show workflow JSON — Stocklake AI Agent
Copy, then paste (Ctrl+V) onto an empty n8n canvas
{
  "name": "Stocklake — AI Agent",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "id": "b2000000-0000-4000-8000-000000000001",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        -40,
        300
      ],
      "webhookId": "b2000000-0000-4000-8000-0000000000ff"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "You are a market research assistant with live access to Stocklake.\n\nAlways call the Stocklake tool to get real numbers before answering — never answer a price, RSI or indicator question from memory. Quote the figures you get back and say what they imply. Keep answers to a few sentences."
        }
      },
      "id": "b2000000-0000-4000-8000-000000000002",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "model": "mistral-small-4-openrouter-1",
        "options": {
          "temperature": 0.2
        }
      },
      "id": "b2000000-0000-4000-8000-000000000003",
      "name": "Chat Model (LiteLLM)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.1,
      "position": [
        140,
        520
      ]
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Live stock market data from Stocklake. Use for a single stock's price, fundamentals and technical indicators (RSI, MACD, Bollinger, moving averages). Pass the ticker symbol, e.g. NVDA or AAPL.",
        "resource": "stock",
        "operation": "get",
        "symbol": {
          "__rl": true,
          "value": "={{ $fromAI('symbol', 'The stock ticker symbol, e.g. NVDA', 'string') }}",
          "mode": "id"
        }
      },
      "id": "b2000000-0000-4000-8000-000000000004",
      "name": "Stocklake",
      "type": "n8n-nodes-stocklake.stocklakeTool",
      "typeVersion": 1,
      "position": [
        360,
        520
      ]
    }
  ],
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Model (LiteLLM)": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Stocklake": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

3. A scheduled screener → research briefing

Schedule Trigger
weekdays, 15:00
S
Market Assessment
regime context
S
Screener
oversold, >$2B
{ }
Split Out
one item per stock
S
Get Research
AI research, per hit

A scheduled screen that hands off into per-stock AI research — add your own delivery step (email, Slack, a sheet) after the last node

A weekday screen for a real signal, not a demo toy: Market → Get Assessment for regime context, then Screener → Screen for stocks under RSI 30 above a $2B market cap, split into one item per result, and Stock → Get Research on each hit for an AI-synthesized summary, catalysts, and risks. Get Research is Pro-only; everything upstream of it works on free.

Rate limits, read carefully before widening this: Screener, Get Many, Market → Get Movers, Signals, and Earnings → Get Intelligence bill one call per row returned, not one per request — a screener call returning 25 stocks costs 25, not 1. This workflow deliberately caps the screener at 5 for exactly that reason. Raise the limit with the daily quota in mind, especially if Get Research also runs per hit downstream.

This workflow stops at the per-stock research call by design — add whatever delivery step fits your setup after it (a Merge node to compile results, then Slack, email, or a row appended to a sheet).

Show workflow JSON — Stocklake Daily Oversold Briefing
Copy, then paste (Ctrl+V) onto an empty n8n canvas
{
  "name": "Stocklake — Daily Oversold Briefing",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 15 * * 1-5"
            }
          ]
        }
      },
      "id": "c3000000-0000-4000-8000-000000000001",
      "name": "Weekdays 15:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -40,
        300
      ]
    },
    {
      "parameters": {
        "resource": "market",
        "operation": "getAssessment",
        "historyCount": 0
      },
      "id": "c3000000-0000-4000-8000-000000000002",
      "name": "Market Assessment",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        200,
        300
      ]
    },
    {
      "parameters": {
        "resource": "screener",
        "operation": "screen",
        "preset": "",
        "limit": 5,
        "additionalFields": {
          "maxRsi": 30,
          "minMarketCapB": 2,
          "sortBy": "rsi",
          "sortDir": "asc"
        }
      },
      "id": "c3000000-0000-4000-8000-000000000003",
      "name": "Oversold, >$2B",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        420,
        300
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "results",
        "options": {}
      },
      "id": "c3000000-0000-4000-8000-000000000004",
      "name": "One Item Per Stock",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        640,
        300
      ]
    },
    {
      "parameters": {
        "resource": "stock",
        "operation": "getResearch",
        "symbol": {
          "__rl": true,
          "value": "={{ $json.symbol }}",
          "mode": "id"
        }
      },
      "id": "c3000000-0000-4000-8000-000000000005",
      "name": "AI Research (Pro)",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        860,
        300
      ]
    }
  ],
  "connections": {
    "Weekdays 15:00": {
      "main": [
        [
          {
            "node": "Market Assessment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Market Assessment": {
      "main": [
        [
          {
            "node": "Oversold, >$2B",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Oversold, >$2B": {
      "main": [
        [
          {
            "node": "One Item Per Stock",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "One Item Per Stock": {
      "main": [
        [
          {
            "node": "AI Research (Pro)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

Which one should you build first?

 Setup timeNeedsBest for
1. Run several lookups~5 minutesNothing — guest tier worksConfirming the node installed and your credential resolves correctly
2. Agent tool~10 minutesAn AI Agent node with a chat model attachedAdding real market data to a bot you already run
3. Screener → research~15 minutesA Pro key, and a delivery step of your choosingA standing daily watchlist you actually read

One shared limitation across all three, worth knowing before you rely on any of them: on the guest tier, rate limiting is by IP address, not by identity — fine for a single self-hosted instance calling once a day, less fine if your n8n runs behind a shared or rotating IP alongside other guest traffic. If a scheduled run ever comes back empty with no error, check for a 429 in the node's output before assuming Stocklake genuinely found nothing.

Frequently asked questions

Is there a verified n8n-nodes-stocklake node, or an official Stocklake listing in n8n's node directory?

Not yet. n8n-nodes-stocklake is a community node, installable today on any self-hosted n8n instance via npm. It hasn't gone through n8n's verified-node review — their reviewers pointed out, correctly, that every operation in the node round-trips through the same public MCP server n8n's own built-in MCP Client node can already call directly, and they're building a dedicated registry for that class of integration rather than accepting it into the general community-node catalog. Nothing here is locked behind the community node either way — the built-in MCP Client and MCP Client Tool nodes reach the identical data and tools with zero installation, on Cloud or self-hosted.

Can I install this on n8n Cloud?

Not the community node — Cloud only allows nodes that have passed n8n's verified review, and this one hasn't yet. On Cloud, point the built-in MCP Client node at https://api.stocklake.dev/mcp instead; every operation the community node exposes is reachable that way too, just addressed by tool name and raw JSON arguments instead of typed dropdowns.

Do I need a Stocklake API key to use the node?

No. Leave the node's credential unset and it calls Stocklake as a guest — 25 calls a day, rate-limited by IP. A free API key raises that to 200 calls/day with a stable identity instead of an IP limit. A Pro key (5,000/day) unlocks AI research, insider activity, and the live signals feed, and adds a second credential type — OAuth2 — that connects with one click via Dynamic Client Registration, with no client ID or secret to paste in.

What's the difference between the node and its Tool variant?

n8n auto-generates a Tool variant for any node marked usableAsTool — n8n-nodes-stocklake.stocklakeTool here. Same operations, same credential, but its parameters can be filled by an AI Agent at runtime via $fromAI() instead of being set by hand, so it plugs straight into an Agent node's tool list. This comes for free once the node is installed; no separate MCP Client Tool node needed.

Is there a discount for n8n users?

Yes — use code N8N-20OFF at checkout for 20% off Stocklake Pro, applied for 24 months. It unlocks the AI verdict/score fields, insider activity, and the live signals feed used in workflow 3 above, on top of a higher daily rate limit than free or guest.

Appendix: full workflow JSON

Workflow 1 — common actions

Full JSON — Stocklake Common Actions
Same file as above
{
  "name": "Stocklake — Common Actions",
  "nodes": [
    {
      "parameters": {},
      "id": "a1000000-0000-4000-8000-000000000001",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -40,
        300
      ]
    },
    {
      "parameters": {
        "resource": "stock",
        "operation": "get",
        "symbol": {
          "__rl": true,
          "value": "AAPL",
          "mode": "id"
        }
      },
      "id": "a1000000-0000-4000-8000-000000000002",
      "name": "Get Stock — AAPL",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        100
      ]
    },
    {
      "parameters": {
        "resource": "screener",
        "operation": "screen",
        "preset": "oversold",
        "limit": 10,
        "additionalFields": {
          "sortBy": "rsi",
          "sortDir": "asc"
        }
      },
      "id": "a1000000-0000-4000-8000-000000000003",
      "name": "Screener — Oversold",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "resource": "market",
        "operation": "getPulse"
      },
      "id": "a1000000-0000-4000-8000-000000000004",
      "name": "Market Pulse",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        220,
        500
      ]
    }
  ],
  "connections": {
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Get Stock — AAPL",
            "type": "main",
            "index": 0
          },
          {
            "node": "Screener — Oversold",
            "type": "main",
            "index": 0
          },
          {
            "node": "Market Pulse",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

Workflow 2 — AI agent tool

Full JSON — Stocklake AI Agent
Same file as above
{
  "name": "Stocklake — AI Agent",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "id": "b2000000-0000-4000-8000-000000000001",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        -40,
        300
      ],
      "webhookId": "b2000000-0000-4000-8000-0000000000ff"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "You are a market research assistant with live access to Stocklake.\n\nAlways call the Stocklake tool to get real numbers before answering — never answer a price, RSI or indicator question from memory. Quote the figures you get back and say what they imply. Keep answers to a few sentences."
        }
      },
      "id": "b2000000-0000-4000-8000-000000000002",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        220,
        300
      ]
    },
    {
      "parameters": {
        "model": "mistral-small-4-openrouter-1",
        "options": {
          "temperature": 0.2
        }
      },
      "id": "b2000000-0000-4000-8000-000000000003",
      "name": "Chat Model (LiteLLM)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.1,
      "position": [
        140,
        520
      ]
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Live stock market data from Stocklake. Use for a single stock's price, fundamentals and technical indicators (RSI, MACD, Bollinger, moving averages). Pass the ticker symbol, e.g. NVDA or AAPL.",
        "resource": "stock",
        "operation": "get",
        "symbol": {
          "__rl": true,
          "value": "={{ $fromAI('symbol', 'The stock ticker symbol, e.g. NVDA', 'string') }}",
          "mode": "id"
        }
      },
      "id": "b2000000-0000-4000-8000-000000000004",
      "name": "Stocklake",
      "type": "n8n-nodes-stocklake.stocklakeTool",
      "typeVersion": 1,
      "position": [
        360,
        520
      ]
    }
  ],
  "connections": {
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Chat Model (LiteLLM)": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Stocklake": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

Workflow 3 — daily oversold briefing

Full JSON — Stocklake Daily Oversold Briefing
Same file as above
{
  "name": "Stocklake — Daily Oversold Briefing",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 15 * * 1-5"
            }
          ]
        }
      },
      "id": "c3000000-0000-4000-8000-000000000001",
      "name": "Weekdays 15:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -40,
        300
      ]
    },
    {
      "parameters": {
        "resource": "market",
        "operation": "getAssessment",
        "historyCount": 0
      },
      "id": "c3000000-0000-4000-8000-000000000002",
      "name": "Market Assessment",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        200,
        300
      ]
    },
    {
      "parameters": {
        "resource": "screener",
        "operation": "screen",
        "preset": "",
        "limit": 5,
        "additionalFields": {
          "maxRsi": 30,
          "minMarketCapB": 2,
          "sortBy": "rsi",
          "sortDir": "asc"
        }
      },
      "id": "c3000000-0000-4000-8000-000000000003",
      "name": "Oversold, >$2B",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        420,
        300
      ]
    },
    {
      "parameters": {
        "fieldToSplitOut": "results",
        "options": {}
      },
      "id": "c3000000-0000-4000-8000-000000000004",
      "name": "One Item Per Stock",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        640,
        300
      ]
    },
    {
      "parameters": {
        "resource": "stock",
        "operation": "getResearch",
        "symbol": {
          "__rl": true,
          "value": "={{ $json.symbol }}",
          "mode": "id"
        }
      },
      "id": "c3000000-0000-4000-8000-000000000005",
      "name": "AI Research (Pro)",
      "type": "n8n-nodes-stocklake.stocklake",
      "typeVersion": 1,
      "position": [
        860,
        300
      ]
    }
  ],
  "connections": {
    "Weekdays 15:00": {
      "main": [
        [
          {
            "node": "Market Assessment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Market Assessment": {
      "main": [
        [
          {
            "node": "Oversold, >$2B",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Oversold, >$2B": {
      "main": [
        [
          {
            "node": "One Item Per Stock",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "One Item Per Stock": {
      "main": [
        [
          {
            "node": "AI Research (Pro)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}

Node types, versions, and field names above are copied directly from real exported n8n workflows against n8n-nodes-stocklake@0.1.1 at the time of writing, not guessed. If a newer version has renamed a field, the node panel itself is the source of truth; reconfigure that one field and the rest of the import still holds.