Home›Expensa›Quickstart
Expensa · Quickstart

Expensa Quickstart, as shipped in the download

The QUICKSTART.txt in the download — the same steps your delivery email carries.

EXPENSA — QUICKSTART
====================

REQUIREMENTS
------------
  - PHP 8.0+ with extensions: pdo, pdo_sqlite (or pdo_mysql), fileinfo, curl
  - MySQL 5.7+ OR SQLite 3 (SQLite requires no extra setup)
  - An API key for OpenAI, Anthropic, or Ollama (set after install, or during)
  - A web server (Apache with mod_rewrite, or Nginx with try_files)


SHARED HOSTING / CPANEL (RECOMMENDED FOR MOST BUYERS)
------------------------------------------------------
1. Upload the contents of the `app/` folder to your web root (e.g. public_html/)
   or a subdirectory (e.g. public_html/expensa/).

2. Make sure these directories are writable by PHP:
     data/
     data/uploads/

   Via cPanel File Manager: right-click -> Permissions -> set to 755 or 775.

3. Visit https://yourdomain.com/install/ in your browser.

4. Fill in the installer:
     - Database: choose MySQL (fill in host/name/user/pass) or SQLite (no setup)
     - Company name and base currency
     - LLM provider and API key (or leave blank to configure later in Settings)
     - Admin email + password

5. The installer writes config.php and redirects you to the login page.

6. Log in, then go to Settings to verify or update your LLM provider and API key,
   and to edit your expense categories if you want to.

7. Create a report, upload a batch of receipts, and click Run extraction.


VPS / SELF-HOSTED
-----------------
Requirements same as above. Apache example:

  <VirtualHost *:80>
    DocumentRoot /var/www/expensa/app
    <Directory /var/www/expensa/app>
      AllowOverride All
      Require all granted
    </Directory>
  </VirtualHost>

Run the web installer as above, or use the CLI seeder:

  php bin/demo.php    # loads demo data (login: admin@expensa.app with the one-time password it prints)


DOCKER (QUICK TEST)
-------------------
  docker run --rm -p 8080:8080 \
    -v "$(pwd):/var/www/html" \
    -w /var/www/html \
    php:8.3-cli \
    php -S 0.0.0.0:8080 router.php

  Then visit http://localhost:8080/install/


POST-INSTALL SECURITY CHECKLIST
--------------------------------
  [ ] config.php is protected (the .htaccess does this automatically)
  [ ] data/ is not web-accessible (.htaccess blocks it automatically)
  [ ] Use HTTPS in production
  [ ] Keep PHP updated


LOOKING AFTER IT (from 4.0)
---------------------------
  * Updates: open Updates in the menu, save your license key once, press Check for updates.
    Reaching 4.0 from 3.x is the last update by hand: replace the files; config.php and data/ stay.
  * Sample data: the installer offers to start with a sample; remove it later with one click.
  * Backups: "Back up once a day by itself" is on by default (/restore); add an S3-compatible bucket there for
    a copy somewhere else. The Health page (/health) says whether all of this is working.
  * On Nginx: use the server block in the manual ("On Nginx: keep data/ private", https://ownware.io/p/expensa/manual);
    it opens the installer and keeps data/ private.
  * One-line install for technical owners:
    curl -fsSL https://ownware.io/install.sh | sh -s -- expensa <your license key>

NOTES
-----
  * Upload 5-50 receipts at once. Each pending receipt is read when you click
    "Run extraction". You are never charged for an API call you didn't trigger.
  * Extraction accuracy depends on the model you choose. GPT-4o and
    Claude 3 Sonnet/Opus give the best results.
  * Images (PNG, JPEG, WebP) work reliably across all providers.
  * PDFs work best with Anthropic (native document support). Other providers
    treat PDFs as best-effort.
  * Expensa never adds amounts across currencies — a mixed-currency report keeps a
    separate total per currency.
  * Export formats: CSV (accountant-ready) and a printable PDF summary.
  * Expensa builds expense reports; it is not accounting software and does not
    replace your accountant.

← Back to Expensa · Manual · API · Test run