Mindket

SEO keyword chat assistant for voice or text

Newversion 1 · updated

Overview

An n8n workflow that answers typed or spoken SEO questions over a webhook. A Gemini agent with memory looks up keywords, rankings and Google results through your DataForSEO sub-workflow, reads pages with Firecrawl and replies in Markdown.

SEO keyword chat assistant for voice or text is an n8n workflow in the Marketing & SEO category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

At a glance

Runs in
  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file, plus a change to Memory when Cloudflare is not in front of it
  • A chat page or app of your own: it posts the question and shows the answer
  • Postman or curl: for tests, with JSON for text and a form upload for voice

Platform

Connects 3 apps

How it works

Trigger

Web request

It starts when a POST reaches the keywordresearch webhook with:

  • The type, voice or text
  • A typed message, or a recording in an audio field
  • A country name
  • A language name

Actions

  1. Looks up DataForSEO’s location number and language code for the country and the language
  2. Gemini turns a voice note into text, while a typed question goes straight on
  3. A Gemini agent with memory calls keyword, ranking and search tools through your sub-workflow
  4. Firecrawl reads any page the agent names, as Markdown
  5. The answer goes back to the caller as Markdown with tables and three suggestions

Result

An SEO answer in Markdown, with keyword tables and three next steps, sent back to the app that asked

Integrations

What you need before you start.

Google Gemini

Language model

Runs Gemini 2.5 Flash for the agent and its fallback, and turns voice notes into text.

NeedsGemini API key

Firecrawl

Web scraping

Reads a page the agent names as Markdown, and its key goes to your sub-workflow for the link list.

NeedsFirecrawl API key, typed into `🦺 Set Data`

DataForSEO

Keyword data

Answers the keyword, ranking, search result and AI Mode calls your sub-workflow makes.

NeedsAPI login and password, used in your sub-workflow

Workflow check

Checked by Mindket on 13 Nov 2026

Steps
8 steps, starting when its webhook is called
AI
2 steps call an AI model: Transcribe Audio and Keyword AI Agent
Sign-ins
Signs in to: Google Gemini and Firecrawl
API keys
No API key is left in the file; 1 blank in it for your own key
Step types
Mindket’s checker reads all 7 of its step types

Read from the workflow’s file, not from a run.

About

What it is

This n8n workflow is the back end of an SEO chat that takes typed questions and voice notes. Your app posts a question with a country and a language, and a Gemini agent answers in Markdown with tables. Its tools look up keyword ideas, related keywords, a competitor’s rankings, Google’s results and AI Mode through a sub-workflow you build on DataForSEO. Firecrawl reads any page it names. The answer comes back in the same request, and each caller’s last 12 exchanges are remembered. It runs on 19 nodes.

Who it suits

SEO consultants, agencies and site owners who want keyword research inside their own chat window or app, and who already pay for DataForSEO. Skip it if you want a finished chat page. It has no front end. You build the sub-workflow yourself.

Who uses it, and how
IndustryWho uses itHow they use itExample
AgenciesSEO account managersAsk for a rival’s rankings before a client callA manager asks which keywords a rival bike shop ranks for in the United Kingdom and gets them as a table.
EcommerceStore ownersAsk by voice for product keyword ideasAn owner records a question about running shoes for Germany and reads keyword ideas with their volumes.
PublishingContent editorsCheck Google’s results and AI Mode before writingAn editor sees what AI Mode answers on a topic before planning the post.

You need to be at home in n8n and in DataForSEO’s API, since you build the sub-workflow. Its author puts setup at 7 minutes, which leaves that part out.

Where to use it

Any n8n that can reach Google, Firecrawl and DataForSEO will run it. The caller can be any app that sends a POST and shows Markdown. Nothing is saved to a sheet.

  • n8n Cloud: import the file into a new workflow there
  • Your own n8n server: the same file, plus a change to Memory when Cloudflare is not in front of it
  • A chat page or app of your own: it posts the question and shows the answer
  • Postman or curl: for tests, with JSON for text and a form upload for voice

Setup

Get it saves a zip with workflow.json and Mindket’s setup notes in your downloads folder.

What you need first
NeedDetail
n8nOn n8n Cloud or on a server of your own
GoogleA Gemini API key, for the agent and the voice notes
FirecrawlAn API key, for reading pages
DataForSEOAn API login and password, used in your sub-workflow
A callerYour app, or Postman for tests
  1. In n8n, create a workflow, open its menu, choose Import from File and pick workflow.json.
  2. Add a Google Gemini credential and select it in Transcribe Audio, 2.5 Flash and 2.5 Pro.
  3. In 🦺 Set Data, replace YOUR_FIRECRAWL_KEY with your Firecrawl key.
  4. Build the sub-workflow below, then pick it in each of the six tool nodes under Keyword AI Agent.
  5. If your n8n is not behind Cloudflare, point the key in Memory at a value your app sends, such as a session_id field.
  6. Add Header Auth to Webhook unless its address stays private.
  7. Save, send a test request to the test address, then publish.

