Skip to content

numtide/freelancer-toolbox

Repository files navigation

freelancer-toolbox

A collection of CLI tools for freelancers: time tracking exports, invoice generation, bank statement imports, tax estimation, and document management.

Available Tools

Time Tracking

harvest-exporter - Export timesheets from Harvest with currency conversion via Wise exchange rates
kimai-exporter - Export time entries from Kimai with currency conversion
harvest-rounder - Round Harvest time entries up to the nearest billing increment
working-days-calculator - Calculate working days from a Harvest annual CSV export

Export the annual CSV from numtide.harvestapp.com/reports?kind=year, then:

working-days-calculator annual-report.csv

Invoicing & Accounting

harvest-invoicer - Fetch Harvest time data, edit line items in a local browser, and generate PDF invoices
sevdesk-invoicer - SevDesk integration: invoice generation, Wise bank imports, and German tax estimation

This package exposes three commands:

  • sevdesk-invoicer — generate SevDesk invoices from harvest-exporter or kimai-exporter JSON output

  • sevdesk-wise-importer — import Wise bank transactions into SevDesk check accounts

  • sevdesk-tax-estimator — calculate remaining German tax payments

  • Homepage: https://sevdesk.com

  • Usage: nix run github:numtide/freelancer-toolbox#sevdesk-invoicer -- --help

  • Nix: nix/packages/sevdesk-invoicer.nix

  • Documentation: packages/sevdesk-invoicer/README.md

sevdesk-cli - Command-line interface for the SevDesk API (vouchers, transactions, accounts)

The console script is named sevdesk.

quipu-invoicer - Generate invoices in Quipu from time tracking exports

This package exposes two commands:

Currency & Rates

Tool Description
ecbx Fetch and query exchange rates from the European Central Bank

Banking

wise-exporter - Download bank statements from Wise with 2FA support

Documents

paperless-cli - CLI for Paperless-ngx: manage documents, tags, mail accounts, and rules

Installation

Using Nix Flakes (Recommended)

Add to your system configuration:

{
  inputs = {
    freelancer-toolbox.url = "github:numtide/freelancer-toolbox";
  };

  # In your system packages:
  environment.systemPackages = with inputs.freelancer-toolbox.packages.${pkgs.stdenv.hostPlatform.system}; [
    harvest-exporter
    sevdesk-invoicer
    wise-exporter
    # ... other tools
  ];
}

Note

This flake is built and tested against its pinned nixpkgs-unstable input. If you set freelancer-toolbox.inputs.nixpkgs.follows = "nixpkgs", your nixpkgs must also track nixpkgs-unstable and be reasonably current.

Try Without Installing

Run a specific tool directly without installing:

nix run github:numtide/freelancer-toolbox#harvest-exporter -- --help
nix run github:numtide/freelancer-toolbox#sevdesk-invoicer -- --help
nix run github:numtide/freelancer-toolbox#wise-exporter -- --help
# etc.

Development

Setup

Copy the environment template and fill in your API tokens:

cp .envrc.local-template .envrc.local
# Edit .envrc.local with your API tokens
Variable Description
HARVEST_ACCOUNT_ID Harvest account ID
HARVEST_BEARER_TOKEN API token from Harvest Developers
SEVDESK_API_TOKEN SevDesk API token
WISE_API_TOKEN Wise API token
WISE_PRIVATE_KEY RSA private key for Wise 2FA (see wise-exporter docs)
WISE_PROFILE Wise business profile ID
PAPERLESS_URL Paperless-ngx instance URL
PAPERLESS_TOKEN Paperless API token
QUIPU_APP_ID Quipu OAuth application ID
QUIPU_APP_SECRET Quipu OAuth application secret
KIMAI_API_URL Kimai instance API URL
KIMAI_API_KEY Kimai API key

Running the Tools

Run any workspace tool directly from source:

uv sync                          # materialise .venv (one-time)
uv run harvest-exporter --help   # or any other console script

nix develop drops you into a shell with uv and the project formatters available. For a hermetic build of a specific tool:

nix run .#harvest-exporter

The workspace also contains sevdesk-api, a library member (no CLI) used by the sevdesk tools.

Code Quality

# Format all code
nix fmt

# Run checks
nix flake check

Usage Examples

The commands below assume the tools are on your PATH — prefix with uv run (see Development) or use nix run .#<package> if they are not.

Monthly Invoicing Workflow

Export your time tracking data and generate an invoice:

# From Harvest
harvest-exporter --format json > harvest.json
sevdesk-invoicer --customer "CUSTOMER_ID" harvest.json

# From Kimai
kimai-exporter --client "Acme Corp" > kimai.json
sevdesk-invoicer --customer "CUSTOMER_ID" kimai.json

See docs/workflows/monthly-invoicing.md for the complete guide including currency conversion and multi-user scenarios.

Working Days Report

Export the annual CSV from numtide.harvestapp.com/reports?kind=year, then:

working-days-calculator annual-report.csv
# Working days: 220 from 2024-01-02 00:00:00 to 2024-12-31 00:00:00

Guides

  • Getting Started — set yourself up as a contractor (tax registration, insurance, banking)
  • Monthly Invoicing — export time tracking data and generate invoices
  • Country Guides — country-specific guidance for Germany, UK, Switzerland, and more

API References

License

MIT

About

A set of tools useful for freelancing

Resources

License

Code of conduct

Contributing

Security policy

Stars

31 stars

Watchers

7 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors