[cron:6dd85dd2-28ce-411f-b2de-8106e314da47 Deal Post - X + Pinterest (every 30 min)] SCHEDULED TASK: Post 1 deal to X and Pinterest.

## CRITICAL: Use GHC profile ONLY
- SOCIAL_PROFILE=/home/crogers2287/.social-poster-profile-ghc
- NEVER use /home/crogers2287/.social-poster-profile/ (that's @cannadealsfl)
- NEVER use Maya VM twikit or cannadeals cookies

## MANDATORY: Hash-based duplicate prevention
1. Run: python3 scripts/posted_db.py check <deal_id> x
2. If POSTED:YES — SKIP, pick another
3. After post: python3 scripts/posted_db.py record <deal_id> <platform> <post_id> <url>

## Workflow
1. Fetch deals: python3 -c "import urllib.request,json; req=urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest'); req.add_header('User-Agent','Mozilla/5.0'); data=json.loads(urllib.request.urlopen(req).read()); deals=data if isinstance(data,list) else data.get('deals',data.get('items',[])); [print(f'{d.get(\"id\")}|{d.get(\"title\",\"\")[:80]}|${d.get(\"price\",\"\")}') for d in deals[:15]]"
2. Check hash for each candidate
3. Pick first unposted deal (50%+ off, popular brand, limited time, freebies, or under $10)
4. Download share image: wget -q "https://www.gottahavecoups.com/api/v1/share/image/<deal_id>" -O /tmp/deal_img.jpg
5. Post to X:
   cd /home/crogers2287/openclaw-workspaces/cannadeals-marketing/skills/social-poster
   SOCIAL_PROFILE=/home/crogers2287/.social-poster-profile-ghc xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" node post.mjs twitter "<tweet>" --image /tmp/deal_img.jpg
6. Post to Pinterest:
   cd /home/crogers2287/openclaw-workspaces/cannadeals-marketing/skills/social-poster
   SOCIAL_PROFILE=/home/crogers2287/.social-poster-profile-ghc xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" node post.mjs pinterest "<desc>" --title "<title>" --link "https://gottahavecoups.com/deal/<id>" --image /tmp/deal_img.jpg --board "Today's Best Deals"
7. Record both in posted_db
8. Log in memory/YYYY-MM-DD.md

## Tweet format
Hook + value + coupon code (if any) + 5-8 hashtags + link LAST: gottahavecoups.com/deal/<id>
Current time: Thursday, February 12th, 2026 — 3:57 AM (UTC)

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


exec

python3 -c "import urllib.request,json; req=urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest'); req.add_header('User-Agent','Mozilla/5.0'); data=json.loads(urllib.request.urlopen(req).read()); deals=data if isinstance(data,list) else data.get('deals',data.get('items',[])); [print(f'{d.get(\"id\")}|{d.get(\"title\",\"\")[:80]}|${d.get(\"price\",\"\")}') for d in deals[:15]]"


/bin/bash: line 1: import urllib.request,json; req=urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest'); req.add_header('User-Agent','Mozilla/5.0'); data=json.loads(urllib.request.urlopen(req).read()); deals=data if isinstance(data,list) else data.get('deals',data.get('items',[])); [print(f'{d.get("id")}|{d.get("title","")[:80]}|${d.get(\"price\",\"\")}') for d in deals[:15]]: bad substitution

Command exited with code 1


python3 -c "import urllib.request, json; req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest'); req.add_header('User-Agent', 'Mozilla/5.0'); data = json.loads(urllib.request.urlopen(req).read()); deals = data if isinstance(data, list) else data.get('deals', data.get('items', [])); [print(f'{d.get(\"id\")}|{d.get(\"title\", \"\")[:80]}|${d.get(\"price\", \"\")}') for d in deals[:15]]"


/bin/bash: line 1: import urllib.request, json; req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest'); req.add_header('User-Agent', 'Mozilla/5.0'); data = json.loads(urllib.request.urlopen(req).read()); deals = data if isinstance(data, list) else data.get('deals', data.get('items', [])); [print(f'{d.get("id")}|{d.get("title", "")[:80]}|${d.get(\"price\", \"\")}') for d in deals[:15]]: bad substitution

Command exited with code 1


cat << 'EOF' > get_deals.py
import urllib.request, json
req = urllib.request.Request('https://www.gottahavecoups.com/api/v1/deals?limit=20&sort=newest')
req.add_header('User-Agent', 'Mozilla/5.0')
try:
    with urllib.request.urlopen(req) as response:
        data = json.loads(response.read())
        deals = data if isinstance(data, list) else data.get('deals', data.get('items', []))
        for d in deals[:15]:
            print(f"{d.get('id')}|{d.get('title', '')[:80]}|${d.get('price', '')}")
except Exception as e:
    print(f"Error: {e}")
EOF
python3 get_deals.py && rm get_deals.py


33684|Micro Teenies - Spongebob Square Pants 5-Pack - Collectible Miniature Plush Figu|$14.99
33683|27" Acer VG272U W2 Nitro Monitor IPS 1440p 240Hz 1ms 400Nit (Manufacture Refurbi|$134.99
33679|Perfect Stranger Spicy Edition...d Relationship Game – Ages 17|$12.5
33681|Grimm Legacies:The Magic Spel...e Grimms' Folk and Fairy Tales|$10.52
33678|PDA in the Family|$11.85
33680|HP Ultrabook 15.6" Laptop,16GB RAM,1.1TB Storage (1TB OneDrive + 128GB UFS),Micr|$349.99
33674|Select Accts:90ct Nature Made Burp Less Ultra 1400mg Omega 3 Fish Oil Softgels $|$5.4
33676|Refurbished Good Samsung Galaxy S23 Ultra 256GB Unlocked Smartphone (Black) $315|$315.99
33673|12-pk 5.6-oz Aquafresh Cavity Protection Fluoride Toothpaste (Cool Mint) $9.95|$9.95
33675|American Tuna Sushi-grade Wild Albacore Tuna Fish - No Salt Added / 6-Pack $9.97|$9.97
33672|22-Compartment Tactix Double Sided Small Parts Organizer $6 ~ Home Depot|$6.0
33666|Leica 75mm f/2 Summicron-M Asp...ocus Lens for M System (11637|$2989.47
33670|GM Genuine Parts 24050030 Auto...Auxiliary Fluid Pump Assembly|$228.08
33669|Littlearth NCAA Iowa Hawkeyes Team Jersey Tote|$12.81
33671|5-Piece Cleanan Flat & Angled Latex/Oil Paint Brush Set w/ Edge Guard $5|$5.0


python3 scripts/posted_db.py check 33671 x && python3 scripts/posted_db.py check 33671 pinterest


HASH:7959d4b005830f69 POSTED:NO DEAL:33671 PLATFORM:x
HASH:b5a9c6b685dd07b3 POSTED:NO DEAL:33671 PLATFORM:pinterest


wget -q "https://www.gottahavecoups.com/api/v1/share/image/33671" -O /tmp/deal_img.jpg


(no output)


cd /home/crogers2287/openclaw-workspaces/cannadeals-marketing/skills/social-poster && SOCIAL_PROFILE=/home/crogers2287/.social-poster-profile-ghc xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" node post.mjs twitter "🚨 DEAL ALERT! Grab this 5-Piece Cleanan Paint Brush Set for just \$5! 🎨

Includes flat & angled brushes + edge guard. Perfect for your next DIY project!

#Deals #DIY #HomeImprovement #Painting #Savings #GottaHaveCoups #CouponCommunity

gottahavecoups.com/deal/33671" --image /tmp/deal_img.jpg


Command still running (session oceanic-rook, pid 1832832). Use process (list/poll/log/write/kill/clear/remove) for follow-up.


[*] Uploading image: /tmp/deal_img.jpg

Process still running.


(no new output)

Process still running.


You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_paid_tier_input_token_count, limit: 1000000, model: gemini-3-flash
Please retry in 58.457328994s.

Learn more about Gemini API quotas


You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_paid_tier_input_token_count, limit: 1000000, model: gemini-3-flash
Please retry in 56.275788036s.

Learn more about Gemini API quotas


You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_paid_tier_input_token_count, limit: 1000000, model: gemini-3-flash
Please retry in 52.03194824s.

Learn more about Gemini API quotas


You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: https://ai.google.dev/gemini-api/docs/rate-limits. To monitor your current usage, head to: https://ai.dev/rate-limit.
* Quota exceeded for metric: generativelanguage.googleapis.com/generate_content_paid_tier_input_token_count, limit: 1000000, model: gemini-3-flash
Please retry in 43.812681472s.

Learn more about Gemini API quotas