The six tools share one sub-workflow, which is not in the file. Their nodes pointed at a workflow in its author’s n8n, so they arrive empty. Yours receives these fields, and function names the job:

{
  "function": "ranked_keywords, related_keywords, keyword_ideas, serp_search, ai_mode or internal_links",
  "keyword": "<the agent’s search words>",
  "url": "<a domain such as example.com, or a page address>",
  "country_code": "<DataForSEO’s location number, such as 2840>",
  "language_code": "<DataForSEO’s language code, such as en>",
  "firecrawl_api": "<your Firecrawl key>"
}

Despite its name, country_code carries DataForSEO’s location number. The README names a DataForSEO or Firecrawl endpoint for each of the six jobs.

How to use it

Every call is one POST. Send it to the production address with type, country and language. Add message for a typed question, or a recording in a field called audio for a voice note. The country and the language must match names in the Code lists exactly, such as United States and English. Ask the next question from the same address and the agent keeps the thread.

What to change for a different result
To changeWhere
The persona, the tables and the suggestionsThe system prompt in Keyword AI Agent
Countries and languagesThe two lists at the top of Code
How much the chat remembersContext Window Length in Memory, 12 in the file
The fallback model2.5 Pro, used when 2.5 Flash fails
How fresh a scraped page must bemaxAge in URL_search, four hours in the file

Example

Your app posts this:

{
  "type": "text",
  "message": "Keyword ideas for a bike repair shop in Leeds",
  "country": "United Kingdom",
  "language": "English"
}

Code turns the two names into 2826 and en. The agent may call keyword_ideas, related_keywords and serp_search first. Its answer comes back in this shape, shown with the figures cut:

{
  "output": "🎯 …\n\n| Keyword | Volume | KD | CPC |\n|---|---|---|---|\n| `bike repair leeds` | … | … | … |\n…\n\n[SUGGESTION] …\n[SUGGESTION] …\n[SUGGESTION] …"
}

For newcomers and experts

If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. The agent’s tools hang under it on thin lines, and the agent picks which to call. A webhook is an address that starts the workflow when something posts to it. Send one typed question from Postman first. Then open Keyword AI Agent in that execution to read each tool call and its answer.

For experts. One agent does the work. Its fallback node is called 2.5 Pro, but neither model node names a model, so both run the node’s default, Gemini 2.5 Flash.

The agent’s tools
ToolWhat it isWhat to know
keyword_ideas, related_keywordsYour sub-workflowSend keyword and the two DataForSEO codes
ranked_keywordsYour sub-workflowSends a bare domain as url, for a competitor’s rankings
serp_search, ai_modeYour sub-workflowGoogle’s results and AI Mode for a keyword
internal_linksYour sub-workflowSends a page address and the Firecrawl key
URL_searchFirecrawl’s v1 scrape, Markdown of the main contentAccepts a copy cached up to four hours old, and reads PDFs
Thinkn8n’s think toolA place for the agent’s notes, costing tokens only

The system prompt runs to some 18,000 characters and goes out with every round. Memory keys each conversation on the caller’s IP address. It lives in n8n itself, so a restart clears it.

Good to know

It answers with more confidence than its data may back.

  • Billing: Gemini bills every agent round with that long prompt, Firecrawl counts each scrape and a PDF by the page, and DataForSEO bills every call your sub-workflow makes
  • Made-up figures: the prompt bans hedging, asks the model to claim experience it does not have, and wants click-through potential, readability scores and keyword density that no tool measures. Treat those as guesses, or cut those lines
  • Old facts: one section of the prompt is dated 2025 and quotes traffic shares with no source
  • Suggestions: each answer ends with three [SUGGESTION] lines, meant for a front end that turns them into buttons. Show them that way or strip them
  • Memory: the key is the cf-connecting-ip header. Without Cloudflare in front, it is empty and the run stops at Memory. People behind one IP address share one conversation
  • Wrong names: a country or language missing from Code leaves the codes empty, and the DataForSEO calls fail. A type other than voice or text gets no answer
  • Models: Google’s deprecations page, read on 2 November 2026, gives Gemini 2.5 no shutdown date but limits it to users who used it before. A new key may need gemini-3.8-flash in the three Gemini nodes
  • Open webhook: once it is published, anyone with the address can run it on your keys
  • Your data: questions and voice notes go to Google, pages to Firecrawl, and keywords and domains to DataForSEO. Each execution also stores the Firecrawl key from 🦺 Set Data
  • Credentials: the JSON holds none. The six tool nodes arrive without a sub-workflow, and nothing else changed from the original copy

