Files
klz-cables.com/scripts/README-migration.md
Marc Mintel c2d6e082e8
All checks were successful
Build & Deploy KLZ Cables / deploy (push) Successful in 3m50s
umami migration
2026-01-25 11:23:34 +01:00

6.5 KiB

Migrating Analytics from Independent Analytics to Umami

This guide explains how to migrate your analytics data from the Independent Analytics WordPress plugin to Umami.

What You Have

You have exported your analytics data from Independent Analytics:

  • data/pages(1).csv - Page-level analytics data with:
    • Title, Visitors, Views, View Duration, Bounce Rate, URL, Page Type
    • 220 pages with historical data

What You Need

Before migrating, you need:

  1. Umami instance running (self-hosted or cloud)
  2. Website ID from Umami (create a new website in Umami dashboard)
  3. Access credentials for Umami (API key or database access)

Migration Options

The migration script provides three output formats:

python3 scripts/migrate-analytics-to-umami.py \
  --input data/pages\(1\).csv \
  --output data/umami-import.json \
  --format json \
  --site-id YOUR_UMAMI_SITE_ID

Import via API:

curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d @data/umami-import.json \
  https://your-umami-instance.com/api/import

Option 2: SQL Import (Direct Database)

python3 scripts/migrate-analytics-to-umami.py \
  --input data/pages\(1\).csv \
  --output data/umami-import.sql \
  --format sql \
  --site-id YOUR_UMAMI_SITE_ID

Import via PostgreSQL:

psql -U umami -d umami -f data/umami-import.sql

Option 3: API Payload (Manual Import)

python3 scripts/migrate-analytics-to-umami.py \
  --input data/pages\(1\).csv \
  --output data/umami-import-api.json \
  --format api \
  --site-id YOUR_UMAMI_SITE_ID

Step-by-Step Migration Guide

1. Prepare Your Umami Instance

If self-hosting:

# Clone Umami
git clone https://github.com/umami-software/umami.git
cd umami

# Install dependencies
npm install

# Set up environment
cp .env.example .env
# Edit .env with your database credentials

# Run migrations
npm run migrate

# Start the server
npm run build
npm run start

If using Umami Cloud:

  1. Sign up at https://umami.is
  2. Create a new website
  3. Get your Website ID from the dashboard

2. Run the Migration Script

Choose one of the migration options above based on your needs.

Example:

# Make the script executable
chmod +x scripts/migrate-analytics-to-umami.py

# Run the migration
python3 scripts/migrate-analytics-to-umami.py \
  --input data/pages\(1\).csv \
  --output data/umami-import.json \
  --format json \
  --site-id klz-cables

3. Import the Data

  1. Get your API key:

    • Go to Umami dashboard → Settings → API Keys
    • Create a new API key
  2. Import the data:

    curl -X POST \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer YOUR_API_KEY" \
      -d @data/umami-import.json \
      https://your-umami-instance.com/api/import
    

Option B: Direct Database Import

  1. Connect to your Umami database:

    psql -U umami -d umami
    
  2. Import the SQL file:

    psql -U umami -d umami -f data/umami-import.sql
    
  3. Verify the import:

    SELECT COUNT(*) FROM website_event WHERE website_id = 'klz-cables';
    

4. Verify the Migration

  1. Check Umami dashboard:

    • Log into Umami
    • Select your website
    • View the analytics dashboard
  2. Verify data:

    • Check page views count
    • Verify top pages
    • Check visitor counts

Important Notes

Data Limitations

The CSV export from Independent Analytics contains aggregated data, not raw event data:

  • Page views (total counts)
  • Visitor counts
  • Average view duration
  • Individual user sessions
  • Real-time data
  • Geographic data
  • Referrer data
  • Device/browser data

What Gets Imported

The migration script creates simulated historical data:

  • Each page view becomes a separate event
  • Timestamps are set to current time (for historical data, you'd need to adjust)
  • Duration is preserved from the average view duration
  • No session tracking (each view is independent)

Recommendations

  1. Start fresh with Umami:

    • Let Umami collect new data going forward
    • Use the migrated data for historical reference only
  2. Keep the original CSV:

    • Store data/pages(1).csv as a backup
    • You can re-import if needed
  3. Update your website:

    • Replace Independent Analytics tracking code with Umami tracking code
    • Test that Umami is collecting new data
  4. Monitor for a few days:

    • Verify Umami is collecting data correctly
    • Compare with any remaining Independent Analytics data

Troubleshooting

Issue: "ModuleNotFoundError: No module named 'csv'"

Solution: Ensure Python 3 is installed:

python3 --version
# Should be 3.7 or higher

Issue: "Permission denied" when running script

Solution: Make the script executable:

chmod +x scripts/migrate-analytics-to-umami.py

Issue: API import fails

Solution: Check:

  1. API key is correct and has import permissions
  2. Website ID exists in Umami
  3. Umami instance is accessible
  4. JSON format is valid

Issue: SQL import fails

Solution: Check:

  1. Database credentials in .env
  2. Database is running
  3. Tables exist (run npm run migrate first)
  4. Permissions to insert into website_event table

Additional Data Migration

If you have other CSV exports from Independent Analytics (referrers, devices, locations), you can:

  1. Export additional data from Independent Analytics:

    • Referrers
    • Devices (browsers, OS)
    • Geographic data
    • Custom events
  2. Create custom migration scripts for each data type

  3. Contact Umami support for bulk import assistance

Support

Summary

Completed:

  • Created migration script (scripts/migrate-analytics-to-umami.py)
  • Generated JSON import file (data/umami-import.json)
  • Generated SQL import file (data/umami-import.sql)
  • Created documentation (scripts/README-migration.md)

📊 Data Migrated:

  • 7,634 simulated page view events
  • 220 unique pages
  • Historical view counts and durations

🎯 Next Steps:

  1. Choose your import method (API or SQL)
  2. Run the migration script
  3. Import data into Umami
  4. Verify the migration
  5. Update your website to use Umami tracking