Turn Linxo into a JSON API - simple, automated, script-friendly
Linxo Transaction Reader is a lightweight Go service that automates transaction extraction from Linxo using a headless browser and exposes the result as a clean HTTP JSON API.
Designed for automation, observability, and personal finance tooling.
Linxo does not provide a public API - this service turns the web interface into one.
If a human can export it → this service can automate it.
Instead of reverse engineering APIs, it reproduces the real user workflow through a browser.
flowchart LR
A[API Request] --> B[Start Headless Browser]
B --> C[Login to Linxo]
C --> D[Trigger CSV Export]
D --> E[Download CSV]
E --> F[Parse Transactions]
F --> G[Return JSON Response]
- 🌐 Launch Chromium via Rod
- 🔐 Authenticate to Linxo
- 📥 Export transactions as CSV
- 🔄 Parse into structured Go models
- 📡 Return JSON via HTTP API
- 🔌 API without API - no dependency on unofficial endpoints
- 🤖 Fully automated - no manual export
- 📦 Lightweight - single Go binary / Docker container
- 🧩 Composable - easy to plug into pipelines
- 🔍 Transparent - behavior matches real user actions
| Feature | Description |
|---|---|
📡 /showbanks |
Fetch and return transactions as JSON |
| 🔐 API key auth | Protect access via header/token |
| 📄 JSON output | Structured transaction format |
| Component | Description |
|---|---|
| Chromium (headless) | Executes the Linxo workflow |
| Rod | Controls browser lifecycle |
| Auth flow | Handles login session |
| Export flow | Automates CSV download |
cmd/linxo-reader/ Entry point
internal/
api/ HTTP server, routes, middleware
browser/ Chromium lifecycle via Rod
config/ Environment & flag configuration
linxo/ Linxo domain logic (auth, CSV, orchestration)
models/
transaction.go Domain types (Transaction, CSVRecord)
All configuration is driven by environment variables and CLI flags.
| Variable | Description |
|---|---|
API_KEY |
API key for securing requests |
LINXO_EMAIL |
Linxo account email |
LINXO_PASSWORD |
Linxo account password |
| Variable / Flag | Default | Description |
|---|---|---|
CHROME_BIN |
auto | Path to Chromium binary |
BROWSER_TIMEOUT |
3m |
Max browser session duration |
-debug |
false | Run browser in visible mode |
-port |
8080 | HTTP listening port |
export API_KEY="your-secret-key"
export LINXO_EMAIL="you@example.com"
export LINXO_PASSWORD="your-password"
go run ./cmd/linxo-readerdocker build -t linxo-reader .
docker run -p 8080:8080 \
-e API_KEY="your-secret-key" \
-e LINXO_EMAIL="you@example.com" \
-e LINXO_PASSWORD="your-password" \
linxo-readercurl -H "X-Api-Key: your-secret-key" \
http://localhost:8080/showbanks[
{
"from": "CARTE MONOPRIX",
"category": "Courses",
"amount": "-42.50",
"date": "28/03/2026",
"note": ""
}
]Every request must include a valid API key:
| Method | Example |
|---|---|
| Header | X-Api-Key: <key> |
| Bearer | Authorization: Bearer <key> |
sequenceDiagram
participant Client
participant API
participant Browser
participant Linxo
Client->>API: GET /showbanks
API->>Browser: Launch Chromium
Browser->>Linxo: Login
Browser->>Linxo: Download CSV
Linxo-->>Browser: CSV File
Browser->>API: Parsed data
API-->>Client: JSON response
go run ./cmd/linxo-reader -debugexport BROWSER_TIMEOUT=5mexport CHROME_BIN=/usr/bin/chromium- 📊 Personal finance dashboards
- 🔄 Automated reporting pipelines
- 📦 Data ingestion into other systems
- 🧾 JSON export instead of CSV
- 🏠 Self-hosted financial tooling
- Depends on Linxo web UI stability
- UI changes may break automation
- Requires a working browser environment
- Not an official Linxo API
Contributions are welcome:
- 🐛 Bug reports
- 💡 Feature suggestions
- 🔧 Pull requests
git checkout -b feature/your-featureThis project is licensed under the MIT License.