Automated Daily Stock Market Report with Bright Data, GPT-4.1, Airtable/Gmail

πŸ“˜ Workflow Documentation – Stock Market Daily Digest

πŸ‘‹ Introduction Wake up to a clean, analyst-style stock digest in your inboxβ€”top gainers/losers, a readable performance table, 3–5 insights, and upcoming eventsβ€”no spreadsheets, no manual scraping, no copy-paste.
This article explains, step by step, how to build a robust, daily, end-to-end automation that collects market data (Bright Data), waits until scraping is done, aggregates results, asks an AI model (OpenAI) to draft a styled HTML email, logs everything to Airtable, and finally sends the report via Gmail.

You’ll find a friendly but technical tour of every single node, so you can rebuild or adapt the same pipeline with confidence.

🎯 Who is this workflow for? Investors & traders** who want a quick, readable daily summary.
Finance/Product teams** building data-driven alerts/digests.
Consultants & agencies** sending recurring client updates.
Automation builders** prototyping finance ops quickly.

🧰 Tools you’ll need Bright Data** β€” dataset triggers & snapshots for reliable web data.
OpenAI (GPT)** β€” to generate a professional HTML digest.
Airtable** β€” store daily rows for history, filters, dashboards.

Example Airtable Table: Daily Stocks

| Ticker | Company | Price | Change % | Sentiment | Date | |--------|--------------------------|---------|----------|-----------|---------------------| | AAPL | Apple Inc. | 225.80 | +1.4% | 🟒 Positive | 2025-09-18 09:00 | | MSFT | Microsoft Corporation | 415.20 | -0.7% | πŸ”΄ Negative | 2025-09-18 09:00 | | NVDA | NVIDIA Corporation | 124.55 | +2.1% | 🟒 Positive | 2025-09-18 09:00 | | TSLA | Tesla Inc. | 260.00 | -3.0% | πŸ”΄ Negative | 2025-09-18 09:00 | | META | Meta Platforms Inc. | 310.45 | +0.5% | 🟑 Neutral | 2025-09-18 09:00 |

Gmail** β€” deliver the final HTML email to stakeholders.
n8n** β€” the automation engine that orchestrates every step.

> Keep API keys in n8n Credentials (never hard-code secrets).

πŸ—ΊοΈ Architecture at a glance Schedule fires daily
Seed list of tickers
Split into one item per stock
Prepare keyword for scraping
Launch Bright Data job
Poll progress with a wait-loop
Fetch snapshot data
Aggregate for the AI
Generate HTML summary (GPT)
Save rows to Airtable
Send email via Gmail

βš™οΈ Step-by-step β€” Every node explained

⏰ Daily Run Trigger (Schedule Trigger)

Purpose Start the automation at a precise time each day so nobody needs to push a button.

Parameters (English) Trigger Type**: Time Interval or Cron
Every X**: 1 Day (or your preferred cadence)
Timezone**: UTC (or your own)
Start Time**: optional (e.g., 09:00)

πŸ“ Set Stock List (Set Node – SAMPLE DATA)

Purpose Define the universe of stocks to monitor. This acts as the seed data for scraping.

Parameters Values to Set**: Fixed JSON (array of objects)
Keep Only Set**: true
Fields per item**: ticker, name, market_cap (you may add sector, isin, etc.)

πŸ”€ Split Stocks (Split Out)

Purpose Turn the array into individual items so each ticker is processed independently (scraping, polling, results).

Parameters Operation**: Split Out Items
Field to Split**: the array defined in the previous Set node

🏷 Prepare Stock Keyword (Set Node)

Purpose Create a keyword field (typically equal to ticker) for Bright Data discovery.

Parameters Values to Set**: Add Field
Field Name**: keyword
Value**: use an expression referencing the current item’s ticker (e.g., {{ $json.ticker }})

πŸ•Έ Bright Data Scraper (HTTP Request)

Purpose Trigger the Bright Data dataset to start collecting information for the keyword. Returns a snapshot_id to poll later.

Parameters Method**: POST
Endpoint**: https://api.brightdata.com/datasets/v1/trigger
Authentication**: Authorization: Bearer <token> (header)
Body Fields**:
dataset_id: your Bright Data dataset ID
discover_by: usually keyword
keyword: the value prepared above

> Add a retry/backoff policy on 429/5xx in node options.

πŸ”„ Check Scraper Progress (HTTP Request)

Purpose Poll Bright Data to see whether the snapshot is running or ready.

Parameters Method**: GET
Endpoint**: https://api.brightdata.com/datasets/v1/snapshots/{snapshot_id}
Authentication**: Authorization: Bearer <token>
Expected Output**: a status field (running, ready)

⏳ Wait for Data (Wait Node)

Purpose Pause between progress checks to avoid rate limits and give Bright Data time to finish.

Parameters Mode**: Wait a fixed amount of time
Time**: e.g., 30 seconds (tune to your dataset size)

