type: custom

customType: model-snapshot

provider: zai

modelApi: openai-completions


type: message

role: user

type: text

text:
[cron:6b53d58f-d26f-4c35-9c16-5f083480d817 CannaDeals Deal Scraper (Hourly)] Run the CannaDeals deal scraper.

## Command
```bash
ssh carl "cd ~/cannadealsfl && node unified-scraper-orchestrator.mjs"
```

## What it does
- Scrapes all dispensary deals
- Inserts new deals into database
- Logs results to ~/cannadealsfl/logs/

## Report
Brief summary of deals found/inserted.

Current time: {{current_time}}
Current time: Saturday, March 7th, 2026 — 6:04 PM (UTC)

Return your summary as plain text; it will be delivered automatically. If the task explicitly calls for messaging a specific external recipient, note who/where it should go instead of sending it yourself.


role: assistant

type: thinking

thinking:
The user is asking me to run a cron job for the CannaDeals deal scraper. This is a scheduled task that scrapes dispensary deals and inserts them into the database.

Let me break down what I need to do:
1. Run the scraper command via SSH to carl
2. Monitor the output
3. Report a brief summary of deals found/inserted

The command is:
```bash
ssh carl "cd ~/cannadealsfl && node unified-scraper-orchestrator.mjs"
```

I should execute this command and capture the output to report back. Let me do that.

text: Running the CannaDeals deal scraper on carl now.

exec

type: toolCall

api: openai-completions

stopReason: toolUse


role: toolResult

toolName: exec

text: Command still running (session quiet-summit, pid 1992477). Use process (list/poll/log/write/kill/clear/remove) for follow-up.

status: running

sessionId: quiet-summit

