Verk

Data Migration

Migrating from other tools, data import/export

Data Migration

Complete guide to migrating data into and out of Verk. Import from other project management tools, export for backup or migration, and handle bulk data operations.

Migration Overview

Verk supports migration from popular project management tools:

Supported Platforms:

  • Jira (Cloud & Server)
  • Asana
  • Monday.com
  • Trello
  • Linear
  • ClickUp
  • Todoist
  • Basecamp
  • Microsoft Project
  • CSV/Excel files
  • JSON data

Migration Methods:

  • Automated import (direct integration)
  • File-based import (CSV, JSON, Excel)
  • API-based migration (custom scripts)
  • Professional migration service (Enterprise)

Pre-Migration Planning

Migration Checklist

 Assess current data volume
 - Count tasks, projects, users
 - Measure file storage
 - Identify custom fields

 Clean up data in source system
 - Archive completed projects
 - Delete duplicate tasks
 - Update outdated information
 - Remove test data

 Map field relationships
 - Match custom fields
 - Map status values
 - Align priority levels
 - Map user accounts

 Plan migration schedule
 - Choose migration window
 - Notify team members
 - Plan for downtime (if needed)
 - Schedule testing time

 Backup current data
 - Export from source system
 - Store securely
 - Verify export completeness

 Prepare Verk workspace
 - Create organization
 - Set up user accounts
 - Configure project structure
 - Create custom fields

Data Assessment

Analyze Source Data:

1. Log into source system
2. Generate data report:
 - Total projects: ___
 - Total tasks: ___
 - Total users: ___
 - Storage used: ___ GB
 - Custom fields: ___
 - Integrations: ___
3. Identify critical data
4. Note special requirements

Verk Capacity Planning:

Free plan limits:
- 10 users
- 5 projects
- 2 GB storage

Pro plan:
- Unlimited users
- Unlimited projects
- 100 GB storage per user

Enterprise:
- Everything unlimited
- Custom storage

Migrating from Specific Tools

Jira Migration

Automated Import:

1. Settings → Integrations → Jira
2. Click "Import from Jira"
3. Enter Jira credentials:
 - Jira URL
 - Email
 - API token
4. Configure mapping:
 - Projects → Projects
 - Issues → Tasks
 - Users → Members
 - Custom fields
5. Select what to import:
  All projects or specific projects
  Open issues only or all issues
  Comments and attachments
  Issue history
  Links and relationships
6. Start import
7. Monitor progress
8. Review imported data

Field Mapping:

Jira Field → Verk Field
─────────────────────────────────
Summary → Title
Description → Description
Status → Status (custom mapping)
Priority → Priority
 - Highest → High
 - High → High
 - Medium → Medium
 - Low → Low
 - Lowest → Low
Assignee → Assignee
Reporter → Creator
Due Date → Due Date
Labels → Tags
Components → Custom Field
Story Points → Custom Field
Sprint → Custom Field

CSV Export Method:

1. In Jira: Export issues to CSV
2. Download CSV file
3. In Verk: Settings → Import → CSV
4. Upload Jira CSV
5. Verk auto-detects Jira format
6. Review mapping
7. Import

Asana Migration

Direct Import:

1. Settings → Integrations → Asana
2. Click "Import from Asana"
3. Authorize Verk access to Asana
4. Select workspace to import
5. Choose projects:
 - All projects
 - Specific projects
6. Configure options:
  Import completed tasks
  Import archived projects
  Import attachments
  Import comments
  Import custom fields
7. Map users (auto-match by email)
8. Start import
9. Review results

Field Mapping:

Asana → Verk
─────────────────────────────────
Task name → Title
Notes → Description
Due date → Due Date
Assignee → Assignee
Tags → Tags
Custom fields → Custom fields
Section → Status/Column
Projects → Projects (task can be in multiple)
Attachments → Files
Comments → Comments

Trello Migration

Board Import:

1. In Trello: Board Menu → More → Print and Export → Export JSON
2. Download board JSON file
3. In Verk: Settings → Import → Trello
4. Upload JSON file
5. Configure import:
 - Board → Project
 - Lists → Status columns
 - Cards → Tasks
 - Labels → Tags
 - Members → Members
 - Checklists → Subtasks
 - Attachments → Files
6. Review mapping
7. Import board
8. Verify all cards imported

Multiple Boards:

To import multiple Trello boards:
1. Export each board separately
2. Import one by one
3. Or: Use bulk import tool (contact support)

Monday.com Migration

Export from Monday:

1. In Monday: Board Menu → Export → Excel
2. Download Excel file for each board
3. Repeat for all boards needed

Import to Verk:

1. Settings → Import → Excel
2. Upload Monday Excel file
3. Map columns:
 - Name → Title
 - Status → Status
 - Person → Assignee
 - Date → Due Date
 - Custom columns → Custom fields
4. Import board
5. Repeat for other boards

Linear Migration

API-Based Migration:

1. Settings → Import → Linear
2. Enter Linear API key
3. Select teams to import
4. Configure mapping:
 - Issues → Tasks
 - Projects → Projects
 - Labels → Tags
 - States → Statuses
 - Priority → Priority
5. Choose options:
  Import completed issues
  Import archived projects
  Import comments
  Import attachments
6. Start import
7. Monitor progress

Todoist Migration

Export from Todoist:

1. Todoist Settings → Backups
2. Download CSV backup
3. Unzip file

Import to Verk:

1. Settings → Import → CSV
2. Upload Todoist CSV
3. Map fields:
 - Task → Title
 - Description → Description
 - Due Date → Due Date
 - Priority → Priority (1=High, 2=Medium, 3-4=Low)
 - Project → Project
 - Labels → Tags
4. Create projects if needed
5. Import tasks

Generic Data Import

CSV Import

CSV Format Requirements:

Title,Description,Status,Priority,Assignee,Due Date,Tags,Project
"Implement login","Add OAuth2 authentication","To Do","High","john@company.com","2024-02-15","feature,auth","Website Rebuild"
"Fix navbar bug","Navigation broken on mobile","In Progress","High","jane@company.com","2024-02-10","bug,ui","Website Rebuild"
"Update docs","Refresh API documentation","To Do","Medium","bob@company.com","2024-03-01","docs","Documentation"

Required Fields:

  • Title (required)

Optional Fields:

  • Description
  • Status
  • Priority
  • Assignee (email address)
  • Due Date (ISO 8601 or common formats)
  • Tags (comma-separated)
  • Project
  • Custom fields (additional columns)

Import Process:

1. Settings → Import → CSV
2. Upload CSV file
3. Map columns:
 - Drag column headers to Verk fields
 - Set data types
 - Configure parsing options
4. Preview import (first 10 rows)
5. Validate data:
 - Check for errors
 - Review warnings
 - Fix issues if needed
6. Choose import behavior:
 - Create new tasks
 - Update existing tasks (match by ID)
 - Skip duplicates
7. Import data
8. Review import report

CSV Import Options:

Encoding: UTF-8, UTF-16, Latin-1
Delimiter: Comma, Semicolon, Tab
Quote Character: Double quote, Single quote
Date Format: Auto-detect, Custom (YYYY-MM-DD, MM/DD/YYYY, etc.)
Skip Rows: Header row count

Excel Import

Supported Formats:

  • .xlsx (Excel 2007+)
  • .xls (Excel 97-2003)
  • .xlsm (Macro-enabled)

Multi-Sheet Import:

1. Upload Excel file with multiple sheets
2. Choose sheets to import:
 - Each sheet → Separate project
 - All sheets → One project
 - Select specific sheets
3. Map columns per sheet
4. Import

Excel Features Supported:

  • Cell formatting (dates, numbers)
  • Merged cells (use first cell value)
  • Formulas (use calculated value)
  • Multiple sheets
  • Named ranges

JSON Import

JSON Format:

{
  "projects": [
    {
      "name": "Website Rebuild",
      "description": "Q1 2024 website redesign",
      "tasks": [
        {
          "title": "Design homepage",
          "description": "Create mockups in Figma",
          "status": "in_progress",
          "priority": "high",
          "assignee": "john@company.com",
          "dueDate": "2024-02-15",
          "tags": ["design", "ui"],
          "customFields": {
            "estimatedHours": 16,
            "department": "Marketing"
          }
        }
      ]
    }
  ]
}

Import JSON:

1. Settings → Import → JSON
2. Upload JSON file
3. Verk auto-detects structure
4. Review detected mapping
5. Adjust if needed
6. Import

Bulk Operations

Bulk Task Creation

Via CSV:

1. Download CSV template
2. Fill in task details
3. Import via CSV import
4. Tasks created in bulk

Via API:

// Bulk create tasks
const tasks = [
  { title: 'Task 1', projectId: 'proj_123' },
  { title: 'Task 2', projectId: 'proj_123' },
  { title: 'Task 3', projectId: 'proj_123' },
]

const results = await Promise.all(tasks.map(task => verk.tasks.create(task)))

console.log(`Created ${results.length} tasks`)

Bulk Updates

Update via CSV:

1. Export current tasks to CSV
2. Edit fields in CSV
3. Include task ID column
4. Import with "Update existing" option
5. Tasks updated in bulk

Update via API:

// Bulk update tasks
const updates = [
  { id: 'task_1', status: 'done' },
  { id: 'task_2', status: 'in_progress' },
  { id: 'task_3', priority: 'high' },
]

