| title | Import and export data |
|---|---|
| description | Bring existing feedback from other tools or export for backups. |
| icon | arrow-right-left |
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.
Import posts into any board:
- Titles and content
- Statuses and tags
- Author information
- Vote counts
- Dates
- Go to Admin → Settings → Boards
- Select the target board
- Click the Import Data tab
- Drop a CSV file or click to browse
- Click Import Data to start the import
- Review the results
| Column | Description |
|---|---|
title |
Post title (required) |
content |
Post body (required) |
| 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 |
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",""| Limit | Value |
|---|---|
| File size | 10 MB |
| Rows | 10,000 |
| Columns | Unlimited |
Tags are created automatically:
- New tags created on import
- Comma-separated in CSV
- Report shows created tags
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)
- Go to Admin → Settings → Boards
- Select a board
- Click the Export Data tab
- Click Export CSV
- Download starts automatically
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 is per-board. Select the board you want to export from the board dropdown, then navigate to the Export Data tab.
- Backup - Regular data exports
- Analysis - Import into spreadsheets
- Migration - Move to another system
- Reporting - Share with stakeholders
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.
- 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
The Canny importer is a command-line tool that reads from the Canny API and writes through your Quackback REST API.
- Create a Quackback API key in Admin → Settings → API Keys
- Create your target boards in the admin UI first — the importer matches Canny boards by name
- Grab your Canny API key from your Canny settings
- 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 \
--verboseThe 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.If you prefer to use a CSV export instead, you can still import manually. Export from Canny and map the columns:
title→titledetails→contentstatus→statusvotes→vote_count
- Export from UserVoice (CSV format)
- Map columns:
suggestion_title→titlesuggestion_text→contentstatus→statusvote_count→vote_count
If you've been tracking feedback in a spreadsheet:
- Add column headers matching Quackback format
- Ensure dates are ISO 8601 format
- Clean up status values to match your status slugs
- Export as CSV (UTF-8 encoding)
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 |
- Split into batches of 2,000
- Import sequentially
- Verify each batch
- Allow time between batches
- Check file encoding (use UTF-8)
- Verify proper quoting for fields with commas
- Ensure consistent column count
- Create the status before importing
- Check spelling matches exactly
- Use ISO 8601:
2024-01-15T10:30:00Z - Or:
2024-01-15(date only)
- Large files take time
- Check browser console for errors
- Try smaller batches