What this workflow does
This workflow automatically creates a detailed SEO keyword research report based on a main topic and competitor URLs. It saves many hours by gathering keywords, search volumes, difficulty scores, and competitor insights all together. The end result is a clear and actionable SEO content brief ready to use.
The workflow expands main topics into several keyword types and finds their metrics based on language and location. It also analyzes competitor pages to find content gaps and unique angles. All information is merged and summarized by AI into one report.
Who should use this workflow
This workflow is good for digital marketers, content creators, or SEO specialists who want fast, accurate keyword research tailored to audience, language, and location. It helps teams avoid manual errors and saves 3-4 hours of work per project.
If the user needs competitor analysis and detailed keyword metrics combined in one place, this workflow fits well.
Tools and services used
- n8n: Automates workflow steps and manages data flow.
- OpenAI via LangChain: Generates keyword expansions, summarizes data, and analyzes competitors.
- DataForSEO API: Provides keyword search volume, cost-per-click, keyword difficulty, and competitor ranking data.
- NocoDB: Stores input topics and competitor URLs, updates status, and saves final SEO briefs.
- Slack: Sends notifications about workflow progress to the marketing team.
Input and output overview
Inputs: The workflow takes a main SEO topic, list of competitor URLs, target audience, content type, language, and location. All inputs come from NocoDB via a webhook.
Processing: The workflow expands keywords with AI, fetches metrics from DataForSEO, analyzes competitor pages, parses and merges the data, then uses AI again to build the final SEO strategy and content brief.
Outputs: The completed SEO content brief is saved back to NocoDB. Slack messages are sent to notify team members when the workflow starts and finishes.
How the workflow works step-by-step
Input reception and preparation
1. Get input from NocoDB
- Use the Webhook node to receive data with POST method.
- Data includes the main topic, competitor URLs, audience, content type, language, and location.
- Send sample test data to confirm webhook receives input correctly.
2. Extract relevant fields for use
- Add a Set node to map important fields from the webhook JSON.
- Fields include primary topic, competitor URLs string, target audience, content type, language, and location.
- Use expression editor to get exact paths for each value.
Notification and status update
3. Notify team workflow started
- Use Slack node to send a message with the main topic when research begins.
4. Update status in NocoDB to ‘Started’
- Use the NocoDB node to update status field on the input record.
Keyword generation and metrics
5. Expand topic keywords
- Use a LangChain Agent node with OpenAI chat model to get keyword lists.
- Request primary keywords, long-tail keywords with search intent, question-based keywords, and related topics in JSON format.
6. Validate AI JSON output
- Use Structured Output Parser node to parse and check the AI response structure.
7. Split primary keywords
- Use SplitOut node to separate each keyword for metric lookups.
8. Fetch search volume and cost per click
- Call DataForSEO API using provided credentials to get keyword search volumes and CPC based on language and location.
9. Fetch keyword difficulty scores
- Make another DataForSEO API call to get difficulty scores for all keywords.
10. Aggregate metrics
- Use Aggregate nodes to group search volume, CPC, and keyword difficulty data.
11. Combine metrics together
- Use a Merge node to join the various metrics per keyword in one list.
Competitor analysis
12. Format competitor URLs
- Use a Code node to split competitor URLs string into an array.
const inputJson = $input.first().json;
const rawUrls = inputJson.competitor_urls;
const competitorUrls = rawUrls
.split(",")
.map(url => url.trim())
.filter(url => url.length > 0);
const outputJson = {
...inputJson,
competitorUrls: competitorUrls
};
return [{ json: outputJson }];
This changes the single string of URLs into a list usable downstream.
13. Split competitor URLs one by one
- Use SplitOut node to process each competitor URL separately.
14. Get keyword rankings per competitor URL
- Call DataForSEO API to retrieve top ranked keywords for each competitor page filtering by location and language.
15. Analyze competitors with AI
- Send competitor keywords data to LangChain Agent node to identify keyword gaps, unique angles, and questions answered.
16. Aggregate competitor results
- Use Aggregate node to combine competitor analysis into one JSON object.
Final data merging and reporting
17. Merge all data together
- Use multiple Merge nodes to join topic keywords, metrics, and competitor insights into single JSON.
18. Generate final SEO content brief
- Use LangChain Agent node to create a detailed, human-readable SEO strategy and content outline in Markdown.
19. Save content brief to NocoDB
- Use NocoDB node to write new record containing the SEO brief.
20. Update status to ‘Done’
- Use NocoDB node to change original record status to “Done”.
21. Send Slack notification of completion
- Use Slack node to notify the team with final brief details.
Beginner step-by-step: How to use this workflow in n8n
Importing and setup
- Download the workflow file from this page using the Download button.
- Open n8n editor and use “Import from File” to upload the downloaded workflow.
- Set up credentials for OpenAI (API Key), DataForSEO (API Key), Slack (bot token), and NocoDB (API Key).
- Update IDs in Slack nodes for channel, and NocoDB nodes for tables and records, to match your data.
Testing and activation
- Send a test request to the webhook URL with sample JSON including primary_topic and competitor_urls to check if the workflow runs correctly.
- Look for Slack start notification and NocoDB status updates.
- Review the final SEO brief saved in NocoDB.
- When satisfied, activate the workflow in n8n to run automatically on webhook trigger.
If self hosting n8n, review network accessibility for webhook URLs. Refer to self-host n8n if needed.
Customization ideas
- Change target audience in the Set relevant fields node to focus on different user groups.
- Add or remove competitor URLs in NocoDB input; workflow manages multiple URLs automatically.
- Switch AI model or update prompt text in LangChain nodes to control response style or depth.
- Replace DataForSEO nodes with other SEO service APIs by changing credentials and node parameters.
- Change Slack channel ID to notify other teams or projects.
Common problems and fixes
Failed to retrieve keyword difficulty data
This often happens if API limits with DataForSEO are exceeded or if keyword format is wrong.
Check API keys and usage limits. Make sure keywords are correctly split in earlier nodes.
OpenAI API timeout or rejected request
Possible network issues or quota exhaustion.
Review API usage stats. Use retry logic or simplify prompts. Verify OpenAI credentials.
Slack notification not sent
Could be due to wrong Slack token or channel permissions.
Confirm Slack bot token and channel ID. Test Slack node with manual message.
Summary of results
✓ Saves 3-4 hours per keyword research task
✓ Automates detailed keyword expansions, metrics, and competitor analysis
✓ Produces a clear, actionable SEO content brief tailored by audience, location, and language
✓ Keeps teams informed with real-time Slack notifications
→ Enables better keyword focus and faster SEO strategy creation

