Skip to content

rank-tracker

Fresh

Source: BIBLE.md (Phase 3, Phase 10 Route wrappers), bible/campaigns.md (Tracking rankings)

Orchestrator over the mobile-serp plugin for SERP scraping plus rank-store for persistence. Tracks domain position across locations with 90-day history.

Routes

MethodRouteWhat
GET/ranksList tracked keywords
POST/ranks/checkCheck current rank
GET/ranks/reportHistorical trend report
POST/ranks/batchBatch rank check

Single rank check

bash
curl -X POST http://localhost:4700/ranks/check \
  -H "Content-Type: application/json" \
  -H "x-api-key: ghost-engine-key" \
  -d '{
    "keyword": "junk removal dallas",
    "domain": "journeyjunkremoval.com",
    "state": "TX"
  }'

Returns:

json
{
  "success": true,
  "keyword": "junk removal dallas",
  "domain": "journeyjunkremoval.com",
  "locations": [
    { "location": "Dallas, TX", "rank": 7 },
    { "location": "Fort Worth, TX", "rank": 12 },
    { "location": "Plano, TX", "rank": 9 }
  ],
  "summary": {
    "totalLocations": 3,
    "ranked": 3,
    "unranked": 0,
    "avgRank": 9.3,
    "bestRank": 7,
    "worstRank": 12,
    "bestLocation": "Dallas, TX"
  }
}

Batch rank check

bash
curl -X POST http://localhost:4700/ranks/batch \
  -H "Content-Type: application/json" \
  -H "x-api-key: ghost-engine-key" \
  -d '{
    "checks": [
      { "keyword": "junk removal dallas", "domain": "journeyjunkremoval.com" },
      { "keyword": "junk hauling dallas", "domain": "journeyjunkremoval.com" }
    ],
    "state": "TX"
  }'

Historical rank report

bash
curl "http://localhost:4700/ranks/report?keyword=junk+removal+dallas&domain=journeyjunkremoval.com&days=30"

Returns trend:

json
{
  "keyword": "junk removal dallas",
  "domain": "journeyjunkremoval.com",
  "trend": "improving",
  "delta": -3,
  "from": 10,
  "to": 7,
  "dataPoints": 28,
  "periodDays": 30
}

Trend values: improving (delta negative), declining (delta positive), stable.

CLI

bash
node cli.mjs rank \
  --keyword "junk removal dallas" \
  --domain "journeyjunkremoval.com" \
  --state "TX"

Daily rank cron

bash
curl -X POST http://localhost:4700/schedules \
  -H "Content-Type: application/json" \
  -H "x-api-key: ghost-engine-key" \
  -d '{
    "jobType": "rank-check",
    "runsPerDay": 1,
    "startHour": 6,
    "endHour": 7,
    "spreadStrategy": "even",
    "daysOfWeek": [1,2,3,4,5],
    "jobConfig": {
      "keyword": "junk removal dallas",
      "domain": "journeyjunkremoval.com",
      "state": "TX"
    }
  }'

Storage

Rank snapshots stored 90 days in core/rank-store.mjs. Persistence at data/ghost-engine/ranks/{keyword-hash}.json.

How it fits with other plugins

  • Uses mobile-serp (or serp-tracker) for SERP scraping
  • Persists snapshots to core/rank-store
  • Triggered by scheduler jobType rank-check
  • Read by analytics, client-reporting, revenue-attribution