For admins
Export your workspace — CSV, JSON, or the lot
Two ways out. Full workspace as a single JSON envelope (lossless, every byte). Or per-entity sheets — students, courses, orders — as CSV or JSON, ready to open in Excel or pipe into another tool. Re-upload any of them and you're back where you were.
Last updated May 19, 2026
Three flavours of export
- Full workspace JSON — every byte, one file, lossless. Use for backup + cross-workspace migration.
- Per-entity CSV — students, courses, or orders as a flat spreadsheet. Use for Mailchimp / Excel / Google Sheets.
- Per-entity JSON — same row data as the CSV, but as a structured array with format/version metadata. Use for scripting + tool integrations.
Export everything (full workspace)
Open /dashboard/settings → Workspace data → Export workspace. We scan every tenant-scoped slice in your workspace, package it into a single versioned JSON envelope, and trigger a browser download. Nothing leaves your machine — the file is generated client-side.
What's in the file
- Courses, modules, lessons (including quiz definitions + drip schedules)
- Students, faculty, enrolments, completion + attendance history
- Quiz attempts + assignment submissions + grades
- Live sessions + past-class recordings + attendance
- Orders, entitlements, subscriptions, products, coupons
- Certificates + certificate batches + verification records
- Portal config, pages, blog posts, faculty showcase, testimonials
- Reviews, doubts (incl. guest enquiries), announcements, discussions
- Org settings (notification prefs, currency, brand attribution)
- Wall of Love entries, referral codes + conversions
File format
{
"format": "thebigclass.workspace-export",
"version": 1,
"exportedAt": "2026-05-19T08:42:13.521Z",
"sourceTenant": "snapied",
"sourceTenantName": "Snapied",
"counts": { "courses": 47, "students": 1243, "orders": 89, "posts": 12 },
"slices": {
"lms.courses.v1": [ /* … */ ],
"lms.users.v1": [ /* … */ ],
"store.orders.v1": [ /* … */ ],
"portal.config.v1": { /* … */ },
"portal.pages.v1": [ /* … */ ]
}
}Export by entity (CSV or JSON)
Same panel, the "Export by entity" row. Three entities, two formats each: Students, Courses, Orders × CSV or JSON. CSV is the universal spreadsheet format — Excel, Numbers, Google Sheets, Mailchimp, every CRM. JSON keeps the same shape but as a structured array with format + version metadata so a script can consume it.
- Students CSV columns — id, name, email, phone, enrolledCourses (pipe-separated), joinedAt.
- Courses CSV columns — id, slug, title, description, priceInr, status, facultyId, modulesCount, lessonsCount, createdAt. Curriculum trees don't fit a flat CSV — use the workspace JSON for those.
- Orders CSV columns — id, studentEmail, itemTitle, amountInr, status, createdAt.
Import a CSV (students or courses)
Same panel: "Import CSV →" → Students CSV / Courses CSV. The picker accepts any RFC 4180 CSV — same shape Excel and Google Sheets export by default. We parse client-side, show you the detected columns + first-row preview in a dialog, you confirm. Existing rows get updated, new rows get added. Unlike the full workspace import, CSV import is non-destructive.
- Students match on the email column (case-insensitive). Rows without an email are skipped + counted.
- Courses match on id first, then slug. Module + lesson trees from the existing course record are preserved — CSV import only touches flat metadata.
- Non-student users (admins, faculty) in your workspace are untouched by a student CSV import.
Reimport (full workspace JSON)
Same panel: "Import from a full workspace export" → Choose export file. We parse the file, validate the envelope, and surface a preview with row counts ("47 courses, 1,243 students, 89 orders, …") before anything writes. You confirm; we overwrite the target workspace and hard-reload so every store re-hydrates against the fresh state.
Cross-workspace import
The same file works in a different workspace — perfect for "I'm starting fresh, bring everything from the old account". Sign into the new workspace, open settings, pick the export file you downloaded earlier, confirm. Everything lands in the new workspace's storage.
Async + safe on big workspaces
Both export and import yield to the browser between every slice (setTimeout 0) so the dashboard never freezes — even on workspaces with tens of thousands of records. A live progress bar shows "reading lms.courses.v1 (47/89)" as it works. If browser localStorage quota is exceeded mid-import, we stop and tell you exactly where; partial writes leave the workspace in a consistent state because each slice is one atomic localStorage.setItem.
When to use this
- Switching to a new workspace (paid plan upgrade, multi-tenant setup, fresh account).
- Backing up before a major migration or template apply.
- GDPR / data-portability requests from your audit team.
- Moving everything off the platform — yes, including off our platform. Keep the file.
Related