README and files

README

SEO keyword chat assistant for voice or text

An n8n workflow that serves as the back end of an SEO chat. Your app posts a typed question or a voice note, with a
country and a language. Gemini turns a voice note into text, and a Gemini agent answers in Markdown with tables. Its
tools look up keywords, a competitor's rankings, Google's results and Google's AI Mode through a sub-workflow you build
on DataForSEO, and Firecrawl reads any page it names. The answer goes back in the same web request, and the chat keeps
its last 12 exchanges for each caller.

What is inside

  • workflow.json: the workflow as n8n exports it, 27 nodes, eight of them sticky notes. It holds no credential.
  • README.md: these notes.

What we changed from the original copy

  • ranked_keywords, related_keywords, keyword_ideas, serp_search, ai_mode and internal_links called a
    sub-workflow in its author's own n8n. They arrive empty, so you build that sub-workflow and pick it in all six
    (below).
  • The Firecrawl key in 🦺 Set Data was a placeholder in the author's own style. It now reads YOUR_FIRECRAWL_KEY,
    like the other kits.

Nothing else changed. The original copy had no backslashes missing.

Before you start

  • An n8n instance, on n8n Cloud or your own server.
  • A Gemini API key from Google AI Studio.
  • A Firecrawl API key.
  • A DataForSEO API login and password, for the sub-workflow.
  • An app, a page or a tool such as Postman that sends the requests and shows the Markdown answer.

Set it up

  1. In n8n, create a workflow, open its menu and choose Import from File. Pick workflow.json.
  2. Add a Google Gemini credential with your key. Select it in Transcribe Audio, 2.5 Flash and 2.5 Pro.
  3. In 🦺 Set Data, replace YOUR_FIRECRAWL_KEY with your Firecrawl key.
  4. Build the sub-workflow described below and save it.
  5. Open each of the six tool nodes under Keyword AI Agent and pick your sub-workflow in its workflow field.
  6. Look at Memory. Its key is the caller's IP address, read from the cf-connecting-ip header that Cloudflare adds.
    If your n8n is not behind Cloudflare, that header is missing and the run stops at Memory. Point the key at a value
    your app sends instead, such as {{ $('Webhook').first().json.body.session_id }}.
  7. Open Webhook. Its path is keywordresearch and it takes POST. Add Header Auth there if anyone else could learn
    the address.
  8. Save, send a test request to the test address, then publish and use the production address.

The sub-workflow

All six tools call one sub-workflow, and function says which job is wanted. Start yours with a When Executed by
Another Workflow trigger that accepts these six fields:

{
  "function": "ranked_keywords, related_keywords, keyword_ideas, serp_search, ai_mode or internal_links",
  "keyword": "<the agent's search words>",
  "url": "<a domain such as example.com, or a page address>",
  "country_code": "<DataForSEO's location number, such as 2840>",
  "language_code": "<DataForSEO's language code, such as en>",
  "firecrawl_api": "<your Firecrawl key>"
}

Every tool sends function and the two codes. ranked_keywords adds url, which the agent is told to give as a bare
domain. internal_links adds url and the Firecrawl key. The other four add keyword. Despite its name,
country_code carries DataForSEO's location number. Return text or JSON the agent can read.

The file says nothing about what its author's version did, so here is one way to build it, from DataForSEO's and
Firecrawl's API pages read on 2 November 2026. A Switch on function leads to one HTTP Request each, with your
DataForSEO login as HTTP Basic Auth:

ranked_keywords   POST https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live
related_keywords  POST https://api.dataforseo.com/v3/dataforseo_labs/google/related_keywords/live
keyword_ideas     POST https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_ideas/live
serp_search       POST https://api.dataforseo.com/v3/serp/google/organic/live/advanced
ai_mode           POST https://api.dataforseo.com/v3/serp/google/ai_mode/live/advanced
internal_links    POST https://api.firecrawl.dev/v2/map

Send location_code and language_code from the two codes in each DataForSEO body. ranked_keywords takes the domain
as target, related_keywords takes one keyword, and keyword_ideas takes a keywords list. The Firecrawl call
takes the address as url and the key as a Bearer header.

Calling it

A typed question is a JSON body:

{
  "type": "text",
  "message": "Keyword ideas for a bike repair shop in Leeds",
  "country": "United Kingdom",
  "language": "English"
}

A voice note is a multipart form, with the recording in a field called audio:

curl -X POST "https://<your n8n>/webhook/keywordresearch" -F type=voice -F country=Germany -F language=German -F audio=@question.mp3

