$ cat workspace-template.yaml

K

Keyword Research

// Trasformare un input grezzo (un URL, un elenco di prodotti, un argomento) in un pacchetto di keyword pronte all'uso — classificate per intento, priorità e raggruppate in cluster tematici

Document Generation

// Canvas Preview

canvas.flow

// Instruction

instruction.md

Template Ricerca Keyword

Overview

This workflow performs automated SEO keyword research by analyzing live web content. It takes a seed keyword, searches the web for relevant URLs, scrapes their content into Markdown, and uses a multi-stage intelligence pipeline to perform niche analysis, intent classification, and algorithmic clustering. It then generates a comprehensive keyword research report, including a custom scoring model (optionally using simulated GSC/Ads data), and saves the final reports and supporting scripts to Google Drive.

Workflow Chain

[Text (Seed)]  -> [Web Search]    -> [Fetch URL as Markdown]      -> [Knowledge Synthesizer (Niche Analysis)]        -> [Knowledge Synthesizer (Intent Classification)]          -> [Text Merge]            -> [Knowledge Synthesizer (Keyword Generation)]              -> [save-file (Report)]

Note: Advanced scoring and clustering scripts are generated in parallel via the Intelligence pipeline.

Node Reference

  • Text (Seed): Provides the initial keyword.
    • Inputs from: N/A
    • Configurable inputs: value (The seed keyword string)
    • Output: value
  • Web Search: Searches the web for URLs related to the seed keyword.
    • Inputs from: Text (Seed)
    • Configurable inputs: query (string), country (IT, US, GB, etc.), num_results (1-20)
    • Output: urls (Array of strings)
  • Fetch URL as Markdown: Scrapes the content of the discovered URLs.
    • Inputs from: Web Search
    • Configurable inputs: urls (Array of strings), timeout_seconds (5-120)
    • Output: markdown (Array of Markdown strings)
  • Knowledge Synthesizer (Niche Analysis): Analyzes scraped content to define niche, audience, and tone.
    • Inputs from: Fetch URL as Markdown
    • Configurable inputs: query (Analysis prompt), context (Markdown array), language (e.g., Italian), llmModelId
    • Output: text (Structured niche analysis)
  • Knowledge Synthesizer (Intent Classification): Generates classification rules and logic.
    • Inputs from: Text Merge (via Niche Analysis)
    • Configurable inputs: query (Classification prompt), context (Niche analysis), language, llmModelId
    • Output: text (Markdown rules/logic)
  • Knowledge Synthesizer (Keyword Generation): Generates the final report and CSV.
    • Inputs from: Text Merge (Aggregated context)
    • Configurable inputs: query (Generation prompt), context (Aggregated intelligence), language, llmModelId
    • Output: text (Full report + CSV table)
  • save-file: Saves reports or generated scripts to Google Drive.
    • Inputs from: Various Synthesizers
    • Configurable inputs: text (Content), name (Filename), destinationFolder (Drive UUID)
    • Output: driveItemId

Execution Strategy

You MUST complete all 4 phases in order: Phase 1 -> Phase 2 -> Phase 3 -> Phase 4. Do NOT skip any phase.

Phase 1: Initialization and Decision

  1. Call requestUserDecision to gather the following:
    • "What is your seed keyword?" (context: Required to start the search)
    • "Which country should the search target?" (context: Influences SEO relevance)
    • "Which Google Drive folder should the reports be saved to?" (context: Required for the final output)
    • "Do you want to publish the final report to Drive immediately after generation?" (context: Determines if the final step is automatic or requires confirmation) Phase 1 complete. Now proceed to Phase 2. Do NOT skip to Phase 3.

Phase 2: Data Acquisition

  1. Use upsertNode to configure the Text node with the user's seed keyword.
  2. Use nodeExecutor on Web Search using the provided query and country.
  3. Use nodeExecutor on Fetch URL as Markdown using the urls from the previous step. Phase 2 complete. Now proceed to Phase 3. Do NOT skip to Phase 4.

Phase 3: Intelligence and Synthesis

  1. Use nodeExecutor on Knowledge Synthesizer (Niche Analysis) using the scraped markdown as context.
  2. Use nodeExecutor on Knowledge Synthesizer (Intent Classification) using the niche analysis as context.
  3. Use nodeExecutor on Knowledge Synthesizer (Clustering Algoritmico) to generate the clustering script.
  4. Use nodeExecutor on Knowledge Synthesizer (Scoring Personalizzato Avanzato) to generate the scoring script.
  5. Use nodeExecutor on Knowledge Synthesizer (Keyword Generation) using the aggregated intelligence (Niche + Intent) as context. Phase 3 complete. Now proceed to Phase 4. Do NOT skip to Phase 5.

Phase 4: Finalization and Export

  1. If the user opted to publish in Phase 1, use nodeExecutor on the save-file nodes (Report, Clustering Script, Scoring Script, and Intent Classification) to write to the selected destinationFolder. If the user did not opt to publish, call requestUserDecision to ask for final confirmation before saving.
  2. Use followUp to present the user with the final report text and the Drive file links. Phase 4 complete.

Configuration Tips

User saysConfigure
"Search in the US"Web Search: country=US
"Use GPT-4"Knowledge Synthesizer: llmModelId=[model_id]
"Save as a text file"save-file: name ends in .txt

Error Handling

ErrorCauseFix
rate_limited in Web SearchToo many requests to BraveReduce num_results or wait.
Empty markdown in Fetch nodeURL was blocked or timed outCheck if URLs are public; increase timeout_seconds.
ssrf_blockedURL is an internal/private IPUse a different, public URL.

Re-editable artifacts

Incremental Edits to an Existing Workflow

  • Detection — if the structure pre-existed this turn, it's an EDIT (delta tools only); a bundled "build AND tweak" request is a fresh build.
  • Add / remove / reorder recipes — to modify the intelligence pipeline, use sectionManager(ungroup, { sectionId }) on the Synthesizer sections, then organizeNodes and autoLayout.
  • Post-edit — re-run pre-execution verification, then honor the publish decision (re-present the gate under the post-build pattern; read prior state under the front-loaded pattern).

// Dependencies

requirements.py
1from process import FetchURLAsMarkdown2from input import Text3from process import KnowledgeSynthesizer4from output import SaveFile5from input import WebSearch6from process import TextMerge7from process import CustomCode

$ git log --oneline

v1.0.3
HEAD
2026-07-31

aggiunte nuove funzionalità per un report più completo

v1.0.22026-07-31

aggiunto il naming dinamico per i file salvati

v1.0.12026-07-30
v1.0.02026-07-30