Appearance
CTR Campaign Workflow
FreshSource: bible/campaigns.md (The full workflow)
End-to-end workflow for a new client CTR campaign.
Lifecycle
flowchart TD BL[1. Baseline rank check] --> SD[2. Schedule daily rank tracking] SD --> TS[3. Test single CTR click] TS --> CC[4. Create campaign config JSON] CC --> TR[5. Test run the campaign] TR --> SC[6. Schedule it] SC --> M[7. Monitor] M --> AD[8. Adjust based on results] AD --> M
1. Baseline rank check
bash
node cli.mjs rank \
--keyword "junk removal dallas" \
--domain "clientsite.com" \
--state "TX"Write down starting positions.
2. Schedule daily rank tracking
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,
"jobConfig": {
"keyword": "junk removal dallas",
"domain": "clientsite.com",
"state": "TX"
}
}'3. Test a single CTR click
bash
node cli.mjs ctr \
--keyword "junk removal dallas" \
--domain "clientsite.com" \
--city "Dallas" \
--state "TX" \
--test-modeVerify it finds the domain, clicks it, and dwells.
4. Create the campaign config
Save as campaigns/client-dallas.json:
json
{
"name": "Client Dallas CTR - May 2026",
"plugin": "ctr-engine",
"pluginExport": "runCTR",
"accountSource": "store",
"accountFilter": { "status": "active" },
"concurrency": 3,
"scheduleEverySec": 900,
"maxRunsPerAccount": 30,
"jobConfig": {
"keyword": "junk removal dallas",
"targetDomain": "clientsite.com",
"city": "Dallas",
"state": "TX",
"dwellTime": "medium"
}
}5. Test run the campaign
bash
node cli.mjs campaign --config campaigns/client-dallas.jsonWatch a few accounts run. Check that browsers launch, searches happen, clicks land.
6. Schedule it
bash
node cli.mjs schedule create \
--campaign "client-dallas" \
--clicks-per-day 30 \
--start-hour 8 \
--end-hour 20 \
--strategy "natural"7. Monitor
bash
# Schedule status
node cli.mjs schedule list
# Account health
curl http://localhost:4700/accounts/army-status
# Rank trend after a week
curl "http://localhost:4700/ranks/report?keyword=junk+removal+dallas&domain=clientsite.com&days=7"Or watch the dashboard at http://localhost:4700/.
8. Adjust
- Not finding the domain: check
maxPages(default 3). If rank > 30, it will not find it - Too many failures: reduce concurrency. Check proxy health
- Rank not moving after 2 weeks: increase clicks-per-day. Add more keywords. Layer in cascades
- Account attrition too high: reduce
maxRunsPerAccount. Run warmup batches