The Problem
Marketing teams want automated daily rank tracking and competitor monitoring but their existing tools are expensive ($100+/mo) or don't support the custom alerts and integrations they need. n8n provides the automation layer but needs a reliable search data source.
The Scavio Solution
Build an n8n workflow that triggers daily, queries Scavio's search API for target keywords via HTTP Request nodes, processes results to extract ranking positions, compares against previous day's data stored in Google Sheets, and sends Slack alerts for significant position changes.
Before
Before the n8n workflow, a marketing manager manually checked rankings for 20 keywords every Monday using a $99/mo rank tracking tool. Position drops between checks went unnoticed for up to a week.
After
After deploying the n8n workflow, rankings are checked daily for 50 keywords at a cost of $0.25/day (50 credits). Slack alerts fire within minutes of a significant position change. The team dropped their $99/mo tracking tool, saving $1,188/year.
Who It Is For
Marketing teams and SEO professionals using n8n for workflow automation who want affordable, customizable daily rank tracking with alerting.
Key Benefits
- Daily rank tracking for any number of keywords
- Custom Slack alerts for position changes
- Google Sheets integration for historical tracking
- n8n's visual interface requires no coding
- Cost scales with keyword count ($0.005/keyword/check)
Python Example
# n8n HTTP Request node configuration for Scavio
# Method: POST
# URL: https://api.scavio.dev/api/v1/search
# Headers: x-api-key = {{$credentials.scavioApiKey}}
# Body (JSON):
# {
# "platform": "google",
# "query": "{{$json.keyword}}"
# }
#
# n8n Function node to extract position:
# const organic = $input.first().json.organic || [];
# const domain = 'yourdomain.com';
# const position = organic.findIndex(r => r.link?.includes(domain)) + 1;
# return [{ json: { keyword: $input.first().json.keyword, position: position || null } }];
# Equivalent Python for testing outside n8n:
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
KEYWORDS = ['best search api 2026', 'serp api pricing']
DOMAIN = 'scavio.dev'
for kw in KEYWORDS:
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': kw}, timeout=10).json()
organic = r.get('organic', [])
pos = next((i+1 for i, o in enumerate(organic) if DOMAIN in o.get('link', '')), None)
print(f'{kw}: position {pos}')JavaScript Example
// n8n HTTP Request configuration
const n8nConfig = {
method: 'POST',
url: 'https://api.scavio.dev/api/v1/search',
headers: { 'x-api-key': '={{$credentials.scavioApiKey}}' },
body: { platform: 'google', query: '={{$json.keyword}}' }
};
// n8n Function node to extract position
// const organic = $input.first().json.organic || [];
// const pos = organic.findIndex(r => r.link?.includes('yourdomain.com')) + 1;
// return [{ json: { keyword: $input.first().json.keyword, position: pos || null } }];Platforms Used
Web search with knowledge graph, PAA, and AI overviews