[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 — 12:27 PM (UTC)

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


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B21qe3KT9N7rPeytuh"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B2L3GXQHBfdHh52po7"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B2qAio9Qy6uJEhk6pK"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B3cpbX69mCAitVZum7"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B3p1JFDaWvY4UvEnJL"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B4AhFUEivDCKaGkseG"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B4fcYmwhfnAAMg4viS"}


429 {"type":"error","error":{"type":"rate_limit_error","message":"This request would exceed your account's rate limit. Please try again later."},"request_id":"req_011CY4B5Sn9uBKGc2q5DQXa5"}


Resource has been exhausted (e.g. check quota).