uest=<Request [b'GET']>
2026-03-07 13:04:59,971 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,972 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,972 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,972 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,972 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,973 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,003 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:59 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'9d89cf26cca190e1-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.eden'), (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'019cc866-b444-72ba-8a75-a62bf79376a3'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'2'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,004 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.eden&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,004 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,005 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,005 - DEBUG - response_closed.started
2026-03-07 13:05:00,005 - DEBUG - response_closed.complete
2026-03-07 13:05:00,005 - DEBUG - close.started
2026-03-07 13:05:00,005 - DEBUG - close.complete
2026-03-07 13:05:00,006 - DEBUG - 🏷 Product types: ['rosin', 'flower', 'live rosin aio', 'ounces'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,007 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,008 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26de180bfa-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'019cc866-b44b-7a07-910c-cf66b5be5a3f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'1'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,008 - 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-07 13:05:00,009 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26db0c3d15-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.insa'), (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'019cc866-b44c-72d6-99ab-293345a0ff50'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'2'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,009 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,011 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.insa&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,011 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,012 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,012 - DEBUG - response_closed.started
2026-03-07 13:05:00,013 - DEBUG - response_closed.complete
2026-03-07 13:05:00,013 - DEBUG - close.started
2026-03-07 13:05:00,014 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,014 - DEBUG - close.complete
2026-03-07 13:05:00,014 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e21247f0>
2026-03-07 13:05:00,015 - DEBUG - 🏷 Product types: [] → Category ID: None
2026-03-07 13:05:00,014 - DEBUG - response_closed.started
2026-03-07 13:05:00,016 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,017 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,017 - DEBUG - response_closed.complete
2026-03-07 13:05:00,018 - DEBUG - close.started
2026-03-07 13:05:00,018 - DEBUG - close.complete
2026-03-07 13:05:00,018 - DEBUG - 🏷 Product types: ['flower', 'pre-rolls', 'smalls'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,019 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,023 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2126b00>
2026-03-07 13:05:00,023 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,024 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39ba350>
2026-03-07 13:05:00,024 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,025 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,025 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,025 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b870d0>
2026-03-07 13:05:00,026 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,026 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,028 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,032 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b879a0>
2026-03-07 13:05:00,032 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,033 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,033 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,033 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,033 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b85db0>
2026-03-07 13:05:00,036 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,036 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,036 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,361 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26d9f33535-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.one-plant'), (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'019cc866-b449-7636-9706-6b08bf79e8ff'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'356'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,362 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.one-plant&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,362 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,363 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,364 - DEBUG - response_closed.started
2026-03-07 13:05:00,364 - DEBUG - response_closed.complete
2026-03-07 13:05:00,364 - DEBUG - close.started
2026-03-07 13:05:00,364 - DEBUG - close.complete
2026-03-07 13:05:00,365 - DEBUG - 🏷 Product types: ['edibles', 'distillate carts', 'flower'] → Category ID: 65f5b0cf-e95a-490e-bea8-bcb1722fde4a
2026-03-07 13:05:00,367 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,368 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26cea28f69-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.the-flowery'), (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'019cc866-b447-7e0a-b9ec-eb1920b9412c'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'360'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,369 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf273c908d17-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'019cc866-b48f-70eb-b293-168653df4395'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'288'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,370 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.the-flowery&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,370 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26dd638fa5-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.jungle-boys'), (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'019cc866-b44d-7592-9501-80c2c1870889'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'352'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,371 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26c99ae8a9-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.the-flowery'), (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'019cc866-b446-7168-bf85-f2380b81feba'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'367'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,375 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.the-flowery&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,375 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,374 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf27284964fe-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'019cc866-b481-707a-a699-a1804c72a9de'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'284'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,374 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,374 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3d3c0>
2026-03-07 13:05:00,373 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,381 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,379 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf2738708ebf-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'019cc866-b488-7b0d-8fc3-1c31eba051d6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'302'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,380 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.jungle-boys&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,380 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,381 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,376 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,381 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,382 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,384 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,384 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,385 - DEBUG - response_closed.started
2026-03-07 13:05:00,385 - DEBUG - response_closed.started
2026-03-07 13:05:00,386 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,389 - DEBUG - response_closed.started
2026-03-07 13:05:00,389 - DEBUG - response_closed.complete
2026-03-07 13:05:00,389 - DEBUG - response_closed.complete
2026-03-07 13:05:00,390 - DEBUG - response_closed.started
2026-03-07 13:05:00,390 - DEBUG - response_closed.complete
2026-03-07 13:05:00,391 - DEBUG - response_closed.complete
2026-03-07 13:05:00,391 - DEBUG - close.started
2026-03-07 13:05:00,392 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,394 - DEBUG - 🏷 Product types: ['concentrates', 'flower'] → Category ID: b8446117-9bdd-4819-b996-5695222cf3bc
2026-03-07 13:05:00,394 - DEBUG - response_closed.started
2026-03-07 13:05:00,395 - INFO - ✅ Inserted deal: Eden - Buy 2 Get 1 Free Rosin & Flower Deals
2026-03-07 13:05:00,396 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4b5e0>
2026-03-07 13:05:00,396 - DEBUG - 🏷 Product types: ['flower', 'prerolls'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,397 - DEBUG - close.complete
2026-03-07 13:05:00,398 - DEBUG - response_closed.started
2026-03-07 13:05:00,401 - DEBUG - response_closed.complete
2026-03-07 13:05:00,401 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,403 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,405 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,406 - DEBUG - close.started
2026-03-07 13:05:00,408 - DEBUG - response_closed.complete
2026-03-07 13:05:00,409 - DEBUG - 🏷 Product types: ['carts', 'flower'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,411 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,411 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,412 - DEBUG - close.complete
2026-03-07 13:05:00,412 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,413 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,414 - INFO - ✅ Inserted deal: Cookies - Extra $5 Off Limited Time Offer
2026-03-07 13:05:00,415 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,415 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,415 - INFO - ✅ Inserted deal: Insa - Weekly Deals: Ounces, Pre-Rolls, Flower & More
2026-03-07 13:05:00,416 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,417 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,418 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,418 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,419 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,420 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,423 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,424 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,425 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,425 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,425 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,457 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299f39a646-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'019cc866-b60a-7035-8433-bf46de4b0ae1'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,458 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,459 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,459 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,459 - DEBUG - response_closed.started
2026-03-07 13:05:00,459 - DEBUG - response_closed.complete
2026-03-07 13:05:00,460 - INFO - ✅ Inserted deal: One Plant Florida - Everyday Low Prices on Edibles, Carts, and Flower
2026-03-07 13:05:00,460 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299ea98fa5-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'019cc866-b608-711d-a6d8-ebb3d94b05f6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,461 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,461 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,461 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,461 - DEBUG - response_closed.started
2026-03-07 13:05:00,462 - DEBUG - response_closed.complete
2026-03-07 13:05:00,462 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299b9a64fe-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'019cc866-b60f-7cd8-b961-a37cc82d5190'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'7'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,463 - INFO - ✅ Inserted deal: The Flowery - Concentrate & Eighth Deals with Promo Codes
2026-03-07 13:05:00,464 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,466 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf29ad008ebf-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'019cc866-b612-7be7-8c4c-10d9ead857bf'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'3'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,467 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,469 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,470 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,471 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,472 - DEBUG - response_closed.started
2026-03-07 13:05:00,472 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,473 - DEBUG - response_closed.complete
2026-03-07 13:05:00,473 - DEBUG - response_closed.started
2026-03-07 13:05:00,474 - INFO - ✅ Inserted deal: The Flowery - Custom Ounces and Bundle Deals
2026-03-07 13:05:00,475 - DEBUG - response_closed.complete
2026-03-07 13:05:00,479 - INFO - ✅ Inserted deal: Jungle Boys - New Live Resin Carts & Premium 8ths
2026-03-07 13:05:00,480 - INFO - ✅ Batch 3 completed: 7 processed, 26 deals inserted
2026-03-07 13:05:00,557 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 26
Deals Extracted: 365
Deals Inserted: 26
Duplicates Skipped: 0
Blacklisted: 0
Errors: 2
Success Rate: 7.1%
Duration: 78.8s
2026-03-07 13:05:00,562 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,563 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,563 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,563 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,563 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,609 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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-52/53'), (b'CF-Ray', b'9d89cf2a8eff8fa5-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'019cc866-b69d-7b6f-b8e0-542fe34af0c6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,609 - 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 13:05:00,609 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,610 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,610 - DEBUG - response_closed.started
2026-03-07 13:05:00,610 - DEBUG - response_closed.complete
2026-03-07 13:05:00,611 - INFO - ✅ Deal count OK: 53 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: 26
Duplicates Skipped: 0
Blacklisted: 0
Errors: 0
==================================================

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: ⚙  specify custom .env file path with { path: '/custom/path/.env' }
✅ 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 13:03:41,729 - INFO - 🗑 Removed 44 expired hash cache entries (TTL: 7 days)
2026-03-07 13:03:41,730 - DEBUG - Using selector: EpollSelector
2026-03-07 13:03:41,730 - INFO - 🚀 Starting Unified Scraper Engine
2026-03-07 13:03:41,956 - INFO - ✅ Supabase client initialized (HTTP/1.1 mode)
2026-03-07 13:03:41,958 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:03:41,966 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2092d70>
2026-03-07 13:03:41,966 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:03:41,973 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2091120>
2026-03-07 13:03:41,973 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:03:41,973 - DEBUG - send_request_headers.complete
2026-03-07 13:03:41,973 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:03:41,974 - DEBUG - send_request_body.complete
2026-03-07 13:03:41,974 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:03:42,048 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:03:42 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'9d89cd3f5ece64a4-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'019cc865-839d-783e-b73b-f83ebb1092c8'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'39'), (b'Set-Cookie', b'__cf_bm=wcG2CbkcO4eC5vJFJDRg_mEEhcd0ZwvW64Vw5zVF7wY-1772888622-1.0.1.1-2FW8fSxC3zY25dORIYtxmtpTr7eQgbt.TxEwLErTJhi684FaU6RqEbCwZyG75AeGMwQspuZladXOdkeHFXXaAVc35mnXFWOphic1ex8kR_g; path=/; expires=Sat, 07-Mar-26 13:33:42 GMT; domain=.supabase.co; HttpOnly; Secure; SameSite=None'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:03:42,049 - 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 13:03:42,049 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:03:42,049 - DEBUG - receive_response_body.complete
2026-03-07 13:03:42,049 - DEBUG - response_closed.started
2026-03-07 13:03:42,049 - DEBUG - response_closed.complete
2026-03-07 13:03:42,050 - INFO - ✅ Loaded 10 product categories for mapping
2026-03-07 13:03:42,050 - INFO - ✅ Gemini AI initialized with model: gemini-2.5-flash-lite
2026-03-07 13:03:43,175 - INFO - ✅ Gemini AI test successful
2026-03-07 13:03:43,175 - INFO - 🗄 Archiving old deals...
2026-03-07 13:03:43,176 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:03:43,177 - DEBUG - send_request_headers.complete
2026-03-07 13:03:43,177 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:03:43,177 - DEBUG - send_request_body.complete
2026-03-07 13:03:43,177 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:03:43,254 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:03:43 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'9d89cd46dee564a4-BOS'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Content-Encoding', b'gzip'), (b'Content-Location', b'/deals?created_at=lt.2026-03-05T13%3A03%3A43.175584%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'019cc865-8851-7791-8511-20085e5e56f5'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'43'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:03:43,254 - 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-05T13%3A03%3A43.175584%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 13:03:43,254 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:03:43,254 - DEBUG - receive_response_body.complete
2026-03-07 13:03:43,255 - DEBUG - response_closed.started
2026-03-07 13:03:43,255 - DEBUG - response_closed.complete
2026-03-07 13:03:43,255 - INFO - 🗑 Deleting old archived deals...
2026-03-07 13:03:43,256 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:03:43,256 - DEBUG - send_request_headers.complete
2026-03-07 13:03:43,256 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:03:43,256 - DEBUG - send_request_body.complete
2026-03-07 13:03:43,256 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:03:43,320 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:03:43 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'9d89cd475f5e64a4-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-28T13%3A03%3A43.255365%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'019cc865-889f-7bd5-9be3-1cf674c108c9'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'30'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:03:43,320 - 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-28T13%3A03%3A43.255365%2B00%3A00 "HTTP/1.1 200 OK"
2026-03-07 13:03:43,320 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:03:43,321 - DEBUG - receive_response_body.complete
2026-03-07 13:03:43,321 - DEBUG - response_closed.started
2026-03-07 13:03:43,321 - DEBUG - response_closed.complete
2026-03-07 13:03:43,713 - INFO - 🌐 Navigating to https://flcannabisdeals.org/todays-florida-dispensary-deals/
2026-03-07 13:03:57,865 - INFO - 📸 Found 28 potential deal images
2026-03-07 13:03:57,865 - INFO - 🔄 Processing batch 1/3 (10 images)
2026-03-07 13:03:57,865 - INFO - 🔄 Processing image: image_3_2127314448
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_4_283026642
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_5_1539164129
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_7_206561086
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_8_975854079
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_9_205637565
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_10_324343982
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_11_209331649
2026-03-07 13:03:57,866 - INFO - 🔄 Processing image: image_12_208408128
2026-03-07 13:03:57,867 - INFO - 🔄 Processing image: image_13_868795887
2026-03-07 13:03:57,923 - INFO - ✅ Downloaded: image_5_1539164129.webp
2026-03-07 13:03:57,923 - INFO - 🤖 Using original Gemini extraction for image_5_1539164129.webp
2026-03-07 13:03:57,925 - INFO - ✅ Downloaded: image_4_283026642.webp
2026-03-07 13:03:57,925 - INFO - 🤖 Using original Gemini extraction for image_4_283026642.webp
2026-03-07 13:03:57,928 - INFO - ✅ Downloaded: image_3_2127314448.webp
2026-03-07 13:03:57,928 - INFO - 🤖 Using original Gemini extraction for image_3_2127314448.webp
2026-03-07 13:03:59,153 - INFO - 📊 First pass extracted 9 deals
2026-03-07 13:03:59,153 - DEBUG - Normalizing dispensary: 'Surterra' -> 'surterra'
2026-03-07 13:03:59,153 - DEBUG - Exact match found: 'Surterra' -> 'surterra'
2026-03-07 13:03:59,153 - WARNING - DEBUG: Normalized Surterra -> surterra
2026-03-07 13:03:59,153 - INFO - ✅ Processed image_5_1539164129: 9 deals from Surterra
2026-03-07 13:04:00,745 - INFO - 📊 First pass extracted 5 deals
2026-03-07 13:04:00,745 - INFO - 🔄 Deal count (5) below threshold, running refinement pass...
2026-03-07 13:04:01,361 - INFO - ✅ Refinement pass found 1 additional deals
2026-03-07 13:04:01,362 - INFO - 📈 Total deals after refinement: 6 (1 new unique deals)
2026-03-07 13:04:01,362 - DEBUG - Normalizing dispensary: 'MINT CANNABIS' -> 'mint cannabis'
2026-03-07 13:04:01,362 - DEBUG - Exact match found: 'MINT CANNABIS' -> 'mint-cannabis'
2026-03-07 13:04:01,362 - WARNING - DEBUG: Normalized MINT CANNABIS -> mint-cannabis
2026-03-07 13:04:01,362 - INFO - ✅ Processed image_4_283026642: 6 deals from MINT CANNABIS
2026-03-07 13:04:01,364 - INFO - ✅ Downloaded: image_11_209331649.jpg
2026-03-07 13:04:01,364 - INFO - 🤖 Using original Gemini extraction for image_11_209331649.jpg
2026-03-07 13:04:02,650 - INFO - 📊 First pass extracted 8 deals
2026-03-07 13:04:02,650 - DEBUG - Normalizing dispensary: 'Trulieve' -> 'trulieve'
2026-03-07 13:04:02,651 - DEBUG - Exact match found: 'Trulieve' -> 'trulieve'
2026-03-07 13:04:02,651 - WARNING - DEBUG: Normalized Trulieve -> trulieve
2026-03-07 13:04:02,651 - INFO - ✅ Processed image_3_2127314448: 8 deals from Trulieve
2026-03-07 13:04:02,652 - INFO - ✅ Downloaded: image_12_208408128.jpg
2026-03-07 13:04:02,653 - INFO - 🤖 Using original Gemini extraction for image_12_208408128.jpg
2026-03-07 13:04:02,656 - INFO - ✅ Downloaded: image_10_324343982.jpg
2026-03-07 13:04:02,656 - INFO - 🤖 Using original Gemini extraction for image_10_324343982.jpg
2026-03-07 13:04:02,658 - INFO - ✅ Downloaded: image_9_205637565.jpg
2026-03-07 13:04:02,658 - INFO - 🤖 Using original Gemini extraction for image_9_205637565.jpg
2026-03-07 13:04:04,650 - INFO - 📊 First pass extracted 16 deals
2026-03-07 13:04:04,650 - DEBUG - Normalizing dispensary: 'GrowHealthy' -> 'growhealthy'
2026-03-07 13:04:04,651 - DEBUG - Exact match found: 'GrowHealthy' -> 'grow-healthy'
2026-03-07 13:04:04,651 - WARNING - DEBUG: Normalized GrowHealthy -> grow-healthy
2026-03-07 13:04:04,651 - INFO - ✅ Processed image_11_209331649: 16 deals from GrowHealthy
2026-03-07 13:04:07,187 - INFO - 📊 First pass extracted 11 deals
2026-03-07 13:04:07,187 - DEBUG - Normalizing dispensary: 'planet 13 FLORIDA' -> 'planet 13 florida'
2026-03-07 13:04:07,187 - DEBUG - Variant match: 'planet 13' in 'planet 13 florida' -> 'planet-13'
2026-03-07 13:04:07,187 - WARNING - DEBUG: Normalized planet 13 FLORIDA -> planet-13
2026-03-07 13:04:07,187 - INFO - ✅ Processed image_12_208408128: 11 deals from planet 13 FLORIDA
2026-03-07 13:04:07,189 - INFO - ✅ Downloaded: image_8_975854079.jpg
2026-03-07 13:04:07,189 - INFO - 🤖 Using original Gemini extraction for image_8_975854079.jpg
2026-03-07 13:04:07,191 - INFO - ✅ Downloaded: image_13_868795887.jpg
2026-03-07 13:04:07,191 - INFO - 🤖 Using original Gemini extraction for image_13_868795887.jpg
2026-03-07 13:04:08,365 - INFO - 📊 First pass extracted 4 deals
2026-03-07 13:04:08,366 - INFO - 🔄 Deal count (4) below threshold, running refinement pass...
2026-03-07 13:04:08,948 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 13:04:08,948 - DEBUG - Normalizing dispensary: 'SUNBURN CANNABIS' -> 'sunburn cannabis'
2026-03-07 13:04:08,948 - DEBUG - Exact match found: 'SUNBURN CANNABIS' -> 'sunburn'
2026-03-07 13:04:08,948 - WARNING - DEBUG: Normalized SUNBURN CANNABIS -> sunburn
2026-03-07 13:04:08,948 - INFO - ✅ Processed image_10_324343982: 4 deals from SUNBURN CANNABIS
2026-03-07 13:04:11,303 - INFO - 📊 First pass extracted 10 deals
2026-03-07 13:04:11,303 - DEBUG - Normalizing dispensary: 'Curaleaf' -> 'curaleaf'
2026-03-07 13:04:11,303 - DEBUG - Exact match found: 'Curaleaf' -> 'curaleaf'
2026-03-07 13:04:11,303 - WARNING - DEBUG: Normalized Curaleaf -> curaleaf
2026-03-07 13:04:11,303 - INFO - ✅ Processed image_9_205637565: 10 deals from Curaleaf
2026-03-07 13:04:11,305 - INFO - ✅ Downloaded: image_7_206561086.jpg
2026-03-07 13:04:11,305 - INFO - 🤖 Using original Gemini extraction for image_7_206561086.jpg
2026-03-07 13:04:12,690 - INFO - 📊 First pass extracted 9 deals
2026-03-07 13:04:12,690 - DEBUG - Normalizing dispensary: 'FLUENT CANNABIS CARE' -> 'fluent cannabis care'
2026-03-07 13:04:12,691 - DEBUG - Variant match: 'fluent' in 'fluent cannabis care' -> 'fluent'
2026-03-07 13:04:12,691 - WARNING - DEBUG: Normalized FLUENT CANNABIS CARE -> fluent
2026-03-07 13:04:12,691 - INFO - ✅ Processed image_8_975854079: 9 deals from FLUENT CANNABIS CARE
2026-03-07 13:04:18,001 - INFO - 📊 First pass extracted 82 deals
2026-03-07 13:04:18,001 - DEBUG - Normalizing dispensary: 'Sunnyside' -> 'sunnyside'
2026-03-07 13:04:18,001 - DEBUG - Exact match found: 'Sunnyside' -> 'sunnyside'
2026-03-07 13:04:18,001 - WARNING - DEBUG: Normalized Sunnyside -> sunnyside
2026-03-07 13:04:18,001 - INFO - ✅ Processed image_13_868795887: 82 deals from Sunnyside
2026-03-07 13:04:21,928 - INFO - 📊 First pass extracted 25 deals
2026-03-07 13:04:21,928 - DEBUG - Normalizing dispensary: 'Mint Cannabis' -> 'mint cannabis'
2026-03-07 13:04:21,928 - DEBUG - Exact match found: 'Mint Cannabis' -> 'mint-cannabis'
2026-03-07 13:04:21,928 - WARNING - DEBUG: Normalized Mint Cannabis -> mint-cannabis
2026-03-07 13:04:21,929 - INFO - ✅ Processed image_7_206561086: 25 deals from Mint Cannabis
2026-03-07 13:04:21,931 - DEBUG - close.started
2026-03-07 13:04:21,932 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,933 - DEBUG - close.complete
2026-03-07 13:04:21,933 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,935 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,935 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,936 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,937 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,938 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,939 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,940 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,941 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:21,943 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213f190>
2026-03-07 13:04:21,944 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2090a60>
2026-03-07 13:04:21,944 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,944 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,944 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213e650>
2026-03-07 13:04:21,945 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,945 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213eec0>
2026-03-07 13:04:21,945 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f960e0>
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f03700>
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f94820>
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f952d0>
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213c040>
2026-03-07 13:04:21,946 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2090a30>
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,947 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:21,952 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f95c00>
2026-03-07 13:04:21,952 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,953 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,953 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,953 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,953 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,954 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f97e50>
2026-03-07 13:04:21,954 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213da50>
2026-03-07 13:04:21,955 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f97730>
2026-03-07 13:04:21,955 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f94a30>
2026-03-07 13:04:21,955 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213ee60>
2026-03-07 13:04:21,955 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f948e0>
2026-03-07 13:04:21,955 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,956 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f03730>
2026-03-07 13:04:21,956 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,956 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,956 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,956 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,957 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,957 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,957 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,958 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2090730>
2026-03-07 13:04:21,958 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,958 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213eb00>
2026-03-07 13:04:21,958 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,959 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,959 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,960 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,960 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,960 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,960 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,960 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,961 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,962 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,962 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,962 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,963 - DEBUG - send_request_headers.complete
2026-03-07 13:04:21,963 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,963 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,963 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,963 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,963 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,964 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,964 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,964 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,964 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,964 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,965 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,965 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,965 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,965 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:21,965 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,966 - DEBUG - send_request_body.complete
2026-03-07 13:04:21,966 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:21,966 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:22,079 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce393c8c8731-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.sunnyside'), (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'019cc866-1fce-7b66-a1f5-4184e0cfe286'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'82'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,080 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.sunnyside&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:22,080 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,080 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,080 - DEBUG - response_closed.started
2026-03-07 13:04:22,080 - DEBUG - response_closed.complete
2026-03-07 13:04:22,080 - DEBUG - close.started
2026-03-07 13:04:22,081 - DEBUG - close.complete
2026-03-07 13:04:22,081 - DEBUG - 🏷 Product types: ['flower', 'vapes', 'pre-rolls', 'concentrates', 'edibles', 'tinctures', 'syringes'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:22,082 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,085 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec5450>
2026-03-07 13:04:22,085 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,086 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce393b921714-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'019cc866-1fce-7d02-b325-5df54992456f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'89'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,086 - 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-07 13:04:22,086 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,087 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,087 - DEBUG - response_closed.started
2026-03-07 13:04:22,087 - DEBUG - response_closed.complete
2026-03-07 13:04:22,087 - DEBUG - close.started
2026-03-07 13:04:22,087 - DEBUG - close.complete
2026-03-07 13:04:22,087 - DEBUG - 🏷 Product types: ['vape carts'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-07 13:04:22,088 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,089 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3949c15609-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'019cc866-1fd4-75ab-a586-a9c2cb921339'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'89'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,089 - 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-07 13:04:22,089 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,090 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,090 - DEBUG - response_closed.started
2026-03-07 13:04:22,090 - DEBUG - response_closed.complete
2026-03-07 13:04:22,090 - DEBUG - close.started
2026-03-07 13:04:22,090 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce393ab37818-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.surterra'), (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'019cc866-1fca-71ca-a3ae-b27b587e89a2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'97'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,091 - DEBUG - close.complete
2026-03-07 13:04:22,091 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.surterra&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:22,091 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec5930>
2026-03-07 13:04:22,092 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec5420>
2026-03-07 13:04:22,092 - DEBUG - 🏷 Product types: ['cartridges', 'cliq vapes', 'live rosin', 'edibles', 'pre-rolls', 'vapes'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-07 13:04:22,092 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,092 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,092 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,093 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,094 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,094 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,095 - DEBUG - response_closed.started
2026-03-07 13:04:22,095 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,095 - DEBUG - response_closed.complete
2026-03-07 13:04:22,095 - DEBUG - close.started
2026-03-07 13:04:22,095 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,095 - DEBUG - close.complete
2026-03-07 13:04:22,095 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,096 - DEBUG - 🏷 Product types: ['edibles'] → Category ID: 65f5b0cf-e95a-490e-bea8-bcb1722fde4a
2026-03-07 13:04:22,097 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,097 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce394d42905c-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.fluent'), (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'019cc866-1fd2-7cca-b954-e7b56a7ae6d6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'86'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,098 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.fluent&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:22,098 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3ca90>
2026-03-07 13:04:22,098 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,098 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,099 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,099 - DEBUG - response_closed.started
2026-03-07 13:04:22,099 - DEBUG - response_closed.complete
2026-03-07 13:04:22,099 - DEBUG - close.started
2026-03-07 13:04:22,099 - DEBUG - close.complete
2026-03-07 13:04:22,099 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec5960>
2026-03-07 13:04:22,099 - DEBUG - 🏷 Product types: ['flower', 'vapes'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:22,100 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,100 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,101 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e02470>
2026-03-07 13:04:22,101 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3949174f75-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'019cc866-1fcf-7dbe-baa5-5fe6c47aaa1d'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'101'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,101 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,102 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,102 - 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-07 13:04:22,102 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,103 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,103 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,104 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,104 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,104 - DEBUG - response_closed.started
2026-03-07 13:04:22,104 - DEBUG - response_closed.complete
2026-03-07 13:04:22,104 - DEBUG - close.started
2026-03-07 13:04:22,105 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e00f10>
2026-03-07 13:04:22,105 - DEBUG - close.complete
2026-03-07 13:04:22,105 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,105 - DEBUG - 🏷 Product types: ['all-in-one vapes', 'pre-rolls', 'vapes', 'flower', 'ground flower', 'bulk flower', 'distillate vapes', 'live resin vapes', 'concentrates', 'tinctures', 'rso chocolates', 'capsules', 'edibles', 'dablicators'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-07 13:04:22,106 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,106 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,106 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,107 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4a5c0>
2026-03-07 13:04:22,107 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,107 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,107 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,109 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e00160>
2026-03-07 13:04:22,109 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,109 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,109 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce394b2cc062-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.trulieve'), (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'019cc866-1fd1-7163-b147-b3487fb5d0e2'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'103'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,110 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,110 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.trulieve&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:22,110 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,110 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e67d0>
2026-03-07 13:04:22,111 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,111 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,111 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,111 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,111 - DEBUG - response_closed.started
2026-03-07 13:04:22,112 - DEBUG - response_closed.complete
2026-03-07 13:04:22,112 - DEBUG - close.started
2026-03-07 13:04:22,112 - DEBUG - close.complete
2026-03-07 13:04:22,112 - DEBUG - 🏷 Product types: ['flower'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:22,113 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,113 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce394bb88fbb-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'019cc866-1fd0-755f-a78c-4789bf0b4885'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'105'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,114 - 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-07 13:04:22,114 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,114 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,115 - DEBUG - response_closed.started
2026-03-07 13:04:22,115 - DEBUG - response_closed.complete
2026-03-07 13:04:22,115 - DEBUG - close.started
2026-03-07 13:04:22,115 - DEBUG - close.complete
2026-03-07 13:04:22,115 - DEBUG - 🏷 Product types: ['capsules', 'flower'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:22,116 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,116 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e61d0>
2026-03-07 13:04:22,116 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,116 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,116 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,116 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,117 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f02560>
2026-03-07 13:04:22,117 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,117 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,118 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e54e0>
2026-03-07 13:04:22,118 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,118 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,118 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,118 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,118 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,119 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e4ca0>
2026-03-07 13:04:22,119 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,123 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e7700>
2026-03-07 13:04:22,124 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,124 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,124 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,124 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,124 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,126 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e5ed0>
2026-03-07 13:04:22,126 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,126 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,126 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,126 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,126 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,138 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce394ccd93a4-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'019cc866-1fd3-7480-9045-fa6f12ed6932'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'123'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,138 - 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-07 13:04:22,138 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,139 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,139 - DEBUG - response_closed.started
2026-03-07 13:04:22,139 - DEBUG - response_closed.complete
2026-03-07 13:04:22,139 - DEBUG - close.started
2026-03-07 13:04:22,139 - DEBUG - close.complete
2026-03-07 13:04:22,139 - DEBUG - 🏷 Product types: ['pre-rolls', 'flower', 'live rosin', 'live resin', 'sauce carts', 'crumble carts', 'distillate carts', 'aio carts'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-07 13:04:22,140 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,143 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce394ca1e007-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'019cc866-1fd2-72f7-8afc-0fb0a1c0a975'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'139'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,143 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3c490>
2026-03-07 13:04:22,143 - 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-07 13:04:22,143 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,144 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:22,144 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,144 - DEBUG - response_closed.started
2026-03-07 13:04:22,144 - DEBUG - response_closed.complete
2026-03-07 13:04:22,144 - DEBUG - close.started
2026-03-07 13:04:22,144 - DEBUG - close.complete
2026-03-07 13:04:22,144 - DEBUG - 🏷 Product types: ['pre-rolls', 'nanos', 'vapes', 'syringes', 'tinctures', 'edibles', 'flower', 'concentrates'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-07 13:04:22,145 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:22,148 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e490c0>
2026-03-07 13:04:22,148 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:22,150 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3e3e0>
2026-03-07 13:04:22,150 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,150 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,151 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,151 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,151 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,155 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e49120>
2026-03-07 13:04:22,155 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,155 - DEBUG - send_request_headers.complete
2026-03-07 13:04:22,155 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,155 - DEBUG - send_request_body.complete
2026-03-07 13:04:22,156 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:22,222 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a3b6ecf54-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'019cc866-2065-77a4-9812-68f961f7bba7'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'76'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,223 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,223 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,223 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,223 - DEBUG - response_closed.started
2026-03-07 13:04:22,223 - DEBUG - response_closed.complete
2026-03-07 13:04:22,223 - DEBUG - close.started
2026-03-07 13:04:22,224 - DEBUG - close.complete
2026-03-07 13:04:22,224 - INFO - ✅ Inserted deal: Surterra - Free Wana Quick Deals for New & Existing Patients
2026-03-07 13:04:22,225 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a3d264ce6-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'019cc866-206f-734b-9354-3b61f6769e5e'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'64'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,225 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,226 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,226 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,226 - DEBUG - response_closed.started
2026-03-07 13:04:22,226 - DEBUG - response_closed.complete
2026-03-07 13:04:22,226 - DEBUG - close.started
2026-03-07 13:04:22,227 - DEBUG - close.complete
2026-03-07 13:04:22,227 - INFO - ✅ Inserted deal: Fluent - Up To 70% Off & Flower Deals
2026-03-07 13:04:22,229 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a28a0d961-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'019cc866-2068-7c74-8611-07b3ed488f11'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'71'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,229 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,229 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,229 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a3c9f1bf6-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'019cc866-2070-7bef-b832-550fe86acd4d'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'67'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,230 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,230 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,231 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,231 - DEBUG - response_closed.started
2026-03-07 13:04:22,231 - DEBUG - response_closed.complete
2026-03-07 13:04:22,231 - DEBUG - close.started
2026-03-07 13:04:22,231 - DEBUG - close.complete
2026-03-07 13:04:22,232 - INFO - ✅ Inserted deal: Sunburn Cannabis - Storewide Discounts and Vape Specials
2026-03-07 13:04:22,232 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a18b40c51-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'019cc866-2058-7b69-95e1-0e5b07fada6d'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'93'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,232 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,233 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a2ce8f343-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'019cc866-206a-74e3-858f-9769652f761e'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'73'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,233 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a7c4e4d16-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'019cc866-2096-79f9-8a0f-555d61980d29'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'33'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,234 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a4cbc4cfe-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'019cc866-207e-7025-9cb1-1790312404b9'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'56'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,235 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,236 - DEBUG - response_closed.started
2026-03-07 13:04:22,236 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a4d5bebd5-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'019cc866-2080-7764-accf-06cef09bc392'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'56'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,237 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:22 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'9d89ce3a7c484d16-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'019cc866-2092-77fd-9785-8240511a7bf5'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'42'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:22,238 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,238 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,239 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,239 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,239 - DEBUG - response_closed.complete
2026-03-07 13:04:22,240 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,241 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:22,241 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,242 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,242 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,243 - DEBUG - close.started
2026-03-07 13:04:22,243 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,243 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:22,245 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,245 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,246 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,246 - DEBUG - close.complete
2026-03-07 13:04:22,246 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,247 - DEBUG - response_closed.started
2026-03-07 13:04:22,247 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,247 - DEBUG - response_closed.started
2026-03-07 13:04:22,247 - DEBUG - response_closed.started
2026-03-07 13:04:22,248 - DEBUG - receive_response_body.complete
2026-03-07 13:04:22,248 - INFO - ✅ Inserted deal: Mint Cannabis - Ground Flower & Vape Deals: BOGO & Up to 50% Off!
2026-03-07 13:04:22,249 - DEBUG - response_closed.started
2026-03-07 13:04:22,249 - DEBUG - response_closed.complete
2026-03-07 13:04:22,249 - DEBUG - response_closed.complete
2026-03-07 13:04:22,249 - DEBUG - response_closed.complete
2026-03-07 13:04:22,250 - DEBUG - response_closed.started
2026-03-07 13:04:22,250 - DEBUG - response_closed.complete
2026-03-07 13:04:22,251 - DEBUG - response_closed.started
2026-03-07 13:04:22,251 - DEBUG - close.started
2026-03-07 13:04:22,252 - INFO - ✅ Inserted deal: Sunnyside - Mix & Match Vapes, Flower Deals & More
2026-03-07 13:04:22,252 - DEBUG - response_closed.complete
2026-03-07 13:04:22,253 - INFO - ✅ Inserted deal: Planet 13 - 50% Off Pre-Rolls & Vapes, 30% Off Flower & Rosin
2026-03-07 13:04:22,253 - DEBUG - response_closed.complete
2026-03-07 13:04:22,254 - INFO - ✅ Inserted deal: Curaleaf - Storewide Savings, BOGO, & More!
2026-03-07 13:04:22,254 - DEBUG - close.complete
2026-03-07 13:04:22,255 - INFO - ✅ Inserted deal: Grow Healthy - Flower, Vapes & More Deals!
2026-03-07 13:04:22,257 - INFO - ✅ Inserted deal: Mint Cannabis - Monthly Specials: Days of the Month Deals
2026-03-07 13:04:22,258 - INFO - ✅ Inserted deal: Trulieve - Save Big on Flower Bundles
2026-03-07 13:04:22,261 - INFO - ✅ Batch 1 completed: 10 processed, 10 deals inserted
2026-03-07 13:04:22,261 - INFO - 🔄 Processing batch 2/3 (10 images)
2026-03-07 13:04:22,261 - INFO - 🔄 Processing image: image_14_1551121141
2026-03-07 13:04:22,261 - INFO - 🔄 Processing image: image_15_1379210405
2026-03-07 13:04:22,261 - INFO - 🔄 Processing image: image_16_234266716
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_17_233343195
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_18_1725888082
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_19_367122568
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_20_2066027360
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_21_781112938
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_22_1358497160
2026-03-07 13:04:22,262 - INFO - 🔄 Processing image: image_23_2146199388
2026-03-07 13:04:22,297 - INFO - ✅ Downloaded: image_21_781112938.jpg
2026-03-07 13:04:22,297 - INFO - 🤖 Using original Gemini extraction for image_21_781112938.jpg
2026-03-07 13:04:23,465 - INFO - 📊 First pass extracted 4 deals
2026-03-07 13:04:23,465 - INFO - 🔄 Deal count (4) below threshold, running refinement pass...
2026-03-07 13:04:24,062 - INFO - ✅ Refinement pass found 1 additional deals
2026-03-07 13:04:24,062 - INFO - 📈 Total deals after refinement: 5 (1 new unique deals)
2026-03-07 13:04:24,062 - DEBUG - Normalizing dispensary: 'One Plant Cannabis' -> 'one plant cannabis'
2026-03-07 13:04:24,062 - DEBUG - Exact match found: 'One Plant Cannabis' -> 'one-plant'
2026-03-07 13:04:24,062 - WARNING - DEBUG: Normalized One Plant Cannabis -> one-plant
2026-03-07 13:04:24,062 - INFO - ✅ Processed image_21_781112938: 5 deals from One Plant Cannabis
2026-03-07 13:04:24,072 - INFO - ✅ Downloaded: image_22_1358497160.jpg
2026-03-07 13:04:24,072 - INFO - 🤖 Using original Gemini extraction for image_22_1358497160.jpg
2026-03-07 13:04:24,073 - INFO - ✅ Downloaded: image_20_2066027360.jpg
2026-03-07 13:04:24,074 - INFO - 🤖 Using original Gemini extraction for image_20_2066027360.jpg
2026-03-07 13:04:25,766 - INFO - 📊 First pass extracted 11 deals
2026-03-07 13:04:25,766 - DEBUG - Normalizing dispensary: 'Cookies' -> 'cookies'
2026-03-07 13:04:25,767 - DEBUG - Exact match found: 'Cookies' -> 'cookies'
2026-03-07 13:04:25,767 - WARNING - DEBUG: Normalized Cookies -> cookies
2026-03-07 13:04:25,767 - INFO - ✅ Processed image_20_2066027360: 11 deals from Cookies
2026-03-07 13:04:25,767 - INFO - ✅ Downloaded: image_19_367122568.jpg
2026-03-07 13:04:25,768 - INFO - 🤖 Using original Gemini extraction for image_19_367122568.jpg
2026-03-07 13:04:27,497 - INFO - 📊 First pass extracted 16 deals
2026-03-07 13:04:27,497 - DEBUG - Normalizing dispensary: 'Goldflower Cannabis' -> 'goldflower cannabis'
2026-03-07 13:04:27,497 - DEBUG - Exact match found: 'Goldflower Cannabis' -> 'goldflower'
2026-03-07 13:04:27,497 - WARNING - DEBUG: Normalized Goldflower Cannabis -> goldflower
2026-03-07 13:04:27,497 - INFO - ✅ Processed image_22_1358497160: 16 deals from Goldflower Cannabis
2026-03-07 13:04:27,499 - INFO - ✅ Downloaded: image_14_1551121141.webp
2026-03-07 13:04:27,499 - INFO - 🤖 Using original Gemini extraction for image_14_1551121141.webp
2026-03-07 13:04:27,500 - INFO - ✅ Downloaded: image_15_1379210405.jpg
2026-03-07 13:04:27,500 - INFO - 🤖 Using original Gemini extraction for image_15_1379210405.jpg
2026-03-07 13:04:27,501 - INFO - ✅ Downloaded: image_16_234266716.jpg
2026-03-07 13:04:27,501 - INFO - 🤖 Using original Gemini extraction for image_16_234266716.jpg
2026-03-07 13:04:27,503 - INFO - ✅ Downloaded: image_23_2146199388.jpg
2026-03-07 13:04:27,503 - INFO - 🤖 Using original Gemini extraction for image_23_2146199388.jpg
2026-03-07 13:04:27,505 - INFO - ✅ Downloaded: image_17_233343195.jpg
2026-03-07 13:04:27,505 - INFO - 🤖 Using original Gemini extraction for image_17_233343195.jpg
2026-03-07 13:04:28,903 - INFO - 📊 First pass extracted 0 deals
2026-03-07 13:04:28,903 - INFO - 🔄 Deal count (0) below threshold, running refinement pass...
2026-03-07 13:04:29,380 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 13:04:29,381 - WARNING - ⚠ Invalid data from image_14_1551121141: dispensary=Knack, deals=0
2026-03-07 13:04:31,575 - INFO - 📊 First pass extracted 13 deals
2026-03-07 13:04:31,575 - DEBUG - Normalizing dispensary: 'GREEN DRAGON' -> 'green dragon'
2026-03-07 13:04:31,575 - DEBUG - Exact match found: 'GREEN DRAGON' -> 'green-dragon'
2026-03-07 13:04:31,575 - WARNING - DEBUG: Normalized GREEN DRAGON -> green-dragon
2026-03-07 13:04:31,576 - INFO - ✅ Processed image_19_367122568: 13 deals from GREEN DRAGON
2026-03-07 13:04:33,022 - INFO - 📊 First pass extracted 9 deals
2026-03-07 13:04:33,022 - DEBUG - Normalizing dispensary: 'AVR Cannabis Dispensary' -> 'avr cannabis dispensary'
2026-03-07 13:04:33,022 - DEBUG - Variant match: 'avr' in 'avr cannabis dispensary' -> 'ayr'
2026-03-07 13:04:33,022 - WARNING - DEBUG: Normalized AVR Cannabis Dispensary -> ayr
2026-03-07 13:04:33,022 - INFO - ✅ Processed image_15_1379210405: 9 deals from AVR Cannabis Dispensary
2026-03-07 13:04:34,877 - INFO - 📊 First pass extracted 5 deals
2026-03-07 13:04:34,877 - INFO - 🔄 Deal count (5) below threshold, running refinement pass...
2026-03-07 13:04:35,608 - INFO - ✅ Refinement pass found 5 additional deals
2026-03-07 13:04:35,608 - INFO - 📈 Total deals after refinement: 5 (0 new unique deals)
2026-03-07 13:04:35,608 - DEBUG - Normalizing dispensary: 'Jungle Boys' -> 'jungle boys'
2026-03-07 13:04:35,608 - DEBUG - Exact match found: 'Jungle Boys' -> 'jungle-boys'
2026-03-07 13:04:35,608 - WARNING - DEBUG: Normalized Jungle Boys -> jungle-boys
2026-03-07 13:04:35,608 - INFO - ✅ Processed image_16_234266716: 5 deals from Jungle Boys
2026-03-07 13:04:38,289 - INFO - 📊 First pass extracted 31 deals
2026-03-07 13:04:38,289 - DEBUG - Normalizing dispensary: 'RISE' -> 'rise'
2026-03-07 13:04:38,289 - DEBUG - Exact match found: 'RISE' -> 'rise'
2026-03-07 13:04:38,289 - WARNING - DEBUG: Normalized RISE -> rise
2026-03-07 13:04:38,289 - INFO - ✅ Processed image_23_2146199388: 31 deals from RISE
2026-03-07 13:04:38,291 - INFO - ✅ Downloaded: image_18_1725888082.jpg
2026-03-07 13:04:38,291 - INFO - 🤖 Using original Gemini extraction for image_18_1725888082.jpg
2026-03-07 13:04:40,316 - INFO - 📊 First pass extracted 12 deals
2026-03-07 13:04:40,316 - DEBUG - Normalizing dispensary: 'MÜV' -> 'müv'
2026-03-07 13:04:40,316 - DEBUG - Exact match found: 'MÜV' -> 'muv'
2026-03-07 13:04:40,316 - WARNING - DEBUG: Normalized MÜV -> muv
2026-03-07 13:04:40,317 - INFO - ✅ Processed image_17_233343195: 12 deals from MÜV
2026-03-07 13:04:43,276 - INFO - 📊 First pass extracted 23 deals
2026-03-07 13:04:43,276 - DEBUG - Normalizing dispensary: 'Trulieve' -> 'trulieve'
2026-03-07 13:04:43,276 - DEBUG - Exact match found: 'Trulieve' -> 'trulieve'
2026-03-07 13:04:43,276 - WARNING - DEBUG: Normalized Trulieve -> trulieve
2026-03-07 13:04:43,276 - INFO - ✅ Processed image_18_1725888082: 23 deals from Trulieve
2026-03-07 13:04:43,279 - DEBUG - close.started
2026-03-07 13:04:43,279 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,280 - DEBUG - close.complete
2026-03-07 13:04:43,280 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,281 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,282 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,282 - DEBUG - close.started
2026-03-07 13:04:43,284 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,285 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,286 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,287 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,288 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3e500>
2026-03-07 13:04:43,288 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2126680>
2026-03-07 13:04:43,289 - DEBUG - close.complete
2026-03-07 13:04:43,290 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f95bd0>
2026-03-07 13:04:43,290 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,290 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,291 - DEBUG - close.started
2026-03-07 13:04:43,291 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,291 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4b8e0>
2026-03-07 13:04:43,292 - DEBUG - close.complete
2026-03-07 13:04:43,293 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f95d20>
2026-03-07 13:04:43,293 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f94d00>
2026-03-07 13:04:43,293 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4a590>
2026-03-07 13:04:43,293 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,294 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,294 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f946a0>
2026-03-07 13:04:43,293 - DEBUG - close.started
2026-03-07 13:04:43,294 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,294 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,295 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,295 - DEBUG - close.complete
2026-03-07 13:04:43,297 - DEBUG - close.started
2026-03-07 13:04:43,297 - DEBUG - close.complete
2026-03-07 13:04:43,297 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,299 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39a2ad0>
2026-03-07 13:04:43,299 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,299 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2124880>
2026-03-07 13:04:43,299 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3c820>
2026-03-07 13:04:43,300 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,300 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,300 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,300 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2124250>
2026-03-07 13:04:43,303 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e49360>
2026-03-07 13:04:43,303 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f95630>
2026-03-07 13:04:43,303 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f95930>
2026-03-07 13:04:43,304 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,304 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e49450>
2026-03-07 13:04:43,304 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,305 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,305 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,305 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,305 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f96c20>
2026-03-07 13:04:43,305 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,306 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,306 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,306 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,306 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,307 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,307 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,308 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,308 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,309 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,309 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,309 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,309 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,310 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,310 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,310 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,311 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,311 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,311 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,311 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,312 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,312 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,313 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,313 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,313 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,313 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,313 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,313 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,314 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,314 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,314 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,314 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,315 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2127d60>
2026-03-07 13:04:43,316 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,316 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,316 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,316 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,316 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:43,338 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebea8a65609-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.trulieve'), (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'019cc866-732c-7a28-93da-4143391d36ab'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'4'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,339 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.trulieve&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,339 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,339 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,339 - DEBUG - response_closed.started
2026-03-07 13:04:43,339 - DEBUG - response_closed.complete
2026-03-07 13:04:43,339 - DEBUG - close.started
2026-03-07 13:04:43,340 - DEBUG - close.complete
2026-03-07 13:04:43,340 - DEBUG - 🏷 Product types: ['whole flower', 'vapes', 'concentrates', 'capsules'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:43,341 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,345 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec63e0>
2026-03-07 13:04:43,345 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,352 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1ec62c0>
2026-03-07 13:04:43,352 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,352 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,352 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,352 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,352 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,358 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebeabb767b0-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.jungle-boys'), (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'019cc866-732f-797f-9240-460fa2c057de'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'23'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,359 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.jungle-boys&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,359 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,359 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,360 - DEBUG - response_closed.started
2026-03-07 13:04:43,360 - DEBUG - response_closed.complete
2026-03-07 13:04:43,360 - DEBUG - close.started
2026-03-07 13:04:43,360 - DEBUG - close.complete
2026-03-07 13:04:43,360 - DEBUG - 🏷 Product types: ['flower', 'vapes', 'concentrates'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:43,361 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebeb9d40c7d-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.one-plant'), (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'019cc866-7335-7da2-b5e0-2d20f8146e65'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'18'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,362 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,362 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.one-plant&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,363 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebeb8dfae2c-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.green-dragon'), (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'019cc866-7337-7a22-b799-8756375c11af'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'15'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,363 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebebb1cc8dd-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.ayr'), (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'019cc866-733d-7e7a-9c1c-bf87272b6f7a'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'14'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,364 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,364 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebebc390860-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.goldflower'), (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'019cc866-7336-7dd4-8427-2b9a9fb8f0c1'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'18'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,364 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebeaf55b15f-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.muv'), (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'019cc866-7333-7a53-87f2-cb6d7b24020e'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'18'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,365 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.green-dragon&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,366 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.ayr&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,366 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebebd6ab5c1-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.rise'), (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'019cc866-7337-7c54-934d-a43d4f4bbbb0'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'15'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,367 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.goldflower&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,367 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,368 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e03310>
2026-03-07 13:04:43,368 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.muv&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,369 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,369 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,369 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.rise&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:04:43,369 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,370 - DEBUG - response_closed.started
2026-03-07 13:04:43,370 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,370 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,370 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,371 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,371 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,371 - DEBUG - response_closed.complete
2026-03-07 13:04:43,371 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,371 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,372 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,372 - DEBUG - response_closed.started
2026-03-07 13:04:43,372 - DEBUG - response_closed.started
2026-03-07 13:04:43,372 - DEBUG - response_closed.complete
2026-03-07 13:04:43,372 - DEBUG - close.started
2026-03-07 13:04:43,373 - DEBUG - response_closed.started
2026-03-07 13:04:43,373 - DEBUG - response_closed.started
2026-03-07 13:04:43,373 - DEBUG - response_closed.started
2026-03-07 13:04:43,373 - DEBUG - response_closed.complete
2026-03-07 13:04:43,373 - DEBUG - close.started
2026-03-07 13:04:43,374 - DEBUG - close.complete
2026-03-07 13:04:43,374 - DEBUG - response_closed.complete
2026-03-07 13:04:43,374 - DEBUG - response_closed.complete
2026-03-07 13:04:43,374 - DEBUG - response_closed.complete
2026-03-07 13:04:43,375 - DEBUG - close.started
2026-03-07 13:04:43,375 - DEBUG - close.complete
2026-03-07 13:04:43,375 - DEBUG - close.started
2026-03-07 13:04:43,376 - DEBUG - 🏷 Product types: ['flower', 'concentrates', 'pre-rolls', 'vapes', 'edibles', 'tinctures'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:43,376 - DEBUG - 🏷 Product types: ['vapes', 'extracts', 'flower', 'edibles', 'merch'] → Category ID: b206c48b-5e7a-4727-accf-1554a9e2d147
2026-03-07 13:04:43,377 - DEBUG - 🏷 Product types: ['vapes', 'flower', 'concentrates'] → Category ID: b206c48b-5e7a-4727-accf-1554a9e2d147
2026-03-07 13:04:43,377 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213e530>
2026-03-07 13:04:43,377 - DEBUG - close.complete
2026-03-07 13:04:43,378 - DEBUG - close.complete
2026-03-07 13:04:43,378 - DEBUG - 🏷 Product types: ['vape cartridges', 'concentrates', 'flower'] → Category ID: aef34cfe-fd6c-49e8-968e-e15370d1a976
2026-03-07 13:04:43,379 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,380 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,381 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,382 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,382 - DEBUG - 🏷 Product types: ['select items', 'select apparel', 'pre-rolls', 'pods', 'cartridges', 'disposables', 'chews', 'syringes'] → Category ID: d4320c11-eabe-486e-a3a2-8a4b0392f33c
2026-03-07 13:04:43,384 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,384 - DEBUG - 🏷 Product types: ['kief', 'edibles'] → Category ID: 65f5b0cf-e95a-490e-bea8-bcb1722fde4a
2026-03-07 13:04:43,385 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,385 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,385 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,385 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,386 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,387 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,387 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebeab3c3535-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'019cc866-733a-758f-b263-4ab8af7452aa'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'2'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,388 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,389 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,389 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f029b0>
2026-03-07 13:04:43,389 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebefccb2c3e-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'019cc866-7360-73de-84b0-87c81fc8b634'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,389 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,390 - 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-07 13:04:43,390 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,390 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,391 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,391 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,391 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f027a0>
2026-03-07 13:04:43,392 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:04:43,392 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,392 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,393 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,393 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,393 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213d9f0>
2026-03-07 13:04:43,393 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,393 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,394 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e213dfc0>
2026-03-07 13:04:43,394 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,395 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,395 - DEBUG - response_closed.started
2026-03-07 13:04:43,395 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,395 - DEBUG - response_closed.started
2026-03-07 13:04:43,396 - DEBUG - response_closed.complete
2026-03-07 13:04:43,396 - DEBUG - response_closed.complete
2026-03-07 13:04:43,396 - DEBUG - close.started
2026-03-07 13:04:43,397 - INFO - ✅ Inserted deal: Trulieve - Flower Deals: 4 for $140, 4 for $110 & $17.50 Ounces
2026-03-07 13:04:43,397 - DEBUG - close.complete
2026-03-07 13:04:43,397 - DEBUG - close.started
2026-03-07 13:04:43,398 - DEBUG - close.complete
2026-03-07 13:04:43,399 - DEBUG - 🏷 Product types: ['flower', 'vapes', 'concentrates'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:04:43,399 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:43,400 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f02020>
2026-03-07 13:04:43,400 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,400 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,400 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,400 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,400 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,402 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f00b50>
2026-03-07 13:04:43,402 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,402 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,402 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,403 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,403 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,403 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3dd50>
2026-03-07 13:04:43,403 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e20e5900>
2026-03-07 13:04:43,403 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,403 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,403 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e00fa0>
2026-03-07 13:04:43,404 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,404 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,404 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:43,404 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,404 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,405 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,405 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,405 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,405 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,411 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e03550>
2026-03-07 13:04:43,411 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,411 - DEBUG - send_request_headers.complete
2026-03-07 13:04:43,411 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,411 - DEBUG - send_request_body.complete
2026-03-07 13:04:43,412 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:04:43,427 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf2dffb5c1-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'019cc866-7387-7f05-bd4c-47cd82714351'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'4'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,428 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,428 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,428 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,428 - DEBUG - response_closed.started
2026-03-07 13:04:43,428 - DEBUG - response_closed.complete
2026-03-07 13:04:43,429 - DEBUG - close.started
2026-03-07 13:04:43,429 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf295fae2c-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'019cc866-7385-75e3-89d5-1cbbd5befc90'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,429 - DEBUG - close.complete
2026-03-07 13:04:43,430 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,431 - INFO - ✅ Inserted deal: Müv - Flower, Vape, and Edible Deals Galore!
2026-03-07 13:04:43,431 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,431 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,432 - DEBUG - response_closed.started
2026-03-07 13:04:43,432 - DEBUG - response_closed.complete
2026-03-07 13:04:43,432 - DEBUG - close.started
2026-03-07 13:04:43,432 - DEBUG - close.complete
2026-03-07 13:04:43,433 - INFO - ✅ Inserted deal: Rise Dispensaries - Flower, Concentrates, Vapes, and Edibles Deals
2026-03-07 13:04:43,441 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf2e3fb109-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'019cc866-7386-70e3-a52b-1f4570d2a071'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'6'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,441 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,442 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,442 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf4b12f8c7-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'019cc866-7391-78ca-8326-d8ec080dc8da'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'7'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,443 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,443 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,443 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,444 - DEBUG - response_closed.started
2026-03-07 13:04:43,444 - DEBUG - response_closed.complete
2026-03-07 13:04:43,444 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,444 - DEBUG - close.started
2026-03-07 13:04:43,444 - DEBUG - response_closed.started
2026-03-07 13:04:43,445 - DEBUG - response_closed.complete
2026-03-07 13:04:43,445 - DEBUG - close.complete
2026-03-07 13:04:43,445 - INFO - ✅ Inserted deal: AYR Wellness - Vape & Concentrate Deals Galore!
2026-03-07 13:04:43,446 - INFO - ✅ Inserted deal: Jungle Boys - Flower, Vapes, and Concentrates Deals
2026-03-07 13:04:43,446 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf4fe32dab-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'019cc866-7395-73c4-84d7-5550e15fcbc5'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'4'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,448 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,449 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,449 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,449 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf4a57d5eb-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'019cc866-7394-7b0a-944d-0e10f3c86aaa'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'9'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,450 - DEBUG - response_closed.started
2026-03-07 13:04:43,450 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,450 - DEBUG - response_closed.complete
2026-03-07 13:04:43,450 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,451 - INFO - ✅ Inserted deal: GoldFlower - Percentage Off Deals, Product Specials, and Bulk Buys
2026-03-07 13:04:43,451 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,451 - DEBUG - response_closed.started
2026-03-07 13:04:43,451 - DEBUG - response_closed.complete
2026-03-07 13:04:43,452 - INFO - ✅ Inserted deal: Green Dragon - Big Discounts on Flower, Vapes, and Concentrates
2026-03-07 13:04:43,456 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf5fcb4d02-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'019cc866-739d-7b63-a61c-09ca1d0f8b09'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,457 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,457 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,457 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,457 - DEBUG - response_closed.started
2026-03-07 13:04:43,458 - DEBUG - response_closed.complete
2026-03-07 13:04:43,458 - INFO - ✅ Inserted deal: Cookies - Flower, Vapes, Concentrates Deals
2026-03-07 13:04:43,459 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:04:43 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'9d89cebf4d818f6c-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'019cc866-739b-7f92-8843-7c7812d12760'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'6'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:04:43,460 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:04:43,460 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:04:43,461 - DEBUG - receive_response_body.complete
2026-03-07 13:04:43,461 - DEBUG - response_closed.started
2026-03-07 13:04:43,461 - DEBUG - response_closed.complete
2026-03-07 13:04:43,462 - INFO - ✅ Inserted deal: One Plant Florida - Special Pricing & Spend $75 Offers
2026-03-07 13:04:43,463 - INFO - ✅ Batch 2 completed: 9 processed, 19 deals inserted
2026-03-07 13:04:43,463 - INFO - 🔄 Processing batch 3/3 (8 images)
2026-03-07 13:04:43,463 - INFO - 🔄 Processing image: image_24_1329197011
2026-03-07 13:04:43,463 - INFO - 🔄 Processing image: image_25_810399351
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_26_852658791
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_27_300195207
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_28_1278795828
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_30_716938862
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_31_1551121141
2026-03-07 13:04:43,464 - INFO - 🔄 Processing image: image_32_725973623
2026-03-07 13:04:43,496 - INFO - ✅ Downloaded: image_25_810399351.jpg
2026-03-07 13:04:43,496 - INFO - 🤖 Using original Gemini extraction for image_25_810399351.jpg
2026-03-07 13:04:45,735 - INFO - 📊 First pass extracted 16 deals
2026-03-07 13:04:45,735 - DEBUG - Normalizing dispensary: 'The Flowery' -> 'the flowery'
2026-03-07 13:04:45,735 - DEBUG - Exact match found: 'The Flowery' -> 'the-flowery'
2026-03-07 13:04:45,735 - WARNING - DEBUG: Normalized The Flowery -> the-flowery
2026-03-07 13:04:45,735 - INFO - ✅ Processed image_25_810399351: 16 deals from The Flowery
2026-03-07 13:04:45,738 - INFO - ✅ Downloaded: image_30_716938862.webp
2026-03-07 13:04:45,738 - INFO - 🤖 Using original Gemini extraction for image_30_716938862.webp
2026-03-07 13:04:46,751 - INFO - 📊 First pass extracted 4 deals
2026-03-07 13:04:46,752 - INFO - 🔄 Deal count (4) below threshold, running refinement pass...
2026-03-07 13:04:47,406 - INFO - ✅ Refinement pass found 4 additional deals
2026-03-07 13:04:47,406 - INFO - 📈 Total deals after refinement: 5 (1 new unique deals)
2026-03-07 13:04:47,406 - DEBUG - Normalizing dispensary: 'Cookies' -> 'cookies'
2026-03-07 13:04:47,407 - DEBUG - Exact match found: 'Cookies' -> 'cookies'
2026-03-07 13:04:47,407 - WARNING - DEBUG: Normalized Cookies -> cookies
2026-03-07 13:04:47,407 - INFO - ✅ Processed image_30_716938862: 5 deals from Cookies
2026-03-07 13:04:47,410 - INFO - ✅ Downloaded: image_32_725973623.webp
2026-03-07 13:04:47,411 - INFO - 🤖 Using original Gemini extraction for image_32_725973623.webp
2026-03-07 13:04:47,411 - INFO - ✅ Downloaded: image_26_852658791.jpg
2026-03-07 13:04:47,412 - INFO - 🤖 Using original Gemini extraction for image_26_852658791.jpg
2026-03-07 13:04:47,413 - INFO - ✅ Downloaded: image_27_300195207.jpg
2026-03-07 13:04:47,413 - INFO - 🤖 Using original Gemini extraction for image_27_300195207.jpg
2026-03-07 13:04:47,414 - INFO - ✅ Downloaded: image_28_1278795828.jpg
2026-03-07 13:04:47,414 - INFO - 🤖 Using original Gemini extraction for image_28_1278795828.jpg
2026-03-07 13:04:48,513 - INFO - 📊 First pass extracted 4 deals
2026-03-07 13:04:48,513 - INFO - 🔄 Deal count (4) below threshold, running refinement pass...
2026-03-07 13:04:49,230 - INFO - ✅ Refinement pass found 7 additional deals
2026-03-07 13:04:49,230 - INFO - 📈 Total deals after refinement: 11 (7 new unique deals)
2026-03-07 13:04:49,230 - DEBUG - Normalizing dispensary: 'Jungle Boys' -> 'jungle boys'
2026-03-07 13:04:49,230 - DEBUG - Exact match found: 'Jungle Boys' -> 'jungle-boys'
2026-03-07 13:04:49,230 - WARNING - DEBUG: Normalized Jungle Boys -> jungle-boys
2026-03-07 13:04:49,230 - INFO - ✅ Processed image_32_725973623: 11 deals from Jungle Boys
2026-03-07 13:04:50,469 - INFO - 📊 First pass extracted 5 deals
2026-03-07 13:04:50,470 - INFO - 🔄 Deal count (5) below threshold, running refinement pass...
2026-03-07 13:04:50,965 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 13:04:50,965 - DEBUG - Normalizing dispensary: 'One Plant Cannabis' -> 'one plant cannabis'
2026-03-07 13:04:50,965 - DEBUG - Exact match found: 'One Plant Cannabis' -> 'one-plant'
2026-03-07 13:04:50,965 - WARNING - DEBUG: Normalized One Plant Cannabis -> one-plant
2026-03-07 13:04:50,965 - INFO - ✅ Processed image_26_852658791: 5 deals from One Plant Cannabis
2026-03-07 13:04:50,966 - INFO - ✅ Downloaded: image_31_1551121141.webp
2026-03-07 13:04:50,966 - INFO - 🤖 Using original Gemini extraction for image_31_1551121141.webp
2026-03-07 13:04:52,672 - INFO - 📊 First pass extracted 4 deals
2026-03-07 13:04:52,672 - INFO - 🔄 Deal count (4) below threshold, running refinement pass...
2026-03-07 13:04:53,257 - INFO - ℹ Refinement pass found no additional deals
2026-03-07 13:04:53,258 - DEBUG - Normalizing dispensary: 'THE FLOWERY' -> 'the flowery'
2026-03-07 13:04:53,258 - DEBUG - Exact match found: 'THE FLOWERY' -> 'the-flowery'
2026-03-07 13:04:53,258 - WARNING - DEBUG: Normalized THE FLOWERY -> the-flowery
2026-03-07 13:04:53,258 - INFO - ✅ Processed image_27_300195207: 4 deals from THE FLOWERY
2026-03-07 13:04:55,005 - INFO - 📊 First pass extracted 11 deals
2026-03-07 13:04:55,006 - DEBUG - Normalizing dispensary: 'insa' -> 'insa'
2026-03-07 13:04:55,006 - DEBUG - Exact match found: 'insa' -> 'insa'
2026-03-07 13:04:55,006 - WARNING - DEBUG: Normalized insa -> insa
2026-03-07 13:04:55,006 - INFO - ✅ Processed image_28_1278795828: 11 deals from insa
2026-03-07 13:04:55,007 - INFO - ✅ Downloaded: image_24_1329197011.jpg
2026-03-07 13:04:55,007 - INFO - 🤖 Using original Gemini extraction for image_24_1329197011.jpg
2026-03-07 13:04:56,136 - WARNING - ⚠ No JSON found in response (attempt 1)
2026-03-07 13:04:57,317 - INFO - 📊 First pass extracted 0 deals
2026-03-07 13:04:57,317 - INFO - 🔄 Deal count (0) below threshold, running refinement pass...
2026-03-07 13:04:57,882 - INFO - ✅ Refinement pass found 1 additional deals
2026-03-07 13:04:57,883 - INFO - 📈 Total deals after refinement: 1 (1 new unique deals)
2026-03-07 13:04:57,883 - DEBUG - Normalizing dispensary: 'Knack' -> 'knack'
2026-03-07 13:04:57,883 - WARNING - ⚠ No match found for dispensary: 'Knack' (cleaned: 'knack')
2026-03-07 13:04:57,883 - DEBUG - Available variants: ['ayr', 'ayr wellness', 'ayr cannabis', 'ayr cannabis dispensary', 'avr', 'cannabist', 'the cannabist', 'cookies', 'curaleaf', 'eden', 'eden curated cannabis', 'eden florida', 'edenflorida', 'fluent', 'goldflower', 'gold flower', 'goldflower cannabis', 'goldflowerfl', 'goldflowerflorida', 'goldleaf', 'gold leaf', 'green dragon', 'grow healthy', 'growhealthy', 'insa', 'jungle boys', 'mint cannabis', 'mint', 'muv', 'müv', 'one plant', 'one plant florida', 'one plant cannabis', 'oneplant', 'planet 13', 'rise', 'rise dispensaries', 'sanctuary', 'sunburn', 'sunburn cannabis', 'sunnyside', 'surterra', 'surterra wellness', 'the flowery', 'flowery', 'trulieve']
2026-03-07 13:04:57,883 - WARNING - ⚠ Skipping image_31_1551121141: Invalid dispensary 'Knack'
2026-03-07 13:04:57,883 - WARNING - DEBUG: Failed to normalize: Knack
2026-03-07 13:04:59,942 - INFO - 📊 First pass extracted 8 deals
2026-03-07 13:04:59,942 - DEBUG - Normalizing dispensary: 'Eden' -> 'eden'
2026-03-07 13:04:59,942 - DEBUG - Exact match found: 'Eden' -> 'eden'
2026-03-07 13:04:59,942 - WARNING - DEBUG: Normalized Eden -> eden
2026-03-07 13:04:59,942 - INFO - ✅ Processed image_24_1329197011: 8 deals from Eden
2026-03-07 13:04:59,945 - DEBUG - close.started
2026-03-07 13:04:59,946 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,947 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,947 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,947 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,948 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,949 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,949 - DEBUG - close.complete
2026-03-07 13:04:59,950 - DEBUG - close.started
2026-03-07 13:04:59,950 - DEBUG - close.complete
2026-03-07 13:04:59,950 - DEBUG - close.started
2026-03-07 13:04:59,950 - DEBUG - close.complete
2026-03-07 13:04:59,950 - DEBUG - close.started
2026-03-07 13:04:59,951 - DEBUG - close.complete
2026-03-07 13:04:59,951 - DEBUG - close.started
2026-03-07 13:04:59,951 - DEBUG - close.complete
2026-03-07 13:04:59,951 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:04:59,956 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39a0790>
2026-03-07 13:04:59,956 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,956 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e00b20>
2026-03-07 13:04:59,956 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,957 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e48070>
2026-03-07 13:04:59,957 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39b81f0>
2026-03-07 13:04:59,958 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,958 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e03af0>
2026-03-07 13:04:59,958 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e49450>
2026-03-07 13:04:59,958 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,958 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,959 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,959 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e491e0>
2026-03-07 13:04:59,960 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:04:59,963 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4b0d0>
2026-03-07 13:04:59,963 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,963 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,963 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,963 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,964 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,964 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e48520>
2026-03-07 13:04:59,964 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e01f60>
2026-03-07 13:04:59,964 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,965 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,965 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,965 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,965 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,965 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,965 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,965 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,965 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,966 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,967 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2e03970>
2026-03-07 13:04:59,967 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4afe0>
2026-03-07 13:04:59,967 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39bb0a0>
2026-03-07 13:04:59,968 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,968 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4bf70>
2026-03-07 13:04:59,968 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,968 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,969 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,969 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,969 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,970 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,970 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,970 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,970 - DEBUG - send_request_headers.complete
2026-03-07 13:04:59,971 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,971 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,971 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,971 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:04:59,971 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,972 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,972 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,972 - DEBUG - send_request_body.complete
2026-03-07 13:04:59,972 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:04:59,973 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,003 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:04:59 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'9d89cf26cca190e1-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.eden'), (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'019cc866-b444-72ba-8a75-a62bf79376a3'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'2'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,004 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.eden&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,004 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,005 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,005 - DEBUG - response_closed.started
2026-03-07 13:05:00,005 - DEBUG - response_closed.complete
2026-03-07 13:05:00,005 - DEBUG - close.started
2026-03-07 13:05:00,005 - DEBUG - close.complete
2026-03-07 13:05:00,006 - DEBUG - 🏷 Product types: ['rosin', 'flower', 'live rosin aio', 'ounces'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,007 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,008 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26de180bfa-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'019cc866-b44b-7a07-910c-cf66b5be5a3f'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'1'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,008 - 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-07 13:05:00,009 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26db0c3d15-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.insa'), (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'019cc866-b44c-72d6-99ab-293345a0ff50'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'2'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,009 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,011 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.insa&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,011 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,012 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,012 - DEBUG - response_closed.started
2026-03-07 13:05:00,013 - DEBUG - response_closed.complete
2026-03-07 13:05:00,013 - DEBUG - close.started
2026-03-07 13:05:00,014 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,014 - DEBUG - close.complete
2026-03-07 13:05:00,014 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e21247f0>
2026-03-07 13:05:00,015 - DEBUG - 🏷 Product types: [] → Category ID: None
2026-03-07 13:05:00,014 - DEBUG - response_closed.started
2026-03-07 13:05:00,016 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,017 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,017 - DEBUG - response_closed.complete
2026-03-07 13:05:00,018 - DEBUG - close.started
2026-03-07 13:05:00,018 - DEBUG - close.complete
2026-03-07 13:05:00,018 - DEBUG - 🏷 Product types: ['flower', 'pre-rolls', 'smalls'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,019 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,023 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e2126b00>
2026-03-07 13:05:00,023 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,024 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e39ba350>
2026-03-07 13:05:00,024 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,025 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,025 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,025 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b870d0>
2026-03-07 13:05:00,026 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,026 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,028 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,032 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b879a0>
2026-03-07 13:05:00,032 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,033 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,033 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,033 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,033 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1b85db0>
2026-03-07 13:05:00,036 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,036 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,036 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,036 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,361 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26d9f33535-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.one-plant'), (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'019cc866-b449-7636-9706-6b08bf79e8ff'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'356'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,362 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.one-plant&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,362 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,363 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,364 - DEBUG - response_closed.started
2026-03-07 13:05:00,364 - DEBUG - response_closed.complete
2026-03-07 13:05:00,364 - DEBUG - close.started
2026-03-07 13:05:00,364 - DEBUG - close.complete
2026-03-07 13:05:00,365 - DEBUG - 🏷 Product types: ['edibles', 'distillate carts', 'flower'] → Category ID: 65f5b0cf-e95a-490e-bea8-bcb1722fde4a
2026-03-07 13:05:00,367 - DEBUG - connect_tcp.started host='mrngdyllepreqkxxmvqn.supabase.co' port=443 local_address=None timeout=30.0 socket_options=None
2026-03-07 13:05:00,368 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26cea28f69-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.the-flowery'), (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'019cc866-b447-7e0a-b9ec-eb1920b9412c'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'360'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,369 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf273c908d17-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'019cc866-b48f-70eb-b293-168653df4395'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'288'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,370 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.the-flowery&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,370 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26dd638fa5-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.jungle-boys'), (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'019cc866-b44d-7592-9501-80c2c1870889'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'352'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,371 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf26c99ae8a9-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.the-flowery'), (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'019cc866-b446-7168-bf85-f2380b81feba'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'367'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,375 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.the-flowery&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,375 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,374 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf27284964fe-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'019cc866-b481-707a-a699-a1804c72a9de'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'284'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,374 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,374 - DEBUG - connect_tcp.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1f3d3c0>
2026-03-07 13:05:00,373 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,381 - DEBUG - start_tls.started ssl_context=<ssl.SSLContext object at 0x7f35e2337f40> server_hostname='mrngdyllepreqkxxmvqn.supabase.co' timeout=30.0
2026-03-07 13:05:00,379 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf2738708ebf-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'019cc866-b488-7b0d-8fc3-1c31eba051d6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'302'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,380 - INFO - HTTP Request: GET https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/dispensaries?select=id%2Cname&slug=eq.jungle-boys&is_active=eq.True "HTTP/1.1 200 OK"
2026-03-07 13:05:00,380 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,381 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,376 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,381 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,382 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,384 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,384 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,385 - DEBUG - response_closed.started
2026-03-07 13:05:00,385 - DEBUG - response_closed.started
2026-03-07 13:05:00,386 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,388 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,389 - DEBUG - response_closed.started
2026-03-07 13:05:00,389 - DEBUG - response_closed.complete
2026-03-07 13:05:00,389 - DEBUG - response_closed.complete
2026-03-07 13:05:00,390 - DEBUG - response_closed.started
2026-03-07 13:05:00,390 - DEBUG - response_closed.complete
2026-03-07 13:05:00,391 - DEBUG - response_closed.complete
2026-03-07 13:05:00,391 - DEBUG - close.started
2026-03-07 13:05:00,392 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,394 - DEBUG - 🏷 Product types: ['concentrates', 'flower'] → Category ID: b8446117-9bdd-4819-b996-5695222cf3bc
2026-03-07 13:05:00,394 - DEBUG - response_closed.started
2026-03-07 13:05:00,395 - INFO - ✅ Inserted deal: Eden - Buy 2 Get 1 Free Rosin & Flower Deals
2026-03-07 13:05:00,396 - DEBUG - start_tls.complete return_value=<httpcore._backends.sync.SyncStream object at 0x7f35e1e4b5e0>
2026-03-07 13:05:00,396 - DEBUG - 🏷 Product types: ['flower', 'prerolls'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,397 - DEBUG - close.complete
2026-03-07 13:05:00,398 - DEBUG - response_closed.started
2026-03-07 13:05:00,401 - DEBUG - response_closed.complete
2026-03-07 13:05:00,401 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,403 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,405 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,406 - DEBUG - close.started
2026-03-07 13:05:00,408 - DEBUG - response_closed.complete
2026-03-07 13:05:00,409 - DEBUG - 🏷 Product types: ['carts', 'flower'] → Category ID: f611977d-71cf-45b8-9295-dad9c36b653b
2026-03-07 13:05:00,411 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,411 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,412 - DEBUG - close.complete
2026-03-07 13:05:00,412 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,413 - DEBUG - send_request_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,414 - INFO - ✅ Inserted deal: Cookies - Extra $5 Off Limited Time Offer
2026-03-07 13:05:00,415 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,415 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,415 - INFO - ✅ Inserted deal: Insa - Weekly Deals: Ounces, Pre-Rolls, Flower & More
2026-03-07 13:05:00,416 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,417 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,418 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,418 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,419 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,420 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,423 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,424 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,425 - DEBUG - send_request_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,425 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,425 - DEBUG - receive_response_headers.started request=<Request [b'POST']>
2026-03-07 13:05:00,457 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299f39a646-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'019cc866-b60a-7035-8433-bf46de4b0ae1'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,458 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,459 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,459 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,459 - DEBUG - response_closed.started
2026-03-07 13:05:00,459 - DEBUG - response_closed.complete
2026-03-07 13:05:00,460 - INFO - ✅ Inserted deal: One Plant Florida - Everyday Low Prices on Edibles, Carts, and Flower
2026-03-07 13:05:00,460 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299ea98fa5-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'019cc866-b608-711d-a6d8-ebb3d94b05f6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,461 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,461 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,461 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,461 - DEBUG - response_closed.started
2026-03-07 13:05:00,462 - DEBUG - response_closed.complete
2026-03-07 13:05:00,462 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf299b9a64fe-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'019cc866-b60f-7cd8-b961-a37cc82d5190'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'7'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,463 - INFO - ✅ Inserted deal: The Flowery - Concentrate & Eighth Deals with Promo Codes
2026-03-07 13:05:00,464 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,466 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 201, b'Created', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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'9d89cf29ad008ebf-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'019cc866-b612-7be7-8c4c-10d9ead857bf'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'3'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,467 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,469 - INFO - HTTP Request: POST https://mrngdyllepreqkxxmvqn.supabase.co/rest/v1/deals "HTTP/1.1 201 Created"
2026-03-07 13:05:00,470 - DEBUG - receive_response_body.started request=<Request [b'POST']>
2026-03-07 13:05:00,471 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,472 - DEBUG - response_closed.started
2026-03-07 13:05:00,472 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,473 - DEBUG - response_closed.complete
2026-03-07 13:05:00,473 - DEBUG - response_closed.started
2026-03-07 13:05:00,474 - INFO - ✅ Inserted deal: The Flowery - Custom Ounces and Bundle Deals
2026-03-07 13:05:00,475 - DEBUG - response_closed.complete
2026-03-07 13:05:00,479 - INFO - ✅ Inserted deal: Jungle Boys - New Live Resin Carts & Premium 8ths
2026-03-07 13:05:00,480 - INFO - ✅ Batch 3 completed: 7 processed, 26 deals inserted
2026-03-07 13:05:00,557 - INFO - ✅ Unified Scraper Engine completed successfully
==================================================
📊 SCRAPER SUMMARY
==================================================
Images Found: 28
Images Processed: 26
Deals Extracted: 365
Deals Inserted: 26
Duplicates Skipped: 0
Blacklisted: 0
Errors: 2
Success Rate: 7.1%
Duration: 78.8s
2026-03-07 13:05:00,562 - DEBUG - send_request_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,563 - DEBUG - send_request_headers.complete
2026-03-07 13:05:00,563 - DEBUG - send_request_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,563 - DEBUG - send_request_body.complete
2026-03-07 13:05:00,563 - DEBUG - receive_response_headers.started request=<Request [b'GET']>
2026-03-07 13:05:00,609 - DEBUG - receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 07 Mar 2026 13:05:00 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-52/53'), (b'CF-Ray', b'9d89cf2a8eff8fa5-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'019cc866-b69d-7b6f-b8e0-542fe34af0c6'), (b'x-envoy-attempt-count', b'1'), (b'x-envoy-upstream-service-time', b'5'), (b'alt-svc', b'h3=":443"; ma=86400')])
2026-03-07 13:05:00,609 - 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 13:05:00,609 - DEBUG - receive_response_body.started request=<Request [b'GET']>
2026-03-07 13:05:00,610 - DEBUG - receive_response_body.complete
2026-03-07 13:05:00,610 - DEBUG - response_closed.started
2026-03-07 13:05:00,610 - DEBUG - response_closed.complete
2026-03-07 13:05:00,611 - INFO - ✅ Deal count OK: 53 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: 26
Duplicates Skipped: 0
Blacklisted: 0
Errors: 0
==================================================