Skip to main content
All help topics

For admins

Export your workspace — CSV, JSON, or the lot

Three ways out. Full workspace as a single JSON envelope. Per-entity sheets — students, courses, orders — as CSV or JSON for Excel or another tool. And a media inventory listing every video, PDF and recording we hold for you, so you can reconcile it and pull the originals. Re-upload the envelope and you're back where you were.

Last updated Aug 21, 2026

Four flavours of export

  • Full workspace JSON — every data slice in one file. Use for backup + cross-workspace migration. (Data, not media — see below.)
  • 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.
  • Media manifest CSV — every video, PDF, image and recording we hold for you, with sizes and dates, so you can reconcile and retrieve the original files.

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.

The envelope carries your DATA, not your media. Video, PDFs and recordings are referenced by address rather than packed into the download — bundling them would turn a settings page into a multi-gigabyte transfer. Getting the files themselves is the third export below, and nothing is withheld at either step.

Your media files

In the same Workspace data card, click “List my media files”. We inventory everything we hold for your academy — every image, PDF, video and class recording — with its size, its type and when it was last changed, and give you a running total. “Download manifest (CSV)” saves that inventory as a spreadsheet.

This is the honest answer to “can I get my originals back if I leave?”. Your uploads are stored exactly as you gave them to us — there is no DRM container and no proprietary packaging to unwrap — so the manifest lets you reconcile what we hold against what you expect, and pull the files down. It is two steps rather than one, and it is worth asking every DRM-based platform on your shortlist the same question, because there the answer is usually longer.

The inventory is admin-only, and it is scoped to your workspace: it can never list another academy's files, and it lists recordings by resolving the classes your workspace actually ran.

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": [ /* … */ ]
  }
}
Plain JSON, no proprietary container. Open it in any text editor, diff it, audit it — same shape going out as coming in.

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.
Filenames look like snapied.students.2026-05-19.csv — tenant slug, entity, date, format. Drop them straight into a backup folder and the chronology is obvious.

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.

Full-workspace replace is destructive. CSV import is not. If you want a safety net before a full restore, export the target workspace first — that gives you a rollback point.

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.
Once we move off browser-local storage and onto a real backend, this same tool will hit a server endpoint that streams the export back. The file format stays identical so any exports you take now stay valid forever.

Related