πŸ”€ Scraper Status Switch (Switch Node)

Purpose Route logic based on the polled status.

Parameters Value to Check**: status
Rules**:
Equals running β†’ go to Wait for Data (then re-check)
Equals ready β†’ proceed to Fetch Scraper Results

> Loop pattern: Check β†’ Wait β†’ Check, until ready.

πŸ“₯ Fetch Scraper Results (HTTP Request)

Purpose Download the completed snapshot data once Bright Data marks it ready.

Parameters Method**: GET
Endpoint**: https://api.brightdata.com/datasets/v1/snapshots/{snapshot_id}/data
Authentication**: Authorization: Bearer <token>
Query**: format=json
Output**: array of rows per ticker (price, change %, any fields your dataset yields)

> Normalize fields with a Set/Code node if needed.

πŸ“Š Aggregate Stock Data (Aggregate Node)

Purpose Combine all individual items into one consolidated object so the AI can analyze the entire market snapshot.

Parameters Mode**: Aggregate (merge to a single item)
Fields to Include**: ticker, name, price, change, sentiment (plus any extra fields captured)
Output**: one JSON item containing an array/map of the day’s stocks

πŸ€– Generate Daily Summary (AI Node – OpenAI)

Purpose Ask the model to convert raw data into a styled HTML email: headline, top movers, table, insights, and (optional) upcoming events.

Parameters Model**: gpt-4.1 Input**: the aggregated JSON from the previous node
Prompt guidelines**:
Output HTML only with inline styles (email-safe)
Include a table (Ticker, Company, % Change with ↑/↓ & color, Market Cap, Sentiment icon)
Highlight top 2 gainers & 2 losers with short reasoning if present
Provide 3–5 insights (sector rotation, volatility, outliers)
Add upcoming events when available (earnings, launches, macro)
Footer: β€œGenerated automatically by your AI-powered stock monitor”
Output field**: confirm the exact property that contains the HTML (e.g., output, message, text)

πŸ—‚ Save to Airtable (Airtable – Create Record)

Purpose Log each item (or the roll-up) to Airtable for history, filtering, and dashboards.

Parameters Operation**: Create Record
Base ID**: from your Airtable URL
Table**: e.g., Daily Stocks
Field Mapping**:
Ticker ← {{ $json.ticker }}
Company ← {{ $json.name }}
Price ← {{ $json.price }}
Change % ← {{ $json.change }}
Sentiment ← {{ $json.sentiment }}
Date ← {{ $now.toISO() }}

> Use a Single-Select for Sentiment (🟒 / 🟑 / πŸ”΄) to build clean Airtable views.

πŸ“§ Send Report via Gmail (Gmail Node)

Purpose Deliver the AI-generated HTML digest to your recipients.

Parameters Operation**: Send Email
Send To**: one or more recipients (e.g., investor@domain.com)
Subject**: Daily Stock Market Digest – {{ $now.format("yyyy-MM-dd") }}
Message (HTML)**: reference the AI node’s HTML property (e.g., {{ $('Generate Daily Summary').first().json.output }})
Options: set **Append Attribution to false (keep the email clean)

> Test in Gmail, Outlook, and mobile to validate inline CSS.

πŸ§ͺ Error handling & reliability tips Backoff on Bright Data* β€” If scraping many tickers, increase Wait* or batch requests.
Guard against empty results** β€” If a snapshot returns 0 rows, branch to a fallback email (β€œNo data today”).
AI guardrails** β€” Enforce β€œHTML-only” and skip missing sections gracefully.
Airtable normalization** β€” Strip %, cast numbers to float before insert.
Observability* β€” Add a final Slack/Email On Fail* node with run ID and error message.

🧩 Customization ideas Sector deep-dives**: add sector fields and a second AI paragraph on sector rotation.
CSV attachment**: generate & attach a CSV for power users.
Multiple lists**: run parallel branches for Tech, Healthcare, or regions.
Other asset classes**: Crypto, ETFs, Indices, FX.
Audience targeting**: different β€œTo” lists and slightly different prompts per audience.

βœ… Why this workflow is powerful Hands-off** β€” the report simply shows up every day.
Analyst-grade** β€” clean HTML, top movers, tidy table, actionable insights.
Auditable** β€” rows archived in Airtable for history and dashboards.
Composable** β€” swap scrapers, LLMs, storage, or email service.
Scalable** β€” start with 10 tickers, grow to many lists using the same loop.

For advanced no-code & AI projects, see 0vni – Agence automatisation.

0
Downloads
197
Views
8.08
Quality Score
beginner
Complexity
Author:Baptiste Fort(View Original β†’)
Created:9/19/2025
Updated:11/26/2025

πŸ”’ Please log in to import templates to n8n and favorite templates

Workflow Visualization

Loading...

Preparing workflow renderer

Comments (0)

Login to post comments