CSI Teachable Replacement App
BlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
Join the waitlist
CSI Teachable Replacement AppJoin the waitlist
CSI Teachable Replacement App
HomeBlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
Join the waitlist
CSI Teachable Replacement App
BlogContactFAQFeaturesHow it worksIntegrationsSecurityUse cases
TermsPrivacyData Processing

© 2026 CSI Teachable Replacement App

INTEGRATIONS

Your identity provider. Your video host. Your existing content.

The platform connects to the tools your organization already relies on — from SSO directories to video platforms to Teachable schools — so you can go live without rebuilding your stack.

Get started
Email us a question

[ SSO / IDENTITY ]

Learners sign in once. Your identity provider does the rest.

Connect your organization's SAML 2.0 or OIDC provider and every learner authenticates through credentials they already know. No separate logins, no password resets, no parallel directory to maintain.

SAML 2.0

Connect Okta, Azure AD, ADFS, or any SAML-compliant IdP. Assertion parsing, attribute mapping, and session creation are handled in the Auth.js pipeline.

OIDC / OpenID Connect

Works with any OIDC-compatible provider including Google Workspace, Auth0, and Ping Identity. Provider config is loaded dynamically per org from your stored settings.

Per-tenant isolation

Each organization stores its own entity IDs, metadata URLs, certificate fingerprints, and attribute mappings — changes to one tenant never touch another.

  • Session expiry aligned to your IdP token lifetime

  • Forced re-authentication when sessions expire

  • Org-membership check on every learner page

  • Admin SSO config UI with connection test before save

  • SAML SP metadata endpoint per org slug

  • OIDC discovery URL input with attribute mapping fields

[ IMPORT PIPELINE / HOW IT RUNS ]

From credentials to live courses in a single background job

  1. STEP 01 — AUTHENTICATE

    Session established with Teachable

    Credentials are decrypted transiently, submitted to Teachable's login endpoint, and the authenticated cookie session is retained for all subsequent scraping requests.

  2. STEP 02 — DISCOVER

    Catalog snapshot returned

    All courses in the Teachable school are listed with titles, slugs, and publication status. The admin selects which courses to import before the pipeline continues.

  3. STEP 03 — EXTRACT

    Sections, lessons, and assets fetched

    Each selected course's curriculum is crawled for sections and lessons. Lesson pages are fetched for HTML body, video iframes, image tags, and attachment links. Rate limiting prevents triggering Teachable blocks.

  4. STEP 04 — MATERIALIZE

    Content written to production tables

    Staged import data is written through the same course/section/lesson schema used by the manual builder. Imported courses are immediately available in the admin dashboard and learner catalog.

console
0.2sPOST /sign_in → 200 OK
0.4sSession cookie stored in worker context
0.6sCredentials wiped from memory
1.1sGET /admin/courses → catalog extracted
1.3sCourse list presented to admin for selection
1.5sImport job created with selected course IDs
2.0sCrawling curriculum hierarchy…
2.4sAsset URLs queued for download (deduped by hash)
3.1sAll media re-uploaded to org blob storage
3.5sCourses, sections, lessons committed to DB
3.7sTeachable CDN URLs replaced with signed blob URLs
3.9sImport job status → complete
SSO-AUTHSAML assertion validated → session created for learner@acme.com0.3s
IMPORT-JOBAsset download fan-out started — 42 images queued1.2s
BLOB-STORESigned URL generated for attachment.pdf → expires in 60s0.1s
RATE-LIMITTeachable scraper throttled — 1 req/s enforced0.0s
SSO-CONFIGOIDC discovery URL saved for org: enterprise-co0.2s
ASSET-DEDUPHash match found — skipping re-upload for banner.png0.5s
IMPORT-JOBHTML→TipTap conversion complete for lesson 'Introduction'0.8s
AUDIT-LOGAdmin published course 'Q3 Onboarding' — recorded0.1s
SSO-AUTHSAML assertion validated → session created for learner@acme.com0.3s
IMPORT-JOBAsset download fan-out started — 42 images queued1.2s
BLOB-STORESigned URL generated for attachment.pdf → expires in 60s0.1s
RATE-LIMITTeachable scraper throttled — 1 req/s enforced0.0s
SSO-CONFIGOIDC discovery URL saved for org: enterprise-co0.2s
ASSET-DEDUPHash match found — skipping re-upload for banner.png0.5s
IMPORT-JOBHTML→TipTap conversion complete for lesson 'Introduction'0.8s
AUDIT-LOGAdmin published course 'Q3 Onboarding' — recorded0.1s
SSO-AUTHSAML assertion validated → session created for learner@acme.com0.3s
IMPORT-JOBAsset download fan-out started — 42 images queued1.2s
BLOB-STORESigned URL generated for attachment.pdf → expires in 60s0.1s
RATE-LIMITTeachable scraper throttled — 1 req/s enforced0.0s
SSO-CONFIGOIDC discovery URL saved for org: enterprise-co0.2s
ASSET-DEDUPHash match found — skipping re-upload for banner.png0.5s
IMPORT-JOBHTML→TipTap conversion complete for lesson 'Introduction'0.8s
AUDIT-LOGAdmin published course 'Q3 Onboarding' — recorded0.1s
SSO-AUTHSAML assertion validated → session created for learner@acme.com0.3s
IMPORT-JOBAsset download fan-out started — 42 images queued1.2s
BLOB-STORESigned URL generated for attachment.pdf → expires in 60s0.1s
RATE-LIMITTeachable scraper throttled — 1 req/s enforced0.0s
SSO-CONFIGOIDC discovery URL saved for org: enterprise-co0.2s
ASSET-DEDUPHash match found — skipping re-upload for banner.png0.5s
IMPORT-JOBHTML→TipTap conversion complete for lesson 'Introduction'0.8s
AUDIT-LOGAdmin published course 'Q3 Onboarding' — recorded0.1s