tail:
_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,998 - DEBUG - send_request_headers.complete
2026-03-07 18:04:29,999 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,999 - DEBUG - send_request_body.complete
2026-03-07 18:04:29,999 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:30,081 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:30 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'*/*'), (b'CF-Ray', b'9d8b85df8a547ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?moderation_status=eq.archived&select=id%2Ctitle%2Cupdated_at&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e7b8-7362-926a-3d1550582222'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'45'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:30,081 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Cupdated_at&moderation_status=eq.archived&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 18:04:30,081 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:30,082 - DEBUG - receive_response_body.complete
2026-03-07 18:04:30,082 - DEBUG - response_closed.started
2026-03-07 18:04:30,082 - DEBUG - response_closed.complete
2026-03-07 18:04:30,475 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/


thinking: The command is running. I need to poll the process to get the output. Let me check the status.

process

action: poll


toolName: process

text:
[dotenv@17.2.3] injecting env (13) from .env.local -- tip: 🔐 encrypt with Dotenvx: https://dotenvx.com
✅ Loaded scraper configuration from /home/crogers2287/cannadealsfl/.scraper-config.json
🚀 Starting Unified Scraper Orchestrator
🐍 Running Python engine: /home/crogers2287/cannadealsfl/venv/bin/python3 /home/crogers2287/cannadealsfl/unified-scraper-engine.py --verbose
❌ Enhanced text extractor not available
❌ Fallback extractor not available
2026-03-07 18:04:28,008 - DEBUG - Using selector: EpollSelector
2026-03-07 18:04:28,009 - INFO - 🚀 Starting Unified Scraper Engine
2026-03-07 18:04:28,133 - INFO - ✅ Supabase client initialized (HTTP/1.1 mode)
2026-03-07 18:04:28,134 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 18:04:28,158 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3ceeb585e0>
2026-03-07 18:04:28,158 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f3ceeec1740> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 18:04:28,165 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3ceeb585b0>
2026-03-07 18:04:28,165 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:28,166 - DEBUG - send_request_headers.complete
2026-03-07 18:04:28,166 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:28,166 - DEBUG - send_request_body.complete
2026-03-07 18:04:28,166 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:28,616 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:28 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'0-9/*'), (b'CF-Ray', b'9d8b85d40d917ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/product_categories?is_active=eq.True&select=id%2Cname%2Cslug'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e091-736c-8ae8-f009209c62db'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'206'), (b'Set-Cookie', b'__cf_bm=FhfTBf_Iu5atXjV7.yan3hdk1WY.qVjEHvYetwO4NmU-1772906668-1.0.1.1-xMSC4bd06tQS14PqvDe9cUefCBxZfQXastl1mctLN8_mnu2i6pherbB.EErebN7_7qKBSIzr0YnXGbvVRE9p1F_zjZVZbgFzUcr.dC3mHsA; path=/; expires=Sat, 07-Mar-26 18:34:28 GMT; domain=.supabase.co; HttpOnly; Secure; SameSite=None'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:28,617 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/product_categories?select=id%2Cname%2Cslug&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 18:04:28,617 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:28,619 - DEBUG - receive_response_body.complete
2026-03-07 18:04:28,619 - DEBUG - response_closed.started
2026-03-07 18:04:28,619 - DEBUG - response_closed.complete
2026-03-07 18:04:28,620 - INFO - ✅ Loaded 10 product categories for mapping
2026-03-07 18:04:28,620 - INFO - ✅ Gemini AI initialized with model: gemini-2.5-flash-lite
2026-03-07 18:04:29,909 - INFO - ✅ Gemini AI test successful
2026-03-07 18:04:29,910 - INFO - 🗄 Archiving old deals...
2026-03-07 18:04:29,911 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,911 - DEBUG - send_request_headers.complete
2026-03-07 18:04:29,911 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,911 - DEBUG - send_request_body.complete
2026-03-07 18:04:29,911 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,996 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:29 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'*/*'), (b'CF-Ray', b'9d8b85def94f7ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?created_at=lt.2026-03-05T18%3A04%3A29.910136%2B00%3A00&is_active=eq.True&select=id%2Ctitle%2Ccreated_at'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e75f-73e8-93bd-8d43d0c2dfbc'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'45'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:29,996 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Ccreated_at&is_active=eq.True&created_at=lt.2026-03-05T18%3A04%3A29.910136%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 18:04:29,996 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,997 - DEBUG - receive_response_body.complete
2026-03-07 18:04:29,997 - DEBUG - response_closed.started
2026-03-07 18:04:29,997 - DEBUG - response_closed.complete
2026-03-07 18:04:29,997 - INFO - 🗑 Deleting old archived deals...
2026-03-07 18:04:29,998 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,998 - DEBUG - send_request_headers.complete
2026-03-07 18:04:29,999 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,999 - DEBUG - send_request_body.complete
2026-03-07 18:04:29,999 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:30,081 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:30 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'*/*'), (b'CF-Ray', b'9d8b85df8a547ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?moderation_status=eq.archived&select=id%2Ctitle%2Cupdated_at&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e7b8-7362-926a-3d1550582222'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'45'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:30,081 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Cupdated_at&moderation_status=eq.archived&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 18:04:30,081 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:30,082 - DEBUG - receive_response_body.complete
2026-03-07 18:04:30,082 - DEBUG - response_closed.started
2026-03-07 18:04:30,082 - DEBUG - response_closed.complete
2026-03-07 18:04:30,475 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/
2026-03-07 18:04:45,043 - INFO - 📸 Found 30 potential deal images
2026-03-07 18:04:45,044 - INFO - 🔄 Processing batch 1/3 (10 images)
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_3_2024940956
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_4_1551121141
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_5_1764062530
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_6_201943481
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_7_975854079
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_8_204714044
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_10_206561086
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_11_174237851
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_12_205637565
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_13_324343982
2026-03-07 18:04:45,083 - INFO - ✅ Downloaded: image_5_1764062530.jpg
2026-03-07 18:04:45,083 - INFO - ⏭ Skipping image_5_1764062530: Already processed
2026-03-07 18:04:45,083 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_5_1764062530.jpg
2026-03-07 18:04:45,111 - INFO - ✅ Downloaded: image_3_2024940956.webp
2026-03-07 18:04:45,111 - INFO - ⏭ Skipping image_3_2024940956: Already processed
2026-03-07 18:04:45,111 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_3_2024940956.webp
2026-03-07 18:04:45,117 - INFO - ✅ Downloaded: image_4_1551121141.webp
2026-03-07 18:04:45,117 - INFO - 🤖 Using original Gemini extraction for image_4_1551121141.webp
2026-03-07 18:04:45,122 - INFO - ✅ Downloaded: image_13_324343982.jpg
2026-03-07 18:04:45,122 - INFO - ⏭ Skipping image_13_324343982: Already processed
2026-03-07 18:04:45,122 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_13_324343982.jpg
2026-03-07 18:04:47,705 - WARNING - ⚠ No JSON found in response (attempt 1)
2026-03-07 18:04:50,166 - INFO - 📊 First pass extracted 0 deals
2026-03-07 18:04:50,166 - INFO - 🔄 Deal count (0) below threshold, running refinement pass...
2026-03-07 18:04:50,681 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 18:04:50,681 - WARNING - ⚠ Invalid data from image_4_1551121141: dispensary=Knack Dispensary, deals=0
2026-03-07 18:04:50,683 - INFO - ✅ Downloaded: image_8_204714044.jpg
2026-03-07 18:04:50,683 - INFO - ⏭ Skipping image_8_204714044: Already processed
2026-03-07 18:04:50,684 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_8_204714044.jpg
2026-03-07 18:04:50,685 - INFO - ✅ Downloaded: image_7_975854079.jpg
2026-03-07 18:04:50,685 - INFO - ⏭ Skipping image_7_975854079: Already processed
2026-03-07 18:04:50,685 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_7_975854079.jpg
2026-03-07 18:04:50,687 - INFO - ✅ Downloaded: image_11_174237851.jpg
2026-03-07 18:04:50,687 - INFO - ⏭ Skipping image_11_174237851: Already processed
2026-03-07 18:04:50,687 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_11_174237851.jpg
2026-03-07 18:04:50,688 - INFO - ✅ Downloaded: image_6_201943481.jpg
2026-03-07 18:04:50,689 - INFO - ⏭ Skipping image_6_201943481: Already processed
2026-03-07 18:04:50,689 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_6_201943481.jpg
2026-03-07 18:04:50,689 - INFO - ✅ Downloaded: image_12_205637565.jpg
2026-03-07 18:04:50,689 - INFO - ⏭ Skipping image_12_205637565: Already processed
2026-03-07 18:04:50,689 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_12_205637565.jpg
2026-03-07 18:04:50,691 - INFO - ✅ Downloaded: image_10_206561086.jpg
2026-03-07 18:04:50,691 - INFO - ⏭ Skipping image_10_206561086: Already processed
2026-03-07 18:04:50,691 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_10_206561086.jpg
2026-03-07 18:04:50,692 - INFO - ✅ Batch 1 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,692 - INFO - 🔄 Processing batch 2/3 (10 images)
2026-03-07 18:04:50,692 - INFO - 🔄 Processing image: image_14_1764062530
2026-03-07 18:04:50,692 - INFO - 🔄 Processing image: image_15_209331649
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_16_208408128
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_17_868795887
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_18_1379210405
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_19_234266716
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_20_233343195
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_21_1725888082
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_22_2066027360
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_23_781112938
2026-03-07 18:04:50,714 - INFO - ✅ Downloaded: image_23_781112938.jpg
2026-03-07 18:04:50,715 - INFO - ⏭ Skipping image_23_781112938: Already processed
2026-03-07 18:04:50,715 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_23_781112938.jpg
2026-03-07 18:04:50,718 - INFO - ✅ Downloaded: image_14_1764062530.jpg
2026-03-07 18:04:50,718 - INFO - ⏭ Skipping image_14_1764062530: Already processed
2026-03-07 18:04:50,718 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_14_1764062530.jpg
2026-03-07 18:04:50,723 - INFO - ✅ Downloaded: image_18_1379210405.jpg
2026-03-07 18:04:50,724 - INFO - ⏭ Skipping image_18_1379210405: Already processed
2026-03-07 18:04:50,724 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_18_1379210405.jpg
2026-03-07 18:04:50,724 - INFO - ✅ Downloaded: image_22_2066027360.jpg
2026-03-07 18:04:50,725 - INFO - ⏭ Skipping image_22_2066027360: Already processed
2026-03-07 18:04:50,725 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_22_2066027360.jpg
2026-03-07 18:04:50,725 - INFO - ✅ Downloaded: image_16_208408128.jpg
2026-03-07 18:04:50,725 - INFO - ⏭ Skipping image_16_208408128: Already processed
2026-03-07 18:04:50,726 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_16_208408128.jpg
2026-03-07 18:04:50,726 - INFO - ✅ Downloaded: image_15_209331649.jpg
2026-03-07 18:04:50,726 - INFO - ⏭ Skipping image_15_209331649: Already processed
2026-03-07 18:04:50,727 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_15_209331649.jpg
2026-03-07 18:04:50,728 - INFO - ✅ Downloaded: image_17_868795887.jpg
2026-03-07 18:04:50,728 - INFO - ⏭ Skipping image_17_868795887: Already processed
2026-03-07 18:04:50,728 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_17_868795887.jpg
2026-03-07 18:04:50,728 - INFO - ✅ Downloaded: image_19_234266716.jpg
2026-03-07 18:04:50,729 - INFO - ⏭ Skipping image_19_234266716: Already processed
2026-03-07 18:04:50,729 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_19_234266716.jpg
2026-03-07 18:04:50,729 - INFO - ✅ Downloaded: image_20_233343195.jpg
2026-03-07 18:04:50,729 - INFO - ⏭ Skipping image_20_233343195: Already processed
2026-03-07 18:04:50,730 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_20_233343195.jpg
2026-03-07 18:04:50,731 - INFO - ✅ Downloaded: image_21_1725888082.jpg
2026-03-07 18:04:50,731 - INFO - ⏭ Skipping image_21_1725888082: Already processed
2026-03-07 18:04:50,731 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_21_1725888082.jpg
2026-03-07 18:04:50,732 - INFO - ✅ Batch 2 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,732 - INFO - 🔄 Processing batch 3/3 (10 images)
2026-03-07 18:04:50,732 - INFO - 🔄 Processing image: image_24_1358497160
2026-03-07 18:04:50,732 - INFO - 🔄 Processing image: image_25_2146199388
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_26_1329197011
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_27_810399351
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_28_852658791
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_29_300195207
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_30_1278795828
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_32_725973623
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_33_2024940956
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_34_283026642
2026-03-07 18:04:50,753 - INFO - ✅ Downloaded: image_24_1358497160.jpg
2026-03-07 18:04:50,753 - INFO - ⏭ Skipping image_24_1358497160: Already processed
2026-03-07 18:04:50,753 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_24_1358497160.jpg
2026-03-07 18:04:50,756 - INFO - ✅ Downloaded: image_27_810399351.jpg
2026-03-07 18:04:50,756 - INFO - ⏭ Skipping image_27_810399351: Already processed
2026-03-07 18:04:50,756 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_27_810399351.jpg
2026-03-07 18:04:50,757 - INFO - ✅ Downloaded: image_33_2024940956.webp
2026-03-07 18:04:50,757 - INFO - ⏭ Skipping image_33_2024940956: Already processed
2026-03-07 18:04:50,758 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_33_2024940956.webp
2026-03-07 18:04:50,758 - INFO - ✅ Downloaded: image_34_283026642.webp
2026-03-07 18:04:50,758 - INFO - ⏭ Skipping image_34_283026642: Already processed
2026-03-07 18:04:50,758 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_34_283026642.webp
2026-03-07 18:04:50,760 - INFO - ✅ Downloaded: image_25_2146199388.jpg
2026-03-07 18:04:50,760 - INFO - ⏭ Skipping image_25_2146199388: Already processed
2026-03-07 18:04:50,760 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_25_2146199388.jpg
2026-03-07 18:04:50,762 - INFO - ✅ Downloaded: image_30_1278795828.jpg
2026-03-07 18:04:50,762 - INFO - ⏭ Skipping image_30_1278795828: Already processed
2026-03-07 18:04:50,762 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_30_1278795828.jpg
2026-03-07 18:04:50,763 - INFO - ✅ Downloaded: image_28_852658791.jpg
2026-03-07 18:04:50,763 - INFO - ⏭ Skipping image_28_852658791: Already processed
2026-03-07 18:04:50,763 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_28_852658791.jpg
2026-03-07 18:04:50,764 - INFO - ✅ Downloaded: image_29_300195207.jpg
2026-03-07 18:04:50,764 - INFO - ⏭ Skipping image_29_300195207: Already processed
2026-03-07 18:04:50,764 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_29_300195207.jpg
2026-03-07 18:04:50,765 - INFO - ✅ Downloaded: image_32_725973623.webp
2026-03-07 18:04:50,765 - INFO - ⏭ Skipping image_32_725973623: Already processed
2026-03-07 18:04:50,765 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_32_725973623.webp
2026-03-07 18:04:50,766 - INFO - ✅ Downloaded: image_26_1329197011.jpg
2026-03-07 18:04:50,766 - INFO - ⏭ Skipping image_26_1329197011: Already processed
2026-03-07 18:04:50,766 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_26_1329197011.jpg
2026-03-07 18:04:50,766 - INFO - ✅ Batch 3 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,818 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 30
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 0
Duplicates Skipped: 29
Blacklisted: 0
Errors: 1
Success Rate: 0.0%
Duration: 22.8s
2026-03-07 18:04:50,821 - DEBUG - close.started
2026-03-07 18:04:50,821 - DEBUG - close.complete
2026-03-07 18:04:50,822 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 18:04:50,845 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3cdc63f520>
2026-03-07 18:04:50,845 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f3ceeec1740> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 18:04:50,852 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3cdc63fe20>
2026-03-07 18:04:50,852 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:50,852 - DEBUG - send_request_headers.complete
2026-03-07 18:04:50,852 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:50,852 - DEBUG - send_request_body.complete
2026-03-07 18:04:50,852 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:50,928 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:50 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'0-83/84'), (b'CF-Ray', b'9d8b8661dd0a8f69-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?is_active=eq.True&moderation_status=eq.approved&select=id'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'preference-applied', b'count=exact'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc979-392f-781b-a19a-6c5317c5a634'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'27'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:50,928 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id&is_active=eq.True&moderation_status=eq.approved "HTTP/1.1 200 OK"
2026-03-07 18:04:50,928 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:50,929 - DEBUG - receive_response_body.complete
2026-03-07 18:04:50,929 - DEBUG - response_closed.started
2026-03-07 18:04:50,929 - DEBUG - response_closed.complete
2026-03-07 18:04:50,929 - INFO - ✅ Deal count OK: 84 active deals
==================================================
🐍 Python process exited with code: 0
✅ Unified Scraper Orchestrator completed successfully

==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 30
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 0
Duplicates Skipped: 29
Blacklisted: 0
Errors: 0
==================================================
Warning: Permanently added 'carl' (ED25519) to the list of known hosts.
/home/crogers2287/cannadealsfl/venv/lib/python3.10/site-packages/google/api_core/_python_version_support.py:266: FutureWarning: You are using a Python version (3.10.12) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2026-10-04). Please upgrade to the latest Python version, or at least Python 3.11, to continue receiving updates for google.api_core past that date.
  warnings.warn(message, FutureWarning)

