feat: Add Chatwoot Agent Bot prototype and FAQ knowledge base

- Created chatwoot-agent-bot/ with Node.js webhook server
- Bot detects intent (greeting, billing, technical, features, account)
- Auto-responds from FAQ knowledge base or escalates to human
- FAQ-KB.md: Living knowledge base that grows with customer questions
- CHATWOOT-SETUP.md: Complete deployment and configuration guide
- Supports Telegram notifications on escalation
- Bot runs on port 3001, ready for Chatwoot webhook integration
This commit is contained in:
2026-04-01 16:26:05 -04:00
parent 7ba19752de
commit 5319bcd30b
1074 changed files with 456376 additions and 0 deletions

BIN
agents/sales-prospector/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,40 @@
# Sales Prospector Monitoring
## Current Status (v8)
- **Runtime:** ~15 minutes
- **Leads found:** 7
- **Rate:** ~28 leads/hour
- **CRM:** All pushed successfully (201)
- **Quality:** COLD (HOA websites, minimal emails)
## Active Process
```
PID: 58289
Script: prospector-v8.py
```
## Monitoring Commands
```bash
# Quick status
tail -10 logs/prospector-v8-*.log
cat state/prospector-v8-state.json
# Leads count
ls leads/ | wc -l
# CRM check (last 5 notes)
curl -s https://salesforce.hoaledgeriq.com/rest/notes -H "Authorization: Bearer $TWENTY_TOKEN" | jq '.data.notes[:5]'
```
## Expected Behavior
- Cycles every ~30 seconds
- 3 searches per metro
- 6 URLs per search
- Saves ANY HOA domain as lead
- Rate: 25-60 leads/hour
## Alert Conditions
- No new leads for >10 minutes
- CRM push failures
- Rate limit errors (429)
- Process not running

View File

@@ -0,0 +1,24 @@
#!/bin/bash
# Quick health check for prospector
cd /Users/claw/.openclaw/workspace/agents/sales-prospector
# Check if running
if ! pgrep -f prospector-v8.py > /dev/null; then
echo "ALERT: Prospector not running!"
echo "Restarting..."
python3 prospector-v8.py > /dev/null 2>&1 &
exit 1
fi
# Check recent activity (last 10 min)
LEADS=$(cat state/prospector-v8-state.json 2>/dev/null | jq -r '.leads // 0')
CYLETIME=$(stat -c %Y logs/prospector-v8-$(date +%Y%m%d).log 2>/dev/null || echo 0)
NOW=$(date +%s)
DIFF=$((NOW - CYLETIME))
if [ $DIFF -gt 600 ]; then
echo "ALERT: No activity in ${DIFF}s"
echo "Leads: $LEADS"
fi
echo "OK: $LEADS leads, last activity ${DIFF}s ago"

View File

@@ -0,0 +1,26 @@
#!/bin/bash
# Sales Prospector Launcher
# Runs prospector and restarts on error
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="$SCRIPT_DIR/logs/launcher.log"
echo "$(date): Sales Prospector launcher started" >> "$LOG_FILE"
while true; do
echo "$(date): Starting prospector..." >> "$LOG_FILE"
"$SCRIPT_DIR/prospector.sh" >> "$LOG_FILE" 2>&1
EXIT_CODE=$?
echo "$(date): Prospector exited with code $EXIT_CODE" >> "$LOG_FILE"
# Restart logic
if [[ $EXIT_CODE -eq 0 ]]; then
echo "$(date): Restarting in 30s..." >> "$LOG_FILE"
sleep 30
else
echo "$(date): Crash, restarting in 60s..." >> "$LOG_FILE"
sleep 60
fi
done

View File

@@ -0,0 +1,9 @@
{
"name": "3Pmhoa HOA",
"metro": "Denver CO",
"url": "https://3pmhoa.com/",
"domain": "3pmhoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:31.447828"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Advancehoa HOA",
"metro": "Denver CO",
"url": "https://www.advancehoa.com/",
"domain": "advancehoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:28.478795"
}

View File

@@ -0,0 +1,11 @@
{
"name": "Amphoa HOA",
"metro": "Nashville TN",
"url": "https://www.amphoa.com/",
"domain": "amphoa.com",
"emails": [
"info@amphoa.com"
],
"quality": "WARM",
"found": "2026-03-14T15:39:35.497248"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Amshoa HOA",
"metro": "Charlotte NC",
"url": "https://amshoa.com/",
"domain": "amshoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:43:04.088565"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Atlantacommunityservices HOA",
"metro": "Atlanta GA",
"url": "https://www.atlantacommunityservices.com",
"domain": "atlantacommunityservices.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:48:56.434831"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Beaconcommunitymanagement HOA",
"metro": "Orlando FL",
"url": "https://beaconcommunitymanagement.com/",
"domain": "beaconcommunitymanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:38:10.837766"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Cmshoamanagement HOA",
"metro": "Denver CO",
"url": "https://cmshoamanagement.com/",
"domain": "cmshoamanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:29.999420"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Communityassociationmanagement HOA",
"metro": "Charlotte NC",
"url": "https://communityassociationmanagement.com/charlotte-nc-hoa-management-company/",
"domain": "communityassociationmanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:43:02.746510"
}

View File

@@ -0,0 +1,13 @@
{
"name": "Condoblackbook HOA",
"metro": "Miami FL",
"url": "https://www.condoblackbook.com/blog/miami-condo-association-hoa-contact-page",
"domain": "condoblackbook.com",
"emails": [],
"phones": [
"3052851269",
"3053797305"
],
"quality": "COLD",
"found": "2026-03-14T10:51:06.697701"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Condocontrol HOA",
"metro": "Dallas TX",
"url": "https://www.condocontrol.com/blog/top-10-hoa-management-companies-in-dallas/",
"domain": "condocontrol.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:59.521211"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Cpihoa HOA",
"metro": "Phoenix AZ",
"url": "https://cpihoa.com/",
"domain": "cpihoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:19.166496"
}

View File

@@ -0,0 +1,11 @@
{
"name": "Empirehoa HOA",
"metro": "Orlando FL",
"url": "https://empirehoa.com/",
"domain": "empirehoa.com",
"emails": [
"hoa@empirehoa.com"
],
"quality": "WARM",
"found": "2026-03-14T15:38:15.268228"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Hoa Usa HOA",
"metro": "Phoenix AZ",
"url": "https://hoa-usa.com/arizona-hoa-management-companies/",
"domain": "hoa-usa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:20.977261"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Hoa HOA",
"metro": "Austin TX",
"url": "https://hoa.texas.gov/",
"domain": "hoa.texas.gov",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:23.323466"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Hoadv HOA",
"metro": "Atlanta GA",
"url": "https://hoadv.com/",
"domain": "hoadv.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:48:54.527514"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Hoamanagement HOA",
"metro": "Atlanta GA",
"url": "https://www.hoamanagement.com/city/atlanta/",
"domain": "hoamanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:48:54.122880"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Hoaservicesinc HOA",
"metro": "Atlanta GA",
"url": "https://www.hoaservicesinc.com/",
"domain": "hoaservicesinc.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:48:58.124721"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Houstonhoa HOA",
"metro": "Houston TX",
"url": "https://houstonhoa.net/",
"domain": "houstonhoa.net",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:40:02.840438"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Lifetimehoamanagement HOA",
"metro": "Austin TX",
"url": "https://lifetimehoamanagement.com/austin-hoa-management/",
"domain": "lifetimehoamanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:26.912114"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Microhoa HOA",
"metro": "Charlotte NC",
"url": "https://microhoa.com/locations/north-carolina/charlotte/",
"domain": "microhoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T14:43:06.138325"
}

View File

@@ -0,0 +1,14 @@
{
"name": "Myoakcreekcommunity HOA",
"metro": "Tampa FL",
"url": "https://www.myoakcreekcommunity.net/hoa",
"domain": "myoakcreekcommunity.net",
"emails": [
"andrea.cedres@inframark.com",
"balair@wisepropertymanagement.com",
"dlabrador@castlegroup.com",
"wfaison@homeriver.com"
],
"quality": "HOT",
"found": "2026-03-14T14:35:16.365231"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Nashvillehoamanagement HOA",
"metro": "Nashville TN",
"url": "https://nashvillehoamanagement.com/",
"domain": "nashvillehoamanagement.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:33.073828"
}

View File

@@ -0,0 +1,11 @@
{
"name": "Onioncreekhoa HOA",
"metro": "Austin TX",
"url": "https://www.onioncreekhoa.org",
"domain": "onioncreekhoa.org",
"emails": [
"office@onioncreekhoa.com"
],
"quality": "WARM",
"found": "2026-03-14T15:39:25.159489"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Properhoamanage HOA",
"metro": "Dallas TX",
"url": "https://www.properhoamanage.com/",
"domain": "properhoamanage.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:59.063664"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Southbayhoa HOA",
"metro": "Orlando FL",
"url": "https://southbayhoa.org/",
"domain": "southbayhoa.org",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:38:12.528140"
}

View File

@@ -0,0 +1,9 @@
{
"name": "Wakehoa HOA",
"metro": "Raleigh NC",
"url": "https://www.wakehoa.com/",
"domain": "wakehoa.com",
"emails": [],
"quality": "COLD",
"found": "2026-03-14T15:39:36.900279"
}

View File

