Research date: 2026-04-05 Issue: #205 Sources: developers.kajabi.com, kajabi.com/features, Pewpros codebase audit
Pewpros is a single-tenant, firearms-industry-focused learning + membership + community platform with deep vertical integrations (USCCA, GHL, Stripe Terminal, Apple Wallet, iOS Live Activities). Kajabi is a horizontal, multi-tenant creator-economy platform optimized for course/membership/coaching creators.
The two platforms overlap in ~60% of their surface area (courses, memberships, community, commerce, CRM, email, automations, blog), but each has unique strengths:
Pewpros wins on: events & scheduling, appointments, mobile/native (APNs, Live Activities, Wallet), unified communications (SMS/voice/chat), approval gates in automations, USCCA/GHL integrations, in-person POS, family memberships, refund/reschedule policy engine.
Kajabi wins on: landing page & website builder, funnels/pipelines, public OAuth API with JSON:API + webhooks, forms builder, offers/pricing flexibility (payment plans, order bumps), podcasts, coaching product type, analytics polish, mobile creator/consumer apps, developer ecosystem.
The attack strategy (Section 6) prioritizes: (1) public developer API + webhooks (table stakes for integrations); (2) payment plans + order bumps (revenue uplift); (3) forms builder (lead capture gap); (4) page/funnel builder (long-tail).
Legend: ● = full parity, ◐ = partial, ○ = missing, ★ = Pewpros exceeds Kajabi
| Area | Capability | Kajabi | Pewpros | Notes |
|---|---|---|---|---|
| Courses / LMS | Course → module → lesson hierarchy | ● | ● | Pewpros: course → section → lesson |
| Video lessons (embedded) | ● | ● | No built-in hosting either side; both embed | |
| Text / PDF lessons | ● | ● | ||
| Drip content (date + day-count) | ● | ● | ||
| Progress tracking | ● | ● | Lesson + video position | |
| Assessments / quizzes | ● | ○ | Schema stub only, no grading UI | |
| Assignments (upload, grade) | ● | ○ | Not implemented | |
| Certificates on completion | ● | ● ★ | Pewpros has 6 certificate types + PDF gen | |
| Prerequisites / skill trees | ● | ○ | ||
| Sequential mode | ● | ● | ||
| Cohorts / group-based courses | ● | ◐ | Groups exist but not cohort model | |
| Multi-instructor courses | ● | ○ | Single instructor field | |
| Free preview lessons | ● | ● | ||
| Course bundles | ● | ◐ | Via membership levels | |
| Memberships | Recurring subscriptions | ● | ● | |
| Tiered membership levels | ● | ● | ||
| Family plans | ○ | ● ★ | Primary + spouse + dependents with Stripe | |
| Trial periods | ● | ◐ | Only via Stripe config, no UI | |
| Pause / resume | ● | ○ | ||
| Proration on upgrade | ● | ○ | ||
| Dunning management | ● | ◐ | Basic retry, no upsell on decline | |
| Auto-enrollment in linked courses | ● | ● | Via membership_level_courses |
|
| External sync (USCCA) | ○ | ● ★ | USCCA bidirectional sync | |
| Community | Feed, posts, comments, likes | ● | ● | |
| Categories / spaces | ● | ● | ||
| Polls | ● | ● | ||
| Leaderboards / gamification | ● | ● | Points + point_events | |
| Member profiles | ● | ● | ||
| Moderation (report, block, pin) | ● | ● | ||
| Direct messages | ● | ● | Unified conversations | |
| @ mentions & notifications | ● | ○ | ||
| Hashtags | ● | ○ | ||
| Threaded replies | ● | ○ | Flat comment structure | |
| Private sub-groups / channels | ● | ○ | ||
| Live events / streaming | ● | ◐ | AWS IVS integration exists | |
| Push notifications on activity | ● | ● ★ | APNs + iOS Live Activities | |
| Email Marketing | Broadcast emails | ● | ● | Admin compose |
| Drip sequences / campaigns | ● | ◐ | Via automations, no dedicated UI | |
| Segments (behavior-based) | ● | ◐ | Tag-based only | |
| Email templates library | ● | ◐ | Transactional only | |
| A/B testing | ● | ○ | ||
| Open / click tracking | ● | ○ | ||
| Deliverability monitoring | ● | ○ | ||
| Forms → email list | ● | ○ | No form builder | |
| SMS broadcasts | ○ | ● ★ | Twilio | |
| Voice broadcasts | ○ | ● ★ | Twilio | |
| Funnels / Pages | Landing page builder (drag-drop) | ● | ○ | Hardcoded templates only |
| Sales funnel / pipeline (multi-step) | ● | ○ | ||
| Opt-in forms / lead capture | ● | ○ | ||
| Thank-you pages | ● | ◐ | Hardcoded per flow | |
| A/B test pages | ● | ○ | ||
| Custom website pages | ● | ○ | ||
| Themes / templates marketplace | ● | ○ | Tenant branding only | |
| Popups / exit intent | ● | ○ | ||
| Commerce | One-time products | ● | ● | Shop |
| Recurring subscriptions | ● | ● | ||
| Payment plans (installments) | ● | ○ | Split payments not supported | |
| Order bumps (checkout upsell) | ● | ◐ | Event addons only | |
| Upsells (post-purchase) | ● | ○ | ||
| Coupons / promo codes | ● | ● | ||
| Tax calculation | ● | ◐ | Stripe only | |
| Multi-currency | ● | ◐ | Stripe supports but UI fixed | |
| Physical products + shipping | ◐ | ● ★ | Kajabi is digital-first | |
| Affiliate program | ● | ○ | ||
| In-person POS | ○ | ● ★ | Stripe Terminal | |
| Apple Wallet passes | ○ | ● ★ | Events & memberships | |
| Analytics | Revenue dashboard | ● | ● | |
| Student progress reports | ● | ● | ||
| Cohort analytics | ● | ○ | ||
| Funnel conversion analytics | ● | ○ | ||
| Video watch analytics | ● | ● | ||
| Email engagement | ● | ○ | ||
| Custom report builder | ● | ○ | ||
| CSV export | ● | ● | ||
| Automations | Visual workflow builder | ● | ● | |
| Trigger types | ● | ● ★ | Pewpros: 15+ incl. community, webhooks | |
| Action types | ● | ● ★ | 20+ nodes incl. Stripe ops | |
| Conditional branching | ● | ● | ||
| Delay / wait steps | ● | ● | ||
| Manual approval gates | ○ | ● ★ | ||
| Sub-workflows | ○ | ● ★ | ||
| Rate limiting / circuit breaker | ○ | ● ★ | ||
| Templates library | ● | ● | ||
| Events / Scheduling | Calendar events | ○ | ● ★ | Kajabi has no events |
| Recurring event series | ○ | ● ★ | instances + occurrences | |
| Ticket types & pricing tiers | ○ | ● ★ | ||
| Registration + payment | ○ | ● ★ | ||
| Waitlist | ○ | ● ★ | ||
| Check-in (QR) | ○ | ● ★ | ||
| Refund / reschedule policies | ○ | ● ★ | Full policy engine | |
| Virtual / Zoom / IVS integration | ○ | ● ★ | ||
| 1:1 appointment booking | ◐ | ● ★ | Kajabi has coaching calls, not quite the same | |
| Venue management | ○ | ● ★ | ||
| Blog / Content | Blog posts + categories | ● | ● | |
| SEO metadata | ● | ● | ||
| RSS feed | ● | ● | ||
| Scheduled publishing | ● | ○ | No publish_at |
|
| Comments | ● | ○ | ||
| Podcasts | ● | ○ | Not implemented | |
| Newsletters (separate product) | ● | ○ | ||
| Mobile | Creator mobile app | ● | ○ | Kajabi has one, we don't |
| Learner mobile app | ● | ● | Swift app | |
| Push notifications | ● | ● | APNs | |
| iOS Live Activities | ○ | ● ★ | ||
| Offline sync | ◐ | ○ | ||
| Integrations | Stripe | ● | ● | Both deep |
| Google Calendar | ● | ● | ||
| Mailchimp / Klaviyo | ● | ○ | ||
| Zapier / Make | ● | ○ | No native connector | |
| GHL (Go High Level) | ○ | ● ★ | ||
| USCCA | ○ | ● ★ | ||
| Twilio | ○ | ● ★ | ||
| Zoom | ● | ● | ||
| WordPress / WooCommerce import | ● | ● | ||
| Auth / Users | Email + password | ● | ● | |
| Magic link | ● | ● | ||
| Social login (Google/FB/Apple) | ● | ◐ | Only Google for calendar, not login | |
| 2FA | ● | ○ | ||
| SSO (SAML) | ● | ○ | ||
| Roles & permissions | ● | ● | student/admin/owner/super_admin |
| Dimension | Kajabi | Pewpros |
|---|---|---|
| Base URL | https://api.kajabi.com/v1 |
https://{tenant}.pewpros.com/api/v1 |
| Format | JSON:API (sparse fields, includes, relationships) | Plain REST JSON |
| Auth | OAuth 2.0 client_credentials grant |
Bearer token (user) + X-Admin-Key (admin) |
| Developer docs | Public Mintlify site, OpenAPI spec, Postman collection | /docs (internal), OpenAPI at /api/docs/openapi.json |
| Self-serve API keys | ● Via Kajabi Dashboard → Public API settings | ○ No customer-facing key management |
| Scopes | ● Granular (view:contacts, view:orders, etc.) |
○ Coarse (admin vs user) |
| Sandbox env | ◐ Not documented | ○ None |
| Rate limits | Not publicly documented | ◐ Only on /auto-login (10/60s) |
| Webhooks (self-serve CRUD) | ● Full via /v1/hooks |
○ Hardcoded incoming endpoints |
| Idempotency keys | Not documented | ○ |
| Request IDs | Not documented | ○ |
| Kajabi Resource | Kajabi Endpoints | Pewpros Equivalent | Gap |
|---|---|---|---|
| Blog Posts | list, show | /api/v1/blog, /api/v1/blog/:slug |
● parity |
| Contacts | list, show, create, update, delete | /api/v1/contacts/* |
● parity + we have notes |
| Contact Notes | list, show, create, update, delete | /api/v1/contacts/:id/notes/* |
● parity |
| Contact Tags | list, show | /api/v1/tags/* |
● parity |
| Contact → Tag add/remove/replace | dedicated endpoints | /api/v1/contacts/:id/tags |
◐ no "replace" op |
| Contact → Offer grant/revoke/replace | dedicated endpoints | -- | ○ no offer concept |
| Courses | list, show | /api/v1/courses/* |
● parity + we have lessons/progress |
| Custom Fields | list, show | -- | ○ No custom field system on contacts |
| Customers | list, show + offer grants | -- | ○ No "Customer" abstraction separate from User |
| Forms | list, show, submit, submissions | -- | ○ No form builder |
| Landing Pages | list, show | -- | ○ No page builder |
| Offers | list, show, products | -- | ○ No offer abstraction |
| Orders | list, show, items | /admin/shop-orders (LiveView only) |
◐ no public Orders API |
| Podcasts | list, show | -- | ○ No podcasts |
| Products | list, show | /api/v1/admin/courses, /api/v1/admin/products |
◐ not unified |
| Purchases | list, show, cancel, deactivate, reactivate | /api/v1/courses/:slug/enroll, /api/v1/membership |
◐ scattered across enrollments/memberships/registrations |
| Sites / Website Pages | list, show | -- | ○ No multi-site / page API |
| Transactions | list, show | /api/v1/admin/reporting (data only) |
◐ no per-transaction resource endpoint |
| Payouts | list, show | -- | ○ Stripe dashboard only |
| Webhooks (CRUD) | create, list, show, delete | -- | ○ No webhook management API |
User Profile (/me) |
show | /api/v1/auth/me, /api/v1/profile |
● parity |
These are the vertical strengths that form our moat:
- Events (10 endpoints): listing, registration, checkout, reschedule, cancel, roster, mobile checkout
- Appointments (booking, availability, reschedule)
- Groups / Seats (13 endpoints: invitations, members, courses, events, progress, seats)
- Community (20 endpoints: feed, posts, comments, polls, likes, pin, report, block, leaderboard, members, profile)
- Conversations (SMS/voice/email/chat unified)
- Live Activities (iOS) -- start, advance, end
- Device tokens & push -- register, unregister, test push
- Certifications -- issue, list, download PDF
- Apple Wallet passes
- Waivers -- liability form management
- Notifications -- list, unread count, mark read
- Approval gates -- list, approve, deny
- Admin Reporting + CSV export
- Terminal (Stripe POS) -- connection tokens, payment intents
- QR codes -- event join, community invites
| Dimension | Kajabi | Pewpros |
|---|---|---|
| Self-serve CRUD API | ● | ○ (hardcoded) |
| Event types | 6 (purchase, payment_succeeded, order_created, form_submission, tag_added, tag_removed) | 15+ internal automation triggers, but not exposed as outbound webhooks |
| Signature verification | Not documented | ● Stripe uses signature; our own webhooks don't sign |
| Retry policy | Not documented | ◐ Oban retries for outbound webhook automation actions |
| Wildcard / filtered hooks | ● (omit resource_id = wildcard) |
○ |
| Dead-letter queue | Not documented | ◐ webhook_dedup for idempotency |
This is our biggest API gap. Customers integrating Pewpros with external tools (Zapier, custom backends) need a self-serve way to create webhooks and receive signed deliveries.
These are features buyers will ask about in the sales cycle and expect on day one.
| # | Gap | Why it matters | Effort |
|---|---|---|---|
| P0-1 | Public developer API keys (self-serve) | Customers can't integrate with Zapier, custom apps, or agencies without admin intervention. Kajabi has this. | M |
| P0-2 | Outbound webhook CRUD API + signing | The #1 integration blocker. Webhooks with HMAC signatures are table stakes. | M |
| P0-3 | Payment plans (split payments on courses) | Kajabi, Teachable, Thinkific all have this. Direct revenue impact -- buyers choose platforms they can sell $2k+ courses on. | M |
| P0-4 | Order bumps & one-click upsells | Checkout AOV uplift. Kajabi markets this heavily. | S |
| P0-5 | Forms builder (lead capture + submissions API) | Today we have no way to capture leads outside of hardcoded signup forms. Needed for lead magnets, contact pages, waitlists. | M |
| P0-6 | Quizzes + graded assessments | LMS parity. Schema stub exists; build the runtime. | M |
| P0-7 | Trial periods UI for memberships | Already in Stripe, but no UI. Easy win. | S |
Features that close the gap but aren't deal-breakers.
| # | Gap | Why it matters | Effort |
|---|---|---|---|
| P1-1 | Landing page / section builder | Removes agency dependency for one-off promo pages. Even a block-based builder would work. | L |
| P1-2 | Drip email sequence UI (on top of automations) | Automations already do this, but a dedicated sequence UI is much easier to use. | M |
| P1-3 | Course prerequisites | S | |
| P1-4 | Scheduled blog publishing (publish_at) |
Trivial, embarrassing we don't have it. | XS |
| P1-5 | 2FA for admin accounts | Security posture. TOTP via Erlang lib. | S |
| P1-6 | @ mentions in community + notifications | Engagement. | S |
| P1-7 | Affiliate program | Creator-economy standard. | L |
| P1-8 | Custom fields on contacts | Currently only tags and lists. | S |
| P1-9 | Email open/click tracking | Needs a tracking pixel + redirect handler. | M |
| P1-10 | Cohort analytics | Track a group of students through a course together. | M |
Features we'd do after closing the P0/P1 gaps.
| # | Gap | Notes |
|---|---|---|
| P2-1 | Podcasts | Low priority unless a customer asks |
| P2-2 | Newsletters as a separate product | Overlaps with email marketing |
| P2-3 | Coaching product type | Overlaps with appointments |
| P2-4 | Threaded comments in community | Nice but not blocking |
| P2-5 | Private sub-groups in community | |
| P2-6 | Funnel builder (multi-step) | After landing page builder |
| P2-7 | A/B testing for emails & pages | After builder exists |
| P2-8 | SAML SSO | Only if enterprise customer asks |
| P2-9 | Social login (Apple/FB) | Google Calendar already integrated |
| P2-10 | Zapier official connector | After public API + webhooks ship |
| P2-11 | Sandbox environment for API | |
| P2-12 | Request IDs + idempotency keys | API polish |
These are the things that differentiate us and should be preserved/extended, not regressed:
- Firearms industry verticalization -- USCCA integration, waivers, range events, certification workflows. Kajabi can never match this without a vertical acquisition.
- Physical events + in-person POS -- Check-in, QR, Stripe Terminal, ticket types, addons, refund/reschedule policies.
- Unified communications -- SMS, voice, email, DM, community all in one inbox (
/admin/chat). - GHL deep integration -- Bidirectional contact sync, tag triggers, auto-login tokens.
- Automation power features -- Approval gates, sub-workflows, rate limiting.
- Native iOS -- Live Activities, APNs, Wallet passes.
- Family memberships -- Primary + spouse + dependents, all billed together.
- Appointment booking -- 1:1 scheduling with Google Calendar sync.
These are multi-year leads that Kajabi would have to rebuild from scratch.
Each "sprint" is a logical slice (not a fixed duration). Ship in this order so every sprint delivers a sellable feature and unblocks the next.
Goal: Pewpros becomes integration-friendly. Ship the minimum so a developer can build on top.
ApiKeyschema (user_id, name, scopes, last_used_at, hashed_key)- Admin UI under
/admin/api-keysto create/revoke keys - Scopes:
read:contacts,write:contacts,read:courses,write:courses,read:events,write:events,read:orders,read:members,read:community,write:community Webhookschema (url, events, signing_secret, active, last_delivery_at)- Admin UI
/admin/webhooksto create/test/delete subscriptions WebhookDeliveryWorker(Oban) with HMAC-SHA256 signing, 5-attempt exponential backoff, dead-letter onwebhook_deliveriestable- Event emitters in contexts for:
contact.created,contact.updated,contact.tagged,order.created,payment.succeeded,enrollment.created,enrollment.completed,membership.activated,membership.cancelled,event.registered,community.post.created - Docs page at
/docsupdated with API key + webhook guide - Add request ID middleware (
Plug.RequestId→X-Request-IDheader)
Deliverable: A customer can paste an API key into Zapier/Make and receive real-time webhooks.
Goal: Increase checkout AOV and remove pricing objections.
- Payment plans: add
pricing_type: "plan"to courses + memberships, withnum_installmentsandinterval. Use Stripe'ssubscription_schedulesunder the hood. - Order bumps: add
order_bumpsconfig to course/event/membership checkouts -- a checkbox on Stripe Checkout or a pre-checkout step with the bump products. - Post-purchase upsells:
upsell_offerstable linking a trigger product to an upsell product; present on thank-you page. - Trial periods UI: add
trial_daysto membership levels, wire to Stripe. - Admin UI for all of the above in
/admin/commerce(new section).
Deliverable: Customer can sell a $2k course in 4 payments + add an order bump. Direct revenue uplift.
Goal: Close the two biggest LMS/marketing gaps.
- Forms builder:
Form,FormField,FormSubmissionschemas- Admin builder LiveView at
/admin/forms/:id/editwith field types: text, email, phone, select, checkbox, textarea, hidden, consent - Embed code + direct URL
/forms/:slug - Submission API
POST /api/v1/forms/:slug/submit - Automation trigger:
form.submitted - Submissions list view
- Quizzes / assessments:
- Finish
lesson.content_type = "quiz": addQuizQuestion,QuizChoice,QuizAttempt,QuizAnswer - Question types: multiple choice, true/false, short answer
- Passing score on lesson
- Block lesson progress until quiz passed (when
require_sequential) - Student quiz-taking LiveView
- Admin quiz builder
- Finish
Deliverable: Customers can build lead-capture forms and real quizzes without leaving Pewpros.
Goal: Let admins create custom pages without a developer. Don't try to beat Kajabi's builder -- match the 80% use cases.
Pageschema (slug, title, status, blocks: jsonb array, seo_*)- Block types (start with 10): hero, text, image, video, cta, pricing_table, testimonial, feature_grid, event_list, course_list
- Block renderers as function components in
PewprosWeb.PageBlocks - Admin LiveView
/admin/pageswith block picker + inline preview (no drag-drop v1, just add/remove/reorder) - Public route
/p/:slugserving rendered pages - Extend to course/event landing page overrides later
Deliverable: Customer can launch a promo page with hero + CTA + pricing table in 5 minutes.
Goal: Marketer-friendly UX on top of existing infra.
- Email sequence UI: dedicated
/admin/sequenceswrapping existing automation engine -- list of steps, drip delays, templates. Automations still power it under the hood. - Scheduled publishing: add
publish_atto blog posts + pages, cron worker to flip status. - @ mentions: parse
@usernamein community posts/comments, createNotificationrecords, push via APNs. - Custom fields on contacts:
ContactCustomFieldschema, admin UI to define fields, API to read/write. - Email open/click tracking: tracking pixel served at
/e/open/:delivery_id, link rewriter →/e/click/:delivery_id/:hash,EmailDeliveryschema.
- 2FA for admins: TOTP via
:potlib, enrollment flow, backup codes - Cohort analytics: group_progress already exists -- build dashboard views
- Affiliate program (P1-7):
Affiliate,AffiliateLink,Commissionschemas; tracking cookie; payout via Stripe Connect
Prioritize based on actual customer asks. Likely order:
- Funnel builder (extend page builder with multi-step flows)
- A/B testing on pages and emails
- Zapier official app (public API is already shipped)
- SAML SSO (first enterprise customer ask)
- Podcasts
- Threaded community comments
- Vertical vs horizontal positioning -- Do we want to be a firearms-industry platform that happens to be Kajabi-like, or a general creator platform with a firearms vertical? Answer changes priorities (e.g., podcasts matter more if horizontal).
- Kajabi API parity vs our own API shape -- Should we adopt JSON:API to make Kajabi migration easier, or keep our plain-REST API? Recommendation: keep plain REST, add a Kajabi-compat adapter layer later if migration demand emerges.
- Offer abstraction -- Kajabi's
Offeris a nice unified pricing wrapper across products. Should we introduce one? It would simplify checkout but require migrating existing course/event/membership pricing fields. Low priority unless we start selling product bundles. - Kajabi Payments competitor -- Kajabi has their own payment processor. We rely entirely on Stripe. Not worth competing with -- Stripe is strictly better for the customer.
- Mobile creator app -- Kajabi ships an app for creators to manage their business on mobile. Our admin is responsive but not native. Probably P2 unless customers ask.
- Authentication: 2 endpoints
- Blog Posts: 2
- Contacts: 13 (incl. tags, offers, notes relations)
- Contact Notes: 5
- Contact Tags: 2
- Courses: 2
- Custom Fields: 2
- Customers: 6
- Forms: 5
- Landing Pages: 2
- Offers: 3
- Orders: 4
- Podcasts: 2
- Products: 2
- Purchases: 5
- Sites: 4
- Transactions: 2
- Payouts: 2
- Webhooks: 10 (4 CRUD + 6 sample payloads)
- User Profile: 1
Total: ~76 public endpoints
- Auth: 8
- Courses: 6 (+ admin CRUD ~10)
- Lessons: 5
- Events: 10 (+ admin CRUD ~12)
- Memberships: 3
- Groups: 13
- Community: 20
- Conversations: 8
- Contacts: 8 (+ notes 4 + activities 1)
- Tags / Lists: 8
- Certifications: ~5
- Notifications: 4
- Promo codes: 2
- Dashboard: 1
- Live Activities: 8
- Push / Devices: 6
- Approvals: 3
- Reporting (admin): 2
- Profile: 2
- Wallet passes: 1
- Waivers: ~3
- Blog: 2
- Shop: 2
- Appointments: 2
Total: ~140+ public endpoints
Pewpros already has nearly 2x the endpoint count of Kajabi's public API, but concentrated on different verticals (events, community, scheduling, mobile/push). The gap is not quantity -- it's developer experience (self-serve keys, webhooks, docs) and a few specific resources (forms, landing pages, offers).