Tally is Free (generous) / $29/mo. Surveyor is a self-hosted alternative at $0.99/mo. Here's when each makes sense.
| Surveyor | Tally | |
|---|---|---|
| Hosting | Self-hosted, your infra | Managed SaaS (cloud only) |
| Data location | Your server, your disk | Tally's cloud |
| Free tier | 3 forms, 100 responses | Free |
| Pro pricing | $0.99/mo | Free (generous) / $29/mo |
| Dependencies | None (single binary + SQLite) | N/A (managed) |
| Setup time | ~30 seconds | Account signup |
| Dashboard | Built-in at /ui | Cloud dashboard |
| License | BSL 1.1 | Proprietary SaaS |
Surveyor is a single Go binary with embedded SQLite. Install it with one command, and you are running in under a minute. Your data stays on your server.
curl -fsSL https://stockyard.dev/surveyor/install.sh | sh
The pricing math between Surveyor and Tally changes depending on team size. Tally at Free (generous) / $29/mo is reasonable for a solo user. At ten seats, the difference compounds. Surveyor is a flat $0.99/mo regardless of seats — the binary does not count how many people use it. For growing teams, this makes Surveyor progressively cheaper while Tally gets progressively more expensive.
Surveyor runs as a single static binary with an embedded SQLite database. There is no application server, no cache layer, no background worker. One process handles HTTP requests and reads from and writes to the database file directly. This simplicity is the entire point — fewer moving parts means fewer things that can break at 2 AM.
Switching from Tally to Surveyor is straightforward for most teams. Export your data from Tally (most services offer CSV or JSON export), then POST each record to Surveyor's API. A migration script that reads the export and writes to /api/ endpoints typically takes less than 50 lines of code. The reverse migration is equally simple — Surveyor's SQLite database is a standard file you can query with any SQLite client.
Single binary. Free to start. $0.99/mo for Pro.