type must be voice or text, in lower case. country and language must match a name in the lists inside the
Code node exactly, such as United States, Turkiye or Chinese (Simplified). It knows 94 countries and 46
languages.

How a run goes

  1. Webhook takes the request and waits for Respond to Webhook before it answers.
  2. Code looks up DataForSEO's location number and language code for the country and the language.
  3. Switch sends a voice note to Transcribe Audio, where Gemini turns it into text, and a typed question
    to Set Message.
  4. 🦺 Set Data gathers the question, the Firecrawl key, the two codes and the caller's IP address.
  5. Keyword AI Agent answers with its long system prompt, the recent exchanges in Memory and its tools. It may
    call several tools before it writes.
  6. Respond to Webhook sends the agent's answer back as JSON, in a field called output.

Change the look

  • The assistant's voice and format: the system prompt in Keyword AI Agent. It sets the persona, the tables each kind
    of answer must hold, and the three suggestion lines at the end.
  • More countries or languages: the two lists at the top of Code.
  • How much the chat remembers: Context Window Length in Memory, 12 in the file.
  • The fallback model: 2.5 Pro, which the agent uses when 2.5 Flash fails.
  • How fresh a scraped page must be: maxAge in the body of URL_search, four hours in the file.

Good to know

  • Billing: Gemini bills every agent round, and the system prompt alone runs to some 18,000 characters, sent each time.
    Firecrawl counts every scrape, and a PDF page by page. DataForSEO bills every call your sub-workflow makes.
  • Models: neither 2.5 Flash nor 2.5 Pro names a model, so both run the node's default, Gemini 2.5 Flash. Pick
    models/gemini-2.5-pro in 2.5 Pro if you want Pro as the fallback.
  • As of 2 November 2026: Google's deprecations page gives Gemini 2.5 no shutdown date. It limits those models to users
    who used them before, so a new key may need gemini-3.8-flash in all three Gemini nodes. Firecrawl's docs still list
    the v1 scrape that URL_search calls, with a note that v2 is out.
  • The prompt tells the model to sound sure of itself and never to hedge, to cite experience it does not have, and to
    give click-through potential, readability scores and keyword density that no tool measures. Treat those figures as
    guesses, or take those lines out of the prompt.
  • One section of the prompt is dated 2025 and quotes traffic figures with no source. The prompt names two tools a little
    differently from their nodes (url_search and AI_Mode), and asks for a domain where internal_links takes an
    address.
  • Suggestions: every answer ends with three lines that start with [SUGGESTION]. The prompt meant them for a front end
    that turns them into buttons, so your app should show them that way or strip them.
  • Wrong names: a country or language that is not in the Code lists leaves the codes empty, and the DataForSEO calls
    then fail. A type other than voice or text stops the run before any answer.
  • Shared memory: callers behind one IP address, such as an office, share one conversation. The memory lives in n8n
    itself, so a restart clears it.
  • Open webhook: once it is published, anyone with the address can run it on your keys until you add Header Auth.
  • Your data: questions and voice notes go to Google, pages go to Firecrawl, and keywords and domains go to DataForSEO.
    Each caller's IP address is the memory key. Every execution also saves the Firecrawl key, since 🦺 Set Data holds
    it, so keep the executions list private.
Files
README.md  8 KB
workflow.json  53 KB

2 files, 62 KB, downloaded as a zip.

What’s new

  • Version 1 · 2026-11-03

Reviews

No ratings yet

Write a review

No reviews yet.

More from Mindket

See all from Mindket

upscaler

uwg · Kit

Holds a set of image upscaling models gathered from the OpenModelDB community, for people who want to enlarge low-resolution pictures with AI on their own comp…

New

Pixel Art XL

nerijs · Kit

A pixel art style add-on for Stable Diffusion XL that turns text prompts into pixel-style images, with an optional LCM LoRA for faster runs. For game makers, d…

New

VibeVoice-1.5B

microsoft · Kit

Turns written conversations into spoken audio with up to four speakers and about 90 minutes of speech, an open Microsoft text-to-speech model for research on p…

New

Similar in Marketing & SEO

See all in Marketing & SEO

Licon MSR for LTX-2.5

LiconStudio · Kit

Keeps characters, clothing, objects and backgrounds consistent in generated video by feeding the model up to five reference images. A LoRA for LTX-2.5 in Comfy…

New

Flux.2-Klein-9B-MatchingPose

nhathoangfoto · Kit

A LoRA for FLUX.2 Klein 9B that puts a character into the pose shown by a mannequin reference while keeping the character's face and style. For artists and des…

New

Generates images from text on modest GPUs, using quantized Z-Image-Turbo files made for stable-diffusion.cpp. For people who run image models on their own comp…

New