agencyseorank-tracking

DIY Agency Rank Tracker Under $10/Month

Build daily rank tracking for agency clients at $0.005/keyword. Compare vs Ahrefs $99+/mo. Python script + Sheets + Slack alerts.

6 min read

Ahrefs Lite starts at $129/mo. Semrush Pro starts at $139.95/mo. If you run a small agency with 3-5 clients who each care about 10-20 keywords, you are paying enterprise prices for a fraction of the functionality. A DIY rank tracker using a search API, Python, and Google Sheets costs under $10/mo and covers the exact use case: "where do my keywords rank this week?"

The architecture

  1. Python script queries the search API for each keyword
  2. Results are parsed to find the client domain position
  3. Data is appended to a Google Sheet (one tab per client)
  4. Slack webhook fires if a keyword drops more than 3 positions
  5. Cron job runs the script daily at 6 AM

Step 1: the rank checker

Python
import requests, os

def check_rank(keyword: str, target_domain: str) -> dict:
    """Check where target_domain ranks for a keyword."""
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": os.environ["SCAVIO_API_KEY"]},
        json={"query": keyword, "num_results": 20},
        timeout=10,
    )
    results = resp.json().get("results", [])
    for i, r in enumerate(results):
        if target_domain in r.get("url", ""):
            return {"keyword": keyword, "position": i + 1, "url": r["url"]}
    return {"keyword": keyword, "position": None, "url": None}

# Example: check 15 keywords for one client
keywords = ["plumber austin tx", "emergency plumber austin", "drain repair austin"]
for kw in keywords:
    rank = check_rank(kw, "austinplumbingpros.com")
    pos = rank["position"] or "not in top 20"
    print(f"{kw}: position {pos}")

Step 2: store in Google Sheets

Python
import gspread, datetime
from google.oauth2.service_account import Credentials

def save_to_sheets(client_name: str, ranks: list):
    """Append daily ranks to a Google Sheet tab."""
    creds = Credentials.from_service_account_file(
        "service-account.json",
        scopes=["https://www.googleapis.com/auth/spreadsheets"],
    )
    gc = gspread.authorize(creds)
    sheet = gc.open("Rank Tracker").worksheet(client_name)
    today = datetime.date.today().isoformat()
    for r in ranks:
        sheet.append_row([today, r["keyword"], r["position"] or "N/A", r.get("url", "")])

Step 3: Slack alerts for drops

Python
import json

def alert_drops(client_name: str, previous: list, current: list):
    """Send Slack alert if any keyword drops 3+ positions."""
    prev_map = {r["keyword"]: r["position"] for r in previous if r["position"]}
    for r in current:
        if r["position"] and r["keyword"] in prev_map:
            drop = r["position"] - prev_map[r["keyword"]]
            if drop >= 3:
                msg = f"{client_name}: '{r['keyword']}' dropped {drop} positions (now #{r['position']})"
                requests.post(os.environ["SLACK_WEBHOOK"], json={"text": msg})

Cost breakdown

  • 5 clients, 15 keywords each = 75 keywords total
  • Daily checks: 75 API calls/day x 30 days = 2,250 calls/mo
  • At $0.005/credit: $11.25/mo. Over budget. Fix: check 3x/week instead of daily.
  • 3x/week: 75 x 13 = 975 calls/mo = $4.88/mo. Under $10.
  • Google Sheets: free. Slack: free. Server: free cron via GitHub Actions or Railway.
  • Total: under $5/mo vs $129+/mo for Ahrefs.

What you lose without Ahrefs or Semrush

This tracker answers one question: "where does my client rank for these keywords?" It does not answer: "who links to my client?" or "what keywords should my client target?" or "what technical SEO issues does the site have?"

  • No backlink data -- you cannot track link building progress
  • No crawl data -- you cannot find broken pages or redirect chains
  • No keyword suggestions -- you cannot discover new opportunities
  • No competitor backlink analysis -- you cannot reverse-engineer link strategies

If your agency delivers full-service SEO with link building and technical audits, you need Ahrefs or Semrush. If your clients only care about "are we ranking?" this tracker is enough.

Scaling to 20 clients

20 clients at 15 keywords each, checked 3x/week: 20 x 15 x 13 = 3,900 calls/mo. At $0.005/credit: $19.50/mo. Still cheaper than one month of Ahrefs Lite. The $30/mo plan (7,000 credits) gives you headroom for 25+ clients at this frequency.