Skip to content

Latest commit

 

History

History
265 lines (192 loc) · 6.96 KB

File metadata and controls

265 lines (192 loc) · 6.96 KB
title Import and export data
description Bring existing feedback from other tools or export for backups.
icon arrow-right-left

Import and export data

Bring your existing feedback with you. Whether you're migrating from Canny, UserVoice, or a spreadsheet, import preserves your vote counts, dates, and history. Export anytime for backups or analysis.

CSV Import

Supported Data

Import posts into any board:

  • Titles and content
  • Statuses and tags
  • Author information
  • Vote counts
  • Dates

Import Process

  1. Go to Admin → Settings → Boards
  2. Select the target board
  3. Click the Import Data tab
  4. Drop a CSV file or click to browse
  5. Click Import Data to start the import
  6. Review the results

CSV Format

Required Columns

Column Description
title Post title (required)
content Post body (required)

Optional Columns

Column Description Format
status Status slug Must match existing status slug
tags Tag names Comma-separated
board Board slug Must match existing board
author_name Author display name Text
author_email Author email Valid email
vote_count Number of votes Integer
created_at Creation date ISO 8601

Example CSV

title,content,status,tags,board,author_name,author_email,vote_count,created_at
"Add dark mode support","It would be great to have a dark mode option for the app.","open","feature,ui","","John Doe","john@example.com","5","2024-01-15T10:30:00Z"
"Fix login timeout","Users are being logged out too quickly.","under_review","bug","","","","2",""

Import Limits

Limit Value
File size 10 MB
Rows 10,000
Columns Unlimited

Handle statuses

Statuses in CSV must match existing status slugs (e.g., `open`, `under_review`, `planned`): - Unmatched statuses use the default status - Create any custom statuses before importing

Handle tags

Tags are created automatically:

  • New tags created on import
  • Comma-separated in CSV
  • Report shows created tags

Import Results

After import, you'll see a summary showing:

  • Number of posts imported
  • Number of rows skipped
  • Number of new tags created
  • Any row-level errors (expandable to view details)

CSV Export

Export Process

  1. Go to Admin → Settings → Boards
  2. Select a board
  3. Click the Export Data tab
  4. Click Export CSV
  5. Download starts automatically

Export Format

Exported CSV includes:

Column Description
title Post title
content Post content
status Status name
tags Comma-separated tags
board Board slug
author_name Author display name
author_email Author email
vote_count Number of votes
created_at Creation timestamp

Export Scope

Export is per-board. Select the board you want to export from the board dropdown, then navigate to the Export Data tab.

Use Cases

  • Backup - Regular data exports
  • Analysis - Import into spreadsheets
  • Migration - Move to another system
  • Reporting - Share with stakeholders

Migrate from Canny

Quackback ships a dedicated Canny importer — a command-line tool that connects to the Canny API and migrates everything automatically. No manual CSV export needed.

What gets imported

  • Posts — titles, descriptions, statuses, images, and creation dates
  • Votes — individual voter attribution preserved (proxy voting per email)
  • Comments — threaded, with internal comments routed to private notes
  • Tags & categories — Canny categories imported as tags
  • Changelog entries — with linked post relationships preserved
  • Merge relationships — resolved and replayed
  • Users — collected from all entities, identified by email

Run the import

The Canny importer is a command-line tool that reads from the Canny API and writes through your Quackback REST API.

  1. Create a Quackback API key in Admin → Settings → API Keys
  2. Create your target boards in the admin UI first — the importer matches Canny boards by name
  3. Grab your Canny API key from your Canny settings
  4. Validate with a dry run, then run the import:
# Validate only — no data written
bun scripts/import/cli.ts canny \
  --api-key YOUR_CANNY_API_KEY \
  --quackback-url https://feedback.yourapp.com \
  --quackback-key qb_xxx \
  --dry-run --verbose

# Run it for real
bun scripts/import/cli.ts canny \
  --api-key YOUR_CANNY_API_KEY \
  --quackback-url https://feedback.yourapp.com \
  --quackback-key qb_xxx \
  --verbose

The import is additive — existing posts are not deleted, and duplicate votes (same user and post) are skipped.

Set up your Quackback boards and statuses before importing so the mapping step goes smoothly. See [Organize feedback with boards](/admin/boards) if you haven't created boards yet.

CSV import from Canny

If you prefer to use a CSV export instead, you can still import manually. Export from Canny and map the columns:

  • titletitle
  • detailscontent
  • statusstatus
  • votesvote_count

Migrate from other platforms

From UserVoice

  1. Export from UserVoice (CSV format)
  2. Map columns:
    • suggestion_titletitle
    • suggestion_textcontent
    • statusstatus
    • vote_countvote_count

From Spreadsheet

If you've been tracking feedback in a spreadsheet:

  1. Add column headers matching Quackback format
  2. Ensure dates are ISO 8601 format
  3. Clean up status values to match your status slugs
  4. Export as CSV (UTF-8 encoding)

Best Practices

Before Import

1. **Create statuses first** - Import matches by slug 2. **Clean your data** - Remove duplicates, fix formatting 3. **Test with sample** - Import a few rows first 4. **Backup existing data** - Export current posts

Data Cleaning

Common issues to fix:

Issue Solution
Extra whitespace Trim cells
Inconsistent statuses Normalize names
HTML in content Convert to markdown
Date formats Use ISO 8601
Encoding issues Save as UTF-8

Large Imports

For 5,000+ posts:
  1. Split into batches of 2,000
  2. Import sequentially
  3. Verify each batch
  4. Allow time between batches

Troubleshooting

"Invalid CSV format"

  • Check file encoding (use UTF-8)
  • Verify proper quoting for fields with commas
  • Ensure consistent column count

"Status not found"

  • Create the status before importing
  • Check spelling matches exactly

"Date parse error"

  • Use ISO 8601: 2024-01-15T10:30:00Z
  • Or: 2024-01-15 (date only)

"Import stuck"

  • Large files take time
  • Check browser console for errors
  • Try smaller batches

Next Steps