Import and export data

Bring existing feedback from other tools or export for backups.

JM
James Morton
Written By James MortonLast updated 11 days ago

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","[email protected]","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

Note: 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.

Tip: Set up your Quackback boards and statuses before importing so the mapping step goes smoothly. See Organize feedback with 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

Tip: 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

Warning: 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

Was this helpful?

Your feedback shapes what we write next.