Data Migration Overview
Import historical tickets and feedback from external platforms into UserHero
Data Migration
Data Migration lets you import historical tickets and feedback from external platforms into UserHero. Connect your source, map fields, run an optional trial, then execute a full import. Imported records land as Feedback items in your selected project.
Migration is a one-time bulk import of historical data. For ongoing two-way sync with tools like Linear and Jira, see Sync Adapters.
Supported Providers
| Provider | Auth Method | Status |
|---|---|---|
| Freshdesk | API key + subdomain | Available |
| CSV file | File upload | Available |
| JSON file | File upload | Available |
| Zendesk | OAuth 2.0 | Coming soon |
| Intercom | OAuth 2.0 | Coming soon |
| Jira | OAuth 2.0 | Coming soon |
| Zoho Desk | API key | Coming soon |
| HubSpot | OAuth 2.0 | Coming soon |
How It Works
Source (Freshdesk / CSV / JSON)
↓
Migration Wizard
1. Choose provider
2. Connect / upload
3. Map fields
4. Select project
5. Review & import
↓
Feedback Inbox- Choose a provider — Select Freshdesk for API-based import, or upload a CSV/JSON file.
- Connect — Enter your API credentials (Freshdesk) or upload your file. The system validates the connection and detects available fields.
- Map fields — Map source fields to UserHero fields (message, category, status, email, phone, assignee, due date, etc.). Status and priority values can be transformed automatically.
- Select project — Choose which project receives the imported feedback.
- Review & import — See a summary of your configuration, then start a trial run or full import.
Target Fields
Each source field maps to one of these UserHero fields:
| Target Field | Description |
|---|---|
message | Feedback message (required — at least one field must map here) |
category | bug, feature, suggestion, or other |
rating | 1-5 star rating |
status | new, in-progress, resolved, or archived |
tags | Comma-separated tags |
userEmail | Submitter email address |
userName | Submitter name |
userPhone | Submitter phone number |
assigneeEmail | Assigned agent email (auto-resolved to workspace member) |
assigneeName | Assigned agent name |
companyName | Customer company name |
dueDate | Due date for SLA tracking |
updatedAt | Last updated timestamp (used for status timeline) |
externalId | Custom unique ID for stable re-imports |
context.pageUrl | Original page URL |
customMetadata | Custom key-value data (Pro plan) |
createdAt | Preserve the original timestamp |
ignore | Skip this field |
Import Window
The date range of records you can import is determined by your plan's data retention period:
| Plan | Retention | Import Window |
|---|---|---|
| Free | 7 days | Last 7 days |
| Starter | 30 days | Last 30 days |
| Growth | 90 days | Last 90 days |
| Pro | 365 days | Last 365 days |
| Pro Max | Unlimited | All time |
Records outside your plan's retention window are automatically skipped. If you need to import older data, upgrade your plan first.
Trial Runs
Before committing to a full import, you can run a trial that imports only the first 10 records. This lets you verify that field mapping, status transforms, and date filtering work correctly. After reviewing the trial results, you can either adjust your mapping or proceed with a full import.
Duplicate Handling
Migration uses upsert logic — if you re-run an import, existing records are updated instead of duplicated. Each imported record is tracked by its external ID (e.g., Freshdesk ticket ID, or CSV row number), so running the same import twice is safe.
For CSV and JSON imports, you can map a column to externalId to use your own unique identifier instead of the auto-generated row number. This keeps re-imports stable even if rows are reordered.
Customer Records
Imported feedback is automatically linked to Customer records. During import, UserHero matches feedback to existing customers by email or phone number. If no match is found, a new customer record is created.
The import progress page shows how many customers were created and updated.
Conversations & Notes
For Freshdesk imports on Starter plans and above, ticket conversations (replies and internal notes) are imported alongside the ticket data. Agent replies and customer responses are preserved as comments on the feedback item, and internal notes are stored separately.
Assignee Mapping
When importing from Freshdesk, agent emails from tickets are automatically matched to workspace members. If the agent's email matches a team member in your workspace, the feedback item is assigned to them. Unmatched agents are stored by email for reference.
SLA & Due Dates
If the source data includes a due date (e.g., Freshdesk due_by), it is preserved on the feedback item. UserHero computes whether the SLA was breached based on the due date and current status, so your dashboard reflects historical SLA performance.
Attachments
For Freshdesk imports, file attachments are downloaded from the source and re-uploaded to Firebase Storage. The attachment URL is stored on the feedback record. CSV and JSON imports do not support attachment migration.
Usage Billing
Imported records are not counted toward your monthly feedback usage quota. Migration imports historical data — it does not inflate your usage metrics.