for (const update of updates) {
  await verk.tasks.update(update.id, {
    status: update.status,
    priority: update.priority,
  })
}

Bulk Deletion

Delete via Selection:

1. Tasks view → Select multiple tasks
2. Bulk Actions → Delete
3. Confirm deletion
4. Tasks moved to trash (30-day retention)

Delete via API:

// Bulk delete tasks
const taskIds = ['task_1', 'task_2', 'task_3']

await Promise.all(taskIds.map(id => verk.tasks.delete(id)))

Data Export

Export Formats

Verk Native Format (JSON):

  • Full fidelity
  • Preserves all relationships
  • Re-importable to Verk
  • Includes all custom fields
  • Best for migration/backup

CSV:

  • Spreadsheet-compatible
  • Good for analysis
  • Limited to flat structure
  • Best for task lists

Excel:

  • Formatted spreadsheets
  • Multiple sheets
  • Charts and graphs
  • Best for reports

PDF:

  • Print-ready documents
  • Professional appearance
  • Non-editable
  • Best for sharing/archiving

Organization Export

Full Export:

1. Settings → Data Export
2. Choose "Export Organization"
3. Configure:
 - Format: JSON, CSV, Excel
 - Date range: All time, Custom
 - Include files: Yes/No (affects size)
 - Include archived: Yes/No
4. Create export
5. Receive email when ready
6. Download (48-hour expiration)

What's Exported:

  • All projects and tasks
  • User accounts (without passwords)
  • Comments and activity
  • Custom fields and schemas
  • Workflows and automations
  • Integration settings (without credentials)
  • Organization settings
  • File metadata (and files if included)

Project Export

Single Project:

1. Open project
2. Project Menu → Export
3. Choose format
4. Download immediately

Multiple Projects:

1. Projects list
2. Select multiple projects
3. Bulk Actions → Export
4. Choose format
5. Combined export downloaded

Scheduled Exports

Automatic Exports:

Settings → Data Export → Schedule

Configure:
- Frequency: Daily, Weekly, Monthly
- Day/Time
- Scope: Full organization, Specific projects
- Format: JSON, CSV, Excel
- Delivery:
 * Email download link
 * SFTP upload
 * S3 bucket
 * Google Drive
 * Dropbox
- Retention: Keep last X exports

Use Cases:

  • Regular backups
  • Compliance reporting
  • Data warehouse sync
  • Business intelligence feeds

Custom Migration Scripts

API-Based Migration

Migration Script Template:

// migration-script.js
const { VerkClient } = require('@verk/sdk')
const fs = require('fs')

const verk = new VerkClient({
  apiKey: process.env.VERK_API_KEY,
})

async function migrateData() {
  // 1. Read source data
  const sourceData = JSON.parse(fs.readFileSync('source-data.json', 'utf8'))

  // 2. Create projects
  const projectMap = new Map()
  for (const sourceProject of sourceData.projects) {
    const verkProject = await verk.projects.create({
      name: sourceProject.name,
      description: sourceProject.description,
    })
    projectMap.set(sourceProject.id, verkProject.id)
    console.log(`Created project: ${verkProject.name}`)
  }

  // 3. Create users (if needed)
  const userMap = new Map()
  for (const sourceUser of sourceData.users) {
    // Invite user to organization
    await verk.members.invite({
      email: sourceUser.email,
      role: 'member',
    })
    userMap.set(sourceUser.id, sourceUser.email)
  }

  // 4. Create tasks
  let taskCount = 0
  for (const sourceTask of sourceData.tasks) {
    const verkTask = await verk.tasks.create({
      title: sourceTask.title,
      description: sourceTask.description,
      projectId: projectMap.get(sourceTask.projectId),
      assigneeId: userMap.get(sourceTask.assigneeId),
      priority: mapPriority(sourceTask.priority),
      status: mapStatus(sourceTask.status),
      dueDate: sourceTask.dueDate,
      customFields: {
        sourceId: sourceTask.id,
        ...sourceTask.customData,
      },
    })
    taskCount++
    if (taskCount % 100 === 0) {
      console.log(`Migrated ${taskCount} tasks...`)
    }
  }

  console.log(`Migration complete! ${taskCount} tasks migrated.`)
}

function mapPriority(sourcePriority) {
  const map = {
    critical: 'high',
    high: 'high',
    medium: 'medium',
    low: 'low',
    trivial: 'low',
  }
  return map[sourcePriority.toLowerCase()] || 'medium'
}

function mapStatus(sourceStatus) {
  const map = {
    open: 'todo',
    in_progress: 'in_progress',
    complete: 'done',
    closed: 'done',
  }
  return map[sourceStatus.toLowerCase()] || 'todo'
}

