Feature

Bring data in from any tool that exports CSV or Excel.

If your current tool isn't Paymo, it almost certainly exports a CSV or Excel file. Hoursmith's CSV/Excel importer accepts .csv and .xlsx, auto-detects column synonyms, surfaces validation errors before commit, and re-running the same file is a free no-op. Free on every plan.

Plans: Free · Studio · Agency

Free for solo freelancers · No credit card required

What's in it

  • Three entity types

    Clients, projects, and time entries each have their own importer flow. Each has a template at /api/imports/csv/template/[entity] with two sample rows + every supported column.

  • Auto-detected column synonyms

    We accept common headings without forcing you to rename — 'Client Name' / 'Customer' / 'Account' all map to the same field. Map manually if the auto-detect misses.

  • Multi-format coercion

    Dates parse from ISO, US, EU, and 'Jan 5 2026' styles. Durations parse from '1.5h', '1h30m', '1:30', '90m', or raw minutes. Booleans from yes/no/true/false/1/0. Decimal places preserved for money.

  • Validation preview

    Before commit you see row counts, value coercions, and any failed rows with the specific error. Fix the file, re-upload, and only the changed rows commit.

  • Idempotent dedupe

    Composite natural-key dedupe (e.g. for time entries: user + project + day + minutes). Re-uploading the same file is a free no-op. Re-uploading a corrected version updates only the changed rows.

  • 5MB / 10k row cap

    Enforced at the action layer to keep imports snappy. Larger files? Split into batches — the dedupe makes that safe.

How it works

  1. 01

    1. Pick the entity

    Clients, projects, or time entries — each is a separate importer. Download the template if you're starting from scratch.

  2. 02

    2. Upload

    Drop the .csv or .xlsx. We auto-detect columns and show you which ones mapped to what.

  3. 03

    3. Review + fix

    Validation errors surface inline. Edit your file, re-upload, repeat until clean (or accept warnings — non-blocking).

  4. 04

    4. Run

    Hit Run. Progress streams via SSE. Close the tab; it survives.

  5. 05

    5. Undo if needed

    Same 24-hour undo as the Paymo importer. After that, committed.

Common questions

  • Can I import time entries from a tool other than my current billing software?

    Yes — if you can get a CSV or Excel file out of it. Toggl, Harvest, Clockify, and most spreadsheets work. The time-entry template shows you the columns; you map your source to them.

  • What happens to validation errors?

    Rows with errors are blocked from import and surfaced in the preview. Warnings (like 'project not found, skipping') let the rest of the file proceed and aggregate at the end of the run.

  • What if my Excel file has multiple sheets?

    We reject it with a clear message ('multi-sheet not supported'). Save the relevant sheet as its own .xlsx or .csv and re-upload. This is intentional — guessing which sheet to import is the kind of magic that goes wrong silently.

  • Is there a limit on file size?

    5MB or 10,000 rows, whichever comes first. Above that, split into batches — the dedupe makes that safe.

Related

Try it free, in two minutes.

Create an account, set up your first client, and log an hour. The invoice will already be on the way to building itself.

Free for solo freelancers · No credit card · Cancel any time

Skip to content