Your SSO provider is already supported. Your Teachable content is already portable.

Join the waitlist and we'll walk you through connecting your identity provider and importing your first course.

Questions? Email us at sf-core-org-support-csi-teachable-replacement-app@saas-factory.ai

[ TEACHABLE IMPORT / MIGRATION ]

Point it at your Teachable school. Walk away with everything migrated.

The import engine authenticates with your Teachable admin credentials, crawls the full course catalog, extracts section and lesson hierarchies, downloads every media asset from Teachable's CDN, and reconstructs your content — structure, text, video embeds, images, and attachments — inside the platform. Credentials are AES-256 encrypted before storage and never appear in logs or API responses.

  • Course catalog discovery Scans your Teachable school and returns all courses for you to select before committing to a full import.

  • HTML → rich text conversion Lesson HTML is transformed into structured TipTap/ProseMirror JSON, preserving headings, lists, inline formatting, and code blocks.

  • Asset re-hosting

[ VIDEO / MEDIA EMBEDS ]

Keep your videos where they already live

Paste a video URL into any lesson's video field. The platform validates the URL, handles provider-specific embed transformation, and renders it as a responsive iframe in the learner view.

  • YouTube Standard and unlisted videos embedded via YouTube's iframe API.

  • Vimeo Pro and team accounts; privacy-hash URLs respected.

  • Wistia Inline embed with chapter and CTA support intact.

  • Loom

[ ASSET STORAGE / VERCEL BLOB ]

Private assets. Short-lived signed URLs. Nothing public by accident.

Every file — course thumbnails, lesson attachments, imported images — is stored in Vercel Blob under per-tenant path prefixes. Download URLs are signed server-side on each page render and expire shortly after, so a leaked URL cannot be shared outside the platform.

  • Per-org path prefixes prevent cross-tenant asset access

  • JPEG, PNG, WebP thumbnails with server-side size validation

  • PDF and document attachments with download tracking

  • Attachment download events logged per-learner for admin visibility

[ ADMIN TOOLS / REPORTING ]

The data your L&D team actually needs, not a wall of vanity metrics

Progress data, audit trails, and member directories are built into the admin layer — no third-party analytics integration required to answer the basic question of who completed what.

Dashboard activity feed showing learner events and admin actions

[ BACKGROUND JOBS / INNGEST ]

Long-running work happens in the background. Your browser tab is optional.

The Teachable import pipeline, asset migrations, data purges, and invite emails all run as durable Inngest background jobs. Admins monitor live progress in the dashboard; closing the tab doesn't stop the job.

  • Real-time import progress monitor in the admin UI

  • Configurable rate limiting to respect Teachable's servers

  • Partial failure recovery — one bad asset doesn't kill the job

Common integration questions