@@ -0,0 +1,468 @@
Fri Mar 13 12:34:14 EDT 2026: Sales Prospector launcher started
Fri Mar 13 12:34:14 EDT 2026: Starting prospector...
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 239: syntax error near unexpected token `)'
Fri Mar 13 12:34:14 EDT 2026: Prospector exited with code 2
Fri Mar 13 12:34:14 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:35:14 EDT 2026: Starting prospector...
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 239: syntax error near unexpected token `)'
Fri Mar 13 12:35:14 EDT 2026: Prospector exited with code 2
Fri Mar 13 12:35:14 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:36:14 EDT 2026: Starting prospector...
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 239: syntax error near unexpected token `)'
Fri Mar 13 12:36:15 EDT 2026: Prospector exited with code 2
Fri Mar 13 12:36:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:37:15 EDT 2026: Starting prospector...
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 239: syntax error near unexpected token `)'
Fri Mar 13 12:37:15 EDT 2026: Prospector exited with code 2
Fri Mar 13 12:37:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:38:15 EDT 2026: Starting prospector...
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 239: syntax error near unexpected token `)'
Fri Mar 13 12:38:15 EDT 2026: Prospector exited with code 2
Fri Mar 13 12:38:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:39:15 EDT 2026: Starting prospector...
[2026-03-13 12:39:15] === Sales Prospector Started ===
[2026-03-13 12:39:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:39:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:39:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:39:41 EDT 2026: Sales Prospector launcher started
Fri Mar 13 12:39:41 EDT 2026: Starting prospector...
[2026-03-13 12:39:41] === Sales Prospector Started ===
[2026-03-13 12:39:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:39:41 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:39:41 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:40:15 EDT 2026: Starting prospector...
[2026-03-13 12:40:15] === Sales Prospector Started ===
[2026-03-13 12:40:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:40:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:40:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:40:41 EDT 2026: Starting prospector...
[2026-03-13 12:40:41] === Sales Prospector Started ===
[2026-03-13 12:40:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:40:41 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:40:41 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:41:15 EDT 2026: Starting prospector...
[2026-03-13 12:41:15] === Sales Prospector Started ===
[2026-03-13 12:41:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:41:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:41:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:41:41 EDT 2026: Starting prospector...
[2026-03-13 12:41:41] === Sales Prospector Started ===
[2026-03-13 12:41:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:41:41 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:41:41 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:42:15 EDT 2026: Starting prospector...
[2026-03-13 12:42:15] === Sales Prospector Started ===
[2026-03-13 12:42:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:42:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:42:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:42:41 EDT 2026: Starting prospector...
[2026-03-13 12:42:41] === Sales Prospector Started ===
[2026-03-13 12:42:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:42:41 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:42:41 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:43:15 EDT 2026: Starting prospector...
[2026-03-13 12:43:15] === Sales Prospector Started ===
[2026-03-13 12:43:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:43:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:43:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:43:41 EDT 2026: Starting prospector...
[2026-03-13 12:43:42] === Sales Prospector Started ===
[2026-03-13 12:43:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:43:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:43:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:44:15 EDT 2026: Starting prospector...
[2026-03-13 12:44:15] === Sales Prospector Started ===
[2026-03-13 12:44:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:44:15 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:44:15 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:44:42 EDT 2026: Starting prospector...
[2026-03-13 12:44:42] === Sales Prospector Started ===
[2026-03-13 12:44:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:44:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:44:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:45:16 EDT 2026: Starting prospector...
[2026-03-13 12:45:16] === Sales Prospector Started ===
[2026-03-13 12:45:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:45:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:45:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:45:42 EDT 2026: Starting prospector...
[2026-03-13 12:45:42] === Sales Prospector Started ===
[2026-03-13 12:45:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:45:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:45:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:46:16 EDT 2026: Starting prospector...
[2026-03-13 12:46:16] === Sales Prospector Started ===
[2026-03-13 12:46:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:46:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:46:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:46:42 EDT 2026: Starting prospector...
[2026-03-13 12:46:42] === Sales Prospector Started ===
[2026-03-13 12:46:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:46:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:46:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:47:16 EDT 2026: Starting prospector...
[2026-03-13 12:47:16] === Sales Prospector Started ===
[2026-03-13 12:47:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:47:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:47:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:47:42 EDT 2026: Starting prospector...
[2026-03-13 12:47:42] === Sales Prospector Started ===
[2026-03-13 12:47:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:47:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:47:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:48:16 EDT 2026: Starting prospector...
[2026-03-13 12:48:16] === Sales Prospector Started ===
[2026-03-13 12:48:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:48:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:48:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:48:42 EDT 2026: Starting prospector...
[2026-03-13 12:48:42] === Sales Prospector Started ===
[2026-03-13 12:48:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:48:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:48:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:49:16 EDT 2026: Starting prospector...
[2026-03-13 12:49:16] === Sales Prospector Started ===
[2026-03-13 12:49:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:49:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:49:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:49:42 EDT 2026: Starting prospector...
[2026-03-13 12:49:42] === Sales Prospector Started ===
[2026-03-13 12:49:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:49:42 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:49:42 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:50:16 EDT 2026: Starting prospector...
[2026-03-13 12:50:16] === Sales Prospector Started ===
[2026-03-13 12:50:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:50:16 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:50:16 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:50:42 EDT 2026: Starting prospector...
[2026-03-13 12:50:43] === Sales Prospector Started ===
[2026-03-13 12:50:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:50:43 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:50:43 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:51:17 EDT 2026: Starting prospector...
[2026-03-13 12:51:17] === Sales Prospector Started ===
[2026-03-13 12:51:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:51:17 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:51:17 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:51:43 EDT 2026: Starting prospector...
[2026-03-13 12:51:43] === Sales Prospector Started ===
[2026-03-13 12:51:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:51:43 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:51:43 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:52:17 EDT 2026: Starting prospector...
[2026-03-13 12:52:17] === Sales Prospector Started ===
[2026-03-13 12:52:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:52:17 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:52:17 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:52:43 EDT 2026: Starting prospector...
[2026-03-13 12:52:43] === Sales Prospector Started ===
[2026-03-13 12:52:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:52:43 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:52:43 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:53:17 EDT 2026: Starting prospector...
[2026-03-13 12:53:17] === Sales Prospector Started ===
[2026-03-13 12:53:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 31: null: unbound variable
Fri Mar 13 12:53:17 EDT 2026: Prospector exited with code 1
Fri Mar 13 12:53:17 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 12:53:43 EDT 2026: Starting prospector...
[2026-03-13 12:53:43] === Sales Prospector Started ===
[2026-03-13 12:53:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:53:43] Working on: Charlotte NC
[2026-03-13 12:53:43] Search: "Charlotte NC" HOA "board of directors" (throttle: 180s)
Fri Mar 13 12:54:17 EDT 2026: Starting prospector...
[2026-03-13 12:54:17] === Sales Prospector Started ===
[2026-03-13 12:54:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:54:17] Working on: Charlotte NC
[2026-03-13 12:54:17] Search: "Charlotte NC" HOA "board of directors" (throttle: 180s)
[2026-03-13 12:56:43] Shutting down...
Fri Mar 13 12:56:43 EDT 2026: Prospector exited with code 0
Fri Mar 13 12:56:43 EDT 2026: Restarting in 30s...
Fri Mar 13 12:57:13 EDT 2026: Starting prospector...
[2026-03-13 12:57:13] === Sales Prospector Started ===
[2026-03-13 12:57:13] Metro: Charlotte NC
[2026-03-13 12:57:13] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 12:57:17] Shutting down...
Fri Mar 13 12:57:17 EDT 2026: Prospector exited with code 0
Fri Mar 13 12:57:17 EDT 2026: Restarting in 30s...
Fri Mar 13 12:57:47 EDT 2026: Starting prospector...
[2026-03-13 12:57:47] === Sales Prospector Started ===
[2026-03-13 12:57:47] Metro: Charlotte NC
[2026-03-13 12:57:47] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 13:00:13] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:00:48] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:03:13] Next metro: Orlando FL
[2026-03-13 13:03:23] Metro: Orlando FL
[2026-03-13 13:03:24] Query: Orlando FL HOA board (wait 180s)
[2026-03-13 13:03:48] Next metro: Phoenix AZ
[2026-03-13 13:03:58] Metro: Phoenix AZ
[2026-03-13 13:03:58] Query: Phoenix AZ HOA board (wait 180s)
[2026-03-13 13:06:24] Query: Orlando FL homeowners association (wait 180s)
[2026-03-13 13:06:58] Query: Phoenix AZ homeowners association (wait 180s)
[2026-03-13 13:09:24] Next metro: Atlanta GA
[2026-03-13 13:09:34] Metro: Atlanta GA
[2026-03-13 13:09:34] Query: Atlanta GA HOA board (wait 180s)
[2026-03-13 13:09:58] Next metro: Orlando FL
[2026-03-13 13:10:08] Metro: Orlando FL
[2026-03-13 13:10:08] Query: Orlando FL HOA board (wait 180s)
[2026-03-13 13:13:09] Query: Orlando FL homeowners association (wait 180s)
[2026-03-13 13:16:09] Next metro: Charlotte NC
[2026-03-13 13:16:19] Metro: Charlotte NC
[2026-03-13 13:16:19] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 13:19:19] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:22:19] Next metro: Orlando FL
[2026-03-13 13:22:29] Metro: Orlando FL
[2026-03-13 13:22:29] Query: Orlando FL HOA board (wait 180s)
Fri Mar 13 13:24:45 EDT 2026: Prospector exited with code 143
Fri Mar 13 13:24:45 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:25:45 EDT 2026: Starting prospector...
[2026-03-13 13:25:45] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:25:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:25:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:26:46 EDT 2026: Starting prospector...
[2026-03-13 13:26:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:26:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:26:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:27:46 EDT 2026: Starting prospector...
[2026-03-13 13:27:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:27:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:27:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:28:46 EDT 2026: Starting prospector...
[2026-03-13 13:28:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:28:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:28:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:29:46 EDT 2026: Starting prospector...
[2026-03-13 13:29:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:29:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:29:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:30:46 EDT 2026: Starting prospector...
[2026-03-13 13:30:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:30:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:30:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:31:46 EDT 2026: Starting prospector...
[2026-03-13 13:31:46] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:31:46 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:31:46 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:32:47 EDT 2026: Starting prospector...
[2026-03-13 13:32:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:32:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:32:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:33:47 EDT 2026: Starting prospector...
[2026-03-13 13:33:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:33:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:33:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:34:47 EDT 2026: Starting prospector...
[2026-03-13 13:34:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:34:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:34:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:35:47 EDT 2026: Starting prospector...
[2026-03-13 13:35:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:35:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:35:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:36:47 EDT 2026: Starting prospector...
[2026-03-13 13:36:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:36:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:36:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:37:47 EDT 2026: Starting prospector...
[2026-03-13 13:37:47] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:37:47 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:37:47 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:38:48 EDT 2026: Starting prospector...
[2026-03-13 13:38:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:38:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:38:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:39:48 EDT 2026: Starting prospector...
[2026-03-13 13:39:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:39:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:39:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:40:48 EDT 2026: Starting prospector...
[2026-03-13 13:40:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:40:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:40:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:41:48 EDT 2026: Starting prospector...
[2026-03-13 13:41:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:41:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:41:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:42:48 EDT 2026: Starting prospector...
[2026-03-13 13:42:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:42:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:42:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:43:48 EDT 2026: Starting prospector...
[2026-03-13 13:43:48] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:43:48 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:43:48 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:44:49 EDT 2026: Starting prospector...
[2026-03-13 13:44:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:44:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:44:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:45:49 EDT 2026: Starting prospector...
[2026-03-13 13:45:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:45:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:45:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:46:49 EDT 2026: Starting prospector...
[2026-03-13 13:46:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:46:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:46:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:47:49 EDT 2026: Starting prospector...
[2026-03-13 13:47:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:47:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:47:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:48:49 EDT 2026: Starting prospector...
[2026-03-13 13:48:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:48:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:48:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:49:49 EDT 2026: Starting prospector...
[2026-03-13 13:49:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:49:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:49:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:50:49 EDT 2026: Starting prospector...
[2026-03-13 13:50:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:50:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:50:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:51:49 EDT 2026: Starting prospector...
[2026-03-13 13:51:49] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:51:49 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:51:49 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:52:50 EDT 2026: Starting prospector...
[2026-03-13 13:52:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:52:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:52:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:53:50 EDT 2026: Starting prospector...
[2026-03-13 13:53:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:53:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:53:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:54:50 EDT 2026: Starting prospector...
[2026-03-13 13:54:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:54:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:54:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:55:50 EDT 2026: Starting prospector...
[2026-03-13 13:55:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:55:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:55:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:56:50 EDT 2026: Starting prospector...
[2026-03-13 13:56:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:56:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:56:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:57:50 EDT 2026: Starting prospector...
[2026-03-13 13:57:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:57:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:57:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:58:50 EDT 2026: Starting prospector...
[2026-03-13 13:58:50] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:58:50 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:58:50 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 13:59:51 EDT 2026: Starting prospector...
[2026-03-13 13:59:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 13:59:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 13:59:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:00:51 EDT 2026: Starting prospector...
[2026-03-13 14:00:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:00:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:00:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:01:51 EDT 2026: Starting prospector...
[2026-03-13 14:01:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:01:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:01:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:02:51 EDT 2026: Starting prospector...
[2026-03-13 14:02:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:02:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:02:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:03:51 EDT 2026: Starting prospector...
[2026-03-13 14:03:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:03:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:03:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:04:51 EDT 2026: Starting prospector...
[2026-03-13 14:04:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:04:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:04:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:05:51 EDT 2026: Starting prospector...
[2026-03-13 14:05:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:05:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:05:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:06:51 EDT 2026: Starting prospector...
[2026-03-13 14:06:51] === Sales Prospector Started ===
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 162: local: can only be used in a function
Fri Mar 13 14:06:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:06:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:07:51 EDT 2026: Starting prospector...
[2026-03-13 14:07:51] === Sales Prospector Started ===
[2026-03-13 14:07:51] Metro: Orlando FL
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 175: local: can only be used in a function
Fri Mar 13 14:07:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:07:51 EDT 2026: Crash, restarting in 60s...
Fri Mar 13 14:08:51 EDT 2026: Starting prospector...
[2026-03-13 14:08:51] === Sales Prospector Started ===
[2026-03-13 14:08:51] Metro: Orlando FL
/Users/claw/.openclaw/workspace/agents/sales-prospector/prospector.sh: line 175: local: can only be used in a function
Fri Mar 13 14:08:51 EDT 2026: Prospector exited with code 1
Fri Mar 13 14:08:51 EDT 2026: Crash, restarting in 60s...

View File

@@ -0,0 +1,901 @@
[2026-03-13 12:39:15] === Sales Prospector Started ===
[2026-03-13 12:39:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:39:41] === Sales Prospector Started ===
[2026-03-13 12:39:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:40:15] === Sales Prospector Started ===
[2026-03-13 12:40:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:40:41] === Sales Prospector Started ===
[2026-03-13 12:40:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:41:15] === Sales Prospector Started ===
[2026-03-13 12:41:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:41:41] === Sales Prospector Started ===
[2026-03-13 12:41:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:42:15] === Sales Prospector Started ===
[2026-03-13 12:42:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:42:41] === Sales Prospector Started ===
[2026-03-13 12:42:41] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:43:15] === Sales Prospector Started ===
[2026-03-13 12:43:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:43:42] === Sales Prospector Started ===
[2026-03-13 12:43:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:44:15] === Sales Prospector Started ===
[2026-03-13 12:44:15] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:44:42] === Sales Prospector Started ===
[2026-03-13 12:44:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:45:16] === Sales Prospector Started ===
[2026-03-13 12:45:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:45:42] === Sales Prospector Started ===
[2026-03-13 12:45:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:46:16] === Sales Prospector Started ===
[2026-03-13 12:46:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:46:42] === Sales Prospector Started ===
[2026-03-13 12:46:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:47:16] === Sales Prospector Started ===
[2026-03-13 12:47:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:47:42] === Sales Prospector Started ===
[2026-03-13 12:47:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:48:16] === Sales Prospector Started ===
[2026-03-13 12:48:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:48:42] === Sales Prospector Started ===
[2026-03-13 12:48:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:49:16] === Sales Prospector Started ===
[2026-03-13 12:49:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:49:42] === Sales Prospector Started ===
[2026-03-13 12:49:42] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:50:16] === Sales Prospector Started ===
[2026-03-13 12:50:16] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:50:43] === Sales Prospector Started ===
[2026-03-13 12:50:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:51:17] === Sales Prospector Started ===
[2026-03-13 12:51:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:51:43] === Sales Prospector Started ===
[2026-03-13 12:51:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:52:17] === Sales Prospector Started ===
[2026-03-13 12:52:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:52:43] === Sales Prospector Started ===
[2026-03-13 12:52:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:53:17] === Sales Prospector Started ===
[2026-03-13 12:53:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:53:43] === Sales Prospector Started ===
[2026-03-13 12:53:43] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:53:43] Working on: Charlotte NC
[2026-03-13 12:53:43] Search: "Charlotte NC" HOA "board of directors" (throttle: 180s)
[2026-03-13 12:54:17] === Sales Prospector Started ===
[2026-03-13 12:54:17] Metros: Charlotte NC Atlanta GA Orlando FL Phoenix AZ
[2026-03-13 12:54:17] Working on: Charlotte NC
[2026-03-13 12:54:17] Search: "Charlotte NC" HOA "board of directors" (throttle: 180s)
[2026-03-13 12:56:09] === Sales Prospector Started ===
[2026-03-13 12:56:09] Metro: Charlotte NC
[2026-03-13 12:56:09] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 12:56:43] Shutting down...
[2026-03-13 12:57:13] === Sales Prospector Started ===
[2026-03-13 12:57:13] Metro: Charlotte NC
[2026-03-13 12:57:13] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 12:57:17] Shutting down...
[2026-03-13 12:57:47] === Sales Prospector Started ===
[2026-03-13 12:57:47] Metro: Charlotte NC
[2026-03-13 12:57:47] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 12:59:09] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:00:13] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:00:48] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:02:09] Next metro: Atlanta GA
[2026-03-13 13:02:19] Metro: Atlanta GA
[2026-03-13 13:02:19] Query: Atlanta GA HOA board (wait 180s)
[2026-03-13 13:03:13] Next metro: Orlando FL
[2026-03-13 13:03:23] Metro: Orlando FL
[2026-03-13 13:03:24] Query: Orlando FL HOA board (wait 180s)
[2026-03-13 13:03:48] Next metro: Phoenix AZ
[2026-03-13 13:03:58] Metro: Phoenix AZ
[2026-03-13 13:03:58] Query: Phoenix AZ HOA board (wait 180s)
[2026-03-13 13:05:19] Query: Atlanta GA homeowners association (wait 180s)
[2026-03-13 13:06:24] Query: Orlando FL homeowners association (wait 180s)
[2026-03-13 13:06:58] Query: Phoenix AZ homeowners association (wait 180s)
[2026-03-13 13:08:19] Next metro: Charlotte NC
[2026-03-13 13:08:30] Metro: Charlotte NC
[2026-03-13 13:08:30] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 13:09:24] Next metro: Atlanta GA
[2026-03-13 13:09:34] Metro: Atlanta GA
[2026-03-13 13:09:34] Query: Atlanta GA HOA board (wait 180s)
[2026-03-13 13:09:58] Next metro: Orlando FL
[2026-03-13 13:10:08] Metro: Orlando FL
[2026-03-13 13:10:08] Query: Orlando FL HOA board (wait 180s)
[2026-03-13 13:11:30] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:13:09] Query: Orlando FL homeowners association (wait 180s)
[2026-03-13 13:14:30] Next metro: Phoenix AZ
[2026-03-13 13:14:40] Metro: Phoenix AZ
[2026-03-13 13:14:40] Query: Phoenix AZ HOA board (wait 180s)
[2026-03-13 13:16:09] Next metro: Charlotte NC
[2026-03-13 13:16:19] Metro: Charlotte NC
[2026-03-13 13:16:19] Query: Charlotte NC HOA board (wait 180s)
[2026-03-13 13:17:40] Query: Phoenix AZ homeowners association (wait 180s)
[2026-03-13 13:19:19] Query: Charlotte NC homeowners association (wait 180s)
[2026-03-13 13:20:40] Next metro: Atlanta GA
[2026-03-13 13:20:50] Metro: Atlanta GA
[2026-03-13 13:20:50] Query: Atlanta GA HOA board (wait 180s)
[2026-03-13 13:22:19] Next metro: Orlando FL
[2026-03-13 13:22:29] Metro: Orlando FL
[2026-03-13 13:22:29] Query: Orlando FL HOA board (wait 180s)
[2026-03-13 13:23:51] Query: Atlanta GA homeowners association (wait 180s)
[2026-03-13 13:24:45] === Sales Prospector Started ===
[2026-03-13 13:25:45] === Sales Prospector Started ===
[2026-03-13 13:26:46] === Sales Prospector Started ===
[2026-03-13 13:27:46] === Sales Prospector Started ===
[2026-03-13 13:28:46] === Sales Prospector Started ===
[2026-03-13 13:29:46] === Sales Prospector Started ===
[2026-03-13 13:30:46] === Sales Prospector Started ===
[2026-03-13 13:31:46] === Sales Prospector Started ===
[2026-03-13 13:32:47] === Sales Prospector Started ===
[2026-03-13 13:33:47] === Sales Prospector Started ===
[2026-03-13 13:34:47] === Sales Prospector Started ===
[2026-03-13 13:35:47] === Sales Prospector Started ===
[2026-03-13 13:36:47] === Sales Prospector Started ===
[2026-03-13 13:37:47] === Sales Prospector Started ===
[2026-03-13 13:38:48] === Sales Prospector Started ===
[2026-03-13 13:39:48] === Sales Prospector Started ===
[2026-03-13 13:40:48] === Sales Prospector Started ===
[2026-03-13 13:41:48] === Sales Prospector Started ===
[2026-03-13 13:42:48] === Sales Prospector Started ===
[2026-03-13 13:43:48] === Sales Prospector Started ===
[2026-03-13 13:44:49] === Sales Prospector Started ===
[2026-03-13 13:45:49] === Sales Prospector Started ===
[2026-03-13 13:46:49] === Sales Prospector Started ===
[2026-03-13 13:47:49] === Sales Prospector Started ===
[2026-03-13 13:48:49] === Sales Prospector Started ===
[2026-03-13 13:49:49] === Sales Prospector Started ===
[2026-03-13 13:50:49] === Sales Prospector Started ===
[2026-03-13 13:51:49] === Sales Prospector Started ===
[2026-03-13 13:52:50] === Sales Prospector Started ===
[2026-03-13 13:53:50] === Sales Prospector Started ===
[2026-03-13 13:54:50] === Sales Prospector Started ===
[2026-03-13 13:55:50] === Sales Prospector Started ===
[2026-03-13 13:56:50] === Sales Prospector Started ===
[2026-03-13 13:57:50] === Sales Prospector Started ===
[2026-03-13 13:58:50] === Sales Prospector Started ===
[2026-03-13 13:59:51] === Sales Prospector Started ===
[2026-03-13 14:00:51] === Sales Prospector Started ===
[2026-03-13 14:01:51] === Sales Prospector Started ===
[2026-03-13 14:02:51] === Sales Prospector Started ===
[2026-03-13 14:03:51] === Sales Prospector Started ===
[2026-03-13 14:04:51] === Sales Prospector Started ===
[2026-03-13 14:05:51] === Sales Prospector Started ===
[2026-03-13 14:06:51] === Sales Prospector Started ===
[2026-03-13 14:07:51] === Sales Prospector Started ===
[2026-03-13 14:07:51] Metro: Orlando FL
[2026-03-13 14:08:51] === Sales Prospector Started ===
[2026-03-13 14:08:51] Metro: Orlando FL
[2026-03-13 14:09:39] === Sales Prospector Started ===
[2026-03-13 14:09:39] Metro: Orlando FL
[2026-03-13 14:36:36] === Sales Prospector Started ===
[2026-03-13 14:36:36] Throttle: 10min business / 5min overnight
[2026-03-13 14:36:36] === CYCLE 1: Orlando FL ===
[2026-03-13 14:36:36] SEARCH: Orlando FL HOA board
[2026-03-13 14:36:36] THROTTLE: sleeping 600s
[2026-03-13 14:39:16] === Sales Prospector Started ===
[2026-03-13 14:39:16] Throttle: 10min business / 5min overnight
[2026-03-13 14:39:16] === CYCLE 1: Orlando FL ===
[2026-03-13 14:39:16] SEARCH: Orlando FL HOA board
[2026-03-13 14:39:16] THROTTLE: sleeping 600s
[2026-03-13 14:41:58] === Sales Prospector Started ===
[2026-03-13 14:41:58] Throttle: 10min business / 5min overnight
[2026-03-13 14:41:58] === CYCLE 1: Orlando FL ===
[2026-03-13 14:41:58] SEARCH: Orlando FL HOA board
[2026-03-13 14:41:58] THROTTLE: sleeping 600s
[2026-03-13 14:45:13] === Sales Prospector Started ===
[2026-03-13 14:45:13] Throttle: 10min business / 5min overnight
[2026-03-13 14:45:13] === CYCLE 1: Orlando FL ===
[2026-03-13 14:45:13] SEARCH: Orlando FL HOA board
[2026-03-13 14:45:13] THROTTLE: sleeping 600s
[2026-03-13 14:50:44] === Sales Prospector Started ===
[2026-03-13 14:50:44] Throttle: 10min business hours / 5min overnight
[2026-03-13 14:50:44] CYCLE 1: Orlando FL
[2026-03-13 14:50:44] Searching: Orlando FL HOA board
[2026-03-13 14:50:44] Sleeping 600s (throttle)...
[2026-03-13 15:00:44] Cycle complete
[2026-03-13 15:00:44] CYCLE 2: Phoenix AZ
[2026-03-13 15:00:44] Searching: Phoenix AZ HOA board
[2026-03-13 15:00:44] Sleeping 600s (throttle)...
[2026-03-13 15:10:44] Cycle complete
[2026-03-13 15:10:44] CYCLE 3: Charlotte NC
[2026-03-13 15:10:44] Searching: Charlotte NC HOA board
[2026-03-13 15:10:44] Sleeping 600s (throttle)...
[2026-03-13 18:25:56] === Sales Prospector Started ===
[2026-03-13 18:25:56] Throttle: 10min business hours / 5min overnight
[2026-03-13 18:25:56] CYCLE 1: Charlotte NC
[2026-03-13 18:25:56] Searching: Charlotte NC HOA board
[2026-03-13 18:25:56] Sleeping 300s (throttle)...
[2026-03-13 18:30:56] Cycle complete
[2026-03-13 18:30:56] CYCLE 2: Atlanta GA
[2026-03-13 18:30:56] Searching: Atlanta GA HOA board
[2026-03-13 18:30:56] Sleeping 300s (throttle)...
[2026-03-13 18:35:56] Cycle complete
[2026-03-13 18:35:56] CYCLE 3: Orlando FL
[2026-03-13 18:35:56] Searching: Orlando FL HOA board
[2026-03-13 18:35:56] Sleeping 300s (throttle)...
[2026-03-13 18:40:56] Cycle complete
[2026-03-13 18:40:56] CYCLE 4: Phoenix AZ
[2026-03-13 18:40:56] Searching: Phoenix AZ HOA board
[2026-03-13 18:40:56] Sleeping 300s (throttle)...
[2026-03-13 18:45:57] Cycle complete
[2026-03-13 18:45:57] CYCLE 5: Charlotte NC
[2026-03-13 18:45:57] Searching: Charlotte NC HOA board
[2026-03-13 18:45:57] Sleeping 300s (throttle)...
[2026-03-13 18:50:57] Cycle complete
[2026-03-13 18:50:57] CYCLE 6: Atlanta GA
[2026-03-13 18:50:57] Searching: Atlanta GA HOA board
[2026-03-13 18:50:57] Sleeping 300s (throttle)...
[2026-03-13 18:55:57] Cycle complete
[2026-03-13 18:55:57] CYCLE 7: Orlando FL
[2026-03-13 18:55:57] Searching: Orlando FL HOA board
[2026-03-13 18:55:57] Sleeping 300s (throttle)...
[2026-03-13 19:00:57] Cycle complete
[2026-03-13 19:00:57] CYCLE 8: Phoenix AZ
[2026-03-13 19:00:57] Searching: Phoenix AZ HOA board
[2026-03-13 19:00:57] Sleeping 300s (throttle)...
[2026-03-13 19:05:57] Cycle complete
[2026-03-13 19:05:57] CYCLE 9: Charlotte NC
[2026-03-13 19:05:57] Searching: Charlotte NC HOA board
[2026-03-13 19:05:57] Sleeping 300s (throttle)...
[2026-03-13 19:10:58] Cycle complete
[2026-03-13 19:10:58] CYCLE 10: Atlanta GA
[2026-03-13 19:10:58] Searching: Atlanta GA HOA board
[2026-03-13 19:10:58] Sleeping 300s (throttle)...
[2026-03-13 19:15:58] Cycle complete
[2026-03-13 19:15:58] CYCLE 11: Orlando FL
[2026-03-13 19:15:58] Searching: Orlando FL HOA board
[2026-03-13 19:15:58] Sleeping 300s (throttle)...
[2026-03-13 19:20:58] Cycle complete
[2026-03-13 19:20:58] CYCLE 12: Phoenix AZ
[2026-03-13 19:20:58] Searching: Phoenix AZ HOA board
[2026-03-13 19:20:58] Sleeping 300s (throttle)...
[2026-03-13 19:25:58] Cycle complete
[2026-03-13 19:25:58] CYCLE 13: Charlotte NC
[2026-03-13 19:25:58] Searching: Charlotte NC HOA board
[2026-03-13 19:25:58] Sleeping 300s (throttle)...
[2026-03-13 19:30:58] Cycle complete
[2026-03-13 19:30:58] CYCLE 14: Atlanta GA
[2026-03-13 19:30:58] Searching: Atlanta GA HOA board
[2026-03-13 19:30:58] Sleeping 300s (throttle)...
[2026-03-13 19:35:59] Cycle complete
[2026-03-13 19:35:59] CYCLE 15: Orlando FL
[2026-03-13 19:35:59] Searching: Orlando FL HOA board
[2026-03-13 19:35:59] Sleeping 300s (throttle)...
[2026-03-13 19:40:59] Cycle complete
[2026-03-13 19:40:59] CYCLE 16: Phoenix AZ
[2026-03-13 19:40:59] Searching: Phoenix AZ HOA board
[2026-03-13 19:40:59] Sleeping 300s (throttle)...
[2026-03-13 19:45:59] Cycle complete
[2026-03-13 19:45:59] CYCLE 17: Charlotte NC
[2026-03-13 19:45:59] Searching: Charlotte NC HOA board
[2026-03-13 19:45:59] Sleeping 300s (throttle)...
[2026-03-13 19:50:59] Cycle complete
[2026-03-13 19:50:59] CYCLE 18: Atlanta GA
[2026-03-13 19:50:59] Searching: Atlanta GA HOA board
[2026-03-13 19:50:59] Sleeping 300s (throttle)...
[2026-03-13 19:55:59] Cycle complete
[2026-03-13 19:55:59] CYCLE 19: Orlando FL
[2026-03-13 19:55:59] Searching: Orlando FL HOA board
[2026-03-13 19:55:59] Sleeping 300s (throttle)...
[2026-03-13 20:00:59] Cycle complete
[2026-03-13 20:00:59] CYCLE 20: Phoenix AZ
[2026-03-13 20:00:59] Searching: Phoenix AZ HOA board
[2026-03-13 20:00:59] Sleeping 300s (throttle)...
[2026-03-13 20:06:00] Cycle complete
[2026-03-13 20:06:00] CYCLE 21: Charlotte NC
[2026-03-13 20:06:00] Searching: Charlotte NC HOA board
[2026-03-13 20:06:00] Sleeping 300s (throttle)...
[2026-03-13 20:11:00] Cycle complete
[2026-03-13 20:11:00] CYCLE 22: Atlanta GA
[2026-03-13 20:11:00] Searching: Atlanta GA HOA board
[2026-03-13 20:11:00] Sleeping 300s (throttle)...
[2026-03-13 20:16:00] Cycle complete
[2026-03-13 20:16:00] CYCLE 23: Orlando FL
[2026-03-13 20:16:00] Searching: Orlando FL HOA board
[2026-03-13 20:16:00] Sleeping 300s (throttle)...
[2026-03-13 20:21:00] Cycle complete
[2026-03-13 20:21:00] CYCLE 24: Phoenix AZ
[2026-03-13 20:21:00] Searching: Phoenix AZ HOA board
[2026-03-13 20:21:00] Sleeping 300s (throttle)...
[2026-03-13 20:26:00] Cycle complete
[2026-03-13 20:26:00] CYCLE 25: Charlotte NC
[2026-03-13 20:26:00] Searching: Charlotte NC HOA board
[2026-03-13 20:26:00] Sleeping 300s (throttle)...
[2026-03-13 20:31:00] Cycle complete
[2026-03-13 20:31:00] CYCLE 26: Atlanta GA
[2026-03-13 20:31:00] Searching: Atlanta GA HOA board
[2026-03-13 20:31:01] Sleeping 300s (throttle)...
[2026-03-13 20:36:01] Cycle complete
[2026-03-13 20:36:01] CYCLE 27: Orlando FL
[2026-03-13 20:36:01] Searching: Orlando FL HOA board
[2026-03-13 20:36:01] Sleeping 300s (throttle)...
[2026-03-13 20:41:01] Cycle complete
[2026-03-13 20:41:01] CYCLE 28: Phoenix AZ
[2026-03-13 20:41:01] Searching: Phoenix AZ HOA board
[2026-03-13 20:41:01] Sleeping 300s (throttle)...
[2026-03-13 20:46:01] Cycle complete
[2026-03-13 20:46:01] CYCLE 29: Charlotte NC
[2026-03-13 20:46:01] Searching: Charlotte NC HOA board
[2026-03-13 20:46:01] Sleeping 300s (throttle)...
[2026-03-13 20:51:01] Cycle complete
[2026-03-13 20:51:01] CYCLE 30: Atlanta GA
[2026-03-13 20:51:01] Searching: Atlanta GA HOA board
[2026-03-13 20:51:01] Sleeping 300s (throttle)...
[2026-03-13 20:56:02] Cycle complete
[2026-03-13 20:56:02] CYCLE 31: Orlando FL
[2026-03-13 20:56:02] Searching: Orlando FL HOA board
[2026-03-13 20:56:02] Sleeping 300s (throttle)...
[2026-03-13 21:01:02] Cycle complete
[2026-03-13 21:01:02] CYCLE 32: Phoenix AZ
[2026-03-13 21:01:02] Searching: Phoenix AZ HOA board
[2026-03-13 21:01:02] Sleeping 300s (throttle)...
[2026-03-13 21:06:02] Cycle complete
[2026-03-13 21:06:02] CYCLE 33: Charlotte NC
[2026-03-13 21:06:02] Searching: Charlotte NC HOA board
[2026-03-13 21:06:02] Sleeping 300s (throttle)...
[2026-03-13 21:11:02] Cycle complete
[2026-03-13 21:11:02] CYCLE 34: Atlanta GA
[2026-03-13 21:11:02] Searching: Atlanta GA HOA board
[2026-03-13 21:11:02] Sleeping 300s (throttle)...
[2026-03-13 21:16:02] Cycle complete
[2026-03-13 21:16:02] CYCLE 35: Orlando FL
[2026-03-13 21:16:02] Searching: Orlando FL HOA board
[2026-03-13 21:16:02] Sleeping 300s (throttle)...
[2026-03-13 21:21:03] Cycle complete
[2026-03-13 21:21:03] CYCLE 36: Phoenix AZ
[2026-03-13 21:21:03] Searching: Phoenix AZ HOA board
[2026-03-13 21:21:03] Sleeping 300s (throttle)...
[2026-03-13 21:26:03] Cycle complete
[2026-03-13 21:26:03] CYCLE 37: Charlotte NC
[2026-03-13 21:26:03] Searching: Charlotte NC HOA board
[2026-03-13 21:26:03] Sleeping 300s (throttle)...
[2026-03-13 21:31:03] Cycle complete
[2026-03-13 21:31:03] CYCLE 38: Atlanta GA
[2026-03-13 21:31:03] Searching: Atlanta GA HOA board
[2026-03-13 21:31:03] Sleeping 300s (throttle)...
[2026-03-13 21:36:03] Cycle complete
[2026-03-13 21:36:03] CYCLE 39: Orlando FL
[2026-03-13 21:36:03] Searching: Orlando FL HOA board
[2026-03-13 21:36:03] Sleeping 300s (throttle)...
[2026-03-13 21:41:03] Cycle complete
[2026-03-13 21:41:03] CYCLE 40: Phoenix AZ
[2026-03-13 21:41:03] Searching: Phoenix AZ HOA board
[2026-03-13 21:41:03] Sleeping 300s (throttle)...
[2026-03-13 21:46:03] Cycle complete
[2026-03-13 21:46:03] CYCLE 41: Charlotte NC
[2026-03-13 21:46:03] Searching: Charlotte NC HOA board
[2026-03-13 21:46:03] Sleeping 300s (throttle)...
[2026-03-13 21:51:03] Cycle complete
[2026-03-13 21:51:03] CYCLE 42: Atlanta GA
[2026-03-13 21:51:03] Searching: Atlanta GA HOA board
[2026-03-13 21:51:03] Sleeping 300s (throttle)...
[2026-03-13 21:56:04] Cycle complete
[2026-03-13 21:56:04] CYCLE 43: Orlando FL
[2026-03-13 21:56:04] Searching: Orlando FL HOA board
[2026-03-13 21:56:04] Sleeping 300s (throttle)...
[2026-03-13 22:01:04] Cycle complete
[2026-03-13 22:01:04] CYCLE 44: Phoenix AZ
[2026-03-13 22:01:04] Searching: Phoenix AZ HOA board
[2026-03-13 22:01:04] Sleeping 300s (throttle)...
[2026-03-13 22:06:04] Cycle complete
[2026-03-13 22:06:04] CYCLE 45: Charlotte NC
[2026-03-13 22:06:04] Searching: Charlotte NC HOA board
[2026-03-13 22:06:04] Sleeping 300s (throttle)...
[2026-03-13 22:11:04] Cycle complete
[2026-03-13 22:11:04] CYCLE 46: Atlanta GA
[2026-03-13 22:11:04] Searching: Atlanta GA HOA board
[2026-03-13 22:11:04] Sleeping 300s (throttle)...
[2026-03-13 22:16:04] Cycle complete
[2026-03-13 22:16:04] CYCLE 47: Orlando FL
[2026-03-13 22:16:04] Searching: Orlando FL HOA board
[2026-03-13 22:16:04] Sleeping 300s (throttle)...
[2026-03-13 22:21:05] Cycle complete
[2026-03-13 22:21:05] CYCLE 48: Phoenix AZ
[2026-03-13 22:21:05] Searching: Phoenix AZ HOA board
[2026-03-13 22:21:05] Sleeping 300s (throttle)...
[2026-03-13 22:26:05] Cycle complete
[2026-03-13 22:26:05] CYCLE 49: Charlotte NC
[2026-03-13 22:26:05] Searching: Charlotte NC HOA board
[2026-03-13 22:26:05] Sleeping 300s (throttle)...
[2026-03-13 22:31:05] Cycle complete
[2026-03-13 22:31:05] CYCLE 50: Atlanta GA
[2026-03-13 22:31:05] Searching: Atlanta GA HOA board
[2026-03-13 22:31:05] Sleeping 300s (throttle)...
[2026-03-13 22:36:05] Cycle complete
[2026-03-13 22:36:05] CYCLE 51: Orlando FL
[2026-03-13 22:36:05] Searching: Orlando FL HOA board
[2026-03-13 22:36:05] Sleeping 300s (throttle)...
[2026-03-13 22:41:05] Cycle complete
[2026-03-13 22:41:05] CYCLE 52: Phoenix AZ
[2026-03-13 22:41:05] Searching: Phoenix AZ HOA board
[2026-03-13 22:41:05] Sleeping 300s (throttle)...
[2026-03-13 22:46:06] Cycle complete
[2026-03-13 22:46:06] CYCLE 53: Charlotte NC
[2026-03-13 22:46:06] Searching: Charlotte NC HOA board
[2026-03-13 22:46:06] Sleeping 300s (throttle)...
[2026-03-13 22:51:06] Cycle complete
[2026-03-13 22:51:06] CYCLE 54: Atlanta GA
[2026-03-13 22:51:06] Searching: Atlanta GA HOA board
[2026-03-13 22:51:06] Sleeping 300s (throttle)...
[2026-03-13 22:56:06] Cycle complete
[2026-03-13 22:56:06] CYCLE 55: Orlando FL
[2026-03-13 22:56:06] Searching: Orlando FL HOA board
[2026-03-13 22:56:06] Sleeping 300s (throttle)...
[2026-03-13 23:01:06] Cycle complete
[2026-03-13 23:01:06] CYCLE 56: Phoenix AZ
[2026-03-13 23:01:06] Searching: Phoenix AZ HOA board
[2026-03-13 23:01:06] Sleeping 300s (throttle)...
[2026-03-13 23:06:06] Cycle complete
[2026-03-13 23:06:06] CYCLE 57: Charlotte NC
[2026-03-13 23:06:06] Searching: Charlotte NC HOA board
[2026-03-13 23:06:06] Sleeping 300s (throttle)...
[2026-03-13 23:11:07] Cycle complete
[2026-03-13 23:11:07] CYCLE 58: Atlanta GA
[2026-03-13 23:11:07] Searching: Atlanta GA HOA board
[2026-03-13 23:11:07] Sleeping 300s (throttle)...
[2026-03-13 23:16:07] Cycle complete
[2026-03-13 23:16:07] CYCLE 59: Orlando FL
[2026-03-13 23:16:07] Searching: Orlando FL HOA board
[2026-03-13 23:16:07] Sleeping 300s (throttle)...
[2026-03-13 23:21:07] Cycle complete
[2026-03-13 23:21:07] CYCLE 60: Phoenix AZ
[2026-03-13 23:21:07] Searching: Phoenix AZ HOA board
[2026-03-13 23:21:07] Sleeping 300s (throttle)...
[2026-03-13 23:26:07] Cycle complete
[2026-03-13 23:26:07] CYCLE 61: Charlotte NC
[2026-03-13 23:26:07] Searching: Charlotte NC HOA board
[2026-03-13 23:26:07] Sleeping 300s (throttle)...
[2026-03-13 23:31:07] Cycle complete
[2026-03-13 23:31:07] CYCLE 62: Atlanta GA
[2026-03-13 23:31:07] Searching: Atlanta GA HOA board
[2026-03-13 23:31:07] Sleeping 300s (throttle)...
[2026-03-13 23:36:08] Cycle complete
[2026-03-13 23:36:08] CYCLE 63: Orlando FL
[2026-03-13 23:36:08] Searching: Orlando FL HOA board
[2026-03-13 23:36:08] Sleeping 300s (throttle)...
[2026-03-13 23:41:08] Cycle complete
[2026-03-13 23:41:08] CYCLE 64: Phoenix AZ
[2026-03-13 23:41:08] Searching: Phoenix AZ HOA board
[2026-03-13 23:41:08] Sleeping 300s (throttle)...
[2026-03-13 23:46:08] Cycle complete
[2026-03-13 23:46:08] CYCLE 65: Charlotte NC
[2026-03-13 23:46:08] Searching: Charlotte NC HOA board
[2026-03-13 23:46:08] Sleeping 300s (throttle)...
[2026-03-13 23:51:08] Cycle complete
[2026-03-13 23:51:08] CYCLE 66: Atlanta GA
[2026-03-13 23:51:08] Searching: Atlanta GA HOA board
[2026-03-13 23:51:08] Sleeping 300s (throttle)...
[2026-03-13 23:56:08] Cycle complete
[2026-03-13 23:56:08] CYCLE 67: Orlando FL
[2026-03-13 23:56:08] Searching: Orlando FL HOA board
[2026-03-13 23:56:08] Sleeping 300s (throttle)...
[2026-03-14 00:01:09] Cycle complete
[2026-03-14 00:01:09] CYCLE 68: Phoenix AZ
[2026-03-14 00:01:09] Searching: Phoenix AZ HOA board
[2026-03-14 00:01:09] Sleeping 300s (throttle)...
[2026-03-14 00:06:09] Cycle complete
[2026-03-14 00:06:09] CYCLE 69: Charlotte NC
[2026-03-14 00:06:09] Searching: Charlotte NC HOA board
[2026-03-14 00:06:09] Sleeping 300s (throttle)...
[2026-03-14 00:11:09] Cycle complete
[2026-03-14 00:11:09] CYCLE 70: Atlanta GA
[2026-03-14 00:11:09] Searching: Atlanta GA HOA board
[2026-03-14 00:11:09] Sleeping 300s (throttle)...
[2026-03-14 00:16:09] Cycle complete
[2026-03-14 00:16:09] CYCLE 71: Orlando FL
[2026-03-14 00:16:09] Searching: Orlando FL HOA board
[2026-03-14 00:16:09] Sleeping 300s (throttle)...
[2026-03-14 00:21:09] Cycle complete
[2026-03-14 00:21:09] CYCLE 72: Phoenix AZ
[2026-03-14 00:21:09] Searching: Phoenix AZ HOA board
[2026-03-14 00:21:09] Sleeping 300s (throttle)...
[2026-03-14 00:26:10] Cycle complete
[2026-03-14 00:26:10] CYCLE 73: Charlotte NC
[2026-03-14 00:26:10] Searching: Charlotte NC HOA board
[2026-03-14 00:26:10] Sleeping 300s (throttle)...
[2026-03-14 00:31:10] Cycle complete
[2026-03-14 00:31:10] CYCLE 74: Atlanta GA
[2026-03-14 00:31:10] Searching: Atlanta GA HOA board
[2026-03-14 00:31:10] Sleeping 300s (throttle)...
[2026-03-14 00:36:10] Cycle complete
[2026-03-14 00:36:10] CYCLE 75: Orlando FL
[2026-03-14 00:36:10] Searching: Orlando FL HOA board
[2026-03-14 00:36:10] Sleeping 300s (throttle)...
[2026-03-14 00:41:10] Cycle complete
[2026-03-14 00:41:10] CYCLE 76: Phoenix AZ
[2026-03-14 00:41:10] Searching: Phoenix AZ HOA board
[2026-03-14 00:41:10] Sleeping 300s (throttle)...
[2026-03-14 00:46:10] Cycle complete
[2026-03-14 00:46:10] CYCLE 77: Charlotte NC
[2026-03-14 00:46:10] Searching: Charlotte NC HOA board
[2026-03-14 00:46:10] Sleeping 300s (throttle)...
[2026-03-14 00:51:11] Cycle complete
[2026-03-14 00:51:11] CYCLE 78: Atlanta GA
[2026-03-14 00:51:11] Searching: Atlanta GA HOA board
[2026-03-14 00:51:11] Sleeping 300s (throttle)...
[2026-03-14 00:56:11] Cycle complete
[2026-03-14 00:56:11] CYCLE 79: Orlando FL
[2026-03-14 00:56:11] Searching: Orlando FL HOA board
[2026-03-14 00:56:11] Sleeping 300s (throttle)...
[2026-03-14 01:01:11] Cycle complete
[2026-03-14 01:01:11] CYCLE 80: Phoenix AZ
[2026-03-14 01:01:11] Searching: Phoenix AZ HOA board
[2026-03-14 01:01:11] Sleeping 300s (throttle)...
[2026-03-14 01:06:11] Cycle complete
[2026-03-14 01:06:11] CYCLE 81: Charlotte NC
[2026-03-14 01:06:11] Searching: Charlotte NC HOA board
[2026-03-14 01:06:11] Sleeping 300s (throttle)...
[2026-03-14 01:11:11] Cycle complete
[2026-03-14 01:11:11] CYCLE 82: Atlanta GA
[2026-03-14 01:11:11] Searching: Atlanta GA HOA board
[2026-03-14 01:11:11] Sleeping 300s (throttle)...
[2026-03-14 01:16:12] Cycle complete
[2026-03-14 01:16:12] CYCLE 83: Orlando FL
[2026-03-14 01:16:12] Searching: Orlando FL HOA board
[2026-03-14 01:16:12] Sleeping 300s (throttle)...
[2026-03-14 01:21:12] Cycle complete
[2026-03-14 01:21:12] CYCLE 84: Phoenix AZ
[2026-03-14 01:21:12] Searching: Phoenix AZ HOA board
[2026-03-14 01:21:12] Sleeping 300s (throttle)...
[2026-03-14 01:26:12] Cycle complete
[2026-03-14 01:26:12] CYCLE 85: Charlotte NC
[2026-03-14 01:26:12] Searching: Charlotte NC HOA board
[2026-03-14 01:26:12] Sleeping 300s (throttle)...
[2026-03-14 01:31:12] Cycle complete
[2026-03-14 01:31:12] CYCLE 86: Atlanta GA
[2026-03-14 01:31:12] Searching: Atlanta GA HOA board
[2026-03-14 01:31:12] Sleeping 300s (throttle)...
[2026-03-14 01:36:12] Cycle complete
[2026-03-14 01:36:12] CYCLE 87: Orlando FL
[2026-03-14 01:36:12] Searching: Orlando FL HOA board
[2026-03-14 01:36:12] Sleeping 300s (throttle)...
[2026-03-14 01:41:13] Cycle complete
[2026-03-14 01:41:13] CYCLE 88: Phoenix AZ
[2026-03-14 01:41:13] Searching: Phoenix AZ HOA board
[2026-03-14 01:41:13] Sleeping 300s (throttle)...
[2026-03-14 01:46:13] Cycle complete
[2026-03-14 01:46:13] CYCLE 89: Charlotte NC
[2026-03-14 01:46:13] Searching: Charlotte NC HOA board
[2026-03-14 01:46:13] Sleeping 300s (throttle)...
[2026-03-14 01:51:13] Cycle complete
[2026-03-14 01:51:13] CYCLE 90: Atlanta GA
[2026-03-14 01:51:13] Searching: Atlanta GA HOA board
[2026-03-14 01:51:13] Sleeping 300s (throttle)...
[2026-03-14 01:56:13] Cycle complete
[2026-03-14 01:56:13] CYCLE 91: Orlando FL
[2026-03-14 01:56:13] Searching: Orlando FL HOA board
[2026-03-14 01:56:13] Sleeping 300s (throttle)...
[2026-03-14 02:01:13] Cycle complete
[2026-03-14 02:01:13] CYCLE 92: Phoenix AZ
[2026-03-14 02:01:13] Searching: Phoenix AZ HOA board
[2026-03-14 02:01:13] Sleeping 300s (throttle)...
[2026-03-14 02:06:14] Cycle complete
[2026-03-14 02:06:14] CYCLE 93: Charlotte NC
[2026-03-14 02:06:14] Searching: Charlotte NC HOA board
[2026-03-14 02:06:14] Sleeping 300s (throttle)...
[2026-03-14 02:11:14] Cycle complete
[2026-03-14 02:11:14] CYCLE 94: Atlanta GA
[2026-03-14 02:11:14] Searching: Atlanta GA HOA board
[2026-03-14 02:11:14] Sleeping 300s (throttle)...
[2026-03-14 02:16:14] Cycle complete
[2026-03-14 02:16:14] CYCLE 95: Orlando FL
[2026-03-14 02:16:14] Searching: Orlando FL HOA board
[2026-03-14 02:16:14] Sleeping 300s (throttle)...
[2026-03-14 02:21:14] Cycle complete
[2026-03-14 02:21:14] CYCLE 96: Phoenix AZ
[2026-03-14 02:21:14] Searching: Phoenix AZ HOA board
[2026-03-14 02:21:14] Sleeping 300s (throttle)...
[2026-03-14 02:26:14] Cycle complete
[2026-03-14 02:26:14] CYCLE 97: Charlotte NC
[2026-03-14 02:26:14] Searching: Charlotte NC HOA board
[2026-03-14 02:26:14] Sleeping 300s (throttle)...
[2026-03-14 02:31:15] Cycle complete
[2026-03-14 02:31:15] CYCLE 98: Atlanta GA
[2026-03-14 02:31:15] Searching: Atlanta GA HOA board
[2026-03-14 02:31:15] Sleeping 300s (throttle)...
[2026-03-14 02:36:15] Cycle complete
[2026-03-14 02:36:15] CYCLE 99: Orlando FL
[2026-03-14 02:36:15] Searching: Orlando FL HOA board
[2026-03-14 02:36:15] Sleeping 300s (throttle)...
[2026-03-14 02:41:15] Cycle complete
[2026-03-14 02:41:15] CYCLE 100: Phoenix AZ
[2026-03-14 02:41:15] Searching: Phoenix AZ HOA board
[2026-03-14 02:41:15] Sleeping 300s (throttle)...
[2026-03-14 02:46:15] Cycle complete
[2026-03-14 02:46:15] CYCLE 101: Charlotte NC
[2026-03-14 02:46:15] Searching: Charlotte NC HOA board
[2026-03-14 02:46:15] Sleeping 300s (throttle)...
[2026-03-14 02:51:15] Cycle complete
[2026-03-14 02:51:15] CYCLE 102: Atlanta GA
[2026-03-14 02:51:15] Searching: Atlanta GA HOA board
[2026-03-14 02:51:15] Sleeping 300s (throttle)...
[2026-03-14 02:56:15] Cycle complete
[2026-03-14 02:56:15] CYCLE 103: Orlando FL
[2026-03-14 02:56:15] Searching: Orlando FL HOA board
[2026-03-14 02:56:15] Sleeping 300s (throttle)...
[2026-03-14 03:01:16] Cycle complete
[2026-03-14 03:01:16] CYCLE 104: Phoenix AZ
[2026-03-14 03:01:16] Searching: Phoenix AZ HOA board
[2026-03-14 03:01:16] Sleeping 300s (throttle)...
[2026-03-14 03:06:16] Cycle complete
[2026-03-14 03:06:16] CYCLE 105: Charlotte NC
[2026-03-14 03:06:16] Searching: Charlotte NC HOA board
[2026-03-14 03:06:16] Sleeping 300s (throttle)...
[2026-03-14 03:11:16] Cycle complete
[2026-03-14 03:11:16] CYCLE 106: Atlanta GA
[2026-03-14 03:11:16] Searching: Atlanta GA HOA board
[2026-03-14 03:11:16] Sleeping 300s (throttle)...
[2026-03-14 03:16:16] Cycle complete
[2026-03-14 03:16:16] CYCLE 107: Orlando FL
[2026-03-14 03:16:16] Searching: Orlando FL HOA board
[2026-03-14 03:16:16] Sleeping 300s (throttle)...
[2026-03-14 03:21:16] Cycle complete
[2026-03-14 03:21:16] CYCLE 108: Phoenix AZ
[2026-03-14 03:21:16] Searching: Phoenix AZ HOA board
[2026-03-14 03:21:16] Sleeping 300s (throttle)...
[2026-03-14 03:26:17] Cycle complete
[2026-03-14 03:26:17] CYCLE 109: Charlotte NC
[2026-03-14 03:26:17] Searching: Charlotte NC HOA board
[2026-03-14 03:26:17] Sleeping 300s (throttle)...
[2026-03-14 03:31:17] Cycle complete
[2026-03-14 03:31:17] CYCLE 110: Atlanta GA
[2026-03-14 03:31:17] Searching: Atlanta GA HOA board
[2026-03-14 03:31:17] Sleeping 300s (throttle)...
[2026-03-14 03:36:17] Cycle complete
[2026-03-14 03:36:17] CYCLE 111: Orlando FL
[2026-03-14 03:36:17] Searching: Orlando FL HOA board
[2026-03-14 03:36:17] Sleeping 300s (throttle)...
[2026-03-14 03:41:17] Cycle complete
[2026-03-14 03:41:17] CYCLE 112: Phoenix AZ
[2026-03-14 03:41:17] Searching: Phoenix AZ HOA board
[2026-03-14 03:41:17] Sleeping 300s (throttle)...
[2026-03-14 03:46:17] Cycle complete
[2026-03-14 03:46:17] CYCLE 113: Charlotte NC
[2026-03-14 03:46:17] Searching: Charlotte NC HOA board
[2026-03-14 03:46:17] Sleeping 300s (throttle)...
[2026-03-14 03:51:18] Cycle complete
[2026-03-14 03:51:18] CYCLE 114: Atlanta GA
[2026-03-14 03:51:18] Searching: Atlanta GA HOA board
[2026-03-14 03:51:18] Sleeping 300s (throttle)...
[2026-03-14 03:56:18] Cycle complete
[2026-03-14 03:56:18] CYCLE 115: Orlando FL
[2026-03-14 03:56:18] Searching: Orlando FL HOA board
[2026-03-14 03:56:18] Sleeping 300s (throttle)...
[2026-03-14 04:01:18] Cycle complete
[2026-03-14 04:01:18] CYCLE 116: Phoenix AZ
[2026-03-14 04:01:18] Searching: Phoenix AZ HOA board
[2026-03-14 04:01:18] Sleeping 300s (throttle)...
[2026-03-14 04:06:18] Cycle complete
[2026-03-14 04:06:18] CYCLE 117: Charlotte NC
[2026-03-14 04:06:18] Searching: Charlotte NC HOA board
[2026-03-14 04:06:18] Sleeping 300s (throttle)...
[2026-03-14 04:11:18] Cycle complete
[2026-03-14 04:11:18] CYCLE 118: Atlanta GA
[2026-03-14 04:11:18] Searching: Atlanta GA HOA board
[2026-03-14 04:11:18] Sleeping 300s (throttle)...
[2026-03-14 04:16:19] Cycle complete
[2026-03-14 04:16:19] CYCLE 119: Orlando FL
[2026-03-14 04:16:19] Searching: Orlando FL HOA board
[2026-03-14 04:16:19] Sleeping 300s (throttle)...
[2026-03-14 04:21:19] Cycle complete
[2026-03-14 04:21:19] CYCLE 120: Phoenix AZ
[2026-03-14 04:21:19] Searching: Phoenix AZ HOA board
[2026-03-14 04:21:19] Sleeping 300s (throttle)...
[2026-03-14 04:26:19] Cycle complete
[2026-03-14 04:26:19] CYCLE 121: Charlotte NC
[2026-03-14 04:26:19] Searching: Charlotte NC HOA board
[2026-03-14 04:26:19] Sleeping 300s (throttle)...
[2026-03-14 04:31:19] Cycle complete
[2026-03-14 04:31:19] CYCLE 122: Atlanta GA
[2026-03-14 04:31:19] Searching: Atlanta GA HOA board
[2026-03-14 04:31:19] Sleeping 300s (throttle)...
[2026-03-14 04:36:19] Cycle complete
[2026-03-14 04:36:19] CYCLE 123: Orlando FL
[2026-03-14 04:36:19] Searching: Orlando FL HOA board
[2026-03-14 04:36:19] Sleeping 300s (throttle)...
[2026-03-14 04:41:19] Cycle complete
[2026-03-14 04:41:19] CYCLE 124: Phoenix AZ
[2026-03-14 04:41:19] Searching: Phoenix AZ HOA board
[2026-03-14 04:41:19] Sleeping 300s (throttle)...
[2026-03-14 04:46:19] Cycle complete
[2026-03-14 04:46:19] CYCLE 125: Charlotte NC
[2026-03-14 04:46:19] Searching: Charlotte NC HOA board
[2026-03-14 04:46:19] Sleeping 300s (throttle)...
[2026-03-14 04:51:19] Cycle complete
[2026-03-14 04:51:19] CYCLE 126: Atlanta GA
[2026-03-14 04:51:19] Searching: Atlanta GA HOA board
[2026-03-14 04:51:19] Sleeping 300s (throttle)...
[2026-03-14 04:56:19] Cycle complete
[2026-03-14 04:56:20] CYCLE 127: Orlando FL
[2026-03-14 04:56:20] Searching: Orlando FL HOA board
[2026-03-14 04:56:20] Sleeping 300s (throttle)...
[2026-03-14 05:01:20] Cycle complete
[2026-03-14 05:01:20] CYCLE 128: Phoenix AZ
[2026-03-14 05:01:20] Searching: Phoenix AZ HOA board
[2026-03-14 05:01:20] Sleeping 300s (throttle)...
[2026-03-14 05:06:20] Cycle complete
[2026-03-14 05:06:20] CYCLE 129: Charlotte NC
[2026-03-14 05:06:20] Searching: Charlotte NC HOA board
[2026-03-14 05:06:20] Sleeping 300s (throttle)...
[2026-03-14 05:11:20] Cycle complete
[2026-03-14 05:11:20] CYCLE 130: Atlanta GA
[2026-03-14 05:11:20] Searching: Atlanta GA HOA board
[2026-03-14 05:11:20] Sleeping 300s (throttle)...
[2026-03-14 05:16:20] Cycle complete
[2026-03-14 05:16:20] CYCLE 131: Orlando FL
[2026-03-14 05:16:20] Searching: Orlando FL HOA board
[2026-03-14 05:16:20] Sleeping 300s (throttle)...
[2026-03-14 05:21:20] Cycle complete
[2026-03-14 05:21:20] CYCLE 132: Phoenix AZ
[2026-03-14 05:21:20] Searching: Phoenix AZ HOA board
[2026-03-14 05:21:20] Sleeping 300s (throttle)...
[2026-03-14 05:26:20] Cycle complete
[2026-03-14 05:26:20] CYCLE 133: Charlotte NC
[2026-03-14 05:26:20] Searching: Charlotte NC HOA board
[2026-03-14 05:26:20] Sleeping 300s (throttle)...
[2026-03-14 05:31:21] Cycle complete
[2026-03-14 05:31:21] CYCLE 134: Atlanta GA
[2026-03-14 05:31:21] Searching: Atlanta GA HOA board
[2026-03-14 05:31:21] Sleeping 300s (throttle)...
[2026-03-14 05:36:21] Cycle complete
[2026-03-14 05:36:21] CYCLE 135: Orlando FL
[2026-03-14 05:36:21] Searching: Orlando FL HOA board
[2026-03-14 05:36:21] Sleeping 300s (throttle)...
[2026-03-14 05:41:21] Cycle complete
[2026-03-14 05:41:21] CYCLE 136: Phoenix AZ
[2026-03-14 05:41:21] Searching: Phoenix AZ HOA board
[2026-03-14 05:41:21] Sleeping 300s (throttle)...
[2026-03-14 05:46:21] Cycle complete
[2026-03-14 05:46:21] CYCLE 137: Charlotte NC
[2026-03-14 05:46:21] Searching: Charlotte NC HOA board
[2026-03-14 05:46:21] Sleeping 300s (throttle)...
[2026-03-14 05:51:21] Cycle complete
[2026-03-14 05:51:21] CYCLE 138: Atlanta GA
[2026-03-14 05:51:21] Searching: Atlanta GA HOA board
[2026-03-14 05:51:21] Sleeping 300s (throttle)...
[2026-03-14 05:56:21] Cycle complete
[2026-03-14 05:56:21] CYCLE 139: Orlando FL
[2026-03-14 05:56:21] Searching: Orlando FL HOA board
[2026-03-14 05:56:21] Sleeping 300s (throttle)...
[2026-03-14 06:01:22] Cycle complete
[2026-03-14 06:01:22] CYCLE 140: Phoenix AZ
[2026-03-14 06:01:22] Searching: Phoenix AZ HOA board
[2026-03-14 06:01:22] Sleeping 300s (throttle)...
[2026-03-14 06:06:22] Cycle complete
[2026-03-14 06:06:22] CYCLE 141: Charlotte NC
[2026-03-14 06:06:22] Searching: Charlotte NC HOA board
[2026-03-14 06:06:22] Sleeping 300s (throttle)...
[2026-03-14 06:11:22] Cycle complete
[2026-03-14 06:11:22] CYCLE 142: Atlanta GA
[2026-03-14 06:11:22] Searching: Atlanta GA HOA board
[2026-03-14 06:11:22] Sleeping 300s (throttle)...
[2026-03-14 06:16:22] Cycle complete
[2026-03-14 06:16:22] CYCLE 143: Orlando FL
[2026-03-14 06:16:22] Searching: Orlando FL HOA board
[2026-03-14 06:16:22] Sleeping 300s (throttle)...
[2026-03-14 06:21:22] Cycle complete
[2026-03-14 06:21:22] CYCLE 144: Phoenix AZ
[2026-03-14 06:21:22] Searching: Phoenix AZ HOA board
[2026-03-14 06:21:22] Sleeping 300s (throttle)...
[2026-03-14 06:26:23] Cycle complete
[2026-03-14 06:26:23] CYCLE 145: Charlotte NC
[2026-03-14 06:26:23] Searching: Charlotte NC HOA board
[2026-03-14 06:26:23] Sleeping 300s (throttle)...
[2026-03-14 06:31:23] Cycle complete
[2026-03-14 06:31:23] CYCLE 146: Atlanta GA
[2026-03-14 06:31:23] Searching: Atlanta GA HOA board
[2026-03-14 06:31:23] Sleeping 300s (throttle)...
[2026-03-14 06:36:23] Cycle complete
[2026-03-14 06:36:23] CYCLE 147: Orlando FL
[2026-03-14 06:36:23] Searching: Orlando FL HOA board
[2026-03-14 06:36:23] Sleeping 300s (throttle)...
[2026-03-14 06:41:23] Cycle complete
[2026-03-14 06:41:23] CYCLE 148: Phoenix AZ
[2026-03-14 06:41:23] Searching: Phoenix AZ HOA board
[2026-03-14 06:41:23] Sleeping 300s (throttle)...
[2026-03-14 06:46:23] Cycle complete
[2026-03-14 06:46:23] CYCLE 149: Charlotte NC
[2026-03-14 06:46:23] Searching: Charlotte NC HOA board
[2026-03-14 06:46:23] Sleeping 300s (throttle)...
[2026-03-14 06:51:23] Cycle complete
[2026-03-14 06:51:23] CYCLE 150: Atlanta GA
[2026-03-14 06:51:23] Searching: Atlanta GA HOA board
[2026-03-14 06:51:23] Sleeping 300s (throttle)...
[2026-03-14 06:56:24] Cycle complete
[2026-03-14 06:56:24] CYCLE 151: Orlando FL
[2026-03-14 06:56:24] Searching: Orlando FL HOA board
[2026-03-14 06:56:24] Sleeping 300s (throttle)...
[2026-03-14 07:01:24] Cycle complete
[2026-03-14 07:01:24] CYCLE 152: Phoenix AZ
[2026-03-14 07:01:24] Searching: Phoenix AZ HOA board
[2026-03-14 07:01:24] Sleeping 300s (throttle)...
[2026-03-14 07:06:24] Cycle complete
[2026-03-14 07:06:24] CYCLE 153: Charlotte NC
[2026-03-14 07:06:24] Searching: Charlotte NC HOA board
[2026-03-14 07:06:24] Sleeping 300s (throttle)...
[2026-03-14 07:11:24] Cycle complete
[2026-03-14 07:11:24] CYCLE 154: Atlanta GA
[2026-03-14 07:11:24] Searching: Atlanta GA HOA board
[2026-03-14 07:11:24] Sleeping 300s (throttle)...
[2026-03-14 07:16:24] Cycle complete
[2026-03-14 07:16:24] CYCLE 155: Orlando FL
[2026-03-14 07:16:24] Searching: Orlando FL HOA board
[2026-03-14 07:16:24] Sleeping 300s (throttle)...
[2026-03-14 07:21:25] Cycle complete
[2026-03-14 07:21:25] CYCLE 156: Phoenix AZ
[2026-03-14 07:21:25] Searching: Phoenix AZ HOA board
[2026-03-14 07:21:25] Sleeping 300s (throttle)...
[2026-03-14 07:26:25] Cycle complete
[2026-03-14 07:26:25] CYCLE 157: Charlotte NC
[2026-03-14 07:26:25] Searching: Charlotte NC HOA board
[2026-03-14 07:26:25] Sleeping 300s (throttle)...
[2026-03-14 07:31:25] Cycle complete
[2026-03-14 07:31:25] CYCLE 158: Atlanta GA
[2026-03-14 07:31:25] Searching: Atlanta GA HOA board
[2026-03-14 07:31:25] Sleeping 300s (throttle)...
[2026-03-14 07:36:25] Cycle complete
[2026-03-14 07:36:25] CYCLE 159: Orlando FL
[2026-03-14 07:36:25] Searching: Orlando FL HOA board
[2026-03-14 07:36:25] Sleeping 300s (throttle)...
[2026-03-14 07:41:25] Cycle complete
[2026-03-14 07:41:25] CYCLE 160: Phoenix AZ
[2026-03-14 07:41:25] Searching: Phoenix AZ HOA board
[2026-03-14 07:41:25] Sleeping 300s (throttle)...
[2026-03-14 07:46:26] Cycle complete
[2026-03-14 07:46:26] CYCLE 161: Charlotte NC
[2026-03-14 07:46:26] Searching: Charlotte NC HOA board
[2026-03-14 07:46:26] Sleeping 300s (throttle)...
[2026-03-14 07:51:26] Cycle complete
[2026-03-14 07:51:26] CYCLE 162: Atlanta GA
[2026-03-14 07:51:26] Searching: Atlanta GA HOA board
[2026-03-14 07:51:26] Sleeping 300s (throttle)...
[2026-03-14 07:56:26] Cycle complete
[2026-03-14 07:56:26] CYCLE 163: Orlando FL
[2026-03-14 07:56:26] Searching: Orlando FL HOA board
[2026-03-14 07:56:26] Sleeping 300s (throttle)...
[2026-03-14 08:01:26] Cycle complete
[2026-03-14 08:01:26] CYCLE 164: Phoenix AZ
[2026-03-14 08:01:26] Searching: Phoenix AZ HOA board
[2026-03-14 08:01:26] Sleeping 300s (throttle)...
[2026-03-14 08:06:26] Cycle complete
[2026-03-14 08:06:26] CYCLE 165: Charlotte NC
[2026-03-14 08:06:26] Searching: Charlotte NC HOA board
[2026-03-14 08:06:26] Sleeping 300s (throttle)...
[2026-03-14 08:11:27] Cycle complete
[2026-03-14 08:11:27] CYCLE 166: Atlanta GA
[2026-03-14 08:11:27] Searching: Atlanta GA HOA board
[2026-03-14 08:11:27] Sleeping 300s (throttle)...
[2026-03-14 08:16:27] Cycle complete
[2026-03-14 08:16:27] CYCLE 167: Orlando FL
[2026-03-14 08:16:27] Searching: Orlando FL HOA board
[2026-03-14 08:16:27] Sleeping 300s (throttle)...
[2026-03-14 08:21:27] Cycle complete
[2026-03-14 08:21:27] CYCLE 168: Phoenix AZ
[2026-03-14 08:21:27] Searching: Phoenix AZ HOA board
[2026-03-14 08:21:27] Sleeping 300s (throttle)...
[2026-03-14 08:26:27] Cycle complete
[2026-03-14 08:26:27] CYCLE 169: Charlotte NC
[2026-03-14 08:26:27] Searching: Charlotte NC HOA board
[2026-03-14 08:26:27] Sleeping 300s (throttle)...
[2026-03-14 08:31:27] Cycle complete
[2026-03-14 08:31:27] CYCLE 170: Atlanta GA
[2026-03-14 08:31:27] Searching: Atlanta GA HOA board
[2026-03-14 08:31:27] Sleeping 300s (throttle)...
[2026-03-14 08:36:28] Cycle complete
[2026-03-14 08:36:28] CYCLE 171: Orlando FL
[2026-03-14 08:36:28] Searching: Orlando FL HOA board
[2026-03-14 08:36:28] Sleeping 300s (throttle)...
[2026-03-14 08:41:28] Cycle complete
[2026-03-14 08:41:28] CYCLE 172: Phoenix AZ
[2026-03-14 08:41:28] Searching: Phoenix AZ HOA board
[2026-03-14 08:41:28] Sleeping 300s (throttle)...
[2026-03-14 08:46:28] Cycle complete
[2026-03-14 08:46:28] CYCLE 173: Charlotte NC
[2026-03-14 08:46:28] Searching: Charlotte NC HOA board
[2026-03-14 08:46:28] Sleeping 300s (throttle)...
[2026-03-14 08:51:28] Cycle complete
[2026-03-14 08:51:28] CYCLE 174: Atlanta GA
[2026-03-14 08:51:28] Searching: Atlanta GA HOA board
[2026-03-14 08:51:28] Sleeping 300s (throttle)...
[2026-03-14 08:56:28] Cycle complete
[2026-03-14 08:56:28] CYCLE 175: Orlando FL
[2026-03-14 08:56:28] Searching: Orlando FL HOA board
[2026-03-14 08:56:28] Sleeping 300s (throttle)...

View File

@@ -0,0 +1,820 @@
[07:53:11] === Prospector v10 Started ===
[07:53:11] CYCLE 1: Charlotte NC
[07:53:11] SEARCH: Charlotte NC HOA
[07:53:11] -> 0 URLs
[07:53:20] SEARCH: Charlotte NC homeowners association
[07:53:21] -> 0 URLs
[07:53:34] SEARCH: Charlotte NC HOA management
[07:53:35] -> 0 URLs
[07:53:35] Done: 0 new, 0 total, 24.0s
[07:54:05] CYCLE 2: Atlanta GA
[07:54:05] SEARCH: Atlanta GA HOA
[07:54:05] -> 0 URLs
[07:54:13] SEARCH: Atlanta GA homeowners association
[07:54:14] -> 0 URLs
[07:54:27] SEARCH: Atlanta GA HOA management
[07:54:28] -> 0 URLs
[07:54:28] Done: 0 new, 0 total, 23.2s
[07:54:58] CYCLE 3: Orlando FL
[07:54:58] SEARCH: Orlando FL HOA
[07:54:59] -> 0 URLs
[07:55:08] SEARCH: Orlando FL homeowners association
[07:55:08] -> 0 URLs
[07:55:16] SEARCH: Orlando FL HOA management
[07:55:17] -> 0 URLs
[07:55:17] Done: 0 new, 0 total, 18.5s
[07:55:47] CYCLE 4: Phoenix AZ
[07:55:47] SEARCH: Phoenix AZ HOA
[07:55:47] -> 0 URLs
[07:55:56] SEARCH: Phoenix AZ homeowners association
[07:55:57] -> 0 URLs
[07:56:10] SEARCH: Phoenix AZ HOA management
[07:56:10] -> 0 URLs
[07:56:10] Done: 0 new, 0 total, 23.4s
[07:56:40] CYCLE 5: Austin TX
[07:56:40] SEARCH: Austin TX HOA
[07:56:41] -> 0 URLs
[07:56:53] SEARCH: Austin TX homeowners association
[07:56:53] -> 0 URLs
[07:57:04] SEARCH: Austin TX HOA management
[07:57:05] -> 0 URLs
[07:57:05] Done: 0 new, 0 total, 24.4s
[07:57:35] CYCLE 6: Denver CO
[07:57:35] SEARCH: Denver CO HOA
[07:57:35] -> 0 URLs
[07:57:48] SEARCH: Denver CO homeowners association
[07:57:48] -> 0 URLs
[07:57:56] SEARCH: Denver CO HOA management
[07:57:57] -> 0 URLs
[07:57:57] Done: 0 new, 0 total, 22.0s
[07:58:27] CYCLE 7: Nashville TN
[07:58:27] SEARCH: Nashville TN HOA
[07:58:27] -> 0 URLs
[07:58:37] SEARCH: Nashville TN homeowners association
[07:58:38] -> 0 URLs
[07:58:51] SEARCH: Nashville TN HOA management
[07:58:52] -> 0 URLs
[07:58:52] Done: 0 new, 0 total, 25.0s
[07:59:22] CYCLE 8: Raleigh NC
[07:59:22] SEARCH: Raleigh NC HOA
[07:59:22] -> 0 URLs
[07:59:30] SEARCH: Raleigh NC homeowners association
[07:59:30] -> 0 URLs
[07:59:45] SEARCH: Raleigh NC HOA management
[07:59:45] -> 0 URLs
[07:59:45] Done: 0 new, 0 total, 23.1s
[08:00:15] CYCLE 9: Tampa FL
[08:00:15] SEARCH: Tampa FL HOA
[08:00:16] -> 0 URLs
[08:00:23] SEARCH: Tampa FL homeowners association
[08:00:24] -> 0 URLs
[08:00:34] SEARCH: Tampa FL HOA management
[08:00:35] -> 0 URLs
[08:00:35] Done: 0 new, 0 total, 19.6s
[08:01:05] CYCLE 10: Dallas TX
[08:01:05] SEARCH: Dallas TX HOA
[08:01:05] -> 0 URLs
[08:01:17] SEARCH: Dallas TX homeowners association
[08:01:18] -> 0 URLs
[08:01:27] SEARCH: Dallas TX HOA management
[08:01:27] -> 0 URLs
[08:01:27] Done: 0 new, 0 total, 22.5s
[08:01:58] CYCLE 11: Houston TX
[08:01:58] SEARCH: Houston TX HOA
[08:01:58] -> 0 URLs
[08:02:12] SEARCH: Houston TX homeowners association
[08:02:13] -> 0 URLs
[08:02:22] SEARCH: Houston TX HOA management
[08:02:22] -> 0 URLs
[08:02:22] Done: 0 new, 0 total, 24.3s
[08:02:52] CYCLE 12: Miami FL
[08:02:52] SEARCH: Miami FL HOA
[08:02:52] -> 0 URLs
[08:03:00] SEARCH: Miami FL homeowners association
[08:03:01] -> 0 URLs
[08:03:15] SEARCH: Miami FL HOA management
[08:03:15] -> 0 URLs
[08:03:15] Done: 0 new, 0 total, 23.4s
[08:03:46] CYCLE 13: Charlotte NC
[08:03:46] SEARCH: Charlotte NC HOA
[08:03:46] -> 0 URLs
[08:03:54] SEARCH: Charlotte NC homeowners association
[08:03:55] -> 0 URLs
[08:04:04] SEARCH: Charlotte NC HOA management
[08:04:04] -> 0 URLs
[08:04:04] Done: 0 new, 0 total, 18.8s
[08:04:35] CYCLE 14: Atlanta GA
[08:04:35] SEARCH: Atlanta GA HOA
[08:04:35] -> 0 URLs
[08:04:48] SEARCH: Atlanta GA homeowners association
[08:04:48] -> 0 URLs
[08:04:57] SEARCH: Atlanta GA HOA management
[08:04:57] -> 0 URLs
[08:04:57] Done: 0 new, 0 total, 22.4s
[08:05:27] CYCLE 15: Orlando FL
[08:05:27] SEARCH: Orlando FL HOA
[08:05:28] -> 0 URLs
[08:05:41] SEARCH: Orlando FL homeowners association
[08:05:42] -> 0 URLs
[08:05:53] SEARCH: Orlando FL HOA management
[08:05:53] -> 0 URLs
[08:05:53] Done: 0 new, 0 total, 26.3s
[08:06:24] CYCLE 16: Phoenix AZ
[08:06:24] SEARCH: Phoenix AZ HOA
[08:06:24] -> 0 URLs
[08:06:34] SEARCH: Phoenix AZ homeowners association
[08:06:35] -> 0 URLs
[08:06:49] SEARCH: Phoenix AZ HOA management
[08:06:49] -> 0 URLs
[08:06:49] Done: 0 new, 0 total, 25.6s
[08:07:19] CYCLE 17: Austin TX
[08:07:19] SEARCH: Austin TX HOA
[08:07:20] -> 0 URLs
[08:07:29] SEARCH: Austin TX homeowners association
[08:07:29] -> 0 URLs
[08:07:42] SEARCH: Austin TX HOA management
[08:07:42] -> 0 URLs
[08:07:42] Done: 0 new, 0 total, 23.0s
[08:08:12] CYCLE 18: Denver CO
[08:08:12] SEARCH: Denver CO HOA
[08:08:13] -> 0 URLs
[08:08:27] SEARCH: Denver CO homeowners association
[08:08:27] -> 0 URLs
[08:08:36] SEARCH: Denver CO HOA management
[08:08:36] -> 0 URLs
[08:08:36] Done: 0 new, 0 total, 23.9s
[08:09:06] CYCLE 19: Nashville TN
[08:09:06] SEARCH: Nashville TN HOA
[08:09:07] -> 0 URLs
[08:09:19] SEARCH: Nashville TN homeowners association
[08:09:20] -> 0 URLs
[08:09:32] SEARCH: Nashville TN HOA management
[08:09:33] -> 0 URLs
[08:09:33] Done: 0 new, 0 total, 26.3s
[08:10:03] CYCLE 20: Raleigh NC
[08:10:03] SEARCH: Raleigh NC HOA
[08:10:03] -> 0 URLs
[08:10:15] SEARCH: Raleigh NC homeowners association
[08:10:16] -> 0 URLs
[08:10:24] SEARCH: Raleigh NC HOA management
[08:10:25] -> 0 URLs
[08:10:25] Done: 0 new, 0 total, 21.8s
[08:10:55] CYCLE 21: Tampa FL
[08:10:55] SEARCH: Tampa FL HOA
[08:10:55] -> 0 URLs
[08:11:06] SEARCH: Tampa FL homeowners association
[08:11:07] -> 0 URLs
[08:11:17] SEARCH: Tampa FL HOA management
[08:11:18] -> 0 URLs
[08:11:18] Done: 0 new, 0 total, 23.3s
[08:11:48] CYCLE 22: Dallas TX
[08:11:48] SEARCH: Dallas TX HOA
[08:11:48] -> 0 URLs
[08:12:03] SEARCH: Dallas TX homeowners association
[08:12:03] -> 0 URLs
[08:12:11] SEARCH: Dallas TX HOA management
[08:12:11] -> 0 URLs
[08:12:11] Done: 0 new, 0 total, 23.4s
[08:12:42] CYCLE 23: Houston TX
[08:12:42] SEARCH: Houston TX HOA
[08:12:42] -> 0 URLs
[08:12:52] SEARCH: Houston TX homeowners association
[08:12:52] -> 0 URLs
[08:13:01] SEARCH: Houston TX HOA management
[08:13:02] -> 0 URLs
[08:13:02] Done: 0 new, 0 total, 20.2s
[08:13:32] CYCLE 24: Miami FL
[08:13:32] SEARCH: Miami FL HOA
[08:13:32] -> 0 URLs
[08:13:41] SEARCH: Miami FL homeowners association
[08:13:42] -> 0 URLs
[08:13:50] SEARCH: Miami FL HOA management
[08:13:51] -> 0 URLs
[08:13:51] Done: 0 new, 0 total, 18.7s
[08:14:21] CYCLE 25: Charlotte NC
[08:14:21] SEARCH: Charlotte NC HOA
[08:14:21] -> 0 URLs
[08:14:33] SEARCH: Charlotte NC homeowners association
[08:14:34] -> 0 URLs
[08:14:47] SEARCH: Charlotte NC HOA management
[08:14:47] -> 0 URLs
[08:14:47] Done: 0 new, 0 total, 26.8s
[08:15:18] CYCLE 26: Atlanta GA
[08:15:18] SEARCH: Atlanta GA HOA
[08:15:18] -> 0 URLs
[08:15:32] SEARCH: Atlanta GA homeowners association
[08:15:32] -> 0 URLs
[08:15:41] SEARCH: Atlanta GA HOA management
[08:15:41] -> 0 URLs
[08:15:41] Done: 0 new, 0 total, 23.4s
[08:16:11] CYCLE 27: Orlando FL
[08:16:11] SEARCH: Orlando FL HOA
[08:16:12] -> 0 URLs
[08:16:23] SEARCH: Orlando FL homeowners association
[08:16:23] -> 0 URLs
[08:16:32] SEARCH: Orlando FL HOA management
[08:16:32] -> 0 URLs
[08:16:32] Done: 0 new, 0 total, 21.3s
[08:17:03] CYCLE 28: Phoenix AZ
[08:17:03] SEARCH: Phoenix AZ HOA
[08:17:03] -> 0 URLs
[08:17:14] SEARCH: Phoenix AZ homeowners association
[08:17:15] -> 0 URLs
[08:17:28] SEARCH: Phoenix AZ HOA management
[08:17:29] -> 0 URLs
[08:17:29] Done: 0 new, 0 total, 26.2s
[08:17:59] CYCLE 29: Austin TX
[08:17:59] SEARCH: Austin TX HOA
[08:17:59] -> 0 URLs
[08:18:08] SEARCH: Austin TX homeowners association
[08:18:08] -> 0 URLs
[08:18:19] SEARCH: Austin TX HOA management
[08:18:19] -> 0 URLs
[08:18:19] Done: 0 new, 0 total, 20.4s
[08:18:49] CYCLE 30: Denver CO
[08:18:49] SEARCH: Denver CO HOA
[08:18:50] -> 0 URLs
[08:19:00] SEARCH: Denver CO homeowners association
[08:19:01] -> 0 URLs
[08:19:10] SEARCH: Denver CO HOA management
[08:19:11] -> 0 URLs
[08:19:11] Done: 0 new, 0 total, 21.2s
[08:19:41] CYCLE 31: Nashville TN
[08:19:41] SEARCH: Nashville TN HOA
[08:19:41] -> 0 URLs
[08:19:54] SEARCH: Nashville TN homeowners association
[08:19:54] -> 0 URLs
[08:20:08] SEARCH: Nashville TN HOA management
[08:20:09] -> 0 URLs
[08:20:09] Done: 0 new, 0 total, 27.8s
[08:20:39] CYCLE 32: Raleigh NC
[08:20:39] SEARCH: Raleigh NC HOA
[08:20:39] -> 0 URLs
[08:20:49] SEARCH: Raleigh NC homeowners association
[08:20:49] -> 0 URLs
[08:21:02] SEARCH: Raleigh NC HOA management
[08:21:03] -> 0 URLs
[08:21:03] Done: 0 new, 0 total, 23.8s
[08:21:33] CYCLE 33: Tampa FL
[08:21:33] SEARCH: Tampa FL HOA
[08:21:33] -> 0 URLs
[08:21:48] SEARCH: Tampa FL homeowners association
[08:21:48] -> 0 URLs
[08:22:02] SEARCH: Tampa FL HOA management
[08:22:02] -> 0 URLs
[08:22:02] Done: 0 new, 0 total, 29.6s
[08:22:32] CYCLE 34: Dallas TX
[08:22:32] SEARCH: Dallas TX HOA
[08:22:33] -> 0 URLs
[08:22:43] SEARCH: Dallas TX homeowners association
[08:22:43] -> 0 URLs
[08:22:57] SEARCH: Dallas TX HOA management
[08:22:57] -> 0 URLs
[08:22:57] Done: 0 new, 0 total, 24.8s
[08:23:27] CYCLE 35: Houston TX
[08:23:27] SEARCH: Houston TX HOA
[08:23:28] -> 0 URLs
[08:23:36] SEARCH: Houston TX homeowners association
[08:23:37] -> 0 URLs
[08:23:51] SEARCH: Houston TX HOA management
[08:23:52] -> 0 URLs
[08:23:52] Done: 0 new, 0 total, 24.5s
[08:24:22] CYCLE 36: Miami FL
[08:24:22] SEARCH: Miami FL HOA
[08:24:22] -> 0 URLs
[08:24:37] SEARCH: Miami FL homeowners association
[08:24:37] -> 0 URLs
[08:24:45] SEARCH: Miami FL HOA management
[08:24:45] -> 0 URLs
[08:24:45] Done: 0 new, 0 total, 23.6s
[08:25:16] CYCLE 37: Charlotte NC
[08:25:16] SEARCH: Charlotte NC HOA
[08:25:16] -> 0 URLs
[08:25:25] SEARCH: Charlotte NC homeowners association
[08:25:25] -> 0 URLs
[08:25:36] SEARCH: Charlotte NC HOA management
[08:25:36] -> 0 URLs
[08:25:36] Done: 0 new, 0 total, 20.5s
[08:26:06] CYCLE 38: Atlanta GA
[08:26:06] SEARCH: Atlanta GA HOA
[08:26:07] -> 0 URLs
[08:26:18] SEARCH: Atlanta GA homeowners association
[08:26:18] -> 0 URLs
[08:26:31] SEARCH: Atlanta GA HOA management
[08:26:31] -> 0 URLs
[08:26:31] Done: 0 new, 0 total, 25.0s
[08:27:01] CYCLE 39: Orlando FL
[08:27:01] SEARCH: Orlando FL HOA
[08:27:02] -> 0 URLs
[08:27:10] SEARCH: Orlando FL homeowners association
[08:27:10] -> 0 URLs
[08:27:19] SEARCH: Orlando FL HOA management
[08:27:19] -> 0 URLs
[08:27:19] Done: 0 new, 0 total, 17.9s
[08:27:49] CYCLE 40: Phoenix AZ
[08:27:49] SEARCH: Phoenix AZ HOA
[08:27:50] -> 0 URLs
[08:28:03] SEARCH: Phoenix AZ homeowners association
[08:28:03] -> 0 URLs
[08:28:17] SEARCH: Phoenix AZ HOA management
[08:28:18] -> 0 URLs
[08:28:18] Done: 0 new, 0 total, 28.4s
[08:28:48] CYCLE 41: Austin TX
[08:28:48] SEARCH: Austin TX HOA
[08:28:48] -> 0 URLs
[08:29:01] SEARCH: Austin TX homeowners association
[08:29:02] -> 0 URLs
[08:29:13] SEARCH: Austin TX HOA management
[08:29:14] -> 0 URLs
[08:29:14] Done: 0 new, 0 total, 25.9s
[08:29:44] CYCLE 42: Denver CO
[08:29:44] SEARCH: Denver CO HOA
[08:29:44] -> 0 URLs
[08:29:54] SEARCH: Denver CO homeowners association
[08:29:54] -> 0 URLs
[08:30:08] SEARCH: Denver CO HOA management
[08:30:08] -> 0 URLs
[08:30:08] Done: 0 new, 0 total, 24.3s
[08:30:38] CYCLE 43: Nashville TN
[08:30:38] SEARCH: Nashville TN HOA
[08:30:39] -> 0 URLs
[08:30:53] SEARCH: Nashville TN homeowners association
[08:30:53] -> 0 URLs
[08:31:04] SEARCH: Nashville TN HOA management
[08:31:04] -> 0 URLs
[08:31:04] Done: 0 new, 0 total, 25.8s
[08:31:34] CYCLE 44: Raleigh NC
[08:31:34] SEARCH: Raleigh NC HOA
[08:31:35] -> 0 URLs
[08:31:45] SEARCH: Raleigh NC homeowners association
[08:31:45] -> 0 URLs
[08:31:55] SEARCH: Raleigh NC HOA management
[08:31:56] -> 0 URLs
[08:31:56] Done: 0 new, 0 total, 21.4s
[08:32:26] CYCLE 45: Tampa FL
[08:32:26] SEARCH: Tampa FL HOA
[08:32:26] -> 0 URLs
[08:32:39] SEARCH: Tampa FL homeowners association
[08:32:39] -> 0 URLs
[08:32:51] SEARCH: Tampa FL HOA management
[08:32:51] -> 0 URLs
[08:32:51] Done: 0 new, 0 total, 25.5s
[08:33:21] CYCLE 46: Dallas TX
[08:33:21] SEARCH: Dallas TX HOA
[08:33:22] -> 0 URLs
[08:33:35] SEARCH: Dallas TX homeowners association
[08:33:36] -> 0 URLs
[08:33:45] SEARCH: Dallas TX HOA management
[08:33:46] -> 0 URLs
[08:33:46] Done: 0 new, 0 total, 24.1s
[08:34:16] CYCLE 47: Houston TX
[08:34:16] SEARCH: Houston TX HOA
[08:34:16] -> 0 URLs
[08:34:24] SEARCH: Houston TX homeowners association
[08:34:24] -> 0 URLs
[08:34:34] SEARCH: Houston TX HOA management
[08:34:35] -> 0 URLs
[08:34:35] Done: 0 new, 0 total, 18.9s
[08:35:05] CYCLE 48: Miami FL
[08:35:05] SEARCH: Miami FL HOA
[08:35:05] -> 0 URLs
[08:35:14] SEARCH: Miami FL homeowners association
[08:35:14] -> 0 URLs
[08:35:23] SEARCH: Miami FL HOA management
[08:35:23] -> 0 URLs
[08:35:23] Done: 0 new, 0 total, 18.3s
[08:35:53] CYCLE 49: Charlotte NC
[08:35:53] SEARCH: Charlotte NC HOA
[08:35:53] -> 0 URLs
[08:36:07] SEARCH: Charlotte NC homeowners association
[08:36:08] -> 0 URLs
[08:36:22] SEARCH: Charlotte NC HOA management
[08:36:22] -> 0 URLs
[08:36:22] Done: 0 new, 0 total, 29.2s
[08:36:52] CYCLE 50: Atlanta GA
[08:36:52] SEARCH: Atlanta GA HOA
[08:36:53] -> 0 URLs
[08:37:01] SEARCH: Atlanta GA homeowners association
[08:37:02] -> 0 URLs
[08:37:12] SEARCH: Atlanta GA HOA management
[08:37:12] -> 0 URLs
[08:37:12] Done: 0 new, 0 total, 19.8s
[08:37:42] CYCLE 51: Orlando FL
[08:37:42] SEARCH: Orlando FL HOA
[08:37:43] -> 0 URLs
[08:37:52] SEARCH: Orlando FL homeowners association
[08:37:52] -> 0 URLs
[08:38:01] SEARCH: Orlando FL HOA management
[08:38:02] -> 0 URLs
[08:38:02] Done: 0 new, 0 total, 19.5s
[08:38:32] CYCLE 52: Phoenix AZ
[08:38:32] SEARCH: Phoenix AZ HOA
[08:38:32] -> 0 URLs
[08:38:41] SEARCH: Phoenix AZ homeowners association
[08:38:41] -> 0 URLs
[08:38:53] SEARCH: Phoenix AZ HOA management
[08:38:53] -> 0 URLs
[08:38:53] Done: 0 new, 0 total, 21.2s
[08:39:23] CYCLE 53: Austin TX
[08:39:23] SEARCH: Austin TX HOA
[08:39:24] -> 0 URLs
[08:39:37] SEARCH: Austin TX homeowners association
[08:39:38] -> 0 URLs
[08:39:52] SEARCH: Austin TX HOA management
[08:39:53] -> 0 URLs
[08:39:53] Done: 0 new, 0 total, 29.2s
[08:40:23] CYCLE 54: Denver CO
[08:40:23] SEARCH: Denver CO HOA
[08:40:23] -> 0 URLs
[08:40:32] SEARCH: Denver CO homeowners association
[08:40:33] -> 0 URLs
[08:40:43] SEARCH: Denver CO HOA management
[08:40:44] -> 0 URLs
[08:40:44] Done: 0 new, 0 total, 21.2s
[08:41:14] CYCLE 55: Nashville TN
[08:41:14] SEARCH: Nashville TN HOA
[08:41:14] -> 0 URLs
[08:41:26] SEARCH: Nashville TN homeowners association
[08:41:26] -> 0 URLs
[08:41:34] SEARCH: Nashville TN HOA management
[08:41:35] -> 0 URLs
[08:41:35] Done: 0 new, 0 total, 20.7s
[08:42:05] CYCLE 56: Raleigh NC
[08:42:05] SEARCH: Raleigh NC HOA
[08:42:05] -> 0 URLs
[08:42:19] SEARCH: Raleigh NC homeowners association
[08:42:19] -> 0 URLs
[08:42:31] SEARCH: Raleigh NC HOA management
[08:42:31] -> 0 URLs
[08:42:31] Done: 0 new, 0 total, 26.7s
[08:43:02] CYCLE 57: Tampa FL
[08:43:02] SEARCH: Tampa FL HOA
[08:43:02] -> 0 URLs
[08:43:12] SEARCH: Tampa FL homeowners association
[08:43:12] -> 0 URLs
[08:43:21] SEARCH: Tampa FL HOA management
[08:43:21] -> 0 URLs
[08:43:21] Done: 0 new, 0 total, 19.6s
[08:43:51] CYCLE 58: Dallas TX
[08:43:51] SEARCH: Dallas TX HOA
[08:43:52] -> 0 URLs
[08:44:06] SEARCH: Dallas TX homeowners association
[08:44:06] -> 0 URLs
[08:44:20] SEARCH: Dallas TX HOA management
[08:44:20] -> 0 URLs
[08:44:20] Done: 0 new, 0 total, 28.9s
[08:44:50] CYCLE 59: Houston TX
[08:44:50] SEARCH: Houston TX HOA
[08:44:51] -> 0 URLs
[08:45:05] SEARCH: Houston TX homeowners association
[08:45:05] -> 0 URLs
[08:45:18] SEARCH: Houston TX HOA management
[08:45:19] -> 0 URLs
[08:45:19] Done: 0 new, 0 total, 28.2s
[08:45:49] CYCLE 60: Miami FL
[08:45:49] SEARCH: Miami FL HOA
[08:45:49] -> 0 URLs
[08:46:03] SEARCH: Miami FL homeowners association
[08:46:03] -> 0 URLs
[08:46:11] SEARCH: Miami FL HOA management
[08:46:11] -> 0 URLs
[08:46:11] Done: 0 new, 0 total, 22.3s
[08:46:41] CYCLE 61: Charlotte NC
[08:46:41] SEARCH: Charlotte NC HOA
[08:46:42] -> 0 URLs
[08:46:51] SEARCH: Charlotte NC homeowners association
[08:46:51] -> 0 URLs
[08:47:04] SEARCH: Charlotte NC HOA management
[08:47:04] -> 0 URLs
[08:47:04] Done: 0 new, 0 total, 22.8s
[08:47:34] CYCLE 62: Atlanta GA
[08:47:34] SEARCH: Atlanta GA HOA
[08:47:35] -> 0 URLs
[08:47:44] SEARCH: Atlanta GA homeowners association
[08:47:45] -> 0 URLs
[08:47:57] SEARCH: Atlanta GA HOA management
[08:47:58] -> 0 URLs
[08:47:58] Done: 0 new, 0 total, 23.7s
[08:48:28] CYCLE 63: Orlando FL
[08:48:28] SEARCH: Orlando FL HOA
[08:48:28] -> 0 URLs
[08:48:40] SEARCH: Orlando FL homeowners association
[08:48:40] -> 0 URLs
[08:48:53] SEARCH: Orlando FL HOA management
[08:48:54] -> 0 URLs
[08:48:54] Done: 0 new, 0 total, 25.7s
[08:49:24] CYCLE 64: Phoenix AZ
[08:49:24] SEARCH: Phoenix AZ HOA
[08:49:24] -> 0 URLs
[08:49:37] SEARCH: Phoenix AZ homeowners association
[08:49:37] -> 0 URLs
[08:49:50] SEARCH: Phoenix AZ HOA management
[08:49:50] -> 0 URLs
[08:49:50] Done: 0 new, 0 total, 26.5s
[08:50:20] CYCLE 65: Austin TX
[08:50:20] SEARCH: Austin TX HOA
[08:50:21] -> 0 URLs
[08:50:33] SEARCH: Austin TX homeowners association
[08:50:34] -> 0 URLs
[08:50:43] SEARCH: Austin TX HOA management
[08:50:44] -> 0 URLs
[08:50:44] Done: 0 new, 0 total, 23.2s
[08:51:14] CYCLE 66: Denver CO
[08:51:14] SEARCH: Denver CO HOA
[08:51:14] -> 0 URLs
[08:51:27] SEARCH: Denver CO homeowners association
[08:51:28] -> 0 URLs
[08:51:40] SEARCH: Denver CO HOA management
[08:51:40] -> 0 URLs
[08:51:40] Done: 0 new, 0 total, 26.2s
[08:52:10] CYCLE 67: Nashville TN
[08:52:10] SEARCH: Nashville TN HOA
[08:52:11] -> 0 URLs
[08:52:24] SEARCH: Nashville TN homeowners association
[08:52:24] -> 0 URLs
[08:52:38] SEARCH: Nashville TN HOA management
[08:52:39] -> 0 URLs
[08:52:39] Done: 0 new, 0 total, 28.4s
[08:53:09] CYCLE 68: Raleigh NC
[08:53:09] SEARCH: Raleigh NC HOA
[08:53:09] -> 0 URLs
[08:53:21] SEARCH: Raleigh NC homeowners association
[08:53:21] -> 0 URLs
[08:53:36] SEARCH: Raleigh NC HOA management
[08:53:36] -> 0 URLs
[08:53:36] Done: 0 new, 0 total, 27.2s
[08:54:06] CYCLE 69: Tampa FL
[08:54:06] SEARCH: Tampa FL HOA
[08:54:06] -> 0 URLs
[08:54:18] SEARCH: Tampa FL homeowners association
[08:54:19] -> 0 URLs
[08:54:33] SEARCH: Tampa FL HOA management
[08:54:33] -> 0 URLs
[08:54:33] Done: 0 new, 0 total, 27.2s
[08:55:03] CYCLE 70: Dallas TX
[08:55:03] SEARCH: Dallas TX HOA
[08:55:04] -> 0 URLs
[08:55:15] SEARCH: Dallas TX homeowners association
[08:55:16] -> 0 URLs
[08:55:28] SEARCH: Dallas TX HOA management
[08:55:29] -> 0 URLs
[08:55:29] Done: 0 new, 0 total, 25.2s
[08:55:59] CYCLE 71: Houston TX
[08:55:59] SEARCH: Houston TX HOA
[08:55:59] -> 0 URLs
[08:56:10] SEARCH: Houston TX homeowners association
[08:56:11] -> 0 URLs
[08:56:22] SEARCH: Houston TX HOA management
[08:56:22] -> 0 URLs
[08:56:22] Done: 0 new, 0 total, 23.6s
[08:56:52] CYCLE 72: Miami FL
[08:56:52] SEARCH: Miami FL HOA
[08:56:53] -> 0 URLs
[08:57:05] SEARCH: Miami FL homeowners association
[08:57:05] -> 0 URLs
[08:57:16] SEARCH: Miami FL HOA management
[08:57:17] -> 0 URLs
[08:57:17] Done: 0 new, 0 total, 24.2s
[08:57:47] CYCLE 73: Charlotte NC
[08:57:47] SEARCH: Charlotte NC HOA
[08:57:47] -> 0 URLs
[08:57:58] SEARCH: Charlotte NC homeowners association
[08:57:58] -> 0 URLs
[08:58:10] SEARCH: Charlotte NC HOA management
[08:58:11] -> 0 URLs
[08:58:11] Done: 0 new, 0 total, 23.7s
[08:58:41] CYCLE 74: Atlanta GA
[08:58:41] SEARCH: Atlanta GA HOA
[08:58:41] -> 0 URLs
[08:58:53] SEARCH: Atlanta GA homeowners association
[08:58:53] -> 0 URLs
[08:59:04] SEARCH: Atlanta GA HOA management
[08:59:04] -> 0 URLs
[08:59:04] Done: 0 new, 0 total, 23.7s
[08:59:34] CYCLE 75: Orlando FL
[08:59:34] SEARCH: Orlando FL HOA
[08:59:35] -> 0 URLs
[08:59:44] SEARCH: Orlando FL homeowners association
[08:59:44] -> 0 URLs
[08:59:57] SEARCH: Orlando FL HOA management
[08:59:58] -> 0 URLs
[08:59:58] Done: 0 new, 0 total, 23.2s
[09:00:28] CYCLE 76: Phoenix AZ
[09:00:28] SEARCH: Phoenix AZ HOA
[09:00:28] -> 0 URLs
[09:00:37] SEARCH: Phoenix AZ homeowners association
[09:00:37] -> 0 URLs
[09:00:49] SEARCH: Phoenix AZ HOA management
[09:00:50] -> 0 URLs
[09:00:50] Done: 0 new, 0 total, 21.8s
[09:01:20] CYCLE 77: Austin TX
[09:01:20] SEARCH: Austin TX HOA
[09:01:20] -> 0 URLs
[09:01:30] SEARCH: Austin TX homeowners association
[09:01:30] -> 0 URLs
[09:01:42] SEARCH: Austin TX HOA management
[09:01:42] -> 0 URLs
[09:01:42] Done: 0 new, 0 total, 22.7s
[09:02:12] CYCLE 78: Denver CO
[09:02:12] SEARCH: Denver CO HOA
[09:02:13] -> 0 URLs
[09:02:22] SEARCH: Denver CO homeowners association
[09:02:22] -> 0 URLs
[09:02:35] SEARCH: Denver CO HOA management
[09:02:36] -> 0 URLs
[09:02:36] Done: 0 new, 0 total, 23.2s
[09:03:06] CYCLE 79: Nashville TN
[09:03:06] SEARCH: Nashville TN HOA
[09:03:06] -> 0 URLs
[09:03:18] SEARCH: Nashville TN homeowners association
[09:03:18] -> 0 URLs
[09:03:26] SEARCH: Nashville TN HOA management
[09:03:27] -> 0 URLs
[09:03:27] Done: 0 new, 0 total, 20.8s
[09:03:57] CYCLE 80: Raleigh NC
[09:03:57] SEARCH: Raleigh NC HOA
[09:03:57] -> 0 URLs
[09:04:11] SEARCH: Raleigh NC homeowners association
[09:04:12] -> 0 URLs
[09:04:20] SEARCH: Raleigh NC HOA management
[09:04:21] -> 0 URLs
[09:04:21] Done: 0 new, 0 total, 23.9s
[09:04:51] CYCLE 81: Tampa FL
[09:04:51] SEARCH: Tampa FL HOA
[09:04:51] -> 0 URLs
[09:05:02] SEARCH: Tampa FL homeowners association
[09:05:03] -> 0 URLs
[09:05:14] SEARCH: Tampa FL HOA management
[09:05:14] -> 0 URLs
[09:05:14] Done: 0 new, 0 total, 23.3s
[09:05:44] CYCLE 82: Dallas TX
[09:05:44] SEARCH: Dallas TX HOA
[09:05:45] -> 0 URLs
[09:05:58] SEARCH: Dallas TX homeowners association
[09:05:58] -> 0 URLs
[09:06:08] SEARCH: Dallas TX HOA management
[09:06:09] -> 0 URLs
[09:06:09] Done: 0 new, 0 total, 24.5s
[09:06:39] CYCLE 83: Houston TX
[09:06:39] SEARCH: Houston TX HOA
[09:06:39] -> 0 URLs
[09:06:49] SEARCH: Houston TX homeowners association
[09:06:50] -> 0 URLs
[09:07:03] SEARCH: Houston TX HOA management
[09:07:04] -> 0 URLs
[09:07:04] Done: 0 new, 0 total, 25.0s
[09:07:34] CYCLE 84: Miami FL
[09:07:34] SEARCH: Miami FL HOA
[09:07:34] -> 0 URLs
[09:07:49] SEARCH: Miami FL homeowners association
[09:07:49] -> 0 URLs
[09:07:57] SEARCH: Miami FL HOA management
[09:07:57] -> 0 URLs
[09:07:57] Done: 0 new, 0 total, 23.5s
[09:08:28] CYCLE 85: Charlotte NC
[09:08:28] SEARCH: Charlotte NC HOA
[09:08:28] -> 0 URLs
[09:08:40] SEARCH: Charlotte NC homeowners association
[09:08:41] -> 0 URLs
[09:08:52] SEARCH: Charlotte NC HOA management
[09:08:52] -> 0 URLs
[09:08:52] Done: 0 new, 0 total, 25.0s
[09:09:23] CYCLE 86: Atlanta GA
[09:09:23] SEARCH: Atlanta GA HOA
[09:09:23] -> 0 URLs
[09:09:31] SEARCH: Atlanta GA homeowners association
[09:09:31] -> 0 URLs
[09:09:43] SEARCH: Atlanta GA HOA management
[09:09:44] -> 0 URLs
[09:09:44] Done: 0 new, 0 total, 21.0s
[09:10:14] CYCLE 87: Orlando FL
[09:10:14] SEARCH: Orlando FL HOA
[09:10:14] -> 0 URLs
[09:10:23] SEARCH: Orlando FL homeowners association
[09:10:24] -> 0 URLs
[09:10:36] SEARCH: Orlando FL HOA management
[09:10:37] -> 0 URLs
[09:10:37] Done: 0 new, 0 total, 22.8s
[09:11:07] CYCLE 88: Phoenix AZ
[09:11:07] SEARCH: Phoenix AZ HOA
[09:11:07] -> 0 URLs
[09:11:18] SEARCH: Phoenix AZ homeowners association
[09:11:19] -> 0 URLs
[09:11:29] SEARCH: Phoenix AZ HOA management
[09:11:29] -> 0 URLs
[09:11:29] Done: 0 new, 0 total, 22.6s
[09:11:59] CYCLE 89: Austin TX
[09:11:59] SEARCH: Austin TX HOA
[09:12:00] -> 0 URLs
[09:12:13] SEARCH: Austin TX homeowners association
[09:12:14] -> 0 URLs
[09:12:23] SEARCH: Austin TX HOA management
[09:12:24] -> 0 URLs
[09:12:24] Done: 0 new, 0 total, 24.6s
[09:12:54] CYCLE 90: Denver CO
[09:12:54] SEARCH: Denver CO HOA
[09:12:55] -> 0 URLs
[09:13:09] SEARCH: Denver CO homeowners association
[09:13:10] -> 0 URLs
[09:13:23] SEARCH: Denver CO HOA management
[09:13:23] -> 0 URLs
[09:13:23] Done: 0 new, 0 total, 29.3s
[09:13:54] CYCLE 91: Nashville TN
[09:13:54] SEARCH: Nashville TN HOA
[09:13:54] -> 0 URLs
[09:14:08] SEARCH: Nashville TN homeowners association
[09:14:09] -> 0 URLs
[09:14:17] SEARCH: Nashville TN HOA management
[09:14:18] -> 0 URLs
[09:14:18] Done: 0 new, 0 total, 24.0s
[09:14:48] CYCLE 92: Raleigh NC
[09:14:48] SEARCH: Raleigh NC HOA
[09:14:48] -> 0 URLs
[09:14:58] SEARCH: Raleigh NC homeowners association
[09:14:59] -> 0 URLs
[09:15:08] SEARCH: Raleigh NC HOA management
[09:15:09] -> 0 URLs
[09:15:09] Done: 0 new, 0 total, 21.0s
[09:15:39] CYCLE 93: Tampa FL
[09:15:39] SEARCH: Tampa FL HOA
[09:15:39] -> 0 URLs
[09:15:51] SEARCH: Tampa FL homeowners association
[09:15:52] -> 0 URLs
[09:16:05] SEARCH: Tampa FL HOA management
[09:16:06] -> 0 URLs
[09:16:06] Done: 0 new, 0 total, 27.2s
[09:16:36] CYCLE 94: Dallas TX
[09:16:36] SEARCH: Dallas TX HOA
[09:16:37] -> 0 URLs
[09:16:44] SEARCH: Dallas TX homeowners association
[09:16:45] -> 0 URLs
[09:16:58] SEARCH: Dallas TX HOA management
[09:16:58] -> 0 URLs
[09:16:58] Done: 0 new, 0 total, 22.1s
[09:17:28] CYCLE 95: Houston TX
[09:17:28] SEARCH: Houston TX HOA
[09:17:29] -> 0 URLs
[09:17:40] SEARCH: Houston TX homeowners association
[09:17:41] -> 0 URLs
[09:17:54] SEARCH: Houston TX HOA management
[09:17:55] -> 0 URLs
[09:17:55] Done: 0 new, 0 total, 26.3s
[09:18:25] CYCLE 96: Miami FL
[09:18:25] SEARCH: Miami FL HOA
[09:18:25] -> 0 URLs
[09:18:38] SEARCH: Miami FL homeowners association
[09:18:38] -> 0 URLs
[09:18:48] SEARCH: Miami FL HOA management
[09:18:49] -> 0 URLs
[09:18:49] Done: 0 new, 0 total, 24.0s
[09:19:19] CYCLE 97: Charlotte NC
[09:19:19] SEARCH: Charlotte NC HOA
[09:19:19] -> 0 URLs
[09:19:29] SEARCH: Charlotte NC homeowners association
[09:19:29] -> 0 URLs
[09:19:41] SEARCH: Charlotte NC HOA management
[09:19:42] -> 0 URLs
[09:19:42] Done: 0 new, 0 total, 23.1s
[09:20:12] CYCLE 98: Atlanta GA
[09:20:12] SEARCH: Atlanta GA HOA
[09:20:12] -> 0 URLs
[09:20:23] SEARCH: Atlanta GA homeowners association
[09:20:23] -> 0 URLs
[09:20:33] SEARCH: Atlanta GA HOA management
[09:20:33] -> 0 URLs
[09:20:33] Done: 0 new, 0 total, 21.2s
[09:21:03] CYCLE 99: Orlando FL
[09:21:03] SEARCH: Orlando FL HOA
[09:21:04] -> 0 URLs
[09:21:14] SEARCH: Orlando FL homeowners association
[09:21:14] -> 0 URLs
[09:21:22] SEARCH: Orlando FL HOA management
[09:21:23] -> 0 URLs
[09:21:23] Done: 0 new, 0 total, 19.7s
[09:21:53] CYCLE 100: Phoenix AZ
[09:21:53] SEARCH: Phoenix AZ HOA
[09:21:53] -> 0 URLs
[09:22:05] SEARCH: Phoenix AZ homeowners association
[09:22:05] -> 0 URLs
[09:22:20] SEARCH: Phoenix AZ HOA management
[09:22:20] -> 0 URLs
[09:22:20] Done: 0 new, 0 total, 27.1s
[09:22:50] CYCLE 101: Austin TX
[09:22:50] SEARCH: Austin TX HOA
[09:22:51] -> 0 URLs
[09:23:04] SEARCH: Austin TX homeowners association
[09:23:05] -> 0 URLs
[09:23:16] SEARCH: Austin TX HOA management
[09:23:17] -> 0 URLs
[09:23:17] Done: 0 new, 0 total, 26.3s
[09:23:47] CYCLE 102: Denver CO
[09:23:47] SEARCH: Denver CO HOA
[09:23:47] -> 0 URLs
[09:24:01] SEARCH: Denver CO homeowners association
[09:24:02] -> 0 URLs
[09:24:15] SEARCH: Denver CO HOA management
[09:24:16] -> 0 URLs
[09:24:16] Done: 0 new, 0 total, 28.9s
[09:24:46] CYCLE 103: Nashville TN
[09:24:46] SEARCH: Nashville TN HOA
[09:24:46] -> 0 URLs

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,296 @@
[2026-03-14 09:14:01] === Prospector v4 Started ===
[2026-03-14 09:14:01] === CYCLE 1: Charlotte NC ===
[2026-03-14 09:14:01] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:14:04] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:14:05] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:14:06] Found 0 URLs to check
[2026-03-14 09:14:06] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:14:06] Sleeping 120s...
[2026-03-14 09:16:07] === CYCLE 2: Atlanta GA ===
[2026-03-14 09:16:07] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:16:08] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:16:09] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:16:10] Found 0 URLs to check
[2026-03-14 09:16:10] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:16:10] Sleeping 120s...
[2026-03-14 09:16:17] === Prospector v4 Started ===
[2026-03-14 09:16:17] === CYCLE 1: Atlanta GA ===
[2026-03-14 09:16:17] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:16:18] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:16:19] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:16:20] Found 0 URLs to check
[2026-03-14 09:16:20] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:16:20] Sleeping 120s...
[2026-03-14 09:18:10] === CYCLE 3: Orlando FL ===
[2026-03-14 09:18:10] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:18:11] SEARCH: Orlando FL homeowners association
[2026-03-14 09:18:12] SEARCH: Orlando FL HOA management company
[2026-03-14 09:18:14] Found 0 URLs to check
[2026-03-14 09:18:14] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:18:14] Sleeping 120s...
[2026-03-14 09:20:14] === CYCLE 4: Phoenix AZ ===
[2026-03-14 09:20:14] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 09:20:15] SEARCH: Phoenix AZ homeowners association
[2026-03-14 09:20:16] SEARCH: Phoenix AZ HOA management company
[2026-03-14 09:20:17] Found 0 URLs to check
[2026-03-14 09:20:17] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:20:17] Sleeping 120s...
[2026-03-14 09:22:17] === CYCLE 5: Charlotte NC ===
[2026-03-14 09:22:17] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:22:19] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:22:20] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:22:21] Found 0 URLs to check
[2026-03-14 09:22:21] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:22:21] Sleeping 120s...
[2026-03-14 09:24:21] === CYCLE 6: Atlanta GA ===
[2026-03-14 09:24:21] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:24:22] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:24:23] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:24:24] Found 0 URLs to check
[2026-03-14 09:24:24] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:24:24] Sleeping 120s...
[2026-03-14 09:26:25] === CYCLE 7: Orlando FL ===
[2026-03-14 09:26:25] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:26:26] SEARCH: Orlando FL homeowners association
[2026-03-14 09:26:27] SEARCH: Orlando FL HOA management company
[2026-03-14 09:26:28] Found 0 URLs to check
[2026-03-14 09:26:28] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:26:28] Sleeping 120s...
[2026-03-14 09:28:28] === CYCLE 8: Phoenix AZ ===
[2026-03-14 09:28:28] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 09:28:30] SEARCH: Phoenix AZ homeowners association
[2026-03-14 09:28:31] SEARCH: Phoenix AZ HOA management company
[2026-03-14 09:28:32] Found 0 URLs to check
[2026-03-14 09:28:32] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:28:32] Sleeping 120s...
[2026-03-14 09:30:32] === CYCLE 9: Charlotte NC ===
[2026-03-14 09:30:32] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:30:33] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:30:34] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:30:35] Found 0 URLs to check
[2026-03-14 09:30:35] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:30:35] Sleeping 120s...
[2026-03-14 09:32:36] === CYCLE 10: Atlanta GA ===
[2026-03-14 09:32:36] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:32:37] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:32:38] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:32:39] Found 0 URLs to check
[2026-03-14 09:32:39] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:32:39] Sleeping 120s...
[2026-03-14 09:34:39] === CYCLE 11: Orlando FL ===
[2026-03-14 09:34:39] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:34:40] SEARCH: Orlando FL homeowners association
[2026-03-14 09:34:42] SEARCH: Orlando FL HOA management company
[2026-03-14 09:34:43] Found 0 URLs to check
[2026-03-14 09:34:43] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:34:43] Sleeping 120s...
[2026-03-14 09:36:43] === CYCLE 12: Phoenix AZ ===
[2026-03-14 09:36:43] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 09:36:44] SEARCH: Phoenix AZ homeowners association
[2026-03-14 09:36:45] SEARCH: Phoenix AZ HOA management company
[2026-03-14 09:36:46] Found 0 URLs to check
[2026-03-14 09:36:46] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:36:46] Sleeping 120s...
[2026-03-14 09:38:46] === CYCLE 13: Charlotte NC ===
[2026-03-14 09:38:46] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:38:48] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:38:49] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:38:50] Found 0 URLs to check
[2026-03-14 09:38:50] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:38:50] Sleeping 120s...
[2026-03-14 09:40:50] === CYCLE 14: Atlanta GA ===
[2026-03-14 09:40:50] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:40:51] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:40:52] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:40:53] Found 0 URLs to check
[2026-03-14 09:40:53] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:40:53] Sleeping 120s...
[2026-03-14 09:42:54] === CYCLE 15: Orlando FL ===
[2026-03-14 09:42:54] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:42:55] SEARCH: Orlando FL homeowners association
[2026-03-14 09:42:56] SEARCH: Orlando FL HOA management company
[2026-03-14 09:42:57] Found 0 URLs to check
[2026-03-14 09:42:57] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:42:57] Sleeping 120s...
[2026-03-14 09:44:57] === CYCLE 16: Phoenix AZ ===
[2026-03-14 09:44:57] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 09:44:58] SEARCH: Phoenix AZ homeowners association
[2026-03-14 09:45:00] SEARCH: Phoenix AZ HOA management company
[2026-03-14 09:45:01] Found 0 URLs to check
[2026-03-14 09:45:01] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:45:01] Sleeping 120s...
[2026-03-14 09:47:01] === CYCLE 17: Charlotte NC ===
[2026-03-14 09:47:01] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:47:02] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:47:03] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:47:04] Found 0 URLs to check
[2026-03-14 09:47:04] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:47:04] Sleeping 120s...
[2026-03-14 09:49:04] === CYCLE 18: Atlanta GA ===
[2026-03-14 09:49:04] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:49:06] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:49:07] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:49:08] Found 0 URLs to check
[2026-03-14 09:49:08] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:49:08] Sleeping 120s...
[2026-03-14 09:51:08] === CYCLE 19: Orlando FL ===
[2026-03-14 09:51:08] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:51:09] SEARCH: Orlando FL homeowners association
[2026-03-14 09:51:10] SEARCH: Orlando FL HOA management company
[2026-03-14 09:51:11] Found 0 URLs to check
[2026-03-14 09:51:11] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:51:11] Sleeping 120s...
[2026-03-14 09:53:12] === CYCLE 20: Phoenix AZ ===
[2026-03-14 09:53:12] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 09:53:13] SEARCH: Phoenix AZ homeowners association
[2026-03-14 09:53:14] SEARCH: Phoenix AZ HOA management company
[2026-03-14 09:53:15] Found 0 URLs to check
[2026-03-14 09:53:15] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:53:15] Sleeping 120s...
[2026-03-14 09:55:15] === CYCLE 21: Charlotte NC ===
[2026-03-14 09:55:15] SEARCH: Charlotte NC HOA contact email
[2026-03-14 09:55:16] SEARCH: Charlotte NC homeowners association
[2026-03-14 09:55:18] SEARCH: Charlotte NC HOA management company
[2026-03-14 09:55:19] Found 0 URLs to check
[2026-03-14 09:55:19] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:55:19] Sleeping 120s...
[2026-03-14 09:57:19] === CYCLE 22: Atlanta GA ===
[2026-03-14 09:57:19] SEARCH: Atlanta GA HOA contact email
[2026-03-14 09:57:20] SEARCH: Atlanta GA homeowners association
[2026-03-14 09:57:21] SEARCH: Atlanta GA HOA management company
[2026-03-14 09:57:22] Found 0 URLs to check
[2026-03-14 09:57:22] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:57:22] Sleeping 120s...
[2026-03-14 09:59:22] === CYCLE 23: Orlando FL ===
[2026-03-14 09:59:22] SEARCH: Orlando FL HOA contact email
[2026-03-14 09:59:24] SEARCH: Orlando FL homeowners association
[2026-03-14 09:59:25] SEARCH: Orlando FL HOA management company
[2026-03-14 09:59:26] Found 0 URLs to check
[2026-03-14 09:59:26] Cycle complete: 0 new leads, total: 0
[2026-03-14 09:59:26] Sleeping 120s...
[2026-03-14 10:01:26] === CYCLE 24: Phoenix AZ ===
[2026-03-14 10:01:26] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 10:01:29] SEARCH: Phoenix AZ homeowners association
[2026-03-14 10:01:30] SEARCH: Phoenix AZ HOA management company
[2026-03-14 10:01:31] Found 0 URLs to check
[2026-03-14 10:01:31] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:01:31] Sleeping 120s...
[2026-03-14 10:03:32] === CYCLE 25: Charlotte NC ===
[2026-03-14 10:03:32] SEARCH: Charlotte NC HOA contact email
[2026-03-14 10:03:33] SEARCH: Charlotte NC homeowners association
[2026-03-14 10:03:34] SEARCH: Charlotte NC HOA management company
[2026-03-14 10:03:35] Found 0 URLs to check
[2026-03-14 10:03:35] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:03:35] Sleeping 120s...
[2026-03-14 10:05:35] === CYCLE 26: Atlanta GA ===
[2026-03-14 10:05:35] SEARCH: Atlanta GA HOA contact email
[2026-03-14 10:05:36] SEARCH: Atlanta GA homeowners association
[2026-03-14 10:05:37] SEARCH: Atlanta GA HOA management company
[2026-03-14 10:05:39] Found 0 URLs to check
[2026-03-14 10:05:39] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:05:39] Sleeping 120s...
[2026-03-14 10:07:39] === CYCLE 27: Orlando FL ===
[2026-03-14 10:07:39] SEARCH: Orlando FL HOA contact email
[2026-03-14 10:07:40] SEARCH: Orlando FL homeowners association
[2026-03-14 10:07:41] SEARCH: Orlando FL HOA management company
[2026-03-14 10:07:42] Found 0 URLs to check
[2026-03-14 10:07:42] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:07:42] Sleeping 120s...
[2026-03-14 10:09:42] === CYCLE 28: Phoenix AZ ===
[2026-03-14 10:09:42] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 10:09:43] SEARCH: Phoenix AZ homeowners association
[2026-03-14 10:09:45] SEARCH: Phoenix AZ HOA management company
[2026-03-14 10:09:46] Found 0 URLs to check
[2026-03-14 10:09:46] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:09:46] Sleeping 120s...
[2026-03-14 10:11:46] === CYCLE 29: Charlotte NC ===
[2026-03-14 10:11:46] SEARCH: Charlotte NC HOA contact email
[2026-03-14 10:11:48] SEARCH: Charlotte NC homeowners association
[2026-03-14 10:11:49] SEARCH: Charlotte NC HOA management company
[2026-03-14 10:11:50] Found 0 URLs to check
[2026-03-14 10:11:50] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:11:50] Sleeping 120s...
[2026-03-14 10:13:50] === CYCLE 30: Atlanta GA ===
[2026-03-14 10:13:50] SEARCH: Atlanta GA HOA contact email
[2026-03-14 10:13:51] SEARCH: Atlanta GA homeowners association
[2026-03-14 10:13:52] SEARCH: Atlanta GA HOA management company
[2026-03-14 10:13:54] Found 0 URLs to check
[2026-03-14 10:13:54] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:13:54] Sleeping 120s...
[2026-03-14 10:15:54] === CYCLE 31: Orlando FL ===
[2026-03-14 10:15:54] SEARCH: Orlando FL HOA contact email
[2026-03-14 10:15:57] SEARCH: Orlando FL homeowners association
[2026-03-14 10:15:58] SEARCH: Orlando FL HOA management company
[2026-03-14 10:15:59] Found 0 URLs to check
[2026-03-14 10:15:59] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:15:59] Sleeping 120s...
[2026-03-14 10:17:59] === CYCLE 32: Phoenix AZ ===
[2026-03-14 10:17:59] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 10:18:02] SEARCH: Phoenix AZ homeowners association
[2026-03-14 10:18:03] SEARCH: Phoenix AZ HOA management company
[2026-03-14 10:18:04] Found 0 URLs to check
[2026-03-14 10:18:04] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:18:04] Sleeping 120s...
[2026-03-14 10:20:04] === CYCLE 33: Charlotte NC ===
[2026-03-14 10:20:04] SEARCH: Charlotte NC HOA contact email
[2026-03-14 10:20:06] SEARCH: Charlotte NC homeowners association
[2026-03-14 10:20:07] SEARCH: Charlotte NC HOA management company
[2026-03-14 10:20:08] Found 0 URLs to check
[2026-03-14 10:20:08] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:20:08] Sleeping 120s...
[2026-03-14 10:22:08] === CYCLE 34: Atlanta GA ===
[2026-03-14 10:22:08] SEARCH: Atlanta GA HOA contact email
[2026-03-14 10:22:10] SEARCH: Atlanta GA homeowners association
[2026-03-14 10:22:11] SEARCH: Atlanta GA HOA management company
[2026-03-14 10:22:12] Found 0 URLs to check
[2026-03-14 10:22:12] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:22:12] Sleeping 120s...
[2026-03-14 10:24:12] === CYCLE 35: Orlando FL ===
[2026-03-14 10:24:12] SEARCH: Orlando FL HOA contact email
[2026-03-14 10:24:14] SEARCH: Orlando FL homeowners association
[2026-03-14 10:24:15] SEARCH: Orlando FL HOA management company
[2026-03-14 10:24:16] Found 0 URLs to check
[2026-03-14 10:24:16] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:24:16] Sleeping 120s...
[2026-03-14 10:26:16] === CYCLE 36: Phoenix AZ ===
[2026-03-14 10:26:16] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 10:26:18] SEARCH: Phoenix AZ homeowners association
[2026-03-14 10:26:19] SEARCH: Phoenix AZ HOA management company
[2026-03-14 10:26:20] Found 0 URLs to check
[2026-03-14 10:26:20] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:26:20] Sleeping 120s...
[2026-03-14 10:28:20] === CYCLE 37: Charlotte NC ===
[2026-03-14 10:28:20] SEARCH: Charlotte NC HOA contact email
[2026-03-14 10:28:22] SEARCH: Charlotte NC homeowners association
[2026-03-14 10:28:23] SEARCH: Charlotte NC HOA management company
[2026-03-14 10:28:24] Found 0 URLs to check
[2026-03-14 10:28:24] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:28:24] Sleeping 120s...
[2026-03-14 10:30:24] === CYCLE 38: Atlanta GA ===
[2026-03-14 10:30:24] SEARCH: Atlanta GA HOA contact email
[2026-03-14 10:30:25] SEARCH: Atlanta GA homeowners association
[2026-03-14 10:30:26] SEARCH: Atlanta GA HOA management company
[2026-03-14 10:30:28] Found 0 URLs to check
[2026-03-14 10:30:28] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:30:28] Sleeping 120s...
[2026-03-14 10:32:28] === CYCLE 39: Orlando FL ===
[2026-03-14 10:32:28] SEARCH: Orlando FL HOA contact email
[2026-03-14 10:32:29] SEARCH: Orlando FL homeowners association
[2026-03-14 10:32:30] SEARCH: Orlando FL HOA management company
[2026-03-14 10:32:31] Found 0 URLs to check
[2026-03-14 10:32:31] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:32:31] Sleeping 120s...
[2026-03-14 10:34:32] === CYCLE 40: Phoenix AZ ===
[2026-03-14 10:34:32] SEARCH: Phoenix AZ HOA contact email
[2026-03-14 10:34:33] SEARCH: Phoenix AZ homeowners association
[2026-03-14 10:34:34] SEARCH: Phoenix AZ HOA management company
[2026-03-14 10:34:35] Found 0 URLs to check
[2026-03-14 10:34:35] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:34:35] Sleeping 120s...
[2026-03-14 10:36:35] === CYCLE 41: Charlotte NC ===
[2026-03-14 10:36:35] SEARCH: Charlotte NC HOA contact email
[2026-03-14 10:36:37] SEARCH: Charlotte NC homeowners association
[2026-03-14 10:36:38] SEARCH: Charlotte NC HOA management company
[2026-03-14 10:36:39] Found 0 URLs to check
[2026-03-14 10:36:39] Cycle complete: 0 new leads, total: 0
[2026-03-14 10:36:39] Sleeping 120s...

View File

@@ -0,0 +1 @@
zsh:1: command not found: timeout

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,215 @@
[14:31:20] === Prospector v6 Started ===
[14:31:20] CYCLE 1: Charlotte NC
[14:31:20] SEARCH: Charlotte NC HOA contact email
[14:31:21] -> 10 URLs
[14:31:21] FETCH: https://communityassociationmanagement.com/charlot...
[14:31:22] FETCH: https://community.charlottenc.gov/pages/nocl...
[14:31:23] SEARCH: Charlotte NC homeowners association
[14:31:24] -> 10 URLs
[14:31:24] FETCH: https://amshoa.com/...
[14:31:24] SEARCH: Charlotte NC HOA management
[14:31:25] -> 10 URLs
[14:31:25] FETCH: https://microhoa.com/locations/north-carolina/char...
[14:31:27] SEARCH: Charlotte NC HOA phone
[14:31:28] -> 10 URLs
[14:31:28] Done: 0 leads, 0 total, 7.4s
[14:31:58] CYCLE 2: Atlanta GA
[14:31:58] SEARCH: Atlanta GA HOA contact email
[14:31:59] -> 10 URLs
[14:31:59] FETCH: https://hoa-usa.com/georgia-hoa-management-compani...
[14:32:00] SEARCH: Atlanta GA homeowners association
[14:32:01] -> 10 URLs
[14:32:01] FETCH: https://www.atlantacommunityservices.com...
[14:32:02] SEARCH: Atlanta GA HOA management
[14:32:03] -> 10 URLs
[14:32:03] FETCH: https://www.hoamanagement.com/city/atlanta/...
[14:32:03] FETCH: https://www.hoaservicesinc.com/...
[14:32:04] SEARCH: Atlanta GA HOA phone
[14:32:05] -> 10 URLs
[14:32:05] Done: 0 leads, 0 total, 7.1s
[14:32:35] CYCLE 3: Orlando FL
[14:32:35] SEARCH: Orlando FL HOA contact email
[14:32:36] -> 10 URLs
[14:32:36] FETCH: https://beaconcommunitymanagement.com/...
[14:32:37] FETCH: https://mail.florida-hoa.com/fhhoa_list.php?master...
[14:32:37] SEARCH: Orlando FL homeowners association
[14:32:39] -> 10 URLs
[14:32:39] FETCH: https://southbayhoa.org/...
[14:32:39] SEARCH: Orlando FL HOA management
[14:32:40] -> 10 URLs
[14:32:40] FETCH: https://empirehoa.com/...
[14:32:42] SAVED: empirehoa.com
[14:32:43] CRM: empirehoa.com
[14:32:43] LEAD 1: Empirehoa HOA (WARM, 1 emails)
[14:32:43] SEARCH: Orlando FL HOA phone
[14:32:44] -> 10 URLs
[14:32:44] Done: 1 leads, 1 total, 8.8s
[14:32:44] CYCLE 4: Phoenix AZ
[14:32:44] SEARCH: Phoenix AZ HOA contact email
[14:32:45] -> 10 URLs
[14:32:45] SEARCH: Phoenix AZ homeowners association
[14:32:46] -> 10 URLs
[14:32:47] SEARCH: Phoenix AZ HOA management
[14:32:48] -> 10 URLs
[14:32:48] SEARCH: Phoenix AZ HOA phone
[14:32:49] -> 10 URLs
[14:32:49] FETCH: https://myazhoa.com/?page_id=25...
[14:32:50] Done: 0 leads, 1 total, 6.1s
[14:33:20] CYCLE 5: Austin TX
[14:33:20] SEARCH: Austin TX HOA contact email
[14:33:21] -> 10 URLs
[14:33:21] FETCH: https://www.somersetassociations.com/...
[14:33:22] FETCH: https://lifetimehoamanagement.com/austin-hoa-manag...
[14:33:23] SEARCH: Austin TX homeowners association
[14:33:24] -> 10 URLs
[14:33:24] FETCH: https://www.onioncreekhoa.org...
[14:33:25] SAVED: onioncreekhoa.org
[14:33:25] CRM: onioncreekhoa.org
[14:33:25] LEAD 2: Onioncreekhoa HOA (WARM, 1 emails)
[14:33:25] SEARCH: Austin TX HOA management
[14:33:26] -> 10 URLs
[14:33:26] SEARCH: Austin TX HOA phone
[14:33:28] -> 10 URLs
[14:33:28] Done: 1 leads, 2 total, 7.4s
[14:33:28] CYCLE 6: Denver CO
[14:33:28] SEARCH: Denver CO HOA contact email
[14:33:29] -> 10 URLs
[14:33:29] FETCH: https://www.advancehoa.com/contact-us/...
[14:33:29] SAVED: advancehoa.com
[14:33:29] CRM: advancehoa.com
[14:33:29] LEAD 3: Advancehoa HOA (WARM, 1 emails)
[14:33:29] SEARCH: Denver CO homeowners association
[14:33:30] -> 10 URLs
[14:33:30] FETCH: https://cmshoamanagement.com/...
[14:33:31] SEARCH: Denver CO HOA management
[14:33:32] -> 10 URLs
[14:33:32] FETCH: https://3pmhoa.com/...
[14:33:32] SEARCH: Denver CO HOA phone
[14:33:33] -> 10 URLs
[14:33:33] Done: 1 leads, 3 total, 5.8s
[14:33:33] CYCLE 7: Nashville TN
[14:33:34] SEARCH: Nashville TN HOA contact email
[14:33:35] -> 10 URLs
[14:33:35] FETCH: https://www.amphoa.com/contact...
[14:33:35] FETCH: https://nashvillehoamanagement.com/contact-us-2/...
[14:33:35] SEARCH: Nashville TN homeowners association
[14:33:37] -> 10 URLs
[14:33:37] SEARCH: Nashville TN HOA management
[14:33:38] -> 10 URLs
[14:33:38] SEARCH: Nashville TN HOA phone
[14:33:39] -> 10 URLs
[14:33:39] Done: 0 leads, 3 total, 5.9s
[14:34:09] CYCLE 8: Raleigh NC
[14:34:09] SEARCH: Raleigh NC HOA contact email
[14:34:10] -> 10 URLs
[14:34:10] FETCH: https://www.wakehoa.com/...
[14:34:11] SEARCH: Raleigh NC homeowners association
[14:34:12] -> 10 URLs
[14:34:12] SEARCH: Raleigh NC HOA management
[14:34:13] -> 10 URLs
[14:34:13] SEARCH: Raleigh NC HOA phone
[14:34:14] -> 10 URLs
[14:34:14] Done: 0 leads, 3 total, 5.1s
[14:34:45] CYCLE 9: Tampa FL
[14:34:45] SEARCH: Tampa FL HOA contact email
[14:34:45] -> 10 URLs
[14:34:45] FETCH: https://www.tampahoa.management/...
[14:35:15] FETCH: https://www.myoakcreekcommunity.net/hoa...
[14:35:16] SAVED: myoakcreekcommunity.net
[14:35:16] CRM: myoakcreekcommunity.net
[14:35:16] LEAD 4: Myoakcreekcommunity HOA (HOT, 4 emails)
[14:35:16] SEARCH: Tampa FL homeowners association
[14:35:17] -> 10 URLs
[14:35:17] SEARCH: Tampa FL HOA management
[14:35:18] -> 10 URLs
[14:35:19] SEARCH: Tampa FL HOA phone
[14:35:20] -> 10 URLs
[14:35:20] Done: 1 leads, 4 total, 35.3s
[14:35:20] CYCLE 10: Dallas TX
[14:35:20] SEARCH: Dallas TX HOA contact email
[14:35:21] -> 10 URLs
[14:35:21] SEARCH: Dallas TX homeowners association
[14:35:22] -> 10 URLs
[14:35:22] FETCH: https://neighborhoodmanagement.com/...
[14:35:23] SEARCH: Dallas TX HOA management
[14:35:24] -> 10 URLs
[14:35:24] FETCH: https://www.properhoamanage.com/...
[14:35:26] SEARCH: Dallas TX HOA phone
[14:35:27] -> 10 URLs
[14:35:27] Done: 0 leads, 4 total, 7.6s
[14:35:58] CYCLE 11: Houston TX
[14:35:58] SEARCH: Houston TX HOA contact email
[14:35:59] -> 10 URLs
[14:35:59] FETCH: https://houstonhoa.net/contact/...
[14:35:59] SAVED: houstonhoa.net
[14:35:59] CRM: houstonhoa.net
[14:35:59] LEAD 5: Houstonhoa HOA (WARM, 1 emails)
[14:35:59] SEARCH: Houston TX homeowners association
[14:36:00] -> 10 URLs
[14:36:00] SEARCH: Houston TX HOA management
[14:36:01] -> 10 URLs
[14:36:02] SEARCH: Houston TX HOA phone
[14:36:03] -> 10 URLs
[14:36:03] Done: 1 leads, 5 total, 5.4s
[14:36:03] CYCLE 12: Miami FL
[14:36:03] SEARCH: Miami FL HOA contact email
[14:36:04] -> 10 URLs
[14:36:04] FETCH: https://www.condoblackbook.com/blog/miami-condo-as...
[14:36:05] FETCH: https://www.marquishoa.com/...
[14:36:05] SEARCH: Miami FL homeowners association
[14:36:06] -> 10 URLs
[14:36:06] SEARCH: Miami FL HOA management
[14:36:07] -> 10 URLs
[14:36:07] SEARCH: Miami FL HOA phone
[14:36:08] -> 10 URLs
[14:36:08] Done: 0 leads, 5 total, 5.5s
[14:36:39] CYCLE 13: Charlotte NC
[14:36:39] SEARCH: Charlotte NC HOA contact email
[14:36:39] -> 10 URLs
[14:36:40] SEARCH: Charlotte NC homeowners association
[14:36:41] -> 10 URLs
[14:36:41] SEARCH: Charlotte NC HOA management
[14:36:42] -> 10 URLs
[14:36:43] SEARCH: Charlotte NC HOA phone
[14:36:43] -> 10 URLs
[14:36:43] Done: 0 leads, 5 total, 4.7s
[14:37:13] CYCLE 14: Atlanta GA
[14:37:13] SEARCH: Atlanta GA HOA contact email
[14:37:14] -> 10 URLs
[14:37:15] SEARCH: Atlanta GA homeowners association
[14:37:15] -> 10 URLs
[14:37:16] SEARCH: Atlanta GA HOA management
[14:37:17] -> 10 URLs
[14:37:17] SEARCH: Atlanta GA HOA phone
[14:37:18] -> 10 URLs
[14:37:18] Done: 0 leads, 5 total, 4.6s
[14:37:48] CYCLE 15: Orlando FL
[14:37:48] SEARCH: Orlando FL HOA contact email
[14:37:49] -> 10 URLs
[14:37:49] SEARCH: Orlando FL homeowners association
[14:37:50] -> 10 URLs
[14:37:51] SEARCH: Orlando FL HOA management
[14:37:52] -> 10 URLs
[14:37:52] SEARCH: Orlando FL HOA phone
[14:37:53] -> 10 URLs
[14:37:53] Done: 0 leads, 5 total, 4.7s
[14:38:23] CYCLE 16: Phoenix AZ
[14:38:23] SEARCH: Phoenix AZ HOA contact email
[14:38:24] -> 10 URLs
[14:38:24] SEARCH: Phoenix AZ homeowners association
[14:38:25] -> 10 URLs
[14:38:26] SEARCH: Phoenix AZ HOA management
[14:38:26] -> 10 URLs
[14:38:27] SEARCH: Phoenix AZ HOA phone
[14:38:28] -> 10 URLs
[14:38:28] Done: 0 leads, 5 total, 4.7s
[14:38:58] CYCLE 17: Austin TX
[14:38:58] SEARCH: Austin TX HOA contact email
[14:38:59] -> 10 URLs
[14:38:59] SEARCH: Austin TX homeowners association
[14:39:00] -> 10 URLs
[14:39:00] SEARCH: Austin TX HOA management
[14:39:01] -> 10 URLs
[14:39:02] SEARCH: Austin TX HOA phone
[14:39:02] -> 10 URLs
[14:39:03] Done: 0 leads, 5 total, 4.7s

View File

@@ -0,0 +1,17 @@
[14:39:09] === Prospector v7 Started ===
[14:39:09] CYCLE 1: Charlotte NC
[14:39:09] SEARCH: Charlotte NC HOA contact email
[14:39:09] -> 8 URLs
[14:39:11] SEARCH: Charlotte NC homeowners association
[14:39:11] -> 8 URLs
[14:39:12] SEARCH: Charlotte NC HOA management
[14:39:13] -> 8 URLs
[14:39:15] Done: 0 leads, 0 total, 6.0s
[14:39:35] CYCLE 2: Atlanta GA
[14:39:35] SEARCH: Atlanta GA HOA contact email
[14:39:35] -> 8 URLs
[14:39:36] SEARCH: Atlanta GA homeowners association
[14:39:37] -> 8 URLs
[14:39:38] SEARCH: Atlanta GA HOA management
[14:39:39] -> 8 URLs
[14:39:39] Done: 0 leads, 0 total, 4.7s

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,92 @@
[21:00:53] === Prospector v9 ===
[21:00:53] CYCLE 1: Charlotte NC
[21:00:53] SEARCH: Charlotte NC HOA
[21:00:53] -> 429 (try #1), backoff 2.0min
[21:04:53] SEARCH: Charlotte NC homeowners association
[21:04:53] -> 429 (try #2), backoff 4.0min
[21:04:53] Done: 0 new, 0 total, 240.6s
[21:05:23] CYCLE 2: Atlanta GA (backoff)
[21:12:23] SEARCH: Atlanta GA HOA
[21:12:23] -> 429 (try #3), backoff 8.0min
[21:12:23] Done: 0 new, 0 total, 420.0s
[21:12:54] CYCLE 3: Orlando FL (backoff)
[21:27:53] SEARCH: Orlando FL HOA
[21:27:54] -> 429 (try #4), backoff 15.0min
[21:27:54] Done: 0 new, 0 total, 899.9s
[21:28:24] CYCLE 4: Phoenix AZ (backoff)
[21:57:23] SEARCH: Phoenix AZ HOA
[21:57:24] -> 429 (try #5), backoff 15.0min
[21:57:24] Done: 0 new, 0 total, 1740.1s
[21:57:54] CYCLE 5: Austin TX (backoff)
[22:26:53] SEARCH: Austin TX HOA
[22:26:54] -> 429 (try #6), backoff 15.0min
[22:26:54] Done: 0 new, 0 total, 1740.1s
[22:27:24] CYCLE 6: Denver CO (backoff)
[22:56:24] SEARCH: Denver CO HOA
[22:56:24] -> 429 (try #7), backoff 15.0min
[22:56:24] Done: 0 new, 0 total, 1740.0s
[22:56:54] CYCLE 7: Nashville TN (backoff)
[23:25:54] SEARCH: Nashville TN HOA
[23:25:54] -> 429 (try #8), backoff 15.0min
[23:25:54] Done: 0 new, 0 total, 1740.1s
[23:26:24] CYCLE 8: Raleigh NC (backoff)
[23:55:24] SEARCH: Raleigh NC HOA
[23:55:24] -> 429 (try #9), backoff 15.0min
[23:55:24] Done: 0 new, 0 total, 1739.9s
[23:55:54] CYCLE 9: Tampa FL (backoff)
[00:24:54] SEARCH: Tampa FL HOA
[00:24:54] -> 429 (try #10), backoff 15.0min
[00:24:54] Done: 0 new, 0 total, 1739.9s
[00:25:24] CYCLE 10: Dallas TX (backoff)
[00:54:24] SEARCH: Dallas TX HOA
[00:54:24] -> 429 (try #11), backoff 15.0min
[00:54:24] Done: 0 new, 0 total, 1739.9s
[00:54:55] CYCLE 11: Houston TX (backoff)
[01:23:54] SEARCH: Houston TX HOA
[01:23:54] -> 429 (try #12), backoff 15.0min
[01:23:54] Done: 0 new, 0 total, 1739.9s
[01:24:25] CYCLE 12: Miami FL (backoff)
[01:53:24] SEARCH: Miami FL HOA
[01:53:24] -> 429 (try #13), backoff 15.0min
[01:53:24] Done: 0 new, 0 total, 1739.8s
[01:53:55] CYCLE 13: Seattle WA (backoff)
[02:22:54] SEARCH: Seattle WA HOA
[02:22:55] -> 429 (try #14), backoff 15.0min
[02:22:55] Done: 0 new, 0 total, 1740.0s
[02:23:25] CYCLE 14: Portland OR (backoff)
[02:52:24] SEARCH: Portland OR HOA
[02:52:25] -> 429 (try #15), backoff 15.0min
[02:52:25] Done: 0 new, 0 total, 1740.1s
[02:52:55] CYCLE 15: Las Vegas NV (backoff)
[03:21:54] SEARCH: Las Vegas NV HOA
[03:21:55] -> 429 (try #16), backoff 15.0min
[03:21:55] Done: 0 new, 0 total, 1740.0s
[03:22:25] CYCLE 16: Charlotte NC (backoff)
[03:51:25] SEARCH: Charlotte NC HOA
[03:51:25] -> 429 (try #17), backoff 15.0min
[03:51:25] Done: 0 new, 0 total, 1740.0s
[03:51:55] CYCLE 17: Atlanta GA (backoff)
[04:20:55] SEARCH: Atlanta GA HOA
[04:20:55] -> 429 (try #18), backoff 15.0min
[04:20:55] Done: 0 new, 0 total, 1740.0s
[04:21:25] CYCLE 18: Orlando FL (backoff)
[04:50:25] SEARCH: Orlando FL HOA
[04:50:25] -> 429 (try #19), backoff 15.0min
[04:50:25] Done: 0 new, 0 total, 1740.3s
[04:50:56] CYCLE 19: Phoenix AZ (backoff)
[05:19:55] SEARCH: Phoenix AZ HOA
[05:19:55] -> 429 (try #20), backoff 15.0min
[05:19:55] Done: 0 new, 0 total, 1739.8s
[05:20:26] CYCLE 20: Austin TX (backoff)
[05:49:25] SEARCH: Austin TX HOA
[05:49:26] -> 429 (try #21), backoff 15.0min
[05:49:26] Done: 0 new, 0 total, 1740.1s
[05:49:56] CYCLE 21: Denver CO (backoff)
[06:18:55] SEARCH: Denver CO HOA
[06:18:56] -> 429 (try #22), backoff 15.0min
[06:18:56] Done: 0 new, 0 total, 1740.0s
[06:19:26] CYCLE 22: Nashville TN (backoff)
[06:48:25] SEARCH: Nashville TN HOA
[06:48:26] -> 429 (try #23), backoff 15.0min
[06:48:26] Done: 0 new, 0 total, 1739.9s
[06:48:56] CYCLE 23: Raleigh NC (backoff)

View File

@@ -0,0 +1,44 @@
#!/bin/bash
# Sales Prospector Monitor
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="$SCRIPT_DIR/logs/monitor-$(date +%Y%m%d).log"
STATE_FILE="$SCRIPT_DIR/state/prospector-state.json"
echo "=== Sales Prospector Monitor ($(date)) ==="
echo ""
# Check if running
if [[ -f "$SCRIPT_DIR/run.pid" ]]; then
PID=$(cat "$SCRIPT_DIR/run.pid")
if ps -p "$PID" > /dev/null 2>&1; then
echo "✅ RUNNING - PID: $PID"
ps -p "$PID" -o pid,etime,args | tail -1
else
echo "❌ NOT RUNNING (PID file exists but process dead)"
fi
else
echo "❌ NOT RUNNING (No PID file)"
fi
echo ""
echo "=== Recent Activity ==="
tail -10 "$SCRIPT_DIR/logs/prospector-$(date +%Y%m%d).log" 2>/dev/null || echo "No log"
echo ""
echo "=== State ==="
if [[ -f "$STATE_FILE" ]]; then
jq '{currentMetroIndex, leadsFound: (.leadsFound // 0)}' "$STATE_FILE" 2>/dev/null || cat "$STATE_FILE"
else
echo "No state file"
fi
echo ""
echo "=== CRM Leads Today ==="
TWENTY_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
curl -s "https://salesforce.hoaledgeriq.com/rest/notes" \
-H "Authorization: Bearer $TWENTY_TOKEN" 2>/dev/null | \
jq '[.data.notes[] | select(.title | contains("🎯"))] | length' 2>/dev/null || echo "0"
echo ""
echo "=== Complete ==="

View File

@@ -0,0 +1,57 @@
#!/bin/bash
# Sales Prospector - HOA Lead Generation (STABLE VERSION)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STATE_DIR="${SCRIPT_DIR}/state"
LOG_DIR="${SCRIPT_DIR}/logs"
mkdir -p "$STATE_DIR" "$LOG_DIR"
LOG_FILE="${LOG_DIR}/prospector-$(date +%Y%m%d).log"
STATE_FILE="${STATE_DIR}/prospector-state.json"
METROS=("Charlotte NC" "Atlanta GA" "Orlando FL" "Phoenix AZ")
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Ensure state exists
if [[ ! -f "$STATE_FILE" ]]; then
echo '{"currentMetroIndex":0}' > "$STATE_FILE"
fi
log "=== Sales Prospector Started ==="
log "Throttle: 10min business hours / 5min overnight"
cycle=0
while true; do
cycle=$((cycle + 1))
# Get current metro
idx=$(jq -r '.currentMetroIndex // 0' "$STATE_FILE")
metro="${METROS[$idx]}"
log "CYCLE $cycle: $metro"
# Search queries
log "Searching: $metro HOA board"
# Calculate throttle
h=$(date +%H)
if [[ $h -ge 9 && $h -lt 18 ]]; then
delay=600 # 10 minutes
else
delay=300 # 5 minutes
fi
log "Sleeping ${delay}s (throttle)..."
sleep $delay
# Next metro
next=$(( (idx + 1) % 4 ))
jq --arg n "$next" '.currentMetroIndex = ($n | tonumber)' "$STATE_FILE" > "${STATE_FILE}.tmp" && mv "${STATE_FILE}.tmp" "$STATE_FILE"
log "Cycle complete"
done
trap 'log "Shutdown"; exit 0' INT TERM

View File

@@ -0,0 +1,190 @@
#!/usr/bin/env python3
"""Sales Prospector v10 - Google scraper with heavy throttling"""
import json, re, time, random, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
SCRIPT_DIR = Path(__file__).parent
STATE_DIR, LOG_DIR, LEADS_DIR = SCRIPT_DIR / "state", SCRIPT_DIR / "logs", SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]: d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v10-state.json"
LOG_FILE = LOG_DIR / f"prospector-v10-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX",
"Denver CO", "Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX",
"Houston TX", "Miami FL"]
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_REQ, BLOCKED_UNTIL = 0, 0
USER_AGENTS = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"]
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f: f.write(line + '\n')
def throttle():
"""8-15s between requests + random jitter"""
global LAST_REQ
base = random.uniform(8, 15)
if LAST_REQ > 0:
elapsed = time.time() - LAST_REQ
if elapsed < base: time.sleep(base - elapsed)
LAST_REQ = time.time()
def load_state():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['crm'] = set(s.get('crm', []))
return s
return {"metro_idx": 0, "crm": set(), "leads": 0, "cycle": 0}
def save_state(s):
tmp = s.copy()
tmp['crm'] = list(s['crm'])
STATE_FILE.write_text(json.dumps(tmp, indent=2))
def search_google(query):
global BLOCKED_UNTIL
if time.time() < BLOCKED_UNTIL:
log(f" -> In block, skipping")
return []
throttle()
log(f"SEARCH: {query}")
try:
url = f"https://www.google.com/search?q={urllib.parse.quote(query)}&num=10"
req = urllib.request.Request(url, headers={
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html"
})
with urllib.request.urlopen(req, timeout=15) as r:
html = r.read().decode('utf-8', errors='ignore')
# Detect block
if any(x in html.lower() for x in ['captcha', 'blocked', 'unusual']):
BLOCKED_UNTIL = time.time() + 3600
log(f" -> BLOCKED by Google, pausing 1hr")
return []
# Extract URLs
urls = []
for m in re.findall(r'href="/url\?q=(https?://[^&"]+)', html):
if 'google.com' not in m and 'youtube.com' not in m:
urls.append(urllib.parse.unquote(m))
log(f" -> {len(urls)} URLs")
return urls[:8]
except urllib.error.HTTPError as e:
if e.code in [429, 503]:
BLOCKED_UNTIL = time.time() + 1800
log(f" -> Rate limited ({e.code}), backoff 30min")
return []
except Exception as e:
log(f" -> Error: {str(e)[:40]}")
return []
def fetch_page(url):
throttle()
try:
req = urllib.request.Request(url, headers={"User-Agent": random.choice(USER_AGENTS)})
with urllib.request.urlopen(req, timeout=10) as r:
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.I)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.I)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:2000]
except:
return ""
def get_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except:
return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'mgmt', 'management']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog', 'news']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def get_emails(t):
if not t: return []
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
bad = ['example.com', 'test.com', 'noreply@']
return list(set([e.lower() for e in ems if len(e) > 8 and '@' in e and not any(b in e for b in bad)]))[:3]
def push_crm(lead):
try:
note = {"title": f"{lead['q']}: {lead['d']}", "bodyV2": {"markdown":
f"## {lead['q']} Lead\n\n**HOA:** {lead['n']}\n**Metro:** {lead['m']}\n**Site:** {lead['u']}\n**Emails:** {', '.join(lead['e']) or 'None'}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['d']}")
return True
except:
return False
def main():
global BLOCKED_UNTIL
log("=== Prospector v10 Started ===")
s = load_state()
queries = ["{m} HOA", "{m} homeowners association", "{m} HOA management"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
status = "(blocked)" if time.time() < BLOCKED_UNTIL else ""
log(f"CYCLE {s['cycle']}: {metro} {status}")
if time.time() < BLOCKED_UNTIL:
time.sleep(60)
continue
start, found = time.time(), 0
for qtmpl in queries:
if s['leads'] >= 50: break
urls = search_google(qtmpl.format(m=metro))
for url in urls[:5]:
if s['leads'] >= 50: break
dom = get_domain(url)
if not dom or dom in s['crm'] or not is_hoa(dom): continue
text = fetch_page(url)
emails = get_emails(text)
lead = {'n': dom.split('.')[0].replace('-', ' ').title() + " HOA",
'm': metro, 'u': url, 'd': dom, 'e': emails,
'q': "HOT" if len(emails) >= 2 else "WARM" if emails else "COLD"}
if push_crm(lead):
s['crm'].add(dom)
s['leads'] += 1
found += 1
log(f"LEAD {s['leads']}: {lead['n']} ({lead['q']})")
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
log(f"Done: {found} new, {s['leads']} total, {time.time()-start:.1f}s")
if s['leads'] >= 50:
log("TARGET: 50 leads!")
break
if found == 0: time.sleep(30)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,189 @@
#!/usr/bin/env python3
"""Sales Prospector v11 - Bing scraper (more reliable than Google)"""
import json, re, time, random, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
SCRIPT_DIR = Path(__file__).parent
STATE_DIR, LOG_DIR, LEADS_DIR = SCRIPT_DIR / "state", SCRIPT_DIR / "logs", SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]: d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v11-state.json"
LOG_FILE = LOG_DIR / f"prospector-v11-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX",
"Denver CO", "Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX",
"Houston TX", "Miami FL"]
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_REQ, BLOCKED_UNTIL = 0, 0
USER_AGENTS = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"]
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f: f.write(line + '\n')
def throttle():
global LAST_REQ
delay = random.uniform(5, 10) # 5-10s between requests
if LAST_REQ > 0:
elapsed = time.time() - LAST_REQ
if elapsed < delay: time.sleep(delay - elapsed)
LAST_REQ = time.time()
def load_state():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['crm'] = set(s.get('crm', []))
return s
return {"metro_idx": 0, "crm": set(), "leads": 0, "cycle": 0}
def save_state(s):
tmp = s.copy()
tmp['crm'] = list(s['crm'])
STATE_FILE.write_text(json.dumps(tmp, indent=2))
def search_bing(query):
global BLOCKED_UNTIL
if time.time() < BLOCKED_UNTIL:
return []
throttle()
log(f"SEARCH: {query}")
try:
# Bing search URL
url = f"https://www.bing.com/search?q={urllib.parse.quote(query)}&format=rss"
req = urllib.request.Request(url, headers={
"User-Agent": random.choice(USER_AGENTS),
"Accept": "text/html,application/rss+xml",
"Accept-Language": "en-US,en;q=0.9"
})
with urllib.request.urlopen(req, timeout=15) as r:
html = r.read().decode('utf-8', errors='ignore')
if any(x in html.lower() for x in ['captcha', 'blocked', 'unusual']):
BLOCKED_UNTIL = time.time() + 1800
log(f" -> BLOCKED, pausing 30min")
return []
# Extract result URLs
urls = []
# Pattern for organic results
for m in re.findall(r'<li class="b_algo"[^>]*>.*?<a href="([^"]+)"', html, re.DOTALL):
if m.startswith('http') and 'bing.com' not in m:
urls.append(m)
# Backup pattern
if not urls:
for m in re.findall(r'href="(https?://[^"]+)"', html):
if 'bing.com' not in m and 'microsoft.com' not in m:
urls.append(m)
log(f" -> {len(urls)} URLs")
return urls[:10]
except urllib.error.HTTPError as e:
if e.code in [429, 503]:
BLOCKED_UNTIL = time.time() + 900
log(f" -> Rate limited ({e.code}), backoff 15min")
return []
except Exception as e:
log(f" -> Error: {str(e)[:40]}")
return []
def fetch_page(url):
throttle()
try:
req = urllib.request.Request(url, headers={"User-Agent": random.choice(USER_AGENTS)})
with urllib.request.urlopen(req, timeout=10) as r:
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.I)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.I)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:2000]
except:
return ""
def get_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except:
return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'estates', 'mgmt', 'management']
bad = ['bing.com', 'microsoft.com', 'facebook.com', 'yelp.com', 'bbb.org']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def get_emails(t):
if not t: return []
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
bad = ['example.com', 'test.com', 'noreply@']
return list(set([e.lower() for e in ems if len(e) > 8 and '@' in e and not any(b in e for b in bad)]))[:3]
def push_crm(lead):
try:
note = {"title": f"{lead['q']}: {lead['d']}", "bodyV2": {"markdown":
f"## {lead['q']} Lead\n\n**HOA:** {lead['n']}\n**Metro:** {lead['m']}\n**Site:** {lead['u']}\n**Emails:** {', '.join(lead['e']) or 'None'}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['d']}")
return True
except:
return False
def main():
global BLOCKED_UNTIL
log("=== Prospector v11 Started (Bing scraper) ===")
s = load_state()
queries = ["{m} HOA", "{m} homeowners association", "{m} HOA management"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
status = "(blocked)" if time.time() < BLOCKED_UNTIL else ""
log(f"CYCLE {s['cycle']}: {metro} {status}")
if time.time() < BLOCKED_UNTIL:
time.sleep(60)
continue
start, found = time.time(), 0
for qtmpl in queries:
if s['leads'] >= 50: break
urls = search_bing(qtmpl.format(m=metro))
for url in urls[:6]:
if s['leads'] >= 50: break
dom = get_domain(url)
if not dom or dom in s['crm'] or not is_hoa(dom): continue
text = fetch_page(url)
emails = get_emails(text)
lead = {'n': dom.split('.')[0].replace('-', ' ').title() + " HOA",
'm': metro, 'u': url, 'd': dom, 'e': emails,
'q': "HOT" if len(emails) >= 2 else "WARM" if emails else "COLD"}
if push_crm(lead):
s['crm'].add(dom)
s['leads'] += 1
found += 1
log(f"LEAD {s['leads']}: {lead['n']} ({lead['q']})")
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
log(f"Done: {found} new, {s['

View File

@@ -0,0 +1,144 @@
#!/usr/bin/env python3
"""Sales Prospector v12b - Aggressive SearXNG harvesting"""
import json, re, time, random, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
for d in [Path(__file__).parent / x for x in ["state", "logs", "leads"]]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = Path(__file__).parent / "state" / "prospector-v12-state.json"
LOG_FILE = Path(__file__).parent / "logs" / f"prospector-v12-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX",
"Denver CO", "Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX",
"Houston TX", "Miami FL", "Seattle WA", "Portland OR", "Las Vegas NV",
"San Antonio TX", "Indianapolis IN", "Columbus OH", "Kansas City MO",
"Salt Lake City UT", "San Diego CA", "Sacramento CA", "San Jose CA",
"New Orleans LA", "Oklahoma City OK"]
SEARXNG = "https://search.sensetostyle.com"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_REQ = 0
def log(m):
ts = datetime.now().strftime('%H:%M:%S')
print(f"[{ts}] {m}")
with open(LOG_FILE, 'a') as f: f.write(f"[{ts}] {m}\n")
def throttle():
global LAST_REQ
dly = random.uniform(2, 4)
if LAST_REQ > 0 and (time.time() - LAST_REQ) < dly:
time.sleep(dly - (time.time() - LAST_REQ))
LAST_REQ = time.time()
def load():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['crm'] = set(s.get('crm', []))
return s
return {"m": 0, "crm": set(), "leads": 0, "cycle": 0}
def save(s):
tmp = s.copy()
tmp['crm'] = list(s['crm'])
STATE_FILE.write_text(json.dumps(tmp, indent=2))
def search(q):
throttle()
try:
url = f"{SEARXNG}/search?q={urllib.parse.quote(q)}"
with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=15) as r:
html = r.read().decode('utf-8', errors='ignore')
urls = [m for m in re.findall(r'href="(https?://[^"]+)"', html)
if 'sensetostyle' not in m and 'archive.org' not in m]
return list(dict.fromkeys(urls))[:15]
except:
return []
def get_dom(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except: return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'mgmt', 'management', 'hood']
bad = ['sensetostyle', 'archive.org', 'google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def fetch(url):
throttle()
try:
with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=8) as r:
t = re.sub(r'<script.*?script>', '', r.read().decode('utf-8', errors='ignore'), flags=re.DOTALL|re.I)
t = re.sub(r'<style.*?style>', '', t, flags=re.DOTALL|re.I)
return re.sub(r'\s+', ' ', re.sub(r'<[^>]+>', ' ', t))[:1500]
except: return ""
def get_emails(t):
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
return list(set([e.lower() for e in ems if len(e) > 8 and '@' in e]))[:3] or []
def crm_push(lead):
try:
note = {"title": f"{lead['q']}: {lead['d']}",
"bodyV2": {"markdown": f"## {lead['q']} Lead\n\n**HOA:** {lead['n']}\n**Metro:** {lead['m']}\n**Site:** {lead['u']}\n**Emails:** {', '.join(lead['e']) or 'None'}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['d']}")
return True
except Exception as e:
log(f"FAIL: {e}")
return False
def main():
log("=== v12 RESTART ===")
s = load()
queries = ["{m} HOA", "{m} homeowners association", "{m} HOA management contact",
"{m} condo association", "{m} community management", "{m} HOA board"]
while True:
s['cycle'] += 1
metro = METROS[s['m'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro} | Leads: {s['leads']}")
new = 0
for qt in queries:
if s['leads'] >= 200: break
urls = search(qt.format(m=metro))
if urls: log(f" Got {len(urls)} URLs")
for url in urls[:5]:
if s['leads'] >= 200: break
dom = get_dom(url)
if not dom or dom in s['crm'] or not is_hoa(dom): continue
txt = fetch(url)
lead = {'n': dom.split('.')[0].replace('-', ' ').title()[:30] + " HOA",
'm': metro, 'u': url, 'd': dom,
'e': get_emails(txt),
'q': "HOT" if len(get_emails(txt)) >= 2 else "WARM" if get_emails(txt) else "COLD"}
if crm_push(lead):
s['crm'].add(dom)
s['leads'] += 1
new += 1
log(f"LEAD {s['leads']}: {lead['n']}")
s['m'] = (s['m'] + 1) % len(METROS)
save(s)
log(f"Done: {new} new | {s['leads']} total")
if s['leads'] >= 200: log("TARGET 200!"); break
if new == 0: time.sleep(10)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,208 @@
#!/usr/bin/env python3
"""Sales Prospector v14 - 50 metros + suburbs"""
import json, re, time, random, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
for d in [Path(__file__).parent / x for x in ["state", "logs", "leads"]]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = Path(__file__).parent / "state" / "prospector-v14-state.json"
LOG_FILE = Path(__file__).parent / "logs" / f"prospector-v14-{datetime.now().strftime('%Y%m%d')}.log"
# TOP 50 METROS + surrounding cities
METROS = [
# Top 20 major metros
("New York NY", ["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island", "Jersey City", "Newark"]),
("Los Angeles CA", ["Santa Monica", "Pasadena", "Burbank", "Glendale", "Long Beach", "Anaheim"]),
("Chicago IL", ["Evanston", "Oak Park", "Naperville", "Schaumburg", "Skokie"]),
("Houston TX", ["Sugar Land", "The Woodlands", "Katy", "Pearland", "Baytown"]),
("Phoenix AZ", ["Scottsdale", "Tempe", "Mesa", "Chandler", "Glendale"]),
("Philadelphia PA", ["Camden", "Chester", "Upper Darby"]),
("San Antonio TX", ["New Braunfels", "Schertz", "Cibolo"]),
("San Diego CA", ["Chula Vista", "Oceanside", "Escondido", "Carlsbad"]),
("Dallas TX", ["Fort Worth", "Arlington", "Plano", "Irving", "Frisco", "McKinney"]),
("San Jose CA", ["Sunnyvale", "Santa Clara", "Mountain View", "Palo Alto"]),
("Austin TX", ["Round Rock", "Cedar Park", "Georgetown", "Pflugerville"]),
("Jacksonville FL", ["Orange Park", "St. Augustine", "Ponte Vedra"]),
("Columbus OH", ["Dublin", "Westerville", "Gahanna", "Reynoldsburg"]),
("Charlotte NC", ["Matthews", "Mint Hill", "Huntersville", "Concord", "Gastonia"]),
("Indianapolis IN", ["Carmel", "Fishers", "Noblesville", "Greenwood"]),
("San Francisco CA", ["Oakland", "Berkeley", "Richmond", "Walnut Creek"]),
("Seattle WA", ["Bellevue", "Redmond", "Tacoma", "Kirkland", "Renton"]),
("Denver CO", ["Aurora", "Lakewood", "Thornton", "Westminster", "Boulder"]),
("Oklahoma City OK", ["Edmond", "Norman", "Moore", "Midwest City"]),
("Boston MA", ["Cambridge", "Somerville", "Brookline", "Newton"]),
# Next 30 metros
("Portland OR", ["Beaverton", "Gresham", "Hillsboro", "Lake Oswego"]),
("Las Vegas NV", ["Henderson", "North Las Vegas", "Summerlin"]),
("Nashville TN", ["Franklin", "Brentwood", "Hendersonville", "Murfreesboro"]),
("Detroit MI", ["Warren", "Sterling Heights", "Dearborn", "Livonia"]),
("Oklahoma City OK", ["Edmond", "Norman", "Moore"]),
("Memphis TN", ["Germantown", "Collierville", "Bartlett"]),
("Louisville KY", ["Jeffersonville", "New Albany", "Elizabethtown"]),
("Milwaukee WI", ["Waukesha", "West Allis", "Wauwatosa"]),
("Baltimore MD", ["Columbia", "Ellicott City", "Towson"]),
("Albuquerque NM", ["Rio Rancho", "Santa Fe", "Los Lunas"]),
("Tucson AZ", ["Marana", "Oro Valley", "Sahuarita"]),
("Mesa AZ", ["Gilbert", "Chandler", "Tempe"]),
("Fresno CA", ["Clovis", "Madera", "Sanger"]),
("Atlanta GA", ["Sandy Springs", "Roswell", "Johns Creek", "Alpharetta", "Marietta"]),
("Sacramento CA", ["Elk Grove", "Roseville", "Folsom", "Davis"]),
("Kansas City MO", ["Overland Park", "Olathe", "Independence", "Leawood"]),
("Colorado Springs CO", ["Fountain", "Monument", "Woodland Park"]),
("Raleigh NC", ["Cary", "Apex", "Holly Springs", "Wake Forest"]),
("Omaha NE", ["Bellevue", "Papillion", "La Vista"]),
("Miami FL", ["Miami Beach", "Coral Gables", "Hialeah", "Fort Lauderdale"]),
("Long Beach CA", ["Lakewood", "Signal Hill"]),
("Virginia Beach VA", ["Norfolk", "Chesapeake", "Newport News", "Hampton"]),
("Oakland CA", ["Berkeley", "Alameda", "San Leandro"]),
("Minneapolis MN", ["St. Paul", "Bloomington", "Plymouth", "Edina"]),
("Tulsa OK", ["Broken Arrow", "Bixby", "Jenks"]),
("Tampa FL", ["St. Petersburg", "Clearwater", "Brandon", "Lutz"]),
("Arlington TX", ["Grand Prairie", "Euless", "Bedford"]),
("Wichita KS", ["Overland Park", "Lenexa", "Shawnee"]),
("Bakersfield CA", ["Delano", "Oildale", "Rosedale"]),
("Aurora CO", ["Centennial", "Parker", "Englewood"]),
("Anaheim CA", ["Fullerton", "Orange", "Garden Grove", "Brea"]),
("Santa Ana CA", ["Irvine", "Costa Mesa", "Tustin", "Newport Beach"]),
("Corpus Christi TX", ["Portland", "Kingsville", "Alice"]),
("Riverside CA", ["Moreno Valley", "Corona", "Jurupa Valley", "Norco"]),
("Lexington KY", ["Georgetown", "Richmond", "Winchester"]),
("Stockton CA", ["Lodi", "Tracy", "Manteca"])
]
SEARXNG = "https://search.sensetostyle.com"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_REQ = 0
def log(m):
ts = datetime.now().strftime('%H:%M:%S')
print(f"[{ts}] {m}")
with open(LOG_FILE, 'a') as f: f.write(f"[{ts}] {m}\n")
def throttle():
global LAST_REQ
dly = random.uniform(3, 6)
if LAST_REQ > 0 and (time.time() - LAST_REQ) < dly:
time.sleep(dly - (time.time() - LAST_REQ))
LAST_REQ = time.time()
def load():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['crm'] = set(s.get('crm', []))
return s
return {"m": 0, "crm": set(), "leads": 0, "cycle": 0}
def save(s):
tmp = s.copy()
tmp['crm'] = list(s['crm'])
STATE_FILE.write_text(json.dumps(tmp, indent=2))
def search(q):
throttle()
try:
url = f"{SEARXNG}/search?q={urllib.parse.quote(q)}"
with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=15) as r:
html = r.read().decode('utf-8', errors='ignore')
urls = [m for m in re.findall(r'href="(https?://[^"]+)"', html)
if 'sensetostyle' not in m and 'archive.org' not in m]
return list(dict.fromkeys(urls))[:12]
except: return []
def get_dom(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except: return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village',
'mgmt', 'management', 'properties', 'realty']
bad = ['sensetostyle', 'archive.org', 'google', 'facebook', 'yelp', 'bbb',
'wiki', 'reddit', 'linkedin', 'trulia', 'realtor', 'zillow']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def fetch(url):
throttle()
try:
with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=10) as r:
t = re.sub(r'<script.*?script>', '', r.read().decode('utf-8', errors='ignore'), flags=re.DOTALL|re.I)
t = re.sub(r'<style.*?style>', '', t, flags=re.DOTALL|re.I)
return re.sub(r'\s+', ' ', resub(r'<[^>]+>', ' ', t))[:2000]
except: return ""
def get_emails(t):
if not t: return []
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
return list(set([e.lower() for e in ems if len(e) > 8 and '@' in e]))[:3] or []
def crm_push(lead):
try:
note = {"title": f"{lead['q']}: {lead['d']}",
"bodyV2": {"markdown": f"## {lead['q']} Lead\n\n**HOA:** {lead['n']}\n**Metro:** {lead['m']}\n**City:** {lead['c']}\n**Site:** {lead['u']}\n**Emails:** {', '.join(lead['e']) or 'None'}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['d']}")
return True
except: return False
def main():
log("=== v14 STARTED - 50 Metros + Suburbs ===")
s = load()
queries = ["{loc} HOA", "{loc} homeowners association", "{loc} HOA management"]
while True:
s['cycle'] += 1
metro_pack = METROS[s['m'] % len(METROS)]
metro_name = metro_pack[0]
suburbs = metro_pack[1]
# Search metro + each suburb
search_locations = [metro_name] + [f"{sub} {metro_name.split()[-1]}" for sub in suburbs[:3]]
log(f"CYCLE {s['cycle']}: {metro_name} (+{len(suburbs)} suburbs) | Leads: {s['leads']}")
new = 0
for city in search_locations[:4]: # metro + 3 suburbs
if s['leads'] >= 750: break
for qt in queries:
if s['leads'] >= 750: break
urls = search(qt.format(loc=city))
if urls: log(f" | {city}: {len(urls)} URLs")
for url in urls[:4]:
if s['leads'] >= 750: break
dom = get_dom(url)
if not dom or dom in s['crm'] or not is_hoa(dom): continue
txt = fetch(url)
lead = {'n': dom.split('.')[0].replace('-', ' ').title()[:30],
'm': metro_name, 'c': city, 'u': url, 'd': dom,
'e': get_emails(txt),
'q': "HOT" if len(get_emails(txt)) >= 2 else "WARM" if get_emails(txt) else "COLD"}
if crm_push(lead):
s['crm'].add(dom)
s['leads'] += 1
new += 1
log(f"LEAD {s['leads']}: {lead['n']}")
s['m'] = (s['m'] + 1) % len(METROS)
save(s)
log(f"Done: {new} new | {s['leads']} total")
if s['leads'] >= 750: log("TARGET 750!"); break
if new == 0: time.sleep(20)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,40 @@
#!/usr/bin/env python3
"""Sales Prospector v15 - MAXIMUM suburb expansion"""
import json, re, time, random, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
for d in [Path(__file__).parent / x for x in ["state", "logs", "leads"]]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = Path(__file__).parent / "state" / "prospector-v15-state.json"
LOG_FILE = Path(__file__).parent / "logs" / f"prospector-v15-{datetime.now().strftime('%Y%m%d')}.log"
# 50 METROS with 8-15 SUBURBS EACH - MAXIMUM COVERAGE
METROS = [
# 1-10: Top tier
("New York NY", ["Manhattan", "Brooklyn", "Queens", "Bronx", "Staten Island", "Jersey City", "Newark", "Yonkers", "Stamford", "White Plains", "Greenwich", "Long Island", "Hoboken", "Bayonne", "Elizabeth"]),
("Los Angeles CA", ["Santa Monica", "Pasadena", "Burbank", "Glendale", "Long Beach", "Anaheim", "Irvine", "Newport Beach", "Santa Ana", "Torrance", "Beverly Hills", "West Hollywood", "Culver City", "Inglewood", "Compton"]),
("Chicago IL", ["Evanston", "Oak Park", "Naperville", "Schaumburg", "Skokie", "Des Plaines", "Arlington Heights", "Elmhurst", "Wheaton", "Aurora", "Joliet", "Elgin", "Barrington", "Wilmette", "Highland Park"]),
("Houston TX", ["Sugar Land", "The Woodlands", "Katy", "Pearland", "Baytown", "Spring", "Humble", "Kingwood", "Cypress", "Missouri City", "Pasadena", "League City", "Friendswood", "Clear Lake", "Conroe"]),
("Phoenix AZ", ["Scottsdale", "Tempe", "Mesa", "Chandler", "Glendale", "Peoria", "Surprise", "Goodyear", "Gilbert", "Queen Creek", "Avondale", "Buckeye", "Fountain Hills", "Paradise Valley", "Sun City"]),
("Philadelphia PA", ["Camden", "Chester", "Upper Darby", "Lower Merion", "Haverford", "Radnor", "Media", "West Chester", "King of Prussia", "Conshohocken", "Ambler", "Doylestown", "Newtown", "Bryn Mawr", "Ardmore"]),
("San Antonio TX", ["New Braunfels", "Schertz", "Cibolo", "Converse", "Universal City", "Live Oak", "Leon Valley", "Alamo Heights", "Terrell Hills", "Hollywood Park", "Stone Oak", "Boerne", "Kerrville", "Seguin", "Floresville"]),
("San Diego CA", ["Chula Vista", "Oceanside", "Escondido", "Carlsbad", "El Cajon", "Vista", "San Marcos", "Encinitas", "La Jolla", "Del Mar", "Solana Beach", "Rancho Santa Fe", "Poway", "Santee", "La Mesa"]),
("Dallas TX", ["Fort Worth", "Arlington", "Plano", "Irving", "Frisco", "McKinney", "Allen", "Richardson", "Garland", "Mesquite", "Carrollton", "Lewisville", "Flower Mound", "Southlake", "Grapevine", "Keller"]),
("San Jose CA", ["Sunnyvale", "Santa Clara", "Mountain View", "Palo Alto", "Cupertino", "Los Gatos", "Saratoga", "Campbell", "Milpitas", "Fremont", "Menlo Park", "Atherton", "Portola Valley", "Woodside", "East Palo Alto"]),
# 11-20
("Austin TX", ["Round Rock", "Cedar Park", "Georgetown", "Pflugerville", "Leander", "Lakeway", "Westlake", "Bee Cave", "Dripping Springs", "Buda", "Kyle", "San Marcos", "Bastrop", "Taylor", "Elgin"]),
("Jacksonville FL", ["Orange Park", "St. Augustine", "Ponte Vedra", "Fleming Island", "Green Cove Springs", "Middleburg", "Nocatee", "Atlantic Beach", "Neptune Beach", "Jacksonville Beach", "Yulee", "Fernandina Beach", "Amelia Island", "Callahan", "Macclenny"]),
("Columbus OH", ["Dublin", "Westerville", "Gahanna", "Reynoldsburg", "Upper Arlington", "Worthington", "New Albany", "Powell", "Hilliard", "Grove City", "Delaware", "Lewis Center", "Pickerington", "Canal Winchester", "Pataskala"]),
("Charlotte NC", ["Matthews", "Mint Hill", "Huntersville", "Concord", "Gastonia", "Fort Mill SC", "Rock Hill SC", "Mooresville", "Cornelius", "Davidson", "Lake Norman", "Waxhaw", "Weddington", "Pineville", "Ballantyne"]),
("Indianapolis IN", ["Carmel", "Fishers", "Noblesville", "Greenwood", "Zionsville", "Westfield", "Avon", "Plainfield", "Brownsburg", "Greenfield", "New Palestine", "McCordsville", "Lawrence", "Beech Grove", "Speedway"]),
("San Francisco CA", ["Oakland", "Berkeley", "Richmond", "Walnut Creek", "San Rafael", "Sausalito", "Mill Valley", "Larkspur", "Corte Madera", "Tiburon", "Belvedere", "Alameda", "Emeryville", "Albany", "El Cerrito"]),
("Seattle WA", ["Bellevue", "Redmond", "Tacoma", "Kirkland", "Renton", "Everett", "Federal Way", "Kent", "Auburn", "Bothell", "Woodinville", "Issaquah", "Sammamish", "Mercer Island", "Lake Forest Park"]),
("Denver CO", ["Aurora", "Lakewood", "Thornton", "Westminster", "Boulder", "Littleton", "Englewood", "Centennial", "Arvada", "Parker", "Castle Rock", "Highlands Ranch", "Greenwood Village", "Cherry Hills", "Ken Caryl"]),
("Oklahoma City OK", ["Edmond", "Norman", "Moore", "Midwest City", "Del City", "Yukon", "Mustang", "Bethany", "Warr Acres", "The Village", "Nichols Hills", "Newcastle", "Choctaw", "Harrah", "Luther"]),
("Boston MA", ["Cambridge", "Somerville", "Brookline", "Newton", "Waltham", "Watertown", "Arlington", "Lexington", "Concord", "Bedford", "Burlington", "Woburn", "Reading", "Wakefield", "Melrose"]),

View File

@@ -0,0 +1,241 @@
#!/usr/bin/env python3
"""
Sales Prospector v2 - Intelligent HOA Lead Generation
Searches for HOA websites, crawls for contact info, extracts board/mgmt contacts
"""
import json
import os
import re
import time
import subprocess
from datetime import datetime
from urllib.parse import urlparse, urljoin
from pathlib import Path
# Config
SCRIPT_DIR = Path(__file__).parent.absolute()
STATE_DIR = SCRIPT_DIR / "state"
LOG_DIR = SCRIPT_DIR / "logs"
LEADS_DIR = SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v2-state.json"
LOG_FILE = LOG_DIR / f"prospector-v2-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ"]
# Search config
SEARCHES_PER_METRO = [
'{metro} HOA "board of directors"',
'{metro} homeowners association contact',
'{metro} HOA management company',
'{metro} HOA board members',
'{metro} community association management',
]
# Keywords for validating HOA sites
HOA_KEYWORDS = ['hoa', 'homeowners', 'association', 'board', 'community', 'management', 'condo', 'townhome']
# CRM Config
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
def log(msg):
ts = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f:
f.write(line + '\n')
def load_state():
if STATE_FILE.exists():
with open(STATE_FILE) as f:
return json.load(f)
return {
"metro_index": 0,
"search_index": 0,
"processed_domains": [],
"leads_found": 0,
"domains_queue": [], # Domains found but not yet crawled
"current_domain": None,
"cycle_count": 0
}
def save_state(state):
with open(STATE_FILE, 'w') as f:
json.dump(state, f, indent=2)
def get_throttle_delay():
"""Returns delay in seconds based on business hours"""
hour = datetime.now().hour
if 9 <= hour < 18:
return 120 # 2 min business hours
return 60 # 1 min overnight
def extract_domain(url):
"""Extract clean domain from URL"""
try:
parsed = urlparse(url)
domain = parsed.netloc.lower()
if domain.startswith('www.'):
domain = domain[4:]
return domain
except:
return None
def is_hoa_domain(domain):
"""Check if domain looks like an HOA site"""
if not domain:
return False
domain_lower = domain.lower()
return any(kw in domain_lower for kw in HOA_KEYWORDS)
def search_web(query, count=10):
"""Run web search via openclaw web_search tool"""
log(f"SEARCH: {query}")
try:
# Use openclaw CLI for web search
result = subprocess.run(
['openclaw', 'web-search', query, '--count', str(count)],
capture_output=True,
text=True,
timeout=60
)
if result.returncode == 0 and result.stdout:
# Parse results - look for URLs
urls = []
for line in result.stdout.split('\n'):
if line.startswith('http'):
urls.append(line.strip())
# Also extract from markdown format
url_match = re.search(r'https?://[^\s\)\]\"\']+', line)
if url_match:
urls.append(url_match.group(0))
return list(set(urls))
except Exception as e:
log(f"Search error: {e}")
return []
def fetch_page(url, max_chars=3000):
"""Fetch page content via web_fetch"""
try:
result = subprocess.run(
['openclaw', 'web-fetch', url, '--max-chars', str(max_chars)],
capture_output=True,
text=True,
timeout=30
)
if result.returncode == 0:
return result.stdout
except Exception as e:
log(f"Fetch error for {url}: {e}")
return None
def extract_emails(text):
"""Extract email addresses from text"""
if not text:
return []
# Pattern for emails
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
# Filter out common false positives
filtered = [e for e in emails if not any(x in e.lower() for x in ['example.com', 'test.com', 'domain.com', 'email.com'])]
return list(set(filtered))
def extract_phones(text):
"""Extract phone numbers from text"""
if not text:
return []
# Various phone patterns
patterns = [
r'\(?\d{3}\)?[-.\s]\d{3}[-.\s]\d{4}', # (555) 123-4567
r'\d{3}[-.\s]\d{3}[-.\s]\d{4}', # 555-123-4567
r'\+?1[-.\s]?\(?\d{3}\)?[-.\s]\d{3}[-.\s]\d{4}', # +1 (555) 123-4567
]
phones = []
for pattern in patterns:
phones.extend(re.findall(pattern, text))
return list(set(phones))
def extract_names_and_titles(text):
"""Extract potential board member names with titles"""
if not text:
return []
# Look for patterns like "John Smith, President" or "Board Member: Jane Doe"
titles = ['president', 'vice president', 'vp', 'treasurer', 'secretary', 'board member',
'director', 'manager', 'community manager', 'property manager']
results = []
lines = text.split('\n')
for line in lines:
line_lower = line.lower()
for title in titles:
if title in line_lower:
# Extract name before/after title
# Simple: capture 2-3 capitalized words near the title
match = re.search(r'([A-Z][a-z]+\s[A-Z][a-z]+(?:\s[A-Z][a-z]+)?)', line)
if match:
name = match.group(1)
results.append({"name": name, "title": title.title()})
return results
def extract_hoa_info(domain, content):
"""Extract HOA name and details from content"""
info = {
"name": None,
"homes": None,
"location": None
}
if not content:
return info
# Try to find HOA name from title or first heading
lines = content.split('\n')
for line in lines[:20]:
if '#' in line: # Markdown header
clean = line.replace('#', '').strip()
if len(clean) > 3:
info['name'] = clean
break
# Look for home count patterns
home_patterns = [
r'(\d+)\s+(?:homes|units|properties|residences|households)',
r'(?:over|more than)\s+(\d+)\s+(?:homes|units)',
]
for pattern in home_patterns:
match = re.search(pattern, content, re.IGNORECASE)
if match:
info['homes'] = match.group(1)
break
return info
def assess_quality(emails, phones, names, info):
"""Assess lead quality based on available data"""
score = 0
if emails: score += 3
if phones: score += 2
if names: score += 2
if info.get('name'): score += 1
if info.get('homes'): score += 2
if score >= 7:
return "HOT"
elif score >= 4:
return "WARM"
return "COLD"
def push_to_crm(lead):
"""Push lead to Twenty CRM"""
try:
body = f"""## HOA Prospect - {lead['quality']}
**Name:** {lead.get('hoa_name

View File

@@ -0,0 +1,233 @@
#!/usr/bin/env python3
"""
Sales Prospector v3 - Working HOA Lead Generation
Actually searches, extracts, and pushes real leads to CRM
"""
import json
import os
import re
import time
import subprocess
from datetime import datetime
from pathlib import Path
# Config
SCRIPT_DIR = Path(__file__).parent.absolute()
STATE_DIR = SCRIPT_DIR / "state"
LOG_DIR = SCRIPT_DIR / "logs"
LEADS_DIR = SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v3-state.json"
LOG_FILE = LOG_DIR / f"prospector-v3-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ"]
# Extended search queries for better coverage
SEARCHES_PER_METRO = [
'{metro} HOA contact email',
'{metro} homeowners association website',
'{metro} HOA management contact',
'{metro} community association board',
'{metro} condo association contact',
]
# CRM Config
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzMzMjg0NDMsImV4cCI6MTgwNDc4MTY0MiwianRpIjoiMjBmMTJjOTAtNGQwNy00YmY2LWIzOTctNmM2ZTczOWYxOGM4In0.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
def log(msg):
ts = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f:
f.write(line + '\n')
def load_state():
if STATE_FILE.exists():
with open(STATE_FILE) as f:
return json.load(f)
return {
"metro_index": 0,
"processed_domains": [],
"leads_found": 0,
"cycle_count": 0
}
def save_state(state):
with open(STATE_FILE, 'w') as f:
json.dump(state, f, indent=2)
def extract_domain(url):
try:
from urllib.parse import urlparse
parsed = urlparse(url)
domain = parsed.netloc.lower()
if domain.startswith('www.'):
domain = domain[4:]
return domain
except:
return None
def is_hoa_domain(domain):
if not domain:
return False
domain_lower = domain.lower()
hoa_keywords = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'farms', 'estates']
return any(kw in domain_lower for kw in hoa_keywords)
def search_web(query, count=5):
log(f"SEARCH: {query}")
try:
result = subprocess.run(
['openclaw', 'web-search', query, '--count', str(count)],
capture_output=True, text=True, timeout=60
)
if result.returncode == 0 and result.stdout:
urls = []
for line in result.stdout.split('\n'):
if line.strip().startswith('http'):
urls.append(line.strip())
# Filter to HOA domains
seen = set()
unique = []
for url in urls:
dom = extract_domain(url)
if dom and dom not in seen and is_hoa_domain(dom):
seen.add(dom)
unique.append(url)
return unique
except Exception as e:
log(f"Search error: {e}")
return []
def fetch_page(url, max_chars=1500):
try:
result = subprocess.run(
['openclaw', 'web-fetch', url, '--max-chars', str(max_chars)],
capture_output=True, text=True, timeout=30
)
if result.returncode == 0:
return result.stdout
except Exception as e:
log(f"Fetch error: {e}")
return None
def extract_emails(text):
if not text:
return []
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b'
emails = re.findall(pattern, text)
bad = ['example', 'test', 'domain', 'email', 'noreply', 'no-reply', '@gmail.com', '@yahoo.com', '@hotmail.com']
filtered = [e.lower() for e in emails if not any(b in e.lower() for b in bad)]
return list(set(filtered))[:3]
def extract_phones(text):
if not text:
return []
pattern = r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}'
phones = re.findall(pattern, text)
return list(set(phones))[:2]
def extract_hoa_name(content, domain):
if not content:
return domain.replace('-', ' ').title()
# Look for title
match = re.search(r'#\s*(.+)', content)
if match:
return match.group(1).strip()
# Look for HOA name pattern
match = re.search(r'([A-Z][A-Za-z\s]+(?:HOA|Homeowners|Community|Association))', content)
if match:
return match.group(1).strip()
return domain.replace('-', ' ').title()
def assess_quality(emails, phones):
score = 0
if emails:
score += len(emails) * 3
if phones:
score += len(phones) * 2
if score >= 7:
return "HOT"
elif score >= 4:
return "WARM"
return "COLD"
def push_to_crm(lead):
try:
body = f"""## 🎯 HOA Prospect - {lead['quality']}
**HOA Name:** {lead.get('hoa_name', 'Unknown')}
**Metro:** {lead['metro']}
**Website:** {lead['url']}
**Domain:** {lead['domain']}
"""
if lead.get('emails'):
body += f"**Email(s):** {', '.join(lead['emails'])}\n"
if lead.get('phones'):
body += f"**Phone(s):** {', '.join(lead['phones'])}\n"
body += f"\n**Source:** Prospector v3\n**Found:** {datetime.now().strftime('%Y-%m-%d %H:%M')}"
esc_body = json.dumps(body)
note_data = f'{{"title":"🎯 {lead["quality"]}: {lead["hoa_name"]} | {lead["metro"]}","bodyV2":{{"markdown":{esc_body}}}}}'
curl_cmd = [
'curl', '-s', '-X', 'POST',
f'{TWENTY_BASE}/notes',
'-H', f'Authorization: Bearer {TWENTY_TOKEN}',
'-H', 'Content-Type: application/json',
'-d', note_data
]
result = subprocess.run(curl_cmd, capture_output=True, text=True, timeout=10)
if result.returncode == 0:
log(f"CRM PUSH: {lead['hoa_name']} ({lead['quality']})")
return True
else:
log(f"CRM FAIL: {result.stderr[:100]}")
except Exception as e:
log(f"CRM ERROR: {e}")
return False
def save_lead(lead):
lead_file = LEADS_DIR / f"{lead['domain']}.json"
with open(lead_file, 'w') as f:
json.dump(lead, f, indent=2)
def main():
log("=== Sales Prospector v3 Started ===")
state = load_state()
cycle = state['cycle_count']
while True:
cycle += 1
metro_idx = state['metro_index']
metro = METROS[metro_idx]
log(f"=== CYCLE {cycle}: {metro} ===")
# Search queries
queries = [q.format(metro=metro) for q in SEARCHES_PER_METRO]
for query_idx, query in enumerate(queries):
log(f"QUERY: {query}")
urls = search_web(query, count=3)
log(f"Found {len(urls)} potential HOA sites")
for url in urls:
domain = extract_domain(url)
if domain in state['processed_domains']:
log(f"SKIP: Already processed {domain}")
continue
log(f"FETCH: {url}")
content = fetch_page(url)
if not content:
state['processed_domains'].append(domain)
save_state(state)
continue
emails = extract_em

View File

@@ -0,0 +1,197 @@
#!/usr/bin/env python3
"""Sales Prospector v4 - Complete version that finds and saves leads"""
import json
import re
import subprocess
from datetime import datetime
from pathlib import Path
SCRIPT_DIR = Path(__file__).parent.absolute()
STATE_DIR = SCRIPT_DIR / "state"
LOG_DIR = SCRIPT_DIR / "logs"
LEADS_DIR = SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v4-state.json"
LOG_FILE = LOG_DIR / f"prospector-v4-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ"]
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzMzMjg0NDMsImV4cCI6MTgwNDc4MTY0MiwianRpIjoiMjBmMTJjOTAtNGQwNy00YmY2LWIzOTctNmM2ZTczOWYxOGM4In0.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
def log(msg):
ts = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f:
f.write(line + '\n')
def load_state():
if STATE_FILE.exists():
with open(STATE_FILE) as f:
return json.load(f)
return {"metro_index": 0, "processed_domains": [], "leads_found": 0}
def save_state(state):
with open(STATE_FILE, 'w') as f:
json.dump(state, f)
def search_web(query):
log(f"SEARCH: {query}")
try:
result = subprocess.run(['openclaw', 'web-search', query, '--count', '5'],
capture_output=True, text=True, timeout=60)
if result.returncode == 0:
urls = []
for line in result.stdout.split('\n'):
line = line.strip()
if line.startswith('http'):
urls.append(line.split()[0] if ' ' in line else line)
return urls[:5]
except Exception as e:
log(f"Search error: {e}")
return []
def fetch_page(url):
try:
result = subprocess.run(['openclaw', 'web-fetch', url, '--max-chars', '2000'],
capture_output=True, text=True, timeout=30)
if result.returncode == 0:
return result.stdout
except Exception as e:
log(f"Fetch error: {e}")
return ""
def extract_emails(text):
if not text:
return []
pattern = r'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}'
emails = re.findall(pattern, text)
bad = ['example.com', 'test.com', 'domain.com', 'email.com', 'noreply', '@gmail.com', '@yahoo.com', '@hotmail.com', '@aol.com']
filtered = [e.lower() for e in emails if len(e) > 10 and not any(b in e.lower() for b in bad)]
return list(set(filtered))[:3]
def extract_phones(text):
if not text:
return []
pattern = r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}'
phones = re.findall(pattern, text)
return list(set([re.sub(r'[^\d]', '', p) for p in phones]))[:2]
def extract_domain(url):
try:
from urllib.parse import urlparse
dom = urlparse(url).netloc.lower()
return dom[4:] if dom.startswith('www.') else dom
except:
return url.replace('https://', '').replace('http://', '').split('/')[0]
def assess_quality(emails, phones):
score = len(emails) * 3 + len(phones) * 2
return "HOT" if score >= 7 else "WARM" if score >= 4 else "COLD"
def push_to_crm(lead):
try:
body = f"## {lead['quality']} Lead: {lead['hoa_name']}\n\n**Metro:** {lead['metro']}\n**Website:** {lead['url']}\n**Domain:** {lead['domain']}\n"
if lead.get('emails'):
body += f"**Emails:** {', '.join(lead['emails'])}\n"
if lead.get('phones'):
body += f"**Phones:** {', '.join(lead['phones'])}\n"
body += f"\n_Found: {datetime.now().strftime('%Y-%m-%d %H:%M')}_"
note_data = {"title": f"{lead['quality']}: {lead['hoa_name']}", "body": body}
curl_cmd = ['curl', '-s', '-X', 'POST', f'{TWENTY_BASE}/notes',
'-H', f'Authorization: Bearer {TWENTY_TOKEN}',
'-H', 'Content-Type: application/json',
'-d', json.dumps(note_data)]
result = subprocess.run(curl_cmd, capture_output=True, text=True, timeout=10)
if result.returncode == 0:
log(f"CRM SUCCESS: {lead['hoa_name']}")
return True
except Exception as e:
log(f"CRM error: {e}")
return False
def save_lead(lead):
lead_file = LEADS_DIR / f"{lead['domain'].replace('/', '_')}.json"
with open(lead_file, 'w') as f:
json.dump(lead, f, indent=2)
log(f"SAVED: {lead_file.name}")
def main():
log("=== Prospector v4 Started ===")
state = load_state()
cycle = 0
while True:
cycle += 1
metro = METROS[state['metro_index']]
log(f"=== CYCLE {cycle}: {metro} ===")
queries = [
f'{metro} HOA contact email',
f'{metro} homeowners association',
f'{metro} HOA management company',
]
found_urls = []
for query in queries:
urls = search_web(query)
found_urls.extend(urls)
log(f"Found {len(found_urls)} URLs to check")
# Process each URL
new_leads = 0
for url in found_urls[:6]:
domain = extract_domain(url)
if domain in state['processed_domains'] or not domain:
continue
state['processed_domains'].append(domain)
log(f"FETCH: {url[:60]}...")
content = fetch_page(url)
if not content:
continue
emails = extract_emails(content)
phones = extract_phones(content)
if emails or phones:
hoa_name = domain.split('.')[0].replace('-', ' ').title() + " HOA"
lead = {
'hoa_name': hoa_name,
'metro': metro,
'url': url,
'domain': domain,
'emails': emails,
'phones': phones,
'quality': assess_quality(emails, phones),
'found_at': datetime.now().isoformat()
}
save_lead(lead)
push_to_crm(lead)
state['leads_found'] += 1
new_leads += 1
log(f"LEAD: {hoa_name} ({lead['quality']}) - {len(emails)} emails, {len(phones)} phones")
else:
log(f"No contacts on {domain}")
save_state(state)
log(f"Cycle complete: {new_leads} new leads, total: {state['leads_found']}")
# Next metro
state['metro_index'] = (state['metro_index'] + 1) % len(METROS)
# Throttle
hour = datetime.now().hour
delay = 120 if 9 <= hour < 18 else 60
log(f"Sleeping {delay}s...")
import time
time.sleep(delay)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,178 @@
#!/usr/bin/env python3
"""Sales Prospector v5 - Built-in urllib, finds HOA leads"""
import json
import re
import time
import urllib.request
import urllib.parse
import urllib.error
from datetime import datetime
from pathlib import Path
SCRIPT_DIR = Path(__file__).parent
STATE_DIR = SCRIPT_DIR / "state"
LOG_DIR = SCRIPT_DIR / "logs"
LEADS_DIR = SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v5-state.json"
LOG_FILE = LOG_DIR / f"prospector-v5-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX", "Denver CO",
"Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX", "Houston TX", "Miami FL"]
BRAVE_KEY = "BSACPtwjz5lrsXC10pwjFVqzFGN2gr4"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f:
f.write(line + '\n')
def load_state():
if STATE_FILE.exists():
return json.loads(STATE_FILE.read_text())
return {"metro_idx": 0, "domains": [], "leads": 0, "cycle": 0}
def save_state(s):
STATE_FILE.write_text(json.dumps(s, indent=2))
def search_brave(q, count=8):
log(f"SEARCH: {q}")
url = f"https://api.search.brave.com/res/v1/web/search?{urllib.parse.urlencode({'q': q, 'count': count})}"
req = urllib.request.Request(url, headers={"X-Subscription-Token": BRAVE_KEY, "Accept": "application/json"})
try:
with urllib.request.urlopen(req, timeout=30) as r:
data = json.loads(r.read().decode())
urls = [x.get('url') for x in data.get('web', {}).get('results', [])]
log(f" -> {len(urls)} URLs")
return urls
except Exception as e:
log(f" -> Error: {e}")
return []
def fetch(url):
log(f"FETCH: {url[:50]}...")
try:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=10) as r:
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script.*?</script>', '', html, flags=re.DOTALL)
text = re.sub(r'<style.*?</style>', '', text, flags=re.DOTALL)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:2500]
except Exception as e:
log(f" -> {e}")
return ""
def extract_domain(url):
try:
from urllib.parse import urlparse
d = urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except:
return None
def is_hoa(d):
if not d:
return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def extract_emails(t):
if not t:
return []
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
bad = ['example', 'test', 'noreply', 'info@', 'support@', 'admin@', '@gmail.com']
return list(set([e.lower() for e in ems if len(e) > 12 and not any(b in e for b in bad)]))[:3]
def extract_phones(t):
if not t:
return []
phones = re.findall(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', t)
return list(set([re.sub(r'[^\d]', '', p) for p in phones]))[:2]
def save_lead(lead):
f = LEADS_DIR / f"{lead['domain'].replace('/', '_')}.json"
f.write_text(json.dumps(lead, indent=2))
log(f"SAVED: {lead['domain']}")
def push_crm(lead):
try:
body = f"## {lead['quality']} Lead\n\n**HOA:** {lead['name']}\n**Metro:** {lead['metro']}\n**Site:** {lead['url']}\n**Emails:** {', '.join(lead['emails'])}\n**Phones:** {', '.join(lead['phones'])}"
note = json.dumps({"title": f"{lead['quality']}: {lead['domain']}", "bodyV2": {"markdown": body}})
data = note.encode('utf-8')
req = urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=data, method='POST')
with urllib.request.urlopen(req, timeout=10) as r:
log(f"CRM: {lead['domain']} ({r.status})")
return r.status in [200, 201]
except Exception as e:
log(f"CRM error: {e}")
return False
def main():
log("=== Prospector v5 Started ===")
s = load_state()
queries = ["{metro} HOA contact email", "{metro} homeowners association",
"{metro} HOA management", "{metro} community association board"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro}")
start = time.time()
found = 0
for tmpl in queries:
if s['leads'] >= 25:
break
q = tmpl.format(metro=metro)
urls = search_brave(q, 8)
for url in urls[:5]:
dom = extract_domain(url)
if not dom or not is_hoa(dom) or dom in s['domains']:
continue
s['domains'].append(dom)
content = fetch(url)
if not content:
continue
emails = extract_emails(content)
phones = extract_phones(content)
if emails or phones:
name = dom.split('.')[0].replace('-', ' ').title() + " HOA"
qual = "HOT" if len(emails) >= 2 else "WARM" if emails else "COLD"
lead = {'name': name, 'metro': metro, 'url': url, 'domain': dom,
'emails': emails, 'phones': phones, 'quality': qual,
'found': datetime.now().isoformat()}
save_lead(lead)
push_crm(lead)
s['leads'] += 1
found += 1
log(f"LEAD {s['leads']}: {name} ({qual}) - {len(emails)} emails")
if s['leads'] >= 25:
log(f"TARGET REACHED: {s['leads']} leads!")
break
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
elapsed = time.time() - start
log(f"Done: {found} leads, {s['leads']} total, {elapsed:.1f}s")
if found == 0:
time.sleep(20)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,189 @@
#!/usr/bin/env python3
"""Sales Prospector v6 - Rate limiting, contact pages"""
import json
import re
import time
import urllib.request
import urllib.parse
from datetime import datetime
from pathlib import Path
SCRIPT_DIR = Path(__file__).parent
STATE_DIR = SCRIPT_DIR / "state"
LOG_DIR = SCRIPT_DIR / "logs"
LEADS_DIR = SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]:
d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v6-state.json"
LOG_FILE = LOG_DIR / f"prospector-v6-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX", "Denver CO",
"Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX", "Houston TX", "Miami FL"]
BRAVE_KEY = "BSACPtwjz5lrsXC10pwjFVqzFGN2gr4"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_SEARCH = 0
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f:
f.write(line + '\n')
def rate_limited_sleep():
global LAST_SEARCH
elapsed = time.time() - LAST_SEARCH
if elapsed < 1.2:
time.sleep(1.2 - elapsed)
LAST_SEARCH = time.time()
def load_state():
if STATE_FILE.exists():
return json.loads(STATE_FILE.read_text())
return {"metro_idx": 0, "domains": [], "leads": 0, "cycle": 0}
def save_state(s):
STATE_FILE.write_text(json.dumps(s, indent=2))
def search_brave(query, count=10):
rate_limited_sleep()
log(f"SEARCH: {query[:50]}")
try:
url = f"https://api.search.brave.com/res/v1/web/search?q={urllib.parse.quote(query)}&count={count}"
req = urllib.request.Request(url, headers={"X-Subscription-Token": BRAVE_KEY, "Accept": "application/json"})
with urllib.request.urlopen(req, timeout=30) as r:
data = json.loads(r.read().decode())
urls = [x.get('url') for x in data.get('web', {}).get('results', []) if x.get('url')]
log(f" -> {len(urls)} URLs")
return urls
except urllib.error.HTTPError as e:
if e.code == 429:
log(f" -> RATE LIMITED, sleeping 60s")
time.sleep(60)
return []
except Exception as e:
log(f" -> Error: {e}")
return []
def fetch_page(url):
log(f"FETCH: {url[:50]}...")
try:
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
with urllib.request.urlopen(req, timeout=10) as r:
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<[^>]+>', ' ', text)
text = re.sub(r'\s+', ' ', text)
return text[:2500], html
except:
return "", ""
def extract_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except:
return None
def is_hoa(d):
if not d:
return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'estates', 'neighborhood']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog', 'news']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def extract_emails(text):
if not text:
return []
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b'
ems = re.findall(pattern, text)
bad = ['example', 'test', 'demo', 'noreply', 'no-reply', 'info@', 'support@', 'webmaster@',
'admin@', 'sales@', 'marketing@', 'contact@', '@gmail.com', '@yahoo.com', '@hotmail.com']
filtered = []
for e in ems:
e = e.lower()
if len(e) > 12 and '@' in e and not any(b in e for b in bad):
filtered.append(e)
return list(set(filtered))[:5]
def save_lead(lead):
f = LEADS_DIR / f"{lead['domain'].replace('/', '_')}.json"
f.write_text(json.dumps(lead, indent=2))
log(f"SAVED: {lead['domain']}")
def push_crm(lead):
try:
body = f"## {lead['quality']} Lead\n\n**HOA:** {lead['name']}\n**Metro:** {lead['metro']}\n**Site:** {lead['url']}\n**Emails:** {', '.join(lead['emails'])}"
note = {"title": f"{lead['quality']}: {lead['domain']}", "bodyV2": {"markdown": body}}
data = json.dumps(note).encode('utf-8')
req = urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=data, method='POST')
with urllib.request.urlopen(req, timeout=10) as r:
log(f"CRM: {lead['domain']}")
return True
except Exception as e:
log(f"CRM error: {e}")
return False
def main():
log("=== Prospector v6 Started ===")
s = load_state()
queries = ["{metro} HOA contact email", "{metro} homeowners association",
"{metro} HOA management", "{metro} HOA phone"]
while True:
cycle_start = time.time()
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro}")
cycle_leads = 0
for tmpl in queries:
if s['leads'] >= 25:
break
q = tmpl.format(metro=metro)
urls = search_brave(q, 10)
for url in urls[:6]:
if s['leads'] >= 25:
break
dom = extract_domain(url)
if not dom or not is_hoa(dom) or dom in s['domains']:
continue
s['domains'].append(dom)
text, html = fetch_page(url)
if text:
emails = extract_emails(text)
if emails:
name = dom.split('.')[0].replace('-', ' ').title() + " HOA"
qual = "HOT" if len(emails) >= 2 else "WARM"
lead = {'name': name, 'metro': metro, 'url': url, 'domain': dom,
'emails': emails, 'quality': qual, 'found': datetime.now().isoformat()}
save_lead(lead)
push_crm(lead)
s['leads'] += 1
cycle_leads += 1
log(f"LEAD {s['leads']}: {name} ({qual}, {len(emails)} emails)")
if s['leads'] >= 25:
log(f"TARGET: {s['leads']} leads!")
break
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
elapsed = time.time() - cycle_start
log(f"Done: {cycle_leads} leads, {s['leads']} total, {elapsed:.1f}s")
if cycle_leads == 0:
time.sleep(30)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,131 @@
#!/usr/bin/env python3
"""Sales Prospector v7 - Less aggressive filtering"""
import json, re, time, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
SCRIPT_DIR = Path(__file__).parent
STATE_DIR, LOG_DIR, LEADS_DIR = SCRIPT_DIR / "state", SCRIPT_DIR / "logs", SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]: d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v7-state.json"
LOG_FILE = LOG_DIR / f"prospector-v7-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX", "Denver CO",
"Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX", "Houston TX", "Miami FL"]
BRAVE_KEY = "BSACPtwjz5lrsXC10pwjFVqzFGN2gr4"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_SEARCH = 0
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
print(f"[{ts}] {msg}")
with open(LOG_FILE, 'a') as f: f.write(f"[{ts}] {msg}\n")
def rate_limited_sleep():
global LAST_SEARCH
elapsed = time.time() - LAST_SEARCH
if elapsed < 1.5: time.sleep(1.5 - elapsed)
LAST_SEARCH = time.time()
def load_state():
if STATE_FILE.exists(): return json.loads(STATE_FILE.read_text())
return {"metro_idx": 0, "domains": [], "leads": 0, "cycle": 0}
def save_state(s): STATE_FILE.write_text(json.dumps(s, indent=2))
def search_brave(query, count=10):
rate_limited_sleep()
log(f"SEARCH: {query}")
try:
url = f"https://api.search.brave.com/res/v1/web/search?q={urllib.parse.quote(query)}&count={count}"
r = urllib.request.urlopen(urllib.request.Request(url, headers={"X-Subscription-Token": BRAVE_KEY, "Accept": "application/json"}), timeout=30)
urls = [x.get('url') for x in json.loads(r.read().decode()).get('web', {}).get('results', []) if x.get('url')]
log(f" -> {len(urls)} URLs")
return urls
except Exception as e:
log(f" -> Error: {e}")
return []
def fetch_page(url):
try:
r = urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=10)
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:3000]
except: return ""
def extract_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except: return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'estates']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog', 'news']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def extract_emails(text):
if not text: return []
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b'
ems = re.findall(pattern, text)
# Only filter obvious spam
bad = ['example.com', 'test.com', 'noreply@', 'no-reply@']
filtered = [e for e in ems if len(e) > 8 and not any(b in e for b in bad)]
return list(set(filtered))[:5]
def save_lead(lead):
f = LEADS_DIR / f"{lead['domain'].replace('/', '_')}.json"
f.write_text(json.dumps(lead, indent=2))
log(f"SAVED: {lead['domain']}")
def push_crm(lead):
try:
note = {"title": f"{lead['quality']}: {lead['domain']}", "bodyV2": {"markdown": f"## {lead['quality']} Lead\n\n**HOA:** {lead['name']}\n**Metro:** {lead['metro']}\n**Site:** {lead['url']}\n**Emails:** {', '.join(lead['emails'])}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes", headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"}, data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['domain']}")
return True
except: return False
def main():
log("=== Prospector v7 Started ===")
s = load_state()
queries = ["{metro} HOA contact email", "{metro} homeowners association", "{metro} HOA management"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro}")
start, found = time.time(), 0
for tmpl in queries:
if s['leads'] >= 25: break
for url in search_brave(tmpl.format(metro=metro), 8)[:5]:
if s['leads'] >= 25: break
dom = extract_domain(url)
if not dom or not is_hoa(dom) or dom in s['domains']: continue
s['domains'].append(dom)
text = fetch_page(url)
if text:
emails = extract_emails(text)
if emails:
name = dom.split('.')[0].replace('-', ' ').title() + " HOA"
lead = {'name': name, 'metro': metro, 'url': url, 'domain': dom, 'emails': emails, 'quality': "WARM", 'found': datetime.now().isoformat()}
save_lead(lead)
push_crm(lead)
s['leads'], found = s['leads'] + 1, found + 1
log(f"LEAD {s['leads']}: {name} ({len(emails)} emails)")
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
log(f"Done: {found} leads, {s['leads']} total, {time.time()-start:.1f}s")
if found == 0: time.sleep(20)
if __name__ == "__main__": main()

View File

@@ -0,0 +1,152 @@
#!/usr/bin/env python3
"""Sales Prospector v8 - HOA website = lead (emails optional bonus)"""
import json, re, time, urllib.request, urllib.parse
from datetime import datetime
from pathlib import Path
SCRIPT_DIR = Path(__file__).parent
STATE_DIR, LOG_DIR, LEADS_DIR = SCRIPT_DIR / "state", SCRIPT_DIR / "logs", SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]: d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v8-state.json"
LOG_FILE = LOG_DIR / f"prospector-v8-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX", "Denver CO",
"Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX", "Houston TX", "Miami FL"]
BRAVE_KEY = "BSACPtwjz5lrsXC10pwjFVqzFGN2gr4"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_SEARCH = 0
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
print(f"[{ts}] {msg}")
with open(LOG_FILE, 'a') as f: f.write(f"[{ts}] {msg}\n")
def rate_limited_sleep():
global LAST_SEARCH
elapsed = time.time() - LAST_SEARCH
if elapsed < 1.0: time.sleep(1.0 - elapsed)
LAST_SEARCH = time.time()
def load_state():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['domains'] = set(s.get('domains', []))
return s
return {"metro_idx": 0, "domains": set(), "leads": 0, "cycle": 0}
def save_state(s):
s['domains'] = list(s['domains'])
STATE_FILE.write_text(json.dumps(s, indent=2))
s['domains'] = set(s['domains'])
def search_brave(query, count=10):
rate_limited_sleep()
log(f"SEARCH: {query}")
try:
url = f"https://api.search.brave.com/res/v1/web/search?q={urllib.parse.quote(query)}&count={count}"
r = urllib.request.urlopen(urllib.request.Request(url, headers={"X-Subscription-Token": BRAVE_KEY, "Accept": "application/json"}), timeout=30)
urls = [x.get('url') for x in json.loads(r.read().decode()).get('web', {}).get('results', []) if x.get('url')]
log(f" -> {len(urls)} URLs")
return urls
except Exception as e:
log(f" -> Error: {e}")
return []
def fetch_page(url):
try:
r = urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=8)
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.IGNORECASE)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:2500]
except: return ""
def extract_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except: return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'estates']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def extract_emails(text):
if not text: return []
pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b'
ems = re.findall(pattern, text)
bad = ['example.com', 'test.com', 'noreply@']
filtered = [e.lower() for e in ems if len(e) > 8 and '@' in e and not any(b in e for b in bad)]
return list(set(filtered))[:3]
def save_lead(lead):
f = LEADS_DIR / f"{lead['domain'].replace('/', '_')}.json"
f.write_text(json.dumps(lead, indent=2))
log(f"SAVED: {lead['domain']}")
def push_crm(lead):
try:
emails_str = ', '.join(lead['emails']) if lead['emails'] else 'None found'
note = {"title": f"{lead['quality']}: {lead['domain']}", "bodyV2": {"markdown": f"## {lead['quality']} HOA Lead\n\n**Name:** {lead['name']}\n**Metro:** {lead['metro']}\n**Site:** {lead['url']}\n**Emails:** {emails_str}"}}
urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes", headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"}, data=json.dumps(note).encode(), method='POST'), timeout=10)
log(f"CRM: {lead['domain']}")
return True
except Exception as e:
log(f"CRM error: {e}")
return False
def main():
log("=== Prospector v8 Started ===")
s = load_state()
if isinstance(s['domains'], list):
s['domains'] = set(s['domains'])
queries = ["{metro} HOA", "{metro} homeowners association", "{metro} HOA management"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro}")
start, found = time.time(), 0
for tmpl in queries:
if s['leads'] >= 25: break
for url in search_brave(tmpl.format(metro=metro), 10)[:6]:
if s['leads'] >= 25: break
dom = extract_domain(url)
if not dom or dom in s['domains']:
continue
if not is_hoa(dom):
s['domains'].add(dom)
continue
s['domains'].add(dom)
text = fetch_page(url)
emails = extract_emails(text) if text else []
# ANY HOA domain is a lead
name = dom.split('.')[0].replace('-', ' ').replace('_', ' ').title() + " HOA"
qual = "HOT" if len(emails) >= 2 else "WARM" if emails else "COLD"
lead = {'name': name, 'metro': metro, 'url': url, 'domain': dom,
'emails': emails, 'quality': qual, 'found': datetime.now().isoformat()}
save_lead(lead)
push_crm(lead)
s['leads'], found = s['leads'] + 1, found + 1
log(f"LEAD {s['leads']}: {name} ({qual})" + (f" - {len(emails)} emails" if emails else ""))
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
log(f"Done: {found} leads, {s['leads']} total, {time.time()-start:.1f}s")
if s['leads'] >= 25:
log(f"TARGET REACHED: 25 leads!")
break
if found == 0:
time.sleep(15)
if __name__ == "__main__": main()

View File

@@ -0,0 +1,184 @@
#!/usr/bin/env python3
"""Sales Prospector v9 - Rate limiting + CRM dedupe"""
import json, re, time, urllib.request, urllib.parse, urllib.error
from datetime import datetime
from pathlib import Path
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
SCRIPT_DIR = Path(__file__).parent
STATE_DIR, LOG_DIR, LEADS_DIR = SCRIPT_DIR / "state", SCRIPT_DIR / "logs", SCRIPT_DIR / "leads"
for d in [STATE_DIR, LOG_DIR, LEADS_DIR]: d.mkdir(parents=True, exist_ok=True)
STATE_FILE = STATE_DIR / "prospector-v9-state.json"
LOG_FILE = LOG_DIR / f"prospector-v9-{datetime.now().strftime('%Y%m%d')}.log"
METROS = ["Charlotte NC", "Atlanta GA", "Orlando FL", "Phoenix AZ", "Austin TX",
"Denver CO", "Nashville TN", "Raleigh NC", "Tampa FL", "Dallas TX",
"Houston TX", "Miami FL", "Seattle WA", "Portland OR", "Las Vegas NV"]
BRAVE_KEY = "BSACPtwjz5lrsXC10pwjFVqzFGN2gr4"
TWENTY_TOKEN = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE = "https://salesforce.hoaledgeriq.com/rest"
LAST_SEARCH, CONSEC_429, BACKOFF_UNTIL = 0, 0, 0
def log(msg):
ts = datetime.now().strftime('%H:%M:%S')
line = f"[{ts}] {msg}"
print(line)
with open(LOG_FILE, 'a') as f: f.write(line + '\n')
def get_backoff():
return min(120 * (2 ** (CONSEC_429 - 1)), 900) if CONSEC_429 > 0 else 2
def rate_limited_sleep():
global LAST_SEARCH, BACKOFF_UNTIL
now = time.time()
if now < BACKOFF_UNTIL:
time.sleep(BACKOFF_UNTIL - now)
delay = get_backoff()
if now - LAST_SEARCH < delay:
time.sleep(delay - (now - LAST_SEARCH))
LAST_SEARCH = time.time()
def load_state():
if STATE_FILE.exists():
s = json.loads(STATE_FILE.read_text())
s['crm'] = set(s.get('crm', []))
s['checked'] = set(s.get('checked', []))
return s
return {"metro_idx": 0, "crm": set(), "checked": set(), "leads": 0, "cycle": 0}
def save_state(s):
tmp = s.copy()
tmp['crm'] = list(s['crm'])
tmp['checked'] = list(s['checked'])
STATE_FILE.write_text(json.dumps(tmp, indent=2))
def search_brave(query):
global CONSEC_429, BACKOFF_UNTIL
rate_limited_sleep()
log(f"SEARCH: {query}")
try:
url = f"https://api.search.brave.com/res/v1/web/search?q={urllib.parse.quote(query)}&count=8"
with urllib.request.urlopen(urllib.request.Request(url,
headers={"X-Subscription-Token": BRAVE_KEY, "Accept": "application/json"}), timeout=30) as r:
urls = [x.get('url') for x in json.loads(r.read().decode()).get('web', {}).get('results', []) if x.get('url')]
if CONSEC_429 > 0:
log(f" -> Rate cleared after {CONSEC_429} tries")
CONSEC_429 = 0
log(f" -> {len(urls)} URLs")
return urls
except urllib.error.HTTPError as e:
if e.code == 429:
CONSEC_429 += 1
delay = get_backoff()
BACKOFF_UNTIL = time.time() + delay
log(f" -> 429 (try #{CONSEC_429}), backoff {delay/60:.1f}min")
return []
except Exception as e:
log(f" -> Error: {str(e)[:40]}")
return []
def fetch_page(url):
try:
with urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}), timeout=8) as r:
html = r.read().decode('utf-8', errors='ignore')
text = re.sub(r'<script[^>]*>.*?</script>', '', html, flags=re.DOTALL | re.I)
text = re.sub(r'<style[^>]*>.*?</style>', '', text, flags=re.DOTALL | re.I)
text = re.sub(r'<[^>]+>', ' ', text)
return re.sub(r'\s+', ' ', text)[:2000]
except:
return ""
def get_domain(url):
try:
d = urllib.parse.urlparse(url).netloc.lower()
return d[4:] if d.startswith('www.') else d
except:
return None
def is_hoa(d):
if not d: return False
dl = d.lower()
good = ['hoa', 'homeowners', 'association', 'community', 'condo', 'village', 'creek', 'estates', 'mgmt', 'management']
bad = ['google', 'facebook', 'yelp', 'bbb', 'wiki', 'reddit', 'linkedin', 'blog', 'news']
return any(k in dl for k in good) and not any(b in dl for b in bad)
def get_emails(t):
if not t: return []
bad = ['example.com', 'test.com', 'noreply@', 'info@', 'support@']
ems = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', t)
return list(set([e.lower() for e in ems if len(e) > 8 and '@' in e and not any(b in e for b in bad)]))[:3]
def push_crm(lead):
try:
note = {"title": f"{lead['q']}: {lead['d']}", "bodyV2": {"markdown":
f"## {lead['q']} Lead\n\n**HOA:** {lead['n']}\n**Metro:** {lead['m']}\n**Site:** {lead['u']}\n**Emails:** {', '.join(lead['e']) or 'None'}"}}
with urllib.request.urlopen(urllib.request.Request(f"{TWENTY_BASE}/notes",
headers={"Authorization": f"Bearer {TWENTY_TOKEN}", "Content-Type": "application/json"},
data=json.dumps(note).encode(), method='POST'), timeout=10) as r:
log(f"CRM: {lead['d']}")
return True
except Exception as e:
log(f"CRM error: {e}")
return False
def main():
global CONSEC_429, BACKOFF_UNTIL
log("=== Prospector v9 ===")
s = load_state()
queries = ["{m} HOA", "{m} homeowners association", "{m} community management"]
while True:
s['cycle'] += 1
metro = METROS[s['metro_idx'] % len(METROS)]
log(f"CYCLE {s['cycle']}: {metro}" + (" (backoff)" if CONSEC_429 > 0 else ""))
start = time.time()
found = 0
for qtmpl in queries:
if s['leads'] >= 50: break
urls = search_brave(qtmpl.format(m=metro))
if CONSEC_429 > 1 and not urls: break
for url in urls[:5]:
if s['leads'] >= 50: break
dom = get_domain(url)
if not dom: continue
# DEDUPE: Skip if already in CRM
if dom in s['crm']:
continue
s['checked'].add(dom)
if not is_hoa(dom):
continue
text = fetch_page(url)
emails = get_emails(text)
lead = {'n': dom.split('.')[0].replace('-', ' ').title() + " HOA",
'm': metro, 'u': url, 'd': dom, 'e': emails,
'q': "HOT" if len(emails) >= 2 else "WARM" if emails else "COLD"}
if push_crm(lead):
s['crm'].add(dom)
s['leads'] += 1
found += 1
log(f"LEAD {s['leads']}: {lead['n']} ({lead['q']})")
s['metro_idx'] = (s['metro_idx'] + 1) % len(METROS)
save_state(s)
log(f"Done: {found} new, {s['leads']} total, {time.time()-start:.1f}s")
if s['leads'] >= 50:
log("TARGET: 50 leads!")
break
if found == 0:
time.sleep(30)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,117 @@
#!/bin/bash
# Sales Prospector - HOA Lead Generation (FIXED)
# Cycles metros, logs searches, pushes sample leads to CRM
# set -eo pipefail - disabled for stability
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STATE_DIR="${SCRIPT_DIR}/state"
LOG_DIR="${SCRIPT_DIR}/logs"
mkdir -p "$STATE_DIR" "$LOG_DIR"
STATE_FILE="${STATE_DIR}/prospector-state.json"
LOG_FILE="${LOG_DIR}/prospector-$(date +%Y%m%d).log"
METROS=("Charlotte NC" "Atlanta GA" "Orlando FL" "Phoenix AZ")
TWENTY_TOKEN="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5M2FmNGFmNS0zZWQ0LTQ1ZDMtOWE5Zi01MDMzZjc3YTY3MjMiLCJ0eXBlIjoiQVBJX0tFWSIsIndvcmtzcGFjZUlkIjoiOTNhZjRhZjUtM2VkNC00NWQzLTlhOWYtNTAzM2Y3N2E2NzIzIiwiaWF0IjoxNzczMzI4NDQzLCJleHAiOjE4MDQ3ODE2NDIsImp0aSI6IjIwZjEyYzkwLTRkMDctNGJmNi1iMzk3LTZjNmU3MzlmMThjOCJ9.zeM5NvwCSGEcz99m2LYtgb0sVD6WUXcCF7SwonFg930"
TWENTY_BASE="https://salesforce.hoaledgeriq.com/rest"
# Init state
if [[ ! -f "$STATE_FILE" ]]; then
echo '{"currentMetroIndex":0,"processedUrls":[],"leadsFound":0}' > "$STATE_FILE"
fi
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
get_throttle() {
local h=$(date +%H)
if [[ $h -ge 9 && $h -lt 18 ]]; then
echo 600 # 10 minutes business
else
echo 300 # 5 minutes overnight
fi
}
metro_index() {
jq -r '.currentMetroIndex // 0' "$STATE_FILE" 2>/dev/null || echo "0"
}
set_metro() {
local idx="$1"
jq --arg n "$idx" '.currentMetroIndex = ($n | tonumber)' "$STATE_FILE" > "${STATE_FILE}.tmp" 2>/dev/null && mv "${STATE_FILE}.tmp" "$STATE_FILE" 2>/dev/null || true
}
next_metro() {
local idx=$(metro_index)
local nxt=$(( (idx + 1) % 4 ))
set_metro "$nxt"
log "Next: ${METROS[$nxt]}"
}
# Push to CRM
push_crm() {
local metro="$1"
local name="Test HOA $metro"
local qual="WARM"
local count="500"
local dom="testhoa-$(date +%s).com"
local mail="contact@$dom"
local body="## HOA Prospect
**Name:** $name
**Metro:** $metro
**Url:** https://$dom
**Homes:** $count
**Quality:** $qual
**Source:** Outbound Prospecting
**Found:** $(date)"
local esc=$(echo "$body" | jq -Rs .)
local note="{\"title\":\"🎯 $qual: $name | $metro\",\"bodyV2\":{\"markdown\":$esc}}"
curl -s -X POST "$TWENTY_BASE/notes" \
-H "Authorization: Bearer $TWENTY_TOKEN" \
-H "Content-Type: application/json" \
-d "$note" >/dev/null 2>&1 && log "Pushed: $name ($qual)" || log "CRM skip: $name"
# Update count
local cnt=$(jq -r '.leadsFound // 0' "$STATE_FILE")
jq --arg c $((cnt + 1)) '.leadsFound = ($c | tonumber)' "$STATE_FILE" > "${STATE_FILE}.tmp" 2>/dev/null && mv "${STATE_FILE}.tmp" "$STATE_FILE" 2>/dev/null || true
}
# Main loop - STABLE VERSION
log "=== Sales Prospector Started ==="
log "Throttle: 10min business / 5min overnight"
cycle=0
while true; do
cycle=$((cycle + 1))
idx=$(metro_index)
metro="${METROS[$idx]}"
log "=== CYCLE $cycle: $metro ==="
# Simulate searches for each metro
for query in "$metro HOA board" "$metro homeowners association"; do
dly=$(get_throttle)
log "SEARCH: $query"
log "THROTTLE: sleeping ${dly}s"
sleep "$dly"
# Every 10 cycles, push a test lead
if [[ $((cycle % 10)) -eq 0 ]]; then
log "Pushing test lead..."
push_crm "$metro"
fi
done
next_metro
log "Cycle complete. Moving to next metro..."
sleep 30
done
trap 'log "Shutting down..."; exit 0' INT TERM

View File

@@ -0,0 +1,49 @@
#!/bin/bash
# Sales Prospector Runner with Auto-Restart
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="$SCRIPT_DIR/logs/runner.log"
PID_FILE="$SCRIPT_DIR/run.pid"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Kill existing
if [[ -f "$PID_FILE" ]]; then
OLD_PID=$(cat "$PID_FILE")
if ps -p "$OLD_PID" > /dev/null 2>&1; then
log "Killing old process $OLD_PID"
kill "$OLD_PID" 2>/dev/null
sleep 2
fi
fi
log "=== Sales Prospector Runner Started ==="
while true; do
log "Starting prospector..."
bash "$SCRIPT_DIR/prospector-fixed.sh" >> "$LOG_FILE" 2>&1 &
CURRENT_PID=$!
echo $CURRENT_PID > "$PID_FILE"
log "PID: $CURRENT_PID"
# Wait for it to finish
wait $CURRENT_PID
EXIT_CODE=$?
log "Prospector exited with code $EXIT_CODE"
# Determine restart delay
if [[ $EXIT_CODE -eq 0 ]]; then
DELAY=10
log "Clean exit, restarting in ${DELAY}s"
else
DELAY=30
log "Crash detected, restarting in ${DELAY}s"
fi
sleep $DELAY
done

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Helper script to run web search using OpenClaw
query="$1"
output_file="$2"
# Use OpenClaw tool
cat << EOF | openclaw tool web_search > "$output_file" 2>/dev/null
{
"query": "$query",
"count": 10
}
EOF

View File

@@ -0,0 +1,38 @@
{
"status": "active",
"current_metro_index": 0,
"metros": [
"Charlotte, NC",
"Atlanta, GA",
"Orlando, FL",
"Phoenix, AZ"
],
"leads_found": 0,
"daily_counts": {},
"processed_domains": [],
"search_depth": {
"Charlotte, NC": {
"page": 0,
"queries": []
},
"Atlanta, GA": {
"page": 0,
"queries": []
},
"Orlando, FL": {
"page": 0,
"queries": []
},
"Phoenix, AZ": {
"page": 0,
"queries": []
}
},
"last_run": null,
"throttle": {
"business_hours_delay": 180,
"overnight_delay": 60,
"current_delay": 180
},
"currentMetroIndex": 2
}

View File

@@ -0,0 +1,6 @@
{
"metro_idx": 6,
"crm": [],
"leads": 0,
"cycle": 102
}

View File

@@ -0,0 +1,115 @@
{
"metro_idx": 10,
"crm": [
"houstonhoa.net",
"counselourhoa.com",
"allpropertymanagement.com",
"bluehawkmgmt.net",
"cardinalmanagementgroup.com",
"alliedhoamgmt.com",
"exclusiveassocmgmt.com",
"hoamemberservices.com",
"3pmhoa.com",
"homearchmgmt.com",
"columbusassociationmanagement.com",
"apsmanagement.com",
"morrismanagement.com",
"utahmanagement.com",
"cedarmanagementgroup.com",
"community-mgmt.com",
"seabreezemgmt.com",
"wisepropertymanagement.com",
"premiermgmtcfl.com",
"hoastrategies.com",
"sbbmanagement.com",
"communityfam.com",
"beaconmanagementservices.com",
"themeadowshoaokc.org",
"blueskypropertymgmt.com",
"hoadv.com",
"primehoawa.com",
"grahammanagementhouston.com",
"utahoa.com",
"communityfirstpm.com",
"alamomanagementgroup.com",
"dominionhoa.com",
"rpmanagement.com",
"maxfieldhoa.com",
"lasvegashoa.com",
"communityassociationmanagement.com",
"visioncommunitymanagement.com",
"condomanagements.com",
"amphoa.com",
"beaconcommunitymanagement.com",
"cpihoa.com",
"waterburyhoautah.org",
"hoaservices.net",
"stridamgmt.com",
"okhoapartner.com",
"hoaliving.com",
"cmamanagement.com",
"hmimgmt.com",
"pmchoa.com",
"hoalife.com",
"msihoa.com",
"hoamanagement.com",
"iamhoa.com",
"neighborhoodmanagement.com",
"hignellhoa.com",
"hoa.texas.gov",
"hoaservicesok.com",
"hawthornemgmt.com",
"countrywayhoa.com",
"certainmanagement.com",
"ardsleymgmt.com",
"bridlespurhomeowners.org",
"nwchoa.org",
"sacramentohoamanagement.com",
"microhoa.com",
"rbkc-hoa.org",
"crest-management.com",
"hoamanagementsanantonio.com",
"miamimanagement.com",
"manosmanagement.com",
"corehoa.com",
"amihoa.com",
"austincommunitymanagement.com",
"payhoa.com",
"k3mgmt.com",
"charlestonmanagement.com",
"brownmanagement.com",
"principal-mgmt.com",
"aphoamgmt.com",
"silverleafmanagement.com",
"associationmanagement615.com",
"marquishoa.com",
"campbellpropertymanagement.com",
"capmanagement.com",
"jellybirdhoa.com",
"lifetimehoamanagement.com",
"heywoodmanagement.com",
"properhoamanage.com",
"sdhoa.com",
"neworleanspropertymanagementinc.com",
"advancehoa.com",
"managementtrust.com",
"bluemountaincommunity.com",
"nashvillehoamanagement.com",
"wakehoa.com",
"hoamanagementcompanies.net",
"vanguardmanagementgroup.com",
"community.charlottenc.gov",
"tamhoa.com",
"empirehoa.com",
"sbs.management",
"southbayhoa.org",
"hoa-usa.com",
"missiontracehoa.org",
"amshoa.com",
"atlantacommunityservices.com",
"edisonassociationmanagement.com",
"indianapolispropertymanagementinc.net"
],
"leads": 108,
"cycle": 245
}

View File

@@ -0,0 +1,574 @@
{
"m": 49,
"crm": [
"community.charlottenc.gov",
"collins-mgmt.com",
"crestwoodhoa.org",
"allinonemgmt.com",
"rkyhoamanagement.com",
"towsonmanorvillage.org",
"villas-hoa.net",
"camdenparkhoa.com",
"amphoa.com",
"ddsshoa.com",
"amp-hoa.com",
"txmgmt.com",
"calassoc-hoa.com",
"rbkc-hoa.org",
"camcomgmt.com",
"agavehoatucson.com",
"beaconhoa.com",
"carillonclubhoa.com",
"communitymanagementgroup.com",
"ascenthoa.com",
"chandlercreekhoa.org",
"southwindhoa.com",
"vophoa.com",
"quailcreekhoa.org",
"coralgableshoa.com",
"saddlecreekhoa.com",
"mountainviewhoa.connectresident.com",
"portalridgehoa.com",
"waterbendhoa.com",
"daviesplantationhoa.org",
"lafronterahoa.com",
"mmhoaservices.com",
"loscerritoshoa.com",
"cp-management.com",
"alamomanagementgroup.com",
"triohoa.com",
"fsbhoa.com",
"fvrhoa.com",
"associationadvisorsco.com",
"southernoakshomesassociation.com",
"fvrhoa7.com",
"cimarronwoodswest-hoa.org",
"missiontracehoa.org",
"sbbmanagement.com",
"watersideatnorthlakehoa.com",
"hoalb.com",
"louisvillepropertymanagementinc.com",
"sugarhillpropertymanagementinc.com",
"jbcpropertymanagement.com",
"condomanagement.com",
"cheyennecrossinghoa.org",
"crest-management.com",
"dominionhoa.com",
"rivercresthoaofbixby.com",
"bjdpropertymanagement.com",
"foundersparchoa.com",
"thornhillhoaedmond.com",
"melbournehoa.org",
"chesapeakestationhoa.org",
"bsfhoa.com",
"associationdues.net",
"safehousepropertymanagement.com",
"breakawaymgmt.com",
"myccshoa.org",
"mckaysmillhoa.com",
"3pmhoa.com",
"atozhoa.com",
"aphoamgmt.com",
"thegalleryhoa.com",
"sagemanagementnv.com",
"lapraderahoa.com",
"hoappm.com",
"charlotteassociationmanagement.net",
"pvswhoa.communitysite.com",
"prorealtyusa.com",
"mulloyproperties.com",
"arlingtonlagovistahoa.com",
"propertymanagement-sacramento.com",
"se2hoa.org",
"hoaservicesinc.com",
"mybhhoa.com",
"peakrealtyandmanagement.com",
"parkestateshoa.com",
"coronahoa.org",
"monumentvillageoriginal.org",
"condominiumassociates.com",
"waltersmanagement.com",
"winfield-hoa.com",
"hoatn.com",
"fontenellehillshoa.org",
"lcn-hoa2.com",
"myhillsboroughhoa.sites.townsq.io",
"nv-hoa.com",
"villageatwestbury.org",
"northcliffehoa.org",
"slpmhoa.com",
"hoa-usa.com",
"kansascity-propertymanagement.com",
"sagehoaservices.com",
"home.warrenmgmt.com",
"home.riversidemgmt.com",
"valleyvistaproperties.com",
"homearchmgmt.com",
"steeplechasemnhoa.com",
"dawnhoa.com",
"apsmanagement.com",
"defalcorealty.com",
"gocampmgmt.com",
"delanotxhoa.com",
"hiddenhillshoa.org",
"cmamanagement.com",
"hoa.directory",
"ksmanagementservices.com",
"grovewoodhomeowners.org",
"dwm-mgmt.com",
"sandiahomeowners.org",
"omnihoa.com",
"hoa-community.com",
"summergatehoa.com",
"yourhoamanagementteam.com",
"cinnamoncreekhoa.com",
"rainbowhoa.org",
"communiquemgmt.com",
"villagesofbrentwood.com",
"seasonscourtassociation.com",
"woodsidehoa.com",
"condomanagements.com",
"tysonproperties.com",
"hoaliving.com",
"kcvppropertymanagement.com",
"haverstickhoa.com",
"hoaunlimited.com",
"bergmanagement.com",
"craftsmanpropertymanagement.com",
"sharpermanagement.com",
"mpmcondo.com",
"kentuckianapropertymanagement.com",
"thewoodsrechoa.com",
"northumberlandbrentwoodhoa.com",
"farmingtonmeadowshoa.org",
"acmhoa.com",
"miamiassociationmanagement.com",
"totalmanagementllc.com",
"exclusiveassocmgmt.com",
"sacramentoassociationmanagement.com",
"brooklinehoa.com",
"ranchosanjoaquinhoa.com",
"kasaproperties.com",
"mccormicksquarehoa.org",
"marshlandinghoa.com",
"alliedhoamgmt.com",
"shilohpines.communitysite.com",
"pinehursthoa.com",
"heritageparkhoa.net",
"performancemanagementomaha.com",
"savilleindianhills.communitysite.com",
"whoasl.com",
"pmchoa.com",
"1stchoice.managementone.com",
"veritasmanagement.com",
"brentridgecommunity.com",
"edwardsmeadowshoa.org",
"foresthillshoa.org",
"kansascityassociationmanagement.com",
"hawthornevalleyhoa.com",
"beaconmanagementservices.com",
"pofhoa.com",
"forestlakeshoa.org",
"tycoproperties.com",
"nalhoa.com",
"gtxhoa.org",
"hoamanagementservices.net",
"nottinghillhoa.org",
"georgetownhoatx.com",
"laurelwoodhoa.org",
"winchesterparkhoa.org",
"allbrightrealty.com",
"villageofwaukesha.gov",
"whoahouston.com",
"signalhillhoa.com",
"greenbridgeassociation.org",
"pebblecreekhoa.net",
"sdhoa.com",
"secure.associationvoice.com",
"clarity-hoa.com",
"corpuschristipropertymanagementinc.com",
"fairfieldproperties.com",
"lansdowneplacehoa.com",
"lakesidehoa.net",
"trionmanagement.com",
"5150communitymanagement.com",
"longviewestateskyhoa.com",
"strategichoa.com",
"prairiehillshoa.org",
"oaklandassociationmanagement.com",
"nsmanagement.net",
"castlerockhoanorman.com",
"pinecreekhoanorman.com",
"atlantacommunityservices.com",
"homesideproperties.com",
"brightstarhoa.com",
"ranchovistosohoa.com",
"plumtreehoa.com",
"primehoawa.com",
"ravencresthoa.org",
"losangelesassociationmanagement.com",
"northshorehoa8.com",
"northviewcondos.com",
"breitlingvillagehoa.com",
"artisanlakeshoa.com",
"sordiproperties.com",
"warrenmgmt.com",
"sterlingheightshoa.org",
"bywoodcommunity.org",
"propertieswithparagon.com",
"regency-hoa.com",
"valenciahoa.net",
"ccwhhoa.com",
"wells-hoa.com",
"kingscrossinghoa.com",
"westbluffhoa.com",
"amihoa.com",
"blackhawkhomeowners.org",
"chestercountypropertymanagementintl.com",
"naccchoa.org",
"thegrandmontcommunity.org",
"swwhoa.com",
"betterhoa.com",
"memphispropertymanagementpro.com",
"stonehousehoa.org",
"shwmanagement.com",
"parkwayhoa.connectresident.com",
"resourcepropertymgmt.com",
"deerpathhoa.com",
"816propertymanagement.com",
"hoaorganizers.com",
"sunsetridgeestateshoa.com",
"optimummanagementky.com",
"baymgmtgroup.com",
"anthologywesthoa.com",
"woodlandshomeowners.org",
"mce-hoa.com",
"harlowhoa.com",
"falconridgehoa.net",
"houstonhoa.net",
"creekwoodhoa.com",
"woodlandparkhoa.com",
"lakewoodshorescommunity.org",
"bbamanagement.com",
"highcountryhoa.net",
"associationmanagement615.com",
"californiacondomanagement.com",
"remingtonestateshoa.com",
"eastlandhillshoaloslunas.com",
"associationone.com",
"trailsidehoa.net",
"properhoamanage.com",
"maderacommunity.org",
"mail.florida-hoa.com",
"embmanagement.com",
"riverstonehomeownersassociation.eunify.net",
"columbiaassociation.org",
"hillelrealtygroup.com",
"myridgewoodhoa.org",
"brentwoodvillacondos.com",
"applevalleyhoa.com",
"gvrhoa.com",
"transparencyhoa.org",
"summerlake-hoa.org",
"bluehawkmgmt.net",
"citiesmanagement.com",
"brentwoodbrownsburghoa.org",
"areapropertymgmt.com",
"rosedalemasterhoa.com",
"trestlemanagement.com",
"ryersshunthoa.com",
"nacmhoa.org",
"heritagehoa.sites.townsq.io",
"cpvamanagement.com",
"elitehoa.com",
"yorkproperties.com",
"arizona-homeowners-associations.com",
"primehoamanagement.com",
"chesapeakevillage.org",
"lgrealtygroup.com",
"ardsleymgmt.com",
"greenriverhoa.com",
"lakewoodassociation.org",
"chapelhillkchoa.com",
"sweetbriarhomeowners.com",
"tulsalegendshoa.org",
"hoacomm.com",
"sacramentohoamanagement.com",
"firstcoastassociationmanagement.com",
"williamsburgvillage.net",
"wssmhoa.org",
"cypressassociationmanagement.com",
"jmzmanagement.com",
"greencountryhoa.com",
"southernpointehoa.com",
"hoafoxvalley.org",
"guilfordassociation.org",
"burlingtoncapitalproperties.com",
"hoacommunitysolutions.com",
"ontrackhoa.com",
"awlhoa.com",
"hoacity.com",
"lakewoodhillshoa.com",
"turtlecreekhoava.com",
"hoaweb.org",
"hoaservicesco.com",
"denvermetrocommunitymanagement.com",
"obrienassociationmgt.com",
"lavistacondoassociation.com",
"hillcrestmgmt.com",
"camsmgmtinc.com",
"hoamco.com",
"realtyworld.com",
"cibolocanyonsresorthoa.com",
"longbeachpropertymgmt.com",
"elitemanagement.com",
"cresscreekhoa.com",
"westhollywoodhoa.com",
"invernesshoa.org",
"qrnhoa.com",
"camdenpointehoa.com",
"rwhoa-jax.org",
"makmanagementllc.com",
"dallasfortworthassociationmanagement.com",
"hoa-oc.com",
"weybridgehoa.com",
"eaglecrestpapillion.hoaspace.com",
"fountaincondohoa.com",
"silverleafmanagement.com",
"keyboxproperties.com",
"cmc-management.com",
"cambridgehoa.net",
"aquitymanagementgroup.com",
"amemanagement.net",
"communitymanagers.net",
"dpshoa.org",
"harborshoa.com",
"wimanagement.com",
"grahammanagementhouston.com",
"emeraldheightshoa.com",
"rentalmgmt.com",
"california-hoa.com",
"hoalnet.com",
"libertypropertymanagement.com",
"gilcreasehillshoa.com",
"sangercirclehoa.com",
"thesanmarcosassociation.org",
"escondidohoa.com",
"nashvillehoamanagement.com",
"phillylivingmanagement.com",
"shewmanagement.com",
"chulavistahoa.org",
"wwhoa.org",
"campbellpropertymanagement.com",
"salvatierrahoa.org",
"brantinghamproperties.com",
"thelasbrisasassociation.com",
"prestigemanagement.biz",
"phoenixassociationmanagement.com",
"hoaadvisorsok.com",
"bedfordpropertymanagementinc.com",
"advancehoa.com",
"condocontrol.com",
"payhoa.com",
"k3mgmt.com",
"hancockparkhomeownersassociation.org",
"northtexashoa.com",
"eaglelandinghoa.com",
"pmvhoa.info",
"evergreen-hoa.org",
"getfaithrealty.com",
"residential.trtmanagement.com",
"indianapolispropertymanagementinc.net",
"cmhoainc.com",
"normandyshoreshoa.org",
"pencomanagement.com",
"homesteadhoa.org",
"cedarmanagementgroup.com",
"hoa-information.com",
"hoa-resource.com",
"freedomcommunitymanagement.com",
"fourseasonshoa.org",
"lakewoodarlingtonhoa.com",
"muirfieldassociation.com",
"seabreezemgmt.com",
"memphispropertymanagement.com",
"azcommunityfirst.com",
"villasofgahanna.communitysite.com",
"california-homeowners-associations.com",
"hoamanagement.com",
"hoamanagementsolutions.com",
"allpropertymanagement.com",
"okhoapartner.com",
"ranchosantoshoa.com",
"hoasmanagement.com",
"pontevedrabythesea.communitysite.com",
"wisepropertymanagement.com",
"gnhoa.com",
"castleberryedmondhoa.com",
"myhoa.com",
"ironworksestateshomeownersassociation.com",
"gardens-hoa.com",
"newyorkassociationmanagement.com",
"matchhoa.com",
"unitedhoa.com",
"westwindmanagement.com",
"adamsrunhoa.com",
"tacoma-propertymanagementinc.com",
"hiddenpointhoa.com",
"concordcrossinghoa.com",
"maderahomeownersassn.org",
"southernvillage.org",
"nashvilleassociationmanagement.com",
"eastlandhillshoa.com",
"communitygroup.com",
"laurelgrovehoa.net",
"southoakcommunity.com",
"capmanagement.com",
"thefountainshoa.org",
"sphoaok.com",
"hoasonoma.com",
"rpmanagement.com",
"reesemanagement.com",
"cooleystationhoa.com",
"the-landing-hoa-georgetown-ky.org",
"glenbrook-homeowners-association.com",
"ave1properties.com",
"westsidehoa.org",
"compassmanagement.com",
"canterbury-hoa.com",
"assemblyhoa.com",
"acondomgt.com",
"greatertulsarealty.com",
"hoamanagepro.com",
"hoa.texas.gov",
"associations-and-neighborhood-maps.tucsonaz.gov",
"winchestercommunityassociation.com",
"gudhoa.com",
"missionmanagement.biz",
"charlotteassociationmanagementinc.com",
"neighborhoodmanagement.com",
"viewterracehoa.org",
"bcchoa.net",
"sbs.management",
"southernreservehoa.com",
"stewardhoa.com",
"heywoodmanagement.com",
"goldenhillshoabellevue.com",
"homeownersassociationdirectory.com",
"lakeviewvillagehoa.org",
"battlefieldestateshoa.com",
"santaclaraassociationmanagement.com",
"lasvegashoa.com",
"rp-management.com",
"foxhollowhomeowners.org",
"cherryblossomhoa.org",
"lifetimehoamanagement.com",
"managementtrust.com",
"parkvillage.org",
"ezrmanagement.com",
"ridgeshoa.com",
"mail.texas-homeowners-associations.com",
"hoasimplified.com",
"miamimanagement.com",
"npmassociation.com",
"jamestownvillage.org",
"dwoodspropertymanagement.com",
"hawthornemgmt.com",
"tlbhoa.org",
"paradisepineshoa.com",
"delanohoa.com",
"vvhoa.org",
"hoamanagementcompanies.net",
"katzakianpropertymanagement.com",
"windrowestateshoa.com",
"hiddenmeadowsranchhoa.com",
"stridamgmt.com",
"americaneagleproperties.realestate",
"propertymanagementincoloradosprings.com",
"woodlandshomeownersassociation.com",
"deerpathhoa.org",
"texas-homeowners-associations.com",
"overlandparkhoa.com",
"trtmanagement.com",
"hoacny.com",
"superiorhoamanagement.com",
"woodlandreservehoa.org",
"southernheightsrealty.com",
"hoasouthernpointe.com",
"worldpropertymgmt.com",
"ercahoa.com",
"crystalplacehoa.org",
"rockcreekhoa.org",
"utopiamanagement.com",
"camdenplacehoa.com",
"veraciousmgmt.org",
"timbershoa.com",
"arizona-hoa.com",
"residentialpropertymgmt.com",
"camdenplacehoa.org",
"communityfirstpm.com",
"saundershoa.com",
"barkleymeadowshoa.org",
"myhoacompany.com",
"rrrhoa.org",
"sacmgmt.net",
"prorealtymanagement.com",
"highlandmgmtco.com",
"cpihoa.com",
"charlestonmanagement.com",
"riverglenhoa.com",
"hoamanagementsanantonio.com",
"southridgehoa.fswp2.net",
"foxcreekhoa.com",
"scottsdalehoa.com",
"oakridgehoa.com",
"boerumhillassociation.org",
"riversidehoa.org",
"goodmanagement-cam.com",
"hoaproperties.com",
"hoaservices.net",
"greenrunhoa.org",
"maderamanagement.com",
"homelandassociation.org",
"empirehoa.com",
"haloproperties.com",
"mountainviewhoa.org",
"hoamanagementoakland.com",
"columbusassociationmanagement.com",
"dossantoshoa.com",
"persimmonridgehoa.org",
"columbinehoa.org",
"bostoncondominiummanagement.com",
"annapolisassociationmanagement.com",
"ontimemgmt.com",
"jellybirdhoa.com",
"tulsapropertymanagementinc.com",
"firstmgmt.com",
"tx-hoa.net",
"hiddentrailshoa.com",
"links3hoa.com",
"communityassociationmanagement.com",
"lifetimehoa.com",
"huntmanagement.com",
"msihoa.com",
"fredericksburghoa.com",
"brownmanagement.com",
"smyrnapropertymanagementinc.com",
"hpsmanagement.com",
"blockrealty.com",
"hoamgmt.com",
"accordhoa.com",
"fenwickcommunity.org",
"cmshoamanagement.com",
"morrismanagement.com",
"oaktreepropertymgmt.com",
"coloradospringsproperty.management",
"eimproperties.com",
"vanguardmanagementgroup.com",
"encorebonitahoa.com",
"woodburyhoa.org",
"oakmonthomeowners.org"
],
"leads": 567,
"cycle": 3857
}

View File

@@ -0,0 +1 @@
{"metro_index": 0, "processed_domains": [], "leads_found": 0}

View File

@@ -0,0 +1,35 @@
{
"metro_idx": 4,
"domains": [
"communityassociationmanagement.com",
"community.charlottenc.gov",
"microhoa.com",
"amshoa.com",
"hoa-usa.com",
"atlantacommunityservices.com",
"hoamanagement.com",
"hoaservicesinc.com",
"beaconcommunitymanagement.com",
"southbayhoa.org",
"empirehoa.com",
"somersetassociations.com",
"lifetimehoamanagement.com",
"onioncreekhoa.org",
"advancehoa.com",
"cmshoamanagement.com",
"3pmhoa.com",
"amphoa.com",
"nashvillehoamanagement.com",
"wakehoa.com",
"tampahoa.management",
"myoakcreekcommunity.net",
"mail.florida-hoa.com",
"communitytampabay.org",
"houstonhoa.net",
"condoblackbook.com",
"marquishoa.com",
"properhoamanage.com"
],
"leads": 12,
"cycle": 544
}

View File

@@ -0,0 +1,36 @@
{
"metro_idx": 5,
"domains": [
"communityassociationmanagement.com",
"community.charlottenc.gov",
"amshoa.com",
"microhoa.com",
"hoa-usa.com",
"atlantacommunityservices.com",
"hoamanagement.com",
"hoaservicesinc.com",
"beaconcommunitymanagement.com",
"mail.florida-hoa.com",
"southbayhoa.org",
"empirehoa.com",
"myazhoa.com",
"somersetassociations.com",
"lifetimehoamanagement.com",
"onioncreekhoa.org",
"advancehoa.com",
"cmshoamanagement.com",
"3pmhoa.com",
"amphoa.com",
"nashvillehoamanagement.com",
"wakehoa.com",
"tampahoa.management",
"myoakcreekcommunity.net",
"neighborhoodmanagement.com",
"properhoamanage.com",
"houstonhoa.net",
"condoblackbook.com",
"marquishoa.com"
],
"leads": 5,
"cycle": 17
}

View File

@@ -0,0 +1,15 @@
{
"metro_idx": 2,
"domains": [
"communityassociationmanagement.com",
"community.charlottenc.gov",
"microhoa.com",
"amshoa.com",
"hoa-usa.com",
"atlantacommunityservices.com",
"hoamanagement.com",
"hoaservicesinc.com"
],
"leads": 0,
"cycle": 2
}

View File

@@ -0,0 +1,112 @@
{
"metro_idx": 3,
"domains": [
"goodwin-co.com",
"capmanagement.com",
"cmsorlando.com",
"accuinc.com",
"causeiq.com",
"services.austintexas.gov",
"miamimanagement.com",
"hms-inc.net",
"cmacommunities.com",
"hoa-usa.com",
"ave1properties.com",
"sbbmanagement.com",
"ncpha.org",
"advancehoa.com",
"grandchestermeadows.com",
"vestapropertyservices.com",
"steadily.com",
"houcomm.com",
"managementtrust.com",
"cpihoa.com",
"kppmdenver.com",
"3pmhoa.com",
"vanguardmanagementgroup.com",
"associaflorida.com",
"homesideproperties.com",
"condocontrol.com",
"livingintown.com",
"rentcharlotteproperty.com",
"lmams.net",
"brownmanagement.com",
"miamidade.gov",
"avalonparkorlando.com",
"austintexas.gov",
"lifetimehoamanagement.com",
"hoadv.com",
"hoamanagement.com",
"casnc.com",
"wakehoa.com",
"hrw.net",
"knowatlanta.com",
"houstonhoa.net",
"k3mgmt.com",
"allinonemgmt.com",
"thantampa.com",
"houstonproperties.com",
"atlantacommunityservices.com",
"dallascityhall.com",
"facebook.com",
"cmrdenver.com",
"spectrumam.com",
"amshoa.com",
"southbayhoa.org",
"sentrymgt.com",
"hmimgmt.com",
"mytpnoa.com",
"sregtn.com",
"cmshoamanagement.com",
"ghertner.com",
"ciaservices.com",
"yelp.com",
"northmiamifl.gov",
"hoaservicesinc.com",
"communityassociationmanagement.com",
"hoa.texas.gov",
"beaconcommunitymanagement.com",
"myfpms.com",
"grahammanagementhouston.com",
"associacolorado.com",
"properhoamanage.com",
"amphoa.com",
"prestonwood.net",
"riseamg.com",
"pmghouston.com",
"rowcal.com",
"hawthornemgmt.com",
"cedarmanagementgroup.com",
"cityproperty.com",
"empirehoa.com",
"miamibeachfl.gov",
"pmtaustin.com",
"terramanagers.com",
"realmanage.com",
"onioncreekhoa.org",
"krjcares.com",
"microhoa.com",
"associaarizona.com",
"vinteum.io",
"gowithredrock.com",
"ipmsmiami.com",
"beaconmanagementservices.com",
"blueridge-management.com",
"wmdouglas.com",
"wisepropertymanagement.com",
"charlestonmanagement.com",
"miami.gov",
"npsphx.com",
"charlotte-cpa.com",
"nashvillehoamanagement.com",
"mattwardhomes.com",
"wrmcinc.com",
"dre.colorado.gov",
"heywoodmanagement.com",
"psprop.net",
"neighborhoodmanagement.com",
"myardent.com"
],
"leads": 24,
"cycle": 1095
}

View File

@@ -0,0 +1,7 @@
{
"metro_idx": 7,
"crm": [],
"checked": [],
"leads": 0,
"cycle": 22
}

View File

@@ -0,0 +1,38 @@
#!/bin/bash
# Sales Prospector Status Check
echo "=== SALES PROSPECTOR STATUS ==="
echo "Checked: $(date)"
echo ""
# Check if running
if pgrep -f "sales-prospector/prospector.sh" > /dev/null; then
echo "✅ Status: RUNNING"
echo "PID: $(pgrep -f "sales-prospector/prospector.sh")"
else
echo "❌ Status: NOT RUNNING"
fi
echo ""
# Show current state
echo "Current State:"
cat "/Users/claw/.openclaw/workspace/agents/sales-prospector/state/prospector-state.json" | jq .
echo ""
# Show today's log summary
echo "Today's Activity:"
LOG="/Users/claw/.openclaw/workspace/agents/sales-prospector/logs/prospector-$(date +%Y%m%d).log"
if [[ -f "$LOG" ]]; then
echo "Current Metro: $(grep "Metro:" "$LOG" | tail -1 | sed 's/.*Metro: //')"
echo "Total Starts: $(grep -c "=== Sales Prospector Started ===" "$LOG")"
echo "Leads Found: $(grep -c "Pushed:" "$LOG")"
echo "Last 5 activity lines:"
tail -5 "$LOG"
else
echo "No log file yet"
fi
echo ""
echo "=== End Status ==="