Before you start: connect Google Search Console and have at least a few keywords being tracked. You’ll also need a Slack webhook or email address for the alert destination.
Two Paths
- Built-in SEO alerts (Simplest)
- Custom workflow (Flexible)
If you just want “ping me when a keyword drops,” use the built-in alerts — no workflow required.Marketing > SEO > Settings > Rank AlertsToggle on, pick a threshold (default 5 positions), pick a destination (email, Slack), save. Done.This covers 80% of what most teams need. Use the custom workflow below when you want bespoke logic — filtering by keyword tier, different thresholds per category, or routing to different channels.
The Flow at a Glance
1. Daily schedule
Runs every morning
2. Fetch rankings
Pull today vs yesterday
3. Alert if dropped
Threshold-based Slack ping
Step 1: Build the Workflow
Add a Schedule trigger
Click Add Trigger > Schedule. Use cron syntax:That’s 8:00 AM UTC daily. Adjust to your preferred time zone by offsetting (e.g.,
cron(0 13 * * ? *) for 8 AM ET in winter).Add an HTTP Request action to fetch rankings
Click + Add Action > HTTP Request. Configure to query Hiveku’s internal SEO endpoint:
- Method: GET
- URL:
https://api.hiveku.com/seo/rankings/diff?project_id={{project_id}}&days=1 - Auth: use the Hiveku API key env var
{ keyword, url, yesterday_position, today_position, delta } objects. Name the output rankings.Add a Conditional
Click + Add Action > Conditional. Branch on:That means: continue only if at least one keyword dropped 5 or more positions since yesterday.
Customizing
Threshold
5 positions is a reasonable default. GSC data naturally fluctuates ±2 positions day-to-day — below 5 you’ll get noisy alerts. Raise to 10 if you only care about catastrophic drops.Frequency
cron(0 8 * * ? *)— daily at 8 AM UTCcron(0 */6 * * ? *)— every 6 hoursrate(1 hour)— hourly, but GSC data only updates every 2–3 days so this is usually overkill
Scope
To only alert on high-priority keywords, add a filter to the HTTP request:tier on keywords in Marketing > SEO > Keywords.
Group by Category
Add an AI Generation step before the Slack action to summarize drops grouped by topic:Test It
Mock a drop
In Marketing > SEO > Keywords, edit one tracked keyword and manually set its
yesterday_position to 5 and today_position to 15. This simulates a 10-position drop.Troubleshooting
No alerts firing — but I know rankings changed
No alerts firing — but I know rankings changed
Two common causes: (1) threshold is too high — lower it and re-test; (2) GSC hasn’t synced today’s data yet. GSC updates on a 2–3 day lag and the API reflects whatever’s available. Check Marketing > SEO > Keywords — if the “last updated” timestamp is more than 2 days old, the issue is on the Search Console side.
False positives — keywords 'drop' then recover next day
False positives — keywords 'drop' then recover next day
Normal GSC fluctuation. Raise the threshold to 5+ positions, or compare a 7-day average instead of day-over-day. In the HTTP request, use
?days=7 and alert only if the 7-day trailing average dropped.Alerts too noisy
Alerts too noisy
Filter to a priority tier (see Scope above), or group alerts by category so you get one digest message instead of 20 individual ones. You can also throttle: only alert if the same keyword dropped 2 days in a row.
Workflow doesn't fire at the scheduled time
Workflow doesn't fire at the scheduled time
Check the schedule in UTC, not your local time zone. Cron expressions always run on UTC in Hiveku. Also verify the workflow is enabled — scheduled workflows that aren’t enabled silently never fire.
HTTP request returns 401 / 403
HTTP request returns 401 / 403
The Hiveku API call needs an authenticated request. Make sure the HTTP action uses the Hiveku API Key connection (or env var
HIVEKU_API_KEY), not a raw unauthenticated call.What’s Next?
Connect Search Console
Set up the GSC connection that powers rank tracking
SEO Audit
Find the pages behind dropping keywords and fix them
Weekly Digest
Combine rank changes into a weekly team summary