一键导入
spending-analysis
// Analyze Pollinations revenue, pack purchases, and tier spending patterns. Query Polar for payment history and Tinybird for usage data.
// Analyze Pollinations revenue, pack purchases, and tier spending patterns. Query Polar for payment history and Tinybird for usage data.
Add, update, or remove text/image/video/audio/embeddings models. Covers the full lifecycle: files to touch, what to verify, and how to test empirically before merging.
Detect and analyze abusive accounts on Pollinations. IP clustering, multi-signal scoring, ban recommendations. Use when investigating abuse, bot farms, or suspicious usage patterns.
Debug and diagnose model errors in Pollinations services. Analyze logs, find error patterns, identify affected users. For taking action on user tiers, see tier-management skill.
Query billing, usage, credits, and resource deployments across all our cloud and SaaS providers (Azure, AWS, Cloudflare, GCP, Tinybird, Vercel, Stripe, Polar, etc.) via their native CLIs and APIs. Use for any question about provider costs, spend by service/day/month, credit eligibility, invoice totals, which resources are running, or how to deploy/inspect resources. Each provider has a dedicated playbook under `providers/`.
Deploy Tinybird pipes and datasources for enter.pollinations.ai observability. Validates and pushes changes to Tinybird Cloud.
Generate images, text, audio, video, and transcribe speech via the Pollinations API using the polli CLI. Use when asked to generate media, call pollinations.ai, check pollen balance, list models, manage API keys, or run polli commands.
| name | spending-analysis |
| description | Analyze Pollinations revenue, pack purchases, and tier spending patterns. Query Polar for payment history and Tinybird for usage data. |
Before using this skill, ensure you have:
brew install jq (for parsing JSON)brew install sops (for decrypting secrets)Must run from the pollinations repo root with access to enter.pollinations.ai/.
external_iduser_tier, total_price, user_idWorkspace: Two workspaces exist now —
pollinations_enter(prod) andpollinations_enter_staging(staging + dev + local). All queries below use a prod read token by design — staging contains no real revenue. Theenvironment = 'production'filters below are redundant against prod-token queries (prod WS only has prod rows after the 2026-05-18 cleanup) but kept as defence-in-depth in case the token is later widened.
# From sops-encrypted secrets
export POLAR_ACCESS_TOKEN=$(sops -d enter.pollinations.ai/secrets/prod.vars.json | jq -r '.POLAR_ACCESS_TOKEN')
# Or from .testingtokens (if available)
export POLAR_ACCESS_TOKEN=$(grep POLAR_ACCESS_TOKEN enter.pollinations.ai/.testingtokens | cut -d= -f2)
export TINYBIRD_TOKEN=$(sops -d apps/operation/kpi/secrets/env.json | jq -r '.TINYBIRD_TOKEN')
curl -sL "https://api.polar.sh/v1/products" \
-H "Authorization: Bearer $POLAR_ACCESS_TOKEN" | jq '[.items[] | {name, id, recurring: .is_recurring}]'
# 5 pollen pack product ID
PRODUCT_ID="bcdde7f7-129e-4ec1-abc3-d4e0c852fa68"
curl -sL "https://api.polar.sh/v1/orders?limit=100&product_id=$PRODUCT_ID" \
-H "Authorization: Bearer $POLAR_ACCESS_TOKEN" | \
jq '[.items[] | {date: .created_at[0:10], amount: (.total_amount / 100), customer: .customer.email}]'
| Pack | Product ID |
|---|---|
| 5 pollen + 5 FREE | bcdde7f7-129e-4ec1-abc3-d4e0c852fa68 |
| 10 pollen + 10 FREE | cebeb680-4ac3-4f73-9ce7-6bc06a5f21e1 |
| 20 pollen + 20 FREE | 8164c20f-8429-437e-b1a2-616ae89f114e |
| 50 pollen + 50 FREE | 2cb5ca34-d505-450d-a1d4-94e3bb0c1f68 |
| 10 pollen (pack) | ca4cc8bc-694d-4710-8451-1dcb4979fbc7 |
| 20 pollen (pack) | 679a9fd3-be30-4552-8b2e-f825103c42b7 |
| 50 pollen (pack) | bf48ded2-19ca-4d28-bca9-a91fff2dd0a0 |
.claude/skills/spending-analysis/scripts/weekly-pack-revenue.sh
curl -sL "https://api.europe-west2.gcp.tinybird.co/v0/sql" \
-H "Authorization: Bearer $TINYBIRD_TOKEN" \
--data-urlencode "q=SELECT argMax(user_tier, start_time) as tier, count() as users FROM generation_event WHERE start_time >= now() - INTERVAL 60 DAY AND environment = 'production' AND user_id != 'undefined' GROUP BY user_id FORMAT JSON" | \
jq '.data | group_by(.tier) | map({tier: .[0].tier, users: length})'
curl -sL "https://api.europe-west2.gcp.tinybird.co/v0/sql" \
-H "Authorization: Bearer $TINYBIRD_TOKEN" \
--data-urlencode "q=SELECT toStartOfWeek(start_time) as week, user_tier, sum(total_price) as total_spend, count() as requests FROM generation_event WHERE start_time >= now() - INTERVAL 60 DAY AND environment = 'production' GROUP BY week, user_tier ORDER BY week DESC FORMAT JSON" | jq '.data'
.claude/skills/spending-analysis/scripts/weekly-pack-revenue.sh
Shows weekly breakdown of actual pack purchases (real revenue, not free tier usage).
.claude/skills/spending-analysis/scripts/pack-purchases-by-tier.sh
Cross-references Polar pack purchasers with Tinybird tier data to show which tiers buy most pollen proportionally.
| Tier | Revenue | Purchasers | Total Users | % Who Buy | $/User |
|---|---|---|---|---|---|
| nectar | $146 | 10 | 23 | 43.5% | $6.37 |
| flower | $564 | 18 | 218 | 8.3% | $2.59 |
| seed | $1,173 | 38 | 575 | 6.6% | $2.04 |
| spore | $1,657 | 106 | 6,757 | 1.6% | $0.25 |
Key Insight: Higher tiers buy MORE pollen proportionally, not less.
| Week | Orders | Revenue |
|---|---|---|
| Jan 13-19 | 51 | $573 |
| Jan 6-12 | 83 | $928 |
| Dec 30-Jan 5 | 59 | $928 |
| Dec 23-29 | 21 | $432 |
| Dec 16-22 | 22 | $276 |
| Dec 9-15 | 16 | $141 |
| Dec 2-8 | 17 | $293 |
| Nov 25-Dec 1 | 10 | $293 |
| Nov 18-24 | 1 | $10 |
external_id (Polar) = user_id (Tinybird)curl -sL to follow