Install
openclaw skills install ace-competitionsAce competitions agent workflow - search, enter, track competitions. Uses browser automation for form filling, email verification, and competition entry. Int...
openclaw skills install ace-competitionsAce (he/him) is the competitions agent - resourceful, strategic, opportunistic. He finds and enters competitions, tracks entries, and maximizes winning opportunities.
Daily search (08:00 SAST):
# Run competition search
cd /root/.openclaw/workspace && \
python3 agents/ace/scripts/daily_competition_search.py
Search sources:
Criteria:
For each identified competition:
Analyze entry requirements
Prepare entry data
entry_data = {
"name": "Ace Competitions",
"email": "ace@supplystoreafrica.com",
"phone": "+27 72 638 6189", # Stef's for verification codes
"address": "South Africa",
# Additional competition-specific fields
}
Execute entry
After entry:
Using browser-automation-core skill:
from browser_automation import AceBrowser
browser = AceBrowser()
browser.navigate("https://competition.example.com")
browser.fill_form({
"name": "Ace Competitions",
"email": "ace@supplystoreafrica.com",
# ... other fields
})
browser.submit()
screenshot = browser.capture("entry_confirmation")
browser.close()
Form detection heuristics:
Process:
ace@supplystoreafrica.comUsing email_manager.py:
python3 email_manager.py check --filter "verification|confirm|verify"
Database: SQLite (/root/.openclaw/workspace/data/competitions/competitions.db)
JSON Output: /root/.openclaw/workspace/data/competitions/dashboard.json (for Mission Control)
Stats: Total competitions, entry success rate, upcoming draws, prize value
CREATE TABLE competitions (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
prize TEXT,
draw_date DATE,
entry_method TEXT,
status TEXT CHECK(status IN ('identified', 'entered', 'won', 'lost')),
entry_date DATE,
notes TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
After each action:
from competitions_dashboard import CompetitionsDashboard
dashboard = CompetitionsDashboard()
# Add new competition
comp_id = dashboard.add_competition(
name="Example Competition",
prize="R5000 voucher",
draw_date="2026-04-30",
entry_method="online_form",
status="identified"
)
# Log entry attempt
dashboard.log_entry_attempt(
competition_id=comp_id,
method="browser_automation",
status="success",
notes="Form submitted, email verification pending"
)
# Update dashboard JSON for Mission Control
dashboard.generate_dashboard_json()
Dashboard JSON format:
{
"stats": {
"total_competitions": 15,
"entered": 8,
"won": 1,
"lost": 2,
"pending": 5,
"total_prize_value": "R85,000"
},
"upcoming_draws": [
{"name": "Tech Gadget Giveaway", "draw_date": "2026-04-05", "prize": "R10,000"},
{"name": "Shopping Voucher", "draw_date": "2026-04-10", "prize": "R5,000"}
],
"recent_entries": [
{"date": "2026-03-31", "competition": "Summer Promotion", "status": "entered"},
{"date": "2026-03-30", "competition": "Product Launch", "status": "pending_verification"}
]
}
# Daily search (08:00 SAST)
0 8 * * * cd /root/.openclaw/workspace && python3 agents/ace/scripts/daily_competition_search.py
# Dashboard update (20:00 SAST)
0 20 * * * cd /root/.openclaw/workspace && python3 competitions_dashboard.py --update
# Verification check (every 2 hours)
0 */2 * * * cd /root/.openclaw/workspace && python3 agents/ace/scripts/check_verifications.py
/root/.openclaw/workspace/data/competitions/dashboard.json✅ Database initialized: SQLite with example competitions ✅ Cron jobs configured: Daily search (08:00 SAST), Dashboard update (20:00 SAST) ✅ Mission Control integration: Ready for display ✅ First automated search: Scheduled for April 1, 08:00 SAST
Immediate impact: Competition searches start automatically, dashboard provides real-time tracking
Storage locations:
/root/.openclaw/workspace/data/competitions/ - Database & dashboard/root/.openclaw/workspace/agents/ace/entries/ - Entry details, screenshots/root/.openclaw/workspace/drafts/ - Email drafts for manual competitionsBackup:
# Daily backup
cp /root/.openclaw/workspace/data/competitions/competitions.db \
/root/.openclaw/workspace/backups/competitions_$(date +%Y%m%d).db
try:
entry_result = attempt_automated_entry(competition)
except AutomationError as e:
log_error(f"Automation failed: {e}")
create_manual_entry_task(competition, screenshots)
Track:
Goals:
Rules:
Blacklist:
{
"competitions": {
"endpoint": "/api/competitions",
"data_source": "/root/.openclaw/workspace/data/competitions/dashboard.json"
}
}
# Daily search
0 8 * * * cd /root/.openclaw/workspace && python3 agents/ace/scripts/daily_search.py
# Verification check
0 */2 * * * cd /root/.openclaw/workspace && python3 agents/ace/scripts/check_verifications.py
# Dashboard update
0 20 * * * cd /root/.openclaw/workspace && python3 competitions_dashboard.py
Initialize dashboard:
python3 /root/.openclaw/workspace/competitions_dashboard.py
Test browser automation:
python3 -c "from browser_automation import AceBrowser; browser = AceBrowser(); browser.test()"
Run first search:
cd /root/.openclaw/workspace/agents/ace && python3 scripts/first_competition_search.py
Monitor results:
python3 /root/.openclaw/workspace/competitions_dashboard.py --print