[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: Sunday, March 8th, 2026 — 4:03 AM (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.


I need to run the CannaDeals deal scraper on carl (the production server). Let me execute the SSH command.

exec

ssh carl "cd ~/cannadealsfl && node unified-scraper-orchestrator.mjs"


Command still running (session gentle-willow, pid 3298306). Use process (list/poll/log/write/kill/clear/remove) for follow-up.

_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,259 - DEBUG - send_request_headers.complete
2026-03-08 04:03:35,259 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,259 - DEBUG - send_request_body.complete
2026-03-08 04:03:35,259 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,305 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:03:35 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'9d8ef3716ab33459-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-03-01T04%3A03%3A35.258248%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'019ccb9d-62e5-7715-86f8-359da9f895ad'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'13'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:03:35,306 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Cupdated_at&moderation_status=eq.archived&updated_at=lt.2026-03-01T04%3A03%3A35.258248%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-08 04:03:35,306 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,307 - DEBUG - receive_response_body.complete
2026-03-08 04:03:35,307 - DEBUG - response_closed.started
2026-03-08 04:03:35,307 - DEBUG - response_closed.complete
2026-03-08 04:03:35,751 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/


The scraper started running. I need to poll for the results. Let me wait for it to complete.


- DEBUG - 🏷 Product types: ['pre-rolls', 'flower', 'concentrates', 'vapes'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-08 04:04:03,823 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,828 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e7910>
2026-03-08 04:04:03,829 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,836 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e78b0>
2026-03-08 04:04:03,836 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,837 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,837 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,837 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,837 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,856 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Content-Range', b'0-0/*'), (b'CF-Ray', b'9d8ef4236ca01df6-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.sunburn'), (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'019ccb9d-d226-7f64-8a66-83f89bafcff2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'42'), (b'Server', b'cloudflare'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,857 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.sunburn&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,857 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,857 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,857 - DEBUG - response_closed.started
2026-03-08 04:04:03,858 - DEBUG - response_closed.complete
2026-03-08 04:04:03,858 - DEBUG - close.started
2026-03-08 04:04:03,858 - DEBUG - close.complete
2026-03-08 04:04:03,858 - DEBUG - 🏷 Product types: ['pre-rolls', 'vapes'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-08 04:04:03,859 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,860 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4235dc52520-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.mint-cannabis'), (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'019ccb9d-d220-7c84-8e43-08a8f5d4dc32'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'85'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,860 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.mint-cannabis&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,860 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,861 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,861 - DEBUG - response_closed.started
2026-03-08 04:04:03,861 - DEBUG - response_closed.complete
2026-03-08 04:04:03,861 - DEBUG - close.started
2026-03-08 04:04:03,861 - DEBUG - close.complete
2026-03-08 04:04:03,862 - DEBUG - 🏷 Product types: ['all-in-one vapes', 'edibles', 'chews', 'rso chocolates', 'flower', 'concentrates', 'pre-rolls', 'vapes', 'dablcators', 'live resin'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-08 04:04:03,862 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,863 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c414d30>
2026-03-08 04:04:03,864 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,865 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c415f90>
2026-03-08 04:04:03,866 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,871 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c414cd0>
2026-03-08 04:04:03,871 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,872 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,872 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c415f30>
2026-03-08 04:04:03,873 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,874 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,874 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,874 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,874 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,899 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4236a1178bc-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.cookies'), (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'019ccb9d-d225-741d-8308-f27c2b8b7d32'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'74'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,900 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.cookies&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,900 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,900 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,900 - DEBUG - response_closed.started
2026-03-08 04:04:03,901 - DEBUG - response_closed.complete
2026-03-08 04:04:03,901 - DEBUG - close.started
2026-03-08 04:04:03,901 - DEBUG - close.complete
2026-03-08 04:04:03,902 - DEBUG - 🏷 Product types: [] → Category ID: None
2026-03-08 04:04:03,903 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,907 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c4171f0>
2026-03-08 04:04:03,907 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,914 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c417190>
2026-03-08 04:04:03,914 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,915 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,915 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,915 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,915 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,951 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4235dc09aaa-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.planet-13'), (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'019ccb9d-d223-7ed8-9461-18124d997a5b'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'129'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,952 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.planet-13&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,952 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,952 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,952 - DEBUG - response_closed.started
2026-03-08 04:04:03,952 - DEBUG - response_closed.complete
2026-03-08 04:04:03,953 - DEBUG - close.started
2026-03-08 04:04:03,953 - DEBUG - close.complete
2026-03-08 04:04:03,953 - DEBUG - 🏷 Product types: ['flower', 'pre-roll', 'vape', 'concentrates'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-08 04:04:03,955 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,960 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c41c610>
2026-03-08 04:04:03,961 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,969 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c41c5b0>
2026-03-08 04:04:03,969 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,970 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,970 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,970 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,970 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:04,250 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef423fc81cf54-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d288-7f80-aa4b-791cccb8fe9d'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'365'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,251 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,251 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,252 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,252 - DEBUG - response_closed.started
2026-03-08 04:04:04,252 - DEBUG - response_closed.complete
2026-03-08 04:04:04,252 - DEBUG - close.started
2026-03-08 04:04:04,252 - DEBUG - close.complete
2026-03-08 04:04:04,253 - INFO - ✅ Inserted deal: Grow Healthy - 2X Points & Up to 50% Off Storewide!
2026-03-08 04:04:04,256 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4243b353d15-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2b3-7dec-ac48-f4bf1713646f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'329'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,257 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,257 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,258 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,259 - DEBUG - response_closed.started
2026-03-08 04:04:04,260 - DEBUG - response_closed.complete
2026-03-08 04:04:04,259 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef424dd481bf6-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d30d-73a9-9ae0-07aace0fd332'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'249'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,262 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,262 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,261 - INFO - ✅ Inserted deal: Sunburn Cannabis - 35% Off Storewide & Free Pre-Rolls
2026-03-08 04:04:04,263 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4243e921e13-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2ac-7d97-bd84-e9f22db11d12'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'304'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,264 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef423ccf3ccc3-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d262-7a97-86c0-1801d83075bf'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'379'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,264 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4247ec6f5c2-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2d8-7c03-9b1f-ff827914a1a2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'295'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,265 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,266 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,266 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,268 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,268 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,269 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,269 - DEBUG - response_closed.started
2026-03-08 04:04:04,269 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,271 - DEBUG - response_closed.complete
2026-03-08 04:04:04,271 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,271 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,272 - INFO - ✅ Inserted deal: Planet 13 - Free Flower, Pre-Rolls, and 45% Off Storewide
2026-03-08 04:04:04,272 - DEBUG - response_closed.started
2026-03-08 04:04:04,272 - DEBUG - response_closed.complete
2026-03-08 04:04:04,273 - DEBUG - response_closed.started
2026-03-08 04:04:04,273 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,274 - INFO - ✅ Inserted deal: Curaleaf - Storewide Savings & Product Deals
2026-03-08 04:04:04,274 - DEBUG - response_closed.complete
2026-03-08 04:04:04,274 - DEBUG - response_closed.started
2026-03-08 04:04:04,276 - INFO - ✅ Inserted deal: Mint Cannabis - March Madness & Eighth Day Deals Galore
2026-03-08 04:04:04,276 - DEBUG - response_closed.complete
2026-03-08 04:04:04,277 - INFO - ✅ Inserted deal: Cookies - Storewide Savings & Spend More Deals
2026-03-08 04:04:04,281 - INFO - ✅ Batch 1 completed: 6 processed, 6 deals inserted
2026-03-08 04:04:04,282 - INFO - 🔄 Processing batch 2/3 (10 images)
2026-03-08 04:04:04,282 - INFO - 🔄 Processing image: image_14_725973623
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_15_174237851
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_16_868795887
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_17_1379210405
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_18_234266716
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_19_233343195
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_20_1725888082
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_21_781112938
2026-03-08 04:04:04,285 - INFO - 🔄 Processing image: image_22_1358497160
2026-03-08 04:04:04,285 - INFO - 🔄 Processing image: image_23_2146199388
2026-03-08 04:04:04,314 - INFO - ✅ Downloaded: image_21_781112938.jpg
2026-03-08 04:04:04,314 - INFO - ⏭ Skipping image_21_781112938: Already processed
2026-03-08 04:04:04,315 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_21_781112938.jpg
2026-03-08 04:04:04,323 - INFO - ✅ Downloaded: image_22_1358497160.jpg
2026-03-08 04:04:04,323 - INFO - ⏭ Skipping image_22_1358497160: Already processed
2026-03-08 04:04:04,323 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_22_1358497160.jpg
2026-03-08 04:04:04,327 - INFO - ✅ Downloaded: image_18_234266716.jpg
2026-03-08 04:04:04,328 - INFO - ⏭ Skipping image_18_234266716: Already processed
2026-03-08 04:04:04,328 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_18_234266716.jpg
2026-03-08 04:04:04,331 - INFO - ✅ Downloaded: image_14_725973623.webp
2026-03-08 04:04:04,332 - INFO - ⏭ Skipping image_14_725973623: Already processed
2026-03-08 04:04:04,332 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_14_725973623.webp
2026-03-08 04:04:04,333 - INFO - ✅ Downloaded: image_15_174237851.jpg
2026-03-08 04:04:04,333 - INFO - ⏭ Skipping image_15_174237851: Already processed
2026-03-08 04:04:04,334 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_15_174237851.jpg
2026-03-08 04:04:04,336 - INFO - ✅ Downloaded: image_19_233343195.jpg
2026-03-08 04:04:04,337 - INFO - ⏭ Skipping image_19_233343195: Already processed
2026-03-08 04:04:04,337 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_19_233343195.jpg
2026-03-08 04:04:04,338 - INFO - ✅ Downloaded: image_16_868795887.jpg
2026-03-08 04:04:04,338 - INFO - ⏭ Skipping image_16_868795887: Already processed
2026-03-08 04:04:04,338 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_16_868795887.jpg
2026-03-08 04:04:04,339 - INFO - ✅ Downloaded: image_23_2146199388.jpg
2026-03-08 04:04:04,339 - INFO - ⏭ Skipping image_23_2146199388: Already processed
2026-03-08 04:04:04,339 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_23_2146199388.jpg
2026-03-08 04:04:04,340 - INFO - ✅ Downloaded: image_17_1379210405.jpg
2026-03-08 04:04:04,340 - INFO - ⏭ Skipping image_17_1379210405: Already processed
2026-03-08 04:04:04,340 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_17_1379210405.jpg
2026-03-08 04:04:04,342 - INFO - ✅ Downloaded: image_20_1725888082.jpg
2026-03-08 04:04:04,343 - INFO - ⏭ Skipping image_20_1725888082: Already processed
2026-03-08 04:04:04,343 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_20_1725888082.jpg
2026-03-08 04:04:04,343 - INFO - ✅ Batch 2 completed: 0 processed, 6 deals inserted
2026-03-08 04:04:04,343 - INFO - 🔄 Processing batch 3/3 (8 images)
2026-03-08 04:04:04,343 - INFO - 🔄 Processing image: image_24_1329197011
2026-03-08 04:04:04,343 - INFO - 🔄 Processing image: image_25_810399351
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_26_852658791
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_27_300195207
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_28_1278795828
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_30_1764062530
2026-03-08 04:04:04,345 - INFO - 🔄 Processing image: image_31_283026642
2026-03-08 04:04:04,345 - INFO - 🔄 Processing image: image_32_2024940956
2026-03-08 04:04:04,371 - INFO - ✅ Downloaded: image_31_283026642.webp
2026-03-08 04:04:04,371 - INFO - ⏭ Skipping image_31_283026642: Already processed
2026-03-08 04:04:04,371 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_31_283026642.webp
2026-03-08 04:04:04,377 - INFO - ✅ Downloaded: image_28_1278795828.jpg
2026-03-08 04:04:04,378 - INFO - ⏭ Skipping image_28_1278795828: Already processed
2026-03-08 04:04:04,378 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_28_1278795828.jpg
2026-03-08 04:04:04,381 - INFO - ✅ Downloaded: image_30_1764062530.jpg
2026-03-08 04:04:04,381 - INFO - ⏭ Skipping image_30_1764062530: Already processed
2026-03-08 04:04:04,381 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_30_1764062530.jpg
2026-03-08 04:04:04,382 - INFO - ✅ Downloaded: image_27_300195207.jpg
2026-03-08 04:04:04,382 - INFO - ⏭ Skipping image_27_300195207: Already processed
2026-03-08 04:04:04,382 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_27_300195207.jpg
2026-03-08 04:04:04,386 - INFO - ✅ Downloaded: image_26_852658791.jpg
2026-03-08 04:04:04,386 - INFO - ⏭ Skipping image_26_852658791: Already processed
2026-03-08 04:04:04,386 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_26_852658791.jpg
2026-03-08 04:04:04,387 - INFO - ✅ Downloaded: image_24_1329197011.jpg
2026-03-08 04:04:04,387 - INFO - ⏭ Skipping image_24_1329197011: Already processed
2026-03-08 04:04:04,387 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_24_1329197011.jpg
2026-03-08 04:04:04,388 - INFO - ✅ Downloaded: image_32_2024940956.webp
2026-03-08 04:04:04,388 - INFO - ⏭ Skipping image_32_2024940956: Already processed
2026-03-08 04:04:04,388 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_32_2024940956.webp
2026-03-08 04:04:04,389 - INFO - ✅ Downloaded: image_25_810399351.jpg
2026-03-08 04:04:04,389 - INFO - ⏭ Skipping image_25_810399351: Already processed
2026-03-08 04:04:04,389 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_25_810399351.jpg
2026-03-08 04:04:04,389 - INFO - ✅ Batch 3 completed: 0 processed, 6 deals inserted
2026-03-08 04:04:04,460 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 6
Deals Extracted: 69
Deals Inserted: 6
Duplicates Skipped: 22
Blacklisted: 0
Errors: 0
Success Rate: 8.7%
Duration: 30.8s
2026-03-08 04:04:04,464 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:04,465 - DEBUG - send_request_headers.complete
2026-03-08 04:04:04,465 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:04,465 - DEBUG - send_request_body.complete
2026-03-08 04:04:04,465 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:04,568 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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-81/82'), (b'CF-Ray', b'9d8ef427ea40ccc3-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'019ccb9d-d4fb-7030-bbd5-059731cb0214'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'69'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,569 - 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-08 04:04:04,569 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:04,569 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,570 - DEBUG - response_closed.started
2026-03-08 04:04:04,570 - DEBUG - response_closed.complete
2026-03-08 04:04:04,571 - INFO - ✅ Deal count OK: 82 active deals
==================================================
🐍 Python process exited with code: 0
✅ Unified Scraper Orchestrator completed successfully

==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 6
Duplicates Skipped: 22
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

Warning: Permanently added 'carl' (ED25519) to the list of known hosts.
[dotenv@17.2.3] injecting env (13) from .env.local -- tip: ✅ audit secrets and track compliance: https://dotenvx.com/ops
✅ 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-08 04:03:33,669 - DEBUG - Using selector: EpollSelector
2026-03-08 04:03:33,670 - INFO - 🚀 Starting Unified Scraper Engine
2026-03-08 04:03:33,792 - INFO - ✅ Supabase client initialized (HTTP/1.1 mode)
2026-03-08 04:03:33,793 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:03:33,803 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f9c9180>
2026-03-08 04:03:33,803 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:03:33,811 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f9c9150>
2026-03-08 04:03:33,811 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:03:33,811 - DEBUG - send_request_headers.complete
2026-03-08 04:03:33,811 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:03:33,811 - DEBUG - send_request_body.complete
2026-03-08 04:03:33,811 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:03:33,949 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:03:33 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Content-Range', b'0-9/*'), (b'CF-Ray', b'9d8ef3685e2f3459-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'019ccb9d-5d3d-7d70-9ef7-39ce8ca98f71'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'23'), (b'Set-Cookie', b'__cf_bm=FrmzjLDFNnPfJ3L.krocxx0JCMw3Ce8T.uO0MmYFymk-1772942613-1.0.1.1-8s85PCdebrkaOa_hLyKzy45X7skf8nh9iZPDEC8zR8X2o4tndKjfYJ_wlq2vkJtURToM3m73sOAnxqo6Jn5Jl1KtsKiFfC853HCTJOz3BA0; path=/; expires=Sun, 08-Mar-26 04:33:33 GMT; domain=.supabase.co; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:03:33,950 - 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-08 04:03:33,950 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:03:33,950 - DEBUG - receive_response_body.complete
2026-03-08 04:03:33,950 - DEBUG - response_closed.started
2026-03-08 04:03:33,951 - DEBUG - response_closed.complete
2026-03-08 04:03:33,951 - INFO - ✅ Loaded 10 product categories for mapping
2026-03-08 04:03:33,952 - INFO - ✅ Gemini AI initialized with model: gemini-2.5-flash-lite
2026-03-08 04:03:35,199 - INFO - ✅ Gemini AI test successful
2026-03-08 04:03:35,199 - INFO - 🗄 Archiving old deals...
2026-03-08 04:03:35,201 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,202 - DEBUG - send_request_headers.complete
2026-03-08 04:03:35,202 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,202 - DEBUG - send_request_body.complete
2026-03-08 04:03:35,202 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,255 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:03:35 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'9d8ef3710a443459-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?created_at=lt.2026-03-06T04%3A03%3A35.200381%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'019ccb9d-62ab-79c9-bfad-9aee2b574c04'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'21'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:03:35,255 - 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-06T04%3A03%3A35.200381%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-08 04:03:35,256 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,257 - DEBUG - receive_response_body.complete
2026-03-08 04:03:35,257 - DEBUG - response_closed.started
2026-03-08 04:03:35,257 - DEBUG - response_closed.complete
2026-03-08 04:03:35,258 - INFO - 🗑 Deleting old archived deals...
2026-03-08 04:03:35,259 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,259 - DEBUG - send_request_headers.complete
2026-03-08 04:03:35,259 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,259 - DEBUG - send_request_body.complete
2026-03-08 04:03:35,259 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:03:35,305 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:03:35 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'9d8ef3716ab33459-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-03-01T04%3A03%3A35.258248%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'019ccb9d-62e5-7715-86f8-359da9f895ad'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'13'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:03:35,306 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals?select=id%2Ctitle%2Cupdated_at&moderation_status=eq.archived&updated_at=lt.2026-03-01T04%3A03%3A35.258248%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-08 04:03:35,306 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:03:35,307 - DEBUG - receive_response_body.complete
2026-03-08 04:03:35,307 - DEBUG - response_closed.started
2026-03-08 04:03:35,307 - DEBUG - response_closed.complete
2026-03-08 04:03:35,751 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/
2026-03-08 04:03:50,227 - INFO - 📸 Found 28 potential deal images
2026-03-08 04:03:50,228 - INFO - 🔄 Processing batch 1/3 (10 images)
2026-03-08 04:03:50,228 - INFO - 🔄 Processing image: image_3_716938862
2026-03-08 04:03:50,228 - INFO - 🔄 Processing image: image_4_2127314448
2026-03-08 04:03:50,228 - INFO - 🔄 Processing image: image_5_1539164129
2026-03-08 04:03:50,228 - INFO - 🔄 Processing image: image_6_1180173000
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_7_954185827
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_8_1114115798
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_9_975854079
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_10_151149826
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_11_1920351981
2026-03-08 04:03:50,229 - INFO - 🔄 Processing image: image_12_953262306
2026-03-08 04:03:50,263 - INFO - ✅ Downloaded: image_8_1114115798.jpg
2026-03-08 04:03:50,264 - INFO - 🤖 Using original Gemini extraction for image_8_1114115798.jpg
2026-03-08 04:03:51,956 - INFO - 📊 First pass extracted 11 deals
2026-03-08 04:03:51,957 - DEBUG - Normalizing dispensary: 'curaleaf' -> 'curaleaf'
2026-03-08 04:03:51,957 - DEBUG - Exact match found: 'curaleaf' -> 'curaleaf'
2026-03-08 04:03:51,957 - WARNING - DEBUG: Normalized curaleaf -> curaleaf
2026-03-08 04:03:51,957 - INFO - ✅ Processed image_8_1114115798: 11 deals from curaleaf
2026-03-08 04:03:51,975 - INFO - ✅ Downloaded: image_3_716938862.webp
2026-03-08 04:03:51,975 - INFO - ⏭ Skipping image_3_716938862: Already processed
2026-03-08 04:03:51,975 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_3_716938862.webp
2026-03-08 04:03:51,980 - INFO - ✅ Downloaded: image_5_1539164129.webp
2026-03-08 04:03:51,980 - INFO - ⏭ Skipping image_5_1539164129: Already processed
2026-03-08 04:03:51,980 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_5_1539164129.webp
2026-03-08 04:03:51,985 - INFO - ✅ Downloaded: image_4_2127314448.webp
2026-03-08 04:03:51,985 - INFO - ⏭ Skipping image_4_2127314448: Already processed
2026-03-08 04:03:51,985 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_4_2127314448.webp
2026-03-08 04:03:51,989 - INFO - ✅ Downloaded: image_11_1920351981.jpg
2026-03-08 04:03:51,989 - INFO - 🤖 Using original Gemini extraction for image_11_1920351981.jpg
2026-03-08 04:03:51,991 - INFO - ✅ Downloaded: image_12_953262306.jpg
2026-03-08 04:03:51,992 - INFO - 🤖 Using original Gemini extraction for image_12_953262306.jpg
2026-03-08 04:03:51,993 - INFO - ✅ Downloaded: image_7_954185827.jpg
2026-03-08 04:03:51,993 - INFO - 🤖 Using original Gemini extraction for image_7_954185827.jpg
2026-03-08 04:03:51,996 - INFO - ✅ Downloaded: image_9_975854079.jpg
2026-03-08 04:03:51,996 - INFO - ⏭ Skipping image_9_975854079: Already processed
2026-03-08 04:03:51,996 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_9_975854079.jpg
2026-03-08 04:03:51,997 - INFO - ✅ Downloaded: image_6_1180173000.jpg
2026-03-08 04:03:51,997 - INFO - 🤖 Using original Gemini extraction for image_6_1180173000.jpg
2026-03-08 04:03:53,956 - INFO - 📊 First pass extracted 11 deals
2026-03-08 04:03:53,957 - DEBUG - Normalizing dispensary: 'planet 13 FLORIDA' -> 'planet 13 florida'
2026-03-08 04:03:53,957 - DEBUG - Variant match: 'planet 13' in 'planet 13 florida' -> 'planet-13'
2026-03-08 04:03:53,957 - WARNING - DEBUG: Normalized planet 13 FLORIDA -> planet-13
2026-03-08 04:03:53,957 - INFO - ✅ Processed image_12_953262306: 11 deals from planet 13 FLORIDA
2026-03-08 04:03:56,219 - INFO - 📊 First pass extracted 5 deals
2026-03-08 04:03:56,219 - INFO - 🔄 Deal count (5) below threshold, running refinement pass...
2026-03-08 04:03:57,069 - INFO - ✅ Refinement pass found 4 additional deals
2026-03-08 04:03:57,069 - INFO - 📈 Total deals after refinement: 5 (0 new unique deals)
2026-03-08 04:03:57,069 - DEBUG - Normalizing dispensary: 'SUNBURN CANNABIS' -> 'sunburn cannabis'
2026-03-08 04:03:57,069 - DEBUG - Exact match found: 'SUNBURN CANNABIS' -> 'sunburn'
2026-03-08 04:03:57,069 - WARNING - DEBUG: Normalized SUNBURN CANNABIS -> sunburn
2026-03-08 04:03:57,069 - INFO - ✅ Processed image_11_1920351981: 5 deals from SUNBURN CANNABIS
2026-03-08 04:03:57,071 - INFO - ✅ Downloaded: image_10_151149826.jpg
2026-03-08 04:03:57,071 - INFO - 🤖 Using original Gemini extraction for image_10_151149826.jpg
2026-03-08 04:03:59,815 - INFO - 📊 First pass extracted 28 deals
2026-03-08 04:03:59,815 - DEBUG - Normalizing dispensary: 'MINT CANNABIS' -> 'mint cannabis'
2026-03-08 04:03:59,815 - DEBUG - Exact match found: 'MINT CANNABIS' -> 'mint-cannabis'
2026-03-08 04:03:59,815 - WARNING - DEBUG: Normalized MINT CANNABIS -> mint-cannabis
2026-03-08 04:03:59,815 - INFO - ✅ Processed image_7_954185827: 28 deals from MINT CANNABIS
2026-03-08 04:04:00,946 - INFO - 📊 First pass extracted 3 deals
2026-03-08 04:04:00,947 - INFO - 🔄 Deal count (3) below threshold, running refinement pass...
2026-03-08 04:04:01,849 - INFO - ℹ Refinement pass found no additional deals
2026-03-08 04:04:01,849 - DEBUG - Normalizing dispensary: 'Cookies' -> 'cookies'
2026-03-08 04:04:01,849 - DEBUG - Exact match found: 'Cookies' -> 'cookies'
2026-03-08 04:04:01,849 - WARNING - DEBUG: Normalized Cookies -> cookies
2026-03-08 04:04:01,849 - INFO - ✅ Processed image_6_1180173000: 3 deals from Cookies
2026-03-08 04:04:03,691 - INFO - 📊 First pass extracted 11 deals
2026-03-08 04:04:03,691 - DEBUG - Normalizing dispensary: 'Grow Healthy' -> 'grow healthy'
2026-03-08 04:04:03,691 - DEBUG - Exact match found: 'Grow Healthy' -> 'grow-healthy'
2026-03-08 04:04:03,691 - WARNING - DEBUG: Normalized Grow Healthy -> grow-healthy
2026-03-08 04:04:03,691 - INFO - ✅ Processed image_10_151149826: 11 deals from Grow Healthy
2026-03-08 04:04:03,693 - DEBUG - close.started
2026-03-08 04:04:03,693 - DEBUG - close.complete
2026-03-08 04:04:03,693 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,694 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,697 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,699 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,701 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,702 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,718 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5df220>
2026-03-08 04:04:03,719 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,720 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5df790>
2026-03-08 04:04:03,720 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f863760>
2026-03-08 04:04:03,721 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,721 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5dd4e0>
2026-03-08 04:04:03,722 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5deb30>
2026-03-08 04:04:03,721 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,722 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f8603d0>
2026-03-08 04:04:03,725 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,725 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,726 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,729 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5df1f0>
2026-03-08 04:04:03,730 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,730 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,730 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,730 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,730 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,731 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5df5b0>
2026-03-08 04:04:03,731 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,733 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,733 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,733 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,733 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,734 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f861ae0>
2026-03-08 04:04:03,735 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,735 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,735 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,735 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,735 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,736 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5dd870>
2026-03-08 04:04:03,736 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272f861bd0>
2026-03-08 04:04:03,737 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5deaa0>
2026-03-08 04:04:03,737 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,738 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,738 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,739 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,739 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,740 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,741 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,741 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,740 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,741 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,741 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,742 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,742 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,743 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,743 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:03,785 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4235da88fdb-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.curaleaf'), (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'019ccb9d-d21c-75ad-bcc5-9fd49a01ca9f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'10'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,785 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.curaleaf&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,785 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,786 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,786 - DEBUG - response_closed.started
2026-03-08 04:04:03,786 - DEBUG - response_closed.complete
2026-03-08 04:04:03,786 - DEBUG - close.started
2026-03-08 04:04:03,786 - DEBUG - close.complete
2026-03-08 04:04:03,786 - DEBUG - 🏷 Product types: ['cartridges', 'select cliq', 'live rosin', 'edibles', 'pre-rolls', 'vapes'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-08 04:04:03,788 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,793 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e6530>
2026-03-08 04:04:03,794 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,800 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e64d0>
2026-03-08 04:04:03,801 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,801 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,801 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,801 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,801 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,820 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4236e72c74d-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.grow-healthy'), (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'019ccb9d-d229-785d-8e04-1151c6f4a9bf'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'31'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,821 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.grow-healthy&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,821 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,821 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,821 - DEBUG - response_closed.started
2026-03-08 04:04:03,822 - DEBUG - response_closed.complete
2026-03-08 04:04:03,822 - DEBUG - close.started
2026-03-08 04:04:03,822 - DEBUG - close.complete
2026-03-08 04:04:03,822 - DEBUG - 🏷 Product types: ['pre-rolls', 'flower', 'concentrates', 'vapes'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-08 04:04:03,823 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,828 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e7910>
2026-03-08 04:04:03,829 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,836 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c5e78b0>
2026-03-08 04:04:03,836 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,837 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,837 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,837 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,837 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,856 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 GMT'), (b'Content-Type', b'application/json; charset=utf-8'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'Content-Range', b'0-0/*'), (b'CF-Ray', b'9d8ef4236ca01df6-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.sunburn'), (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'019ccb9d-d226-7f64-8a66-83f89bafcff2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'42'), (b'Server', b'cloudflare'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,857 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.sunburn&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,857 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,857 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,857 - DEBUG - response_closed.started
2026-03-08 04:04:03,858 - DEBUG - response_closed.complete
2026-03-08 04:04:03,858 - DEBUG - close.started
2026-03-08 04:04:03,858 - DEBUG - close.complete
2026-03-08 04:04:03,858 - DEBUG - 🏷 Product types: ['pre-rolls', 'vapes'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-08 04:04:03,859 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,860 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4235dc52520-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.mint-cannabis'), (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'019ccb9d-d220-7c84-8e43-08a8f5d4dc32'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'85'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,860 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.mint-cannabis&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,860 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,861 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,861 - DEBUG - response_closed.started
2026-03-08 04:04:03,861 - DEBUG - response_closed.complete
2026-03-08 04:04:03,861 - DEBUG - close.started
2026-03-08 04:04:03,861 - DEBUG - close.complete
2026-03-08 04:04:03,862 - DEBUG - 🏷 Product types: ['all-in-one vapes', 'edibles', 'chews', 'rso chocolates', 'flower', 'concentrates', 'pre-rolls', 'vapes', 'dablcators', 'live resin'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-08 04:04:03,862 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,863 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c414d30>
2026-03-08 04:04:03,864 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,865 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c415f90>
2026-03-08 04:04:03,866 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,871 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c414cd0>
2026-03-08 04:04:03,871 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,872 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,872 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,872 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c415f30>
2026-03-08 04:04:03,873 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,874 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,874 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,874 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,874 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,899 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4236a1178bc-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.cookies'), (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'019ccb9d-d225-741d-8308-f27c2b8b7d32'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'74'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,900 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.cookies&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,900 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,900 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,900 - DEBUG - response_closed.started
2026-03-08 04:04:03,901 - DEBUG - response_closed.complete
2026-03-08 04:04:03,901 - DEBUG - close.started
2026-03-08 04:04:03,901 - DEBUG - close.complete
2026-03-08 04:04:03,902 - DEBUG - 🏷 Product types: [] → Category ID: None
2026-03-08 04:04:03,903 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,907 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c4171f0>
2026-03-08 04:04:03,907 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,914 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c417190>
2026-03-08 04:04:03,914 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,915 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,915 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,915 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,915 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,951 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:03 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-0/*'), (b'CF-Ray', b'9d8ef4235dc09aaa-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/dispensaries?is_active=eq.True&select=id%2Cname&slug=eq.planet-13'), (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'019ccb9d-d223-7ed8-9461-18124d997a5b'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'129'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:03,952 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.planet-13&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-08 04:04:03,952 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:03,952 - DEBUG - receive_response_body.complete
2026-03-08 04:04:03,952 - DEBUG - response_closed.started
2026-03-08 04:04:03,952 - DEBUG - response_closed.complete
2026-03-08 04:04:03,953 - DEBUG - close.started
2026-03-08 04:04:03,953 - DEBUG - close.complete
2026-03-08 04:04:03,953 - DEBUG - 🏷 Product types: ['flower', 'pre-roll', 'vape', 'concentrates'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-08 04:04:03,955 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-08 04:04:03,960 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c41c610>
2026-03-08 04:04:03,961 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f272fb589c0> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-08 04:04:03,969 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f272c41c5b0>
2026-03-08 04:04:03,969 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-08 04:04:03,970 - DEBUG - send_request_headers.complete
2026-03-08 04:04:03,970 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-08 04:04:03,970 - DEBUG - send_request_body.complete
2026-03-08 04:04:03,970 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-08 04:04:04,250 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef423fc81cf54-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d288-7f80-aa4b-791cccb8fe9d'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'365'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,251 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,251 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,252 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,252 - DEBUG - response_closed.started
2026-03-08 04:04:04,252 - DEBUG - response_closed.complete
2026-03-08 04:04:04,252 - DEBUG - close.started
2026-03-08 04:04:04,252 - DEBUG - close.complete
2026-03-08 04:04:04,253 - INFO - ✅ Inserted deal: Grow Healthy - 2X Points & Up to 50% Off Storewide!
2026-03-08 04:04:04,256 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4243b353d15-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2b3-7dec-ac48-f4bf1713646f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'329'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,257 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,257 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,258 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,259 - DEBUG - response_closed.started
2026-03-08 04:04:04,260 - DEBUG - response_closed.complete
2026-03-08 04:04:04,259 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef424dd481bf6-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d30d-73a9-9ae0-07aace0fd332'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'249'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,262 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,262 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,261 - INFO - ✅ Inserted deal: Sunburn Cannabis - 35% Off Storewide & Free Pre-Rolls
2026-03-08 04:04:04,263 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4243e921e13-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2ac-7d97-bd84-e9f22db11d12'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'304'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,264 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef423ccf3ccc3-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d262-7a97-86c0-1801d83075bf'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'379'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,264 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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'9d8ef4247ec6f5c2-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (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'return=representation'), (b'sb-gateway-version', b'1'), (b'sb-project-ref', b'mrngdyllepreqkxxmvqn'), (b'sb-request-id', b'019ccb9d-d2d8-7c03-9b1f-ff827914a1a2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'295'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,265 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,266 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,266 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,268 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-08 04:04:04,268 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,269 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,269 - DEBUG - response_closed.started
2026-03-08 04:04:04,269 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-08 04:04:04,271 - DEBUG - response_closed.complete
2026-03-08 04:04:04,271 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,271 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,272 - INFO - ✅ Inserted deal: Planet 13 - Free Flower, Pre-Rolls, and 45% Off Storewide
2026-03-08 04:04:04,272 - DEBUG - response_closed.started
2026-03-08 04:04:04,272 - DEBUG - response_closed.complete
2026-03-08 04:04:04,273 - DEBUG - response_closed.started
2026-03-08 04:04:04,273 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,274 - INFO - ✅ Inserted deal: Curaleaf - Storewide Savings & Product Deals
2026-03-08 04:04:04,274 - DEBUG - response_closed.complete
2026-03-08 04:04:04,274 - DEBUG - response_closed.started
2026-03-08 04:04:04,276 - INFO - ✅ Inserted deal: Mint Cannabis - March Madness & Eighth Day Deals Galore
2026-03-08 04:04:04,276 - DEBUG - response_closed.complete
2026-03-08 04:04:04,277 - INFO - ✅ Inserted deal: Cookies - Storewide Savings & Spend More Deals
2026-03-08 04:04:04,281 - INFO - ✅ Batch 1 completed: 6 processed, 6 deals inserted
2026-03-08 04:04:04,282 - INFO - 🔄 Processing batch 2/3 (10 images)
2026-03-08 04:04:04,282 - INFO - 🔄 Processing image: image_14_725973623
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_15_174237851
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_16_868795887
2026-03-08 04:04:04,283 - INFO - 🔄 Processing image: image_17_1379210405
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_18_234266716
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_19_233343195
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_20_1725888082
2026-03-08 04:04:04,284 - INFO - 🔄 Processing image: image_21_781112938
2026-03-08 04:04:04,285 - INFO - 🔄 Processing image: image_22_1358497160
2026-03-08 04:04:04,285 - INFO - 🔄 Processing image: image_23_2146199388
2026-03-08 04:04:04,314 - INFO - ✅ Downloaded: image_21_781112938.jpg
2026-03-08 04:04:04,314 - INFO - ⏭ Skipping image_21_781112938: Already processed
2026-03-08 04:04:04,315 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_21_781112938.jpg
2026-03-08 04:04:04,323 - INFO - ✅ Downloaded: image_22_1358497160.jpg
2026-03-08 04:04:04,323 - INFO - ⏭ Skipping image_22_1358497160: Already processed
2026-03-08 04:04:04,323 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_22_1358497160.jpg
2026-03-08 04:04:04,327 - INFO - ✅ Downloaded: image_18_234266716.jpg
2026-03-08 04:04:04,328 - INFO - ⏭ Skipping image_18_234266716: Already processed
2026-03-08 04:04:04,328 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_18_234266716.jpg
2026-03-08 04:04:04,331 - INFO - ✅ Downloaded: image_14_725973623.webp
2026-03-08 04:04:04,332 - INFO - ⏭ Skipping image_14_725973623: Already processed
2026-03-08 04:04:04,332 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_14_725973623.webp
2026-03-08 04:04:04,333 - INFO - ✅ Downloaded: image_15_174237851.jpg
2026-03-08 04:04:04,333 - INFO - ⏭ Skipping image_15_174237851: Already processed
2026-03-08 04:04:04,334 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_15_174237851.jpg
2026-03-08 04:04:04,336 - INFO - ✅ Downloaded: image_19_233343195.jpg
2026-03-08 04:04:04,337 - INFO - ⏭ Skipping image_19_233343195: Already processed
2026-03-08 04:04:04,337 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_19_233343195.jpg
2026-03-08 04:04:04,338 - INFO - ✅ Downloaded: image_16_868795887.jpg
2026-03-08 04:04:04,338 - INFO - ⏭ Skipping image_16_868795887: Already processed
2026-03-08 04:04:04,338 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_16_868795887.jpg
2026-03-08 04:04:04,339 - INFO - ✅ Downloaded: image_23_2146199388.jpg
2026-03-08 04:04:04,339 - INFO - ⏭ Skipping image_23_2146199388: Already processed
2026-03-08 04:04:04,339 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_23_2146199388.jpg
2026-03-08 04:04:04,340 - INFO - ✅ Downloaded: image_17_1379210405.jpg
2026-03-08 04:04:04,340 - INFO - ⏭ Skipping image_17_1379210405: Already processed
2026-03-08 04:04:04,340 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_17_1379210405.jpg
2026-03-08 04:04:04,342 - INFO - ✅ Downloaded: image_20_1725888082.jpg
2026-03-08 04:04:04,343 - INFO - ⏭ Skipping image_20_1725888082: Already processed
2026-03-08 04:04:04,343 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_20_1725888082.jpg
2026-03-08 04:04:04,343 - INFO - ✅ Batch 2 completed: 0 processed, 6 deals inserted
2026-03-08 04:04:04,343 - INFO - 🔄 Processing batch 3/3 (8 images)
2026-03-08 04:04:04,343 - INFO - 🔄 Processing image: image_24_1329197011
2026-03-08 04:04:04,343 - INFO - 🔄 Processing image: image_25_810399351
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_26_852658791
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_27_300195207
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_28_1278795828
2026-03-08 04:04:04,344 - INFO - 🔄 Processing image: image_30_1764062530
2026-03-08 04:04:04,345 - INFO - 🔄 Processing image: image_31_283026642
2026-03-08 04:04:04,345 - INFO - 🔄 Processing image: image_32_2024940956
2026-03-08 04:04:04,371 - INFO - ✅ Downloaded: image_31_283026642.webp
2026-03-08 04:04:04,371 - INFO - ⏭ Skipping image_31_283026642: Already processed
2026-03-08 04:04:04,371 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_31_283026642.webp
2026-03-08 04:04:04,377 - INFO - ✅ Downloaded: image_28_1278795828.jpg
2026-03-08 04:04:04,378 - INFO - ⏭ Skipping image_28_1278795828: Already processed
2026-03-08 04:04:04,378 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_28_1278795828.jpg
2026-03-08 04:04:04,381 - INFO - ✅ Downloaded: image_30_1764062530.jpg
2026-03-08 04:04:04,381 - INFO - ⏭ Skipping image_30_1764062530: Already processed
2026-03-08 04:04:04,381 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_30_1764062530.jpg
2026-03-08 04:04:04,382 - INFO - ✅ Downloaded: image_27_300195207.jpg
2026-03-08 04:04:04,382 - INFO - ⏭ Skipping image_27_300195207: Already processed
2026-03-08 04:04:04,382 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_27_300195207.jpg
2026-03-08 04:04:04,386 - INFO - ✅ Downloaded: image_26_852658791.jpg
2026-03-08 04:04:04,386 - INFO - ⏭ Skipping image_26_852658791: Already processed
2026-03-08 04:04:04,386 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_26_852658791.jpg
2026-03-08 04:04:04,387 - INFO - ✅ Downloaded: image_24_1329197011.jpg
2026-03-08 04:04:04,387 - INFO - ⏭ Skipping image_24_1329197011: Already processed
2026-03-08 04:04:04,387 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_24_1329197011.jpg
2026-03-08 04:04:04,388 - INFO - ✅ Downloaded: image_32_2024940956.webp
2026-03-08 04:04:04,388 - INFO - ⏭ Skipping image_32_2024940956: Already processed
2026-03-08 04:04:04,388 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_32_2024940956.webp
2026-03-08 04:04:04,389 - INFO - ✅ Downloaded: image_25_810399351.jpg
2026-03-08 04:04:04,389 - INFO - ⏭ Skipping image_25_810399351: Already processed
2026-03-08 04:04:04,389 - DEBUG - 🗑 Deleted duplicate file: /home/crogers2287/cannadealsfl/deal_images/image_25_810399351.jpg
2026-03-08 04:04:04,389 - INFO - ✅ Batch 3 completed: 0 processed, 6 deals inserted
2026-03-08 04:04:04,460 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 6
Deals Extracted: 69
Deals Inserted: 6
Duplicates Skipped: 22
Blacklisted: 0
Errors: 0
Success Rate: 8.7%
Duration: 30.8s
2026-03-08 04:04:04,464 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-08 04:04:04,465 - DEBUG - send_request_headers.complete
2026-03-08 04:04:04,465 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-08 04:04:04,465 - DEBUG - send_request_body.complete
2026-03-08 04:04:04,465 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-08 04:04:04,568 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sun, 08 Mar 2026 04:04:04 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-81/82'), (b'CF-Ray', b'9d8ef427ea40ccc3-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'019ccb9d-d4fb-7030-bbd5-059731cb0214'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'69'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-08 04:04:04,569 - 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-08 04:04:04,569 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-08 04:04:04,569 - DEBUG - receive_response_body.complete
2026-03-08 04:04:04,570 - DEBUG - response_closed.started
2026-03-08 04:04:04,570 - DEBUG - response_closed.complete
2026-03-08 04:04:04,571 - INFO - ✅ Deal count OK: 82 active deals
==================================================
🐍 Python process exited with code: 0
✅ Unified Scraper Orchestrator completed successfully

==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 0
Deals Extracted: 0
Deals Inserted: 6
Duplicates Skipped: 22
Blacklisted: 0
Errors: 0
==================================================


The scraper ran successfully. Let me summarize the results:

- Images Found: 28
- Images Processed: 6
- Deals Extracted: 69
- Deals Inserted: 6
- Duplicates Skipped: 22
- Errors: 0
- Total active deals in DB: 82

The 6 new deals inserted were:
1. Grow Healthy - 2X Points & Up to 50% Off Storewide!
2. Sunburn Cannabis - 35% Off Storewide & Free Pre-Rolls
3. Planet 13 - Free Flower, Pre-Rolls, and 45% Off Storewide
4. Curaleaf - Storewide Savings & Product Deals
5. Mint Cannabis - March Madness & Eighth Day Deals Galore
6. Cookies - Storewide Savings & Spend More Deals

This is a successful run. The success rate of 8.7% refers to the extraction rate from images processed. The 22 duplicates were skipped (already in DB), and 6 new deals were inserted.

**CannaDeals Deal Scraper - Hourly Run Complete**

📊 **Results:**
- **6 new deals inserted** into database
- **22 duplicates skipped** (already in DB)
- **82 total active deals** now available
- **0 errors**

🌿 **New Deals Added:**
1. Grow Healthy - 2X Points & Up to 50% Off Storewide!
2. Sunburn Cannabis - 35% Off Storewide & Free Pre-Rolls
3. Planet 13 - Free Flower, Pre-Rolls, and 45% Off Storewide
4. Curaleaf - Storewide Savings & Product Deals
5. Mint Cannabis - March Madness & Eighth Day Deals Galore
6. Cookies - Storewide Savings & Spend More Deals

Duration: ~30 seconds. All systems nominal.