skills/sales-memberful/SKILL.md
Memberful platform help — membership + paid-subscription layer (Patreon-owned, memberful.com) for creators/publishers/communities: checkout, trials, coupons, gated content, private podcasts/newsletters/downloads, and OAuth SSO, on your own Stripe. Developer surface: a GraphQL API (endpoint ACCOUNT.memberful.com/api/graphql, Authorization: Bearer key from Settings > Custom applications; queries + mutations for members/subscriptions/passes/plans/coupons; cursor pagination) and 21 HMAC-SHA256-signed webhooks (X-Memberful-Webhook-Signature; member/subscription/order/plan/download events). WordPress/Discord/Mailchimp/Kit/Zapier integrations. Use when querying/mutating members via GraphQL, verifying a signed webhook, wiring OAuth SSO, untangling the dashboard-Plan-vs-API-Pass terminology, or weighing the 10%/4.9% fees. Do NOT use for membership-platform strategy/comparison (use /sales-membership), checkout-conversion optimization across tools (use /sales-checkout), or email marketing (use /sales-email-marketing).
npx skillsauth add sales-skills/sales sales-memberfulInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
If references/learnings.md exists, read it first for accumulated platform knowledge.
What are you trying to do?
Front-end or back-end? Browser gating/checkout = WordPress plugin / website builder. Server-side member ops, OAuth callback, and webhook verification = GraphQL API + middleware (Bearer key, server-side only). This decides everything.
Skip-ahead rule: if the user's prompt already provides enough context, skip to Step 2.
| If the question is about... | Route to... |
|---|---|
| Choosing or comparing membership/course platforms | /sales-membership {question} |
| Checkout / trial / dunning / upsell optimization across tools | /sales-checkout {question} |
| Email sequences/newsletters to members (Memberful doesn't send marketing email) | /sales-email-marketing {question} |
| Wiring Memberful into a CRM/warehouse or other tools generically | /sales-integration {question} |
| Membership/community structure, pricing, and retention strategy | /sales-membership {question} |
When routing, give the exact command, e.g. "Platform comparison — run: /sales-membership Memberful vs a hosted course platform".
Read references/platform-guide.md for the full reference — the module map (GraphQL vs front-end vs webhook vs UI), the Plan-vs-Pass terminology trap, plan/transaction-fee gates, the member data model with JSON shapes, and quick-start recipes (query members paginated; verify a webhook + re-fetch; OAuth SSO).
Read references/memberful-api-reference.md for the integration surface — the GraphQL endpoint https://ACCOUNT-URL.memberful.com/api/graphql, Bearer API-key auth (from Settings → Custom applications), example query/mutation, Relay cursor pagination, member-metadata limits, the GraphQL error convention (HTTP 200 + errors), the 21 webhook events, the HMAC-SHA256 signature scheme (X-Memberful-Webhook-Signature), and OAuth.
Answer using only the relevant section. Don't dump the full reference.
Focus on the user's specific situation:
POST …/api/graphql, Authorization: Bearer <key> (key from Settings → Custom applications, server-side only). Build/test in the in-dashboard API Explorer.Pass (the membership); dashboard "Price" = API Plan (a pricing variant). Using the wrong name is the #1 first-integration bug.errors, not the status code. The API returns HTTP 200 even on failure — inspect the errors array in the body.HMAC-SHA256(rawBody, webhookSecret) and constant-time compare to X-Memberful-Webhook-Signature. Then re-query GraphQL for authoritative state — the payload is a snapshot. Event names mix _ and . — match exact strings.If you discover a gotcha, workaround, or tip not covered in references/learnings.md, append it there.
Best-effort from research (2026-06) — API verbatim from memberful.com/docs; pricing from marketing/reviews. Confirm in-account.
Plan. API Pass = dashboard Plan (the membership); API Plan = dashboard Price (a pricing variant). Read the terminology table before querying.errors array even when the operation fails — never branch on the status code alone.X-Memberful-Webhook-Signature, key = Webhook secret, over the raw body. Then re-fetch via GraphQL; treat the payload as a trigger, not the source of truth.snake_case (member_signup, member_updated), some dot.case (member.deleted, subscription.created). Match the exact event string./sales-membership — Membership/course platform strategy, pricing, and retention, and choosing Memberful vs a hosted course platform or another paywall layer/sales-memberstack — Memberstack (the closest direct alternative: no-code auth/paywall + Stripe for Webflow/custom sites; REST Admin API)/sales-checkout — Checkout, trial, and subscription optimization (Memberful runs payments through your Stripe)/sales-email-marketing — Newsletters/sequences for members (Memberful doesn't send marketing email — connect an ESP)/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-do -a claude-codeUser says: "How do I pull every member and which plan they're on out of Memberful?"
Skill does: Shows a GraphQL members(first: 100, after: …) query against https://ACCOUNT-URL.memberful.com/api/graphql with Authorization: Bearer <key>, looping on pageInfo.hasNextPage/endCursor (Recipe 1), and reading each node's subscriptions { pass { name } } — flagging that the dashboard "Plan" is the API pass, and to check the errors array since the API returns HTTP 200 on failure.
Result: A complete, paginated member + membership export.
User says: "Memberful POSTs to my endpoint on signup — how do I know it's real?"
Skill does: Explains HMAC-SHA256 verification — compute HMAC-SHA256(rawBody, webhookSecret) and constant-time compare to X-Memberful-Webhook-Signature (Recipe 2 + Gotcha 3) — then re-query GraphQL for the member's current state rather than trusting the snapshot. Notes the 21 events and the _ vs . casing.
Result: Authenticated, tamper-evident webhook intake that grants access on confirmed state.
User says: "I want paid memberships + gated content on my own site — Memberful or Memberstack?"
Skill does: Frames it — Memberful is membership-first (own-your-audience subscriptions, private podcasts/newsletters/downloads, WordPress, GraphQL API, fees 10%/4.9% on your Stripe), Memberstack is auth/paywall-first for Webflow/custom sites (REST Admin API, JWT gating). Recommends by primary need and routes deeper platform selection: "run: /sales-membership Memberful vs Memberstack for a paid community."
Result: A need-based choice between the two closest tools.
Symptom: You get an HTTP 200 but data is null or empty.
Cause: Memberful follows the GraphQL convention — errors come back as HTTP 200 with an "errors" array (bad field name, wrong type, auth issue), and querying the wrong type name (Plan vs Pass) returns nothing.
Solution: Inspect the errors array in the response body, and confirm you're using the API names: Pass = dashboard "Plan", Plan = dashboard "Price". Test the query in the in-dashboard API Explorer first.
Symptom: The HMAC you compute doesn't match X-Memberful-Webhook-Signature.
Cause: Hashing a re-serialized body (not the raw bytes), the wrong Webhook secret, or normalizing the event name.
Solution: Compute HMAC-SHA256 over the raw request body with the Webhook secret (Settings → Webhooks) and constant-time compare to the header. Match the docs' Ruby/JS examples exactly. Don't normalize event strings — some use _, some use .. Once verified, re-fetch the record via GraphQL before acting.
Symptom: The OAuth redirect comes back but you can't complete the token exchange.
Cause: The OAuth code-for-token exchange must run server-side — it can't execute on a purely static/client-only site.
Solution: Add server-side middleware (Node/Python or a serverless function on Cloudflare Workers / AWS Lambda) to handle the callback, exchange the code, then read the member's passes to authorize. For platform selection beyond auth, use /sales-membership.
tools
Wizlogo (wizlogo.com) platform help — a budget online logo maker (template/style-variation, marketed as "AI") plus a hub of FREE branding tools (business-name, blog-name and slogan generators, business-card maker, invoice generator, color converter, domain search). The pricing traps: the FREE logo is PERSONAL-USE-ONLY; the two cheap paid tiers are RASTER PNG/JPG only — Single (~€39.99 one-time) and Unlimited (~€3.99 per WEEK, recurring) — and VECTOR (SVG/PDF/EPS) is gated to the ~€299.99 Enterprise tier, which also bundles human designer edits and a social kit. Transparent PNG is on all paid plans. Use when making a Wizlogo logo, understanding free-vs-paid or personal-vs-commercial use, which tier unlocks vector/SVG for print, the weekly-subscription billing trap, its free name/slogan generators, or whether it has an API (UI-only — no public API, webhooks, Zapier or MCP). Do NOT use to just generate the business name (use /sales-namelix) or to compare/validate branding tools (use /sales-idea-validation).
tools
VistaPrint platform help (vistaprint.com, a Cimpress company) — the small-business design + print + digital-marketing platform: a free AI Logomaker (4 generations, 60 more after free sign-up) exporting SVG/PNG/PDF at 4000x4000 with no watermark, a free Brand Kit, business cards/flyers/signage/apparel/promo print, and a website builder. THE RIGHTS TRAP: VistaPrint states NO intellectual-property rights transfer on an AI-generated logo — you get usage rights but CANNOT register it for trademark or copyright; only its human designer service transfers full IP. Use when making a VistaPrint logo, asking if you own or can trademark it, running out of AI logo credits, printed colors not matching the screen, bleed/DPI/font file-prep rejections, or asking whether VistaPrint has an API (the consumer site does not — automation runs through the parent Cimpress Open partner-fulfilment API). Do NOT use for Vista Social scheduling (use /sales-vistasocial) or comparing logo tools market-wide (use /sales-idea-validation).
tools
Turbologo (turbologo.com) platform help — a budget AI/DIY logo maker: enter a business name + industry, pick icons and colors, and it proposes logo concepts you refine in an in-browser editor, then pay a one-time fee to download (designing is free, previews are watermarked, downloading is the paywall). Vector SVG/PDF is gated to the mid tier and up; the top tier adds a brand kit (business cards, letterheads, email signatures, social assets). Use when generating a logo in Turbologo, choosing which download tier to buy, vector SVG vs raster PNG, removing the free watermark, the time-limited edit-after-purchase window, pay-to-download pricing questions, whether an AI logo is yours to trademark, or whether Turbologo has an API to bulk-generate logos (it is UI-only — no public API, webhooks, Zapier, or MCP). Do NOT use to generate the business name (use /sales-namelix), compare or validate branding tools across the market (use /sales-idea-validation), or build wider marketing creative (use /sales-canva).
tools
Online Logo Maker (onlinelogomaker.com) platform help — a long-standing free/freemium DIY logo maker: build the mark yourself from icons, shapes, text, and fonts — MANUAL/template-based, NOT enter-a-name-get-AI-concepts. The free pack downloads a LOW-RES 300px PNG with a background; vector SVG, transparent PNG, and 2000px high-res are gated to a one-time lifetime Premium pack (not a subscription). The free tier's commercial-use rights are disputed by reviewers — clean ownership effectively needs Premium, and a shared-icon mark can be non-distinctive. Use for building/editing a logo here, free download vs Premium, vector SVG or transparent PNG, one-time pricing, commercial-use/trademark terms, near-namesake confusion (NOT LogoMaker.com / LogoMakr / Logomakerr.ai), or whether it has an API (UI-only — no API, webhooks, Zapier, MCP). Do NOT use to generate the business name (use /sales-namelix), compare branding tools across the market (use /sales-idea-validation), or build wider creative (use /sales-canva).