Who it's for
This workflow is for SEO managers, content strategists, and digital agencies who need to produce optimised meta tags, H1s, and full content briefs at scale — one per keyword — without doing manual competitor research.
How it works
- The workflow is triggered manually and reads client information and SEO keyword data from two Google Sheets tabs.
- Items are filtered to keep only keywords that have not yet been processed (no existing H1).
- A batch loop iterates over each keyword and calls the Apify SERP actor via HTTP POST to retrieve competitor URLs.
- Organic results are split out, limited to the top 10, and each URL is scraped with Firecrawl to retrieve full page content.
- A JavaScript node consolidates the scraped data into structured competitor blocks (meta title, meta description, headings).
- A first Claude AI agent analyses the competitor data to generate optimised meta title, meta description, and H1 (structured JSON output).
- A second Claude AI agent uses the same context plus the generated H1 to produce a full SEO content brief.
- Both outputs are written back to the correct row in Google Sheets, and the loop advances to the next keyword.
How to set up
- [ ] Duplicate the template spreadsheet: Google Sheets Template and save it to your Google Drive
- [ ] Connect a Google Sheets OAuth2 credential and point the two read nodes to your spreadsheet (tabs: Client information and SEO)
- [ ] Add your Apify API key and verify the actor ID in the HTTP Request node
- [ ] Add your Firecrawl API key to the scrape node
- [ ] Add your Anthropic API key to the Claude Sonnet model node (shared by both AI agents)
- [ ] Configure the Update SEO Row in Sheets node to map columns correctly in your sheet
- [ ] Review the Filter Valid SEO Items node conditions if your sheet uses different column names
Requirements
- Google Sheets account (OAuth2)
- Apify account with access to a SERP-scraping actor
- Firecrawl account
- Anthropic (Claude) API key
How to customize
- Adjust the Take Top 10 Results node to scrape more or fewer competitor URLs per keyword.
- Modify the JSON schema in the Parse Structured JSON Output node to add fields such as OG title or additional meta variants.
- Swap the Claude model or rewrite the system prompts in either AI agent to match a different language, tone of voice, or content framework.