Images and documents are downloaded from Teachable's CDN and re-uploaded to private, signed blob storage under your org's path prefix.
  • Partial failure recovery A failed asset on one lesson doesn't abort the whole job. Each failure is logged and the import completes with a partial-success status.

  • Import job progress monitor showing pipeline stages and asset migration count
    Async video walkthroughs embedded directly in lesson content.

    Video URLs imported from Teachable are automatically detected during the scraping stage and re-embedded using the same transformation pipeline. Your existing Teachable video library migrates without relinking.

    Content Security Policy headers are configured to allow iframes from these trusted providers while blocking unauthorized origins — so embeds work and XSS risks don't.

  • Asset deduplication by content hash reduces redundant re-uploads during import

  • Soft-delete with scheduled purge for GDPR erasure compliance

  • Learner course catalog showing course thumbnails served via signed blob URLs

    Learner progress CSV export Name, email, enrollment date, completion %, and completed lesson list — ready for HR or your existing reporting tool.

  • Per-course progress table See each enrolled learner's completion percentage and lesson count at a glance; identify who is stuck without building a query.

  • Attachment download tracking Every learner file download is timestamped and stored — know which resources are actually being used.

  • Immutable admin audit log SSO config changes, enrollment edits, course publishing, and import job starts are all recorded with timestamps for compliance review.

  • Organization member directory All SSO-authenticated users listed with name, email, last login date, and enrollment count.

  • Import cancellation and retry support
  • Scheduled PII purge job for GDPR erasure

  • Invite email delivery via async event queue

  • Background jobs dashboard showing import job status and pipeline progress
    Less painful than you might expect. The import pipeline authenticates with your Teachable school, crawls your full course catalog, and lets you select which courses to bring over before a single byte moves. It extracts section and lesson hierarchy, scrapes full lesson content (video embeds, rich text, images, attachments), re-hosts every asset under your organization's private storage, and replaces all Teachable CDN URLs with the new ones automatically. A real-time progress monitor shows you exactly which pipeline stage is running, how many assets have migrated, and flags any partial failures — without aborting the whole job if one file hits an error. Your credentials are encrypted with AES-256 at rest and never appear in logs or API responses.
    Each organization connects its own identity provider independently — configurations for one tenant never touch another. The platform supports both OIDC and SAML 2.0, covering Okta, Azure AD, ADFS, and any standards-compliant IdP. Admins configure their provider through a dedicated UI that accepts a discovery URL or SAML metadata, maps attributes, and runs a connection test before saving. Sessions expire in alignment with your IdP's token lifetime; when a token goes stale, learners are forced to re-authenticate rather than coasting on an indefinite session.
    No on both counts. Every learner-facing page performs an org-membership check and redirects anyone outside the organization to the SSO login flow before a course title is rendered. The multi-tenant data model partitions every table by organization ID, so queries are structurally scoped to the authenticated tenant — there is no query path that reaches across organizations. Asset downloads are served via short-lived signed URLs generated server-side on each page render, so there are no permanent public links to share or guess. Role-based access control keeps the course builder, enrollment management, and reporting pages off-limits to non-admin members.
    Admins get three layers of visibility. First, an organization-wide dashboard widget showing total enrollments, completion rates, and active learner counts across all courses — a quick health check without opening individual reports. Second, a per-course progress table listing every enrolled learner with their completion percentage, lessons completed count, and enrollment date, so you can spot who is stuck or inactive. Third, a full CSV export of that learner progress data for offline analysis or HR reporting. On top of that, an immutable audit log records significant admin actions — SSO config changes, enrollment edits, course publishing, import job starts — giving you an accountability trail for compliance reviews.
    Video embeds from YouTube, Vimeo, Wistia, and Loom are explicitly allowed via Content Security Policy headers on lesson pages; iframe sources outside those providers are blocked. For downloadable files — PDFs, images, any lesson attachment — every download is served through a server-side signed URL with a short expiration window, so there are no permanent public asset links. The platform also records a timestamped event each time a learner downloads an attachment, giving admins visibility into which resources are actually being accessed rather than just uploaded.
    Organization admins can upload a logo and set a primary brand color that applies across all learner-facing pages: the course catalog, lesson player, and dashboard. Routing supports either a subdomain (yourcompany.platform.com) or a path prefix without requiring a separate deployment per tenant. Course URLs are built from auto-generated slugs derived from course titles, with uniqueness enforced per organization and support for custom slug overrides. Deep white-label theming beyond logo and brand color is not currently listed as a shipped feature — contact us for details on roadmap plans.