Process exited with code 0.

ssh carl

status: completed

aggregated:
Warning: Permanently added 'carl' (ED25519) to the list of known hosts.
[dotenv@17.2.3] injecting env (13) from .env.local -- tip: 🔐 encrypt with Dotenvx: https://dotenvx.com
✅ Loaded scraper configuration from /home/crogers2287/cannadealsfl/.scraper-config.json
🚀 Starting Unified Scraper Orchestrator
🐍 Running Python engine: /home/crogers2287/cannadealsfl/venv/bin/python3 /home/crogers2287/cannadealsfl/unified-scraper-engine.py --verbose
/home/crogers2287/cannadealsfl/venv/lib/python3.10/site-packages/google/api_core/_python_version_support.py:266: FutureWarning: You are using a Python version (3.10.12) which Google will stop supporting in new releases of google.api_core once it reaches its end of life (2026-10-04). Please upgrade to the latest Python version, or at least Python 3.11, to continue receiving updates for google.api_core past that date.
  warnings.warn(message, FutureWarning)
❌ Enhanced text extractor not available
❌ Fallback extractor not available
2026-03-07 18:04:28,008 - DEBUG - Using selector: EpollSelector
2026-03-07 18:04:28,009 - INFO - 🚀 Starting Unified Scraper Engine
2026-03-07 18:04:28,133 - INFO - ✅ Supabase client initialized (HTTP/1.1 mode)
2026-03-07 18:04:28,134 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 18:04:28,158 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3ceeb585e0>
2026-03-07 18:04:28,158 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f3ceeec1740> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 18:04:28,165 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3ceeb585b0>
2026-03-07 18:04:28,165 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:28,166 - DEBUG - send_request_headers.complete
2026-03-07 18:04:28,166 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:28,166 - DEBUG - send_request_body.complete
2026-03-07 18:04:28,166 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:28,616 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:28 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'0-9/*'), (b'CF-Ray', b'9d8b85d40d917ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/product_categories?is_active=eq.True&select=id%2Cname%2Cslug'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e091-736c-8ae8-f009209c62db'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'206'), (b'Set-Cookie', b'__cf_bm=FhfTBf_Iu5atXjV7.yan3hdk1WY.qVjEHvYetwO4NmU-1772906668-1.0.1.1-xMSC4bd06tQS14PqvDe9cUefCBxZfQXastl1mctLN8_mnu2i6pherbB.EErebN7_7qKBSIzr0YnXGbvVRE9p1F_zjZVZbgFzUcr.dC3mHsA; path=/; expires=Sat, 07-Mar-26 18:34:28 GMT; domain=.supabase.co; HttpOnly; Secure; SameSite=None'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:28,617 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/product_categories?select=id%2Cname%2Cslug&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 18:04:28,617 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:28,619 - DEBUG - receive_response_body.complete
2026-03-07 18:04:28,619 - DEBUG - response_closed.started
2026-03-07 18:04:28,619 - DEBUG - response_closed.complete
2026-03-07 18:04:28,620 - INFO - ✅ Loaded 10 product categories for mapping
2026-03-07 18:04:28,620 - INFO - ✅ Gemini AI initialized with model: gemini-2.5-flash-lite
2026-03-07 18:04:29,909 - INFO - ✅ Gemini AI test successful
2026-03-07 18:04:29,910 - INFO - 🗄 Archiving old deals...
2026-03-07 18:04:29,911 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,911 - DEBUG - send_request_headers.complete
2026-03-07 18:04:29,911 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,911 - DEBUG - send_request_body.complete
2026-03-07 18:04:29,911 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,996 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:29 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'*/*'), (b'CF-Ray', b'9d8b85def94f7ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?created_at=lt.2026-03-05T18%3A04%3A29.910136%2B00%3A00&is_active=eq.True&select=id%2Ctitle%2Ccreated_at'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e75f-73e8-93bd-8d43d0c2dfbc'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'45'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:29,996 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Ccreated_at&is_active=eq.True&created_at=lt.2026-03-05T18%3A04%3A29.910136%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 18:04:29,996 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,997 - DEBUG - receive_response_body.complete
2026-03-07 18:04:29,997 - DEBUG - response_closed.started
2026-03-07 18:04:29,997 - DEBUG - response_closed.complete
2026-03-07 18:04:29,997 - INFO - 🗑 Deleting old archived deals...
2026-03-07 18:04:29,998 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:29,998 - DEBUG - send_request_headers.complete
2026-03-07 18:04:29,999 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:29,999 - DEBUG - send_request_body.complete
2026-03-07 18:04:29,999 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:30,081 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:30 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'*/*'), (b'CF-Ray', b'9d8b85df8a547ad5-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?moderation_status=eq.archived&select=id%2Ctitle%2Cupdated_at&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc978-e7b8-7362-926a-3d1550582222'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'45'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:30,081 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Cupdated_at&moderation_status=eq.archived&updated_at=lt.2026-02-28T18%3A04%3A29.997695%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 18:04:30,081 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:30,082 - DEBUG - receive_response_body.complete
2026-03-07 18:04:30,082 - DEBUG - response_closed.started
2026-03-07 18:04:30,082 - DEBUG - response_closed.complete
2026-03-07 18:04:30,475 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/
2026-03-07 18:04:45,043 - INFO - 📸 Found 30 potential deal images
2026-03-07 18:04:45,044 - INFO - 🔄 Processing batch 1/3 (10 images)
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_3_2024940956
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_4_1551121141
2026-03-07 18:04:45,044 - INFO - 🔄 Processing image: image_5_1764062530
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_6_201943481
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_7_975854079
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_8_204714044
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_10_206561086
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_11_174237851
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_12_205637565
2026-03-07 18:04:45,045 - INFO - 🔄 Processing image: image_13_324343982
2026-03-07 18:04:45,083 - INFO - ✅ Downloaded: image_5_1764062530.jpg
2026-03-07 18:04:45,083 - INFO - ⏭ Skipping image_5_1764062530: Already processed
2026-03-07 18:04:45,083 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_5_1764062530.jpg
2026-03-07 18:04:45,111 - INFO - ✅ Downloaded: image_3_2024940956.webp
2026-03-07 18:04:45,111 - INFO - ⏭ Skipping image_3_2024940956: Already processed
2026-03-07 18:04:45,111 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_3_2024940956.webp
2026-03-07 18:04:45,117 - INFO - ✅ Downloaded: image_4_1551121141.webp
2026-03-07 18:04:45,117 - INFO - 🤖 Using original Gemini extraction for image_4_1551121141.webp
2026-03-07 18:04:45,122 - INFO - ✅ Downloaded: image_13_324343982.jpg
2026-03-07 18:04:45,122 - INFO - ⏭ Skipping image_13_324343982: Already processed
2026-03-07 18:04:45,122 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_13_324343982.jpg
2026-03-07 18:04:47,705 - WARNING - ⚠ No JSON found in response (attempt 1)
2026-03-07 18:04:50,166 - INFO - 📊 First pass extracted 0 deals
2026-03-07 18:04:50,166 - INFO - 🔄 Deal count (0) below threshold, running refinement pass...
2026-03-07 18:04:50,681 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 18:04:50,681 - WARNING - ⚠ Invalid data from image_4_1551121141: dispensary=Knack Dispensary, deals=0
2026-03-07 18:04:50,683 - INFO - ✅ Downloaded: image_8_204714044.jpg
2026-03-07 18:04:50,683 - INFO - ⏭ Skipping image_8_204714044: Already processed
2026-03-07 18:04:50,684 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_8_204714044.jpg
2026-03-07 18:04:50,685 - INFO - ✅ Downloaded: image_7_975854079.jpg
2026-03-07 18:04:50,685 - INFO - ⏭ Skipping image_7_975854079: Already processed
2026-03-07 18:04:50,685 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_7_975854079.jpg
2026-03-07 18:04:50,687 - INFO - ✅ Downloaded: image_11_174237851.jpg
2026-03-07 18:04:50,687 - INFO - ⏭ Skipping image_11_174237851: Already processed
2026-03-07 18:04:50,687 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_11_174237851.jpg
2026-03-07 18:04:50,688 - INFO - ✅ Downloaded: image_6_201943481.jpg
2026-03-07 18:04:50,689 - INFO - ⏭ Skipping image_6_201943481: Already processed
2026-03-07 18:04:50,689 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_6_201943481.jpg
2026-03-07 18:04:50,689 - INFO - ✅ Downloaded: image_12_205637565.jpg
2026-03-07 18:04:50,689 - INFO - ⏭ Skipping image_12_205637565: Already processed
2026-03-07 18:04:50,689 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_12_205637565.jpg
2026-03-07 18:04:50,691 - INFO - ✅ Downloaded: image_10_206561086.jpg
2026-03-07 18:04:50,691 - INFO - ⏭ Skipping image_10_206561086: Already processed
2026-03-07 18:04:50,691 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_10_206561086.jpg
2026-03-07 18:04:50,692 - INFO - ✅ Batch 1 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,692 - INFO - 🔄 Processing batch 2/3 (10 images)
2026-03-07 18:04:50,692 - INFO - 🔄 Processing image: image_14_1764062530
2026-03-07 18:04:50,692 - INFO - 🔄 Processing image: image_15_209331649
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_16_208408128
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_17_868795887
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_18_1379210405
2026-03-07 18:04:50,693 - INFO - 🔄 Processing image: image_19_234266716
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_20_233343195
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_21_1725888082
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_22_2066027360
2026-03-07 18:04:50,694 - INFO - 🔄 Processing image: image_23_781112938
2026-03-07 18:04:50,714 - INFO - ✅ Downloaded: image_23_781112938.jpg
2026-03-07 18:04:50,715 - INFO - ⏭ Skipping image_23_781112938: Already processed
2026-03-07 18:04:50,715 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_23_781112938.jpg
2026-03-07 18:04:50,718 - INFO - ✅ Downloaded: image_14_1764062530.jpg
2026-03-07 18:04:50,718 - INFO - ⏭ Skipping image_14_1764062530: Already processed
2026-03-07 18:04:50,718 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_14_1764062530.jpg
2026-03-07 18:04:50,723 - INFO - ✅ Downloaded: image_18_1379210405.jpg
2026-03-07 18:04:50,724 - INFO - ⏭ Skipping image_18_1379210405: Already processed
2026-03-07 18:04:50,724 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_18_1379210405.jpg
2026-03-07 18:04:50,724 - INFO - ✅ Downloaded: image_22_2066027360.jpg
2026-03-07 18:04:50,725 - INFO - ⏭ Skipping image_22_2066027360: Already processed
2026-03-07 18:04:50,725 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_22_2066027360.jpg
2026-03-07 18:04:50,725 - INFO - ✅ Downloaded: image_16_208408128.jpg
2026-03-07 18:04:50,725 - INFO - ⏭ Skipping image_16_208408128: Already processed
2026-03-07 18:04:50,726 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_16_208408128.jpg
2026-03-07 18:04:50,726 - INFO - ✅ Downloaded: image_15_209331649.jpg
2026-03-07 18:04:50,726 - INFO - ⏭ Skipping image_15_209331649: Already processed
2026-03-07 18:04:50,727 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_15_209331649.jpg
2026-03-07 18:04:50,728 - INFO - ✅ Downloaded: image_17_868795887.jpg
2026-03-07 18:04:50,728 - INFO - ⏭ Skipping image_17_868795887: Already processed
2026-03-07 18:04:50,728 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_17_868795887.jpg
2026-03-07 18:04:50,728 - INFO - ✅ Downloaded: image_19_234266716.jpg
2026-03-07 18:04:50,729 - INFO - ⏭ Skipping image_19_234266716: Already processed
2026-03-07 18:04:50,729 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_19_234266716.jpg
2026-03-07 18:04:50,729 - INFO - ✅ Downloaded: image_20_233343195.jpg
2026-03-07 18:04:50,729 - INFO - ⏭ Skipping image_20_233343195: Already processed
2026-03-07 18:04:50,730 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_20_233343195.jpg
2026-03-07 18:04:50,731 - INFO - ✅ Downloaded: image_21_1725888082.jpg
2026-03-07 18:04:50,731 - INFO - ⏭ Skipping image_21_1725888082: Already processed
2026-03-07 18:04:50,731 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_21_1725888082.jpg
2026-03-07 18:04:50,732 - INFO - ✅ Batch 2 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,732 - INFO - 🔄 Processing batch 3/3 (10 images)
2026-03-07 18:04:50,732 - INFO - 🔄 Processing image: image_24_1358497160
2026-03-07 18:04:50,732 - INFO - 🔄 Processing image: image_25_2146199388
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_26_1329197011
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_27_810399351
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_28_852658791
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_29_300195207
2026-03-07 18:04:50,733 - INFO - 🔄 Processing image: image_30_1278795828
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_32_725973623
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_33_2024940956
2026-03-07 18:04:50,734 - INFO - 🔄 Processing image: image_34_283026642
2026-03-07 18:04:50,753 - INFO - ✅ Downloaded: image_24_1358497160.jpg
2026-03-07 18:04:50,753 - INFO - ⏭ Skipping image_24_1358497160: Already processed
2026-03-07 18:04:50,753 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_24_1358497160.jpg
2026-03-07 18:04:50,756 - INFO - ✅ Downloaded: image_27_810399351.jpg
2026-03-07 18:04:50,756 - INFO - ⏭ Skipping image_27_810399351: Already processed
2026-03-07 18:04:50,756 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_27_810399351.jpg
2026-03-07 18:04:50,757 - INFO - ✅ Downloaded: image_33_2024940956.webp
2026-03-07 18:04:50,757 - INFO - ⏭ Skipping image_33_2024940956: Already processed
2026-03-07 18:04:50,758 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_33_2024940956.webp
2026-03-07 18:04:50,758 - INFO - ✅ Downloaded: image_34_283026642.webp
2026-03-07 18:04:50,758 - INFO - ⏭ Skipping image_34_283026642: Already processed
2026-03-07 18:04:50,758 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_34_283026642.webp
2026-03-07 18:04:50,760 - INFO - ✅ Downloaded: image_25_2146199388.jpg
2026-03-07 18:04:50,760 - INFO - ⏭ Skipping image_25_2146199388: Already processed
2026-03-07 18:04:50,760 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_25_2146199388.jpg
2026-03-07 18:04:50,762 - INFO - ✅ Downloaded: image_30_1278795828.jpg
2026-03-07 18:04:50,762 - INFO - ⏭ Skipping image_30_1278795828: Already processed
2026-03-07 18:04:50,762 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_30_1278795828.jpg
2026-03-07 18:04:50,763 - INFO - ✅ Downloaded: image_28_852658791.jpg
2026-03-07 18:04:50,763 - INFO - ⏭ Skipping image_28_852658791: Already processed
2026-03-07 18:04:50,763 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_28_852658791.jpg
2026-03-07 18:04:50,764 - INFO - ✅ Downloaded: image_29_300195207.jpg
2026-03-07 18:04:50,764 - INFO - ⏭ Skipping image_29_300195207: Already processed
2026-03-07 18:04:50,764 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_29_300195207.jpg
2026-03-07 18:04:50,765 - INFO - ✅ Downloaded: image_32_725973623.webp
2026-03-07 18:04:50,765 - INFO - ⏭ Skipping image_32_725973623: Already processed
2026-03-07 18:04:50,765 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_32_725973623.webp
2026-03-07 18:04:50,766 - INFO - ✅ Downloaded: image_26_1329197011.jpg
2026-03-07 18:04:50,766 - INFO - ⏭ Skipping image_26_1329197011: Already processed
2026-03-07 18:04:50,766 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_26_1329197011.jpg
2026-03-07 18:04:50,766 - INFO - ✅ Batch 3 completed: 0 processed, 0 deals inserted
2026-03-07 18:04:50,818 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 30
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 0
Duplicates Skipped: 29
Blacklisted: 0
Errors: 1
Success Rate: 0.0%
Duration: 22.8s
2026-03-07 18:04:50,821 - DEBUG - close.started
2026-03-07 18:04:50,821 - DEBUG - close.complete
2026-03-07 18:04:50,822 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 18:04:50,845 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3cdc63f520>
2026-03-07 18:04:50,845 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f3ceeec1740> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 18:04:50,852 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f3cdc63fe20>
2026-03-07 18:04:50,852 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 18:04:50,852 - DEBUG - send_request_headers.complete
2026-03-07 18:04:50,852 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 18:04:50,852 - DEBUG - send_request_body.complete
2026-03-07 18:04:50,852 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 18:04:50,928 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 18:04:50 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Server', b'cloudflare'), (b'Content-Range', b'0-83/84'), (b'CF-Ray', b'9d8b8661dd0a8f69-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?is_active=eq.True&moderation_status=eq.approved&select=id'), (b'Strict-Transport-Security', b'max-age=31536000; includeSubDomains; preload'), (b'Vary', b'Accept-Encoding'), (b'X-Content-Type-Options', b'nosniff'), (b'content-profile', b'public'), (b'preference-applied', b'count=exact'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019cc979-392f-781b-a19a-6c5317c5a634'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'27'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 18:04:50,928 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id&is_active=eq.True&moderation_status=eq.approved "HTTP/1.1 200 OK"
2026-03-07 18:04:50,928 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 18:04:50,929 - DEBUG - receive_response_body.complete
2026-03-07 18:04:50,929 - DEBUG - response_closed.started
2026-03-07 18:04:50,929 - DEBUG - response_closed.complete
2026-03-07 18:04:50,929 - INFO - ✅ Deal count OK: 84 active deals
==================================================
🐍 Python process exited with code: 0
✅ Unified Scraper Orchestrator completed successfully

==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 30
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 0
Duplicates Skipped: 29
Blacklisted: 0
Errors: 0
==================================================


thinking:
The scraper ran successfully. Let me summarize:

- 30 images found on flcannabisdeals.org
- 0 new deals inserted (all 29 images were duplicates that were already processed)
- 1 error during processing (for image_4_1551121141 from Knack Dispensary - no deals could be extracted)
- 84 active deals in database (healthy count)

This is actually a good sign - the scraper is working correctly and the deals in the database are current. The duplicate detection is working as expected, preventing re-processing of the same deal images.

The important metrics:
- Database has 84 active deals ✅
- No new deals to insert (all deals already present)
- No scraper errors (the 1 "error" was just a warning about a dispensary image that didn't contain extractable deal data)

I should report this concisely.

text:
## CannaDeals Scraper Summary — March 7, 6:04 PM UTC

**Result:** ✅ Scraper ran successfully — no new deals to add

| Metric | Value |
|--------|-------|
| Images found | 30 |
| Already processed (duplicates) | 29 |
| New deals extracted | 0 |
| New deals inserted | 0 |
| Extraction errors | 1 (Knack image had no valid deals) |
| Active deals in DB | 84 ✅ |
| Duration | 22.8s |

The deals on flcannabisdeals.org haven't changed since the last run — all images were already in the hash cache. Database count is healthy at 84 active deals.

stopReason: stop