migrateData().catch(console.error)

Run Migration:

VERK_API_KEY=your_api_key node migration-script.js

Rate Limiting & Performance

Handle Rate Limits:

async function createTaskWithRetry(taskData, maxRetries = 3) {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      return await verk.tasks.create(taskData)
    } catch (error) {
      if (error.status === 429 && attempt < maxRetries) {
        // Rate limited, wait and retry
        const delay = Math.pow(2, attempt) * 1000
        console.log(`Rate limited, waiting ${delay}ms...`)
        await sleep(delay)
      } else {
        throw error
      }
    }
  }
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

Batch Processing:

async function migrateTasks(tasks, batchSize = 10) {
  const results = []

  for (let i = 0; i < tasks.length; i += batchSize) {
    const batch = tasks.slice(i, i + batchSize)

    const batchResults = await Promise.all(
      batch.map(task => createTaskWithRetry(task))
    )

    results.push(...batchResults)

    console.log(
      `Processed ${Math.min(i + batchSize, tasks.length)} / ${tasks.length}`
    )

    // Small delay between batches
    await sleep(100)
  }

  return results
}

Post-Migration

Verification Checklist

 Data completeness
 - Count imported projects
 - Count imported tasks
 - Verify user accounts
 - Check custom fields

 Data accuracy
 - Spot-check task details
 - Verify relationships
 - Test search functionality
 - Validate dates and times

 Functionality test
 - Create new task
 - Update existing task
 - Test commenting
 - Test file upload
 - Test notifications

 User access
 - Verify all users can login
 - Check permissions
 - Test project access
 - Validate role assignments

 Integrations
 - Reconnect integrations
 - Test webhooks
 - Verify API keys
 - Test automation rules

 Clean up
 - Archive test data
 - Remove duplicates
 - Update project settings
 - Configure notifications

Data Validation

Run Integrity Check:

Settings → Data Integrity → Run Check

Validates:
- All tasks have valid projects
- All assignees are valid users
- All relationships are intact
- No orphaned data
- Custom field values are valid

Manual Validation:

1. Compare record counts:
 Source: ___ projects, ___ tasks
 Verk: ___ projects, ___ tasks

2. Spot-check data:
 - Random task sample (10-20 tasks)
 - Verify all fields
 - Check relationships
 - Validate dates/times

3. Test workflows:
 - Create task
 - Update task
 - Complete task
 - Delete task

4. User acceptance testing:
 - Have team members verify their data
 - Collect feedback
 - Address issues

User Training

Post-Migration Training:

Topics to cover:
1. Verk interface overview
2. Finding migrated data
3. Key differences from previous tool
4. New features available
5. Best practices
6. Where to get help

Resources:
- Documentation links
- Video tutorials
- Live training session
- Q&A session

Troubleshooting

Common Migration Issues

Import Failed

Possible causes:
- Invalid file format
- Unsupported characters
- File size too large
- Missing required fields
- Invalid date formats

Solutions:
1. Check file format and encoding
2. Reduce file size (split into smaller files)
3. Validate required fields
4. Use standard date format (YYYY-MM-DD)
5. Check error log for details

Duplicate Data

Problem: Items imported multiple times

Prevention:
- Use "Skip duplicates" option
- Include unique identifiers
- Check import before running

Fix:
1. Identify duplicates
2. Use bulk delete
3. Re-import with correct settings

Missing Relationships

Problem: Tasks not linked to correct projects or users

Causes:
- User email mismatch
- Project name differences
- Invalid references

Fix:
1. Export current data
2. Update relationships in CSV
3. Re-import with "Update existing"

Character Encoding Issues

Problem: Special characters display incorrectly

Solution:
1. Ensure file is UTF-8 encoded
2. Re-export from source with UTF-8
3. Use text editor to convert encoding
4. Re-import file

Best Practices

Before Migration:

  • Clean source data
  • Test with small sample first
  • Back up everything
  • Schedule migration window
  • Communicate with team

During Migration:

  • Monitor progress
  • Watch for errors
  • Keep source system available
  • Document any issues
  • Take screenshots

After Migration:

  • Verify all data
  • Test functionality
  • Train users
  • Collect feedback
  • Archive source data (don't delete immediately)

Migration Timing:

  • Avoid peak hours
  • Allow buffer time
  • Plan for validation
  • Schedule training soon after
  • Keep old system available for 1-2 weeks

Professional Migration Services

Enterprise Migration Support:

For complex migrations, Verk offers professional services:

Included:
- Migration planning consultation
- Custom script development
- Data transformation
- Testing and validation
- User training
- Post-migration support

Contact: migrations@verk.com

Need migration help? Contact migration support for assistance.