May 19, 2026by Auditledge
How to Add an Audit Log to Your SaaS in 5 Minutes
Database schema design, event serialization, retention policies — building audit logs yourself is a rabbit hole. Here's how to add a production-ready audit trail in the time it takes to grab coffee.
You're building a SaaS product. You know you need audit logs — for compliance, debugging, customer trust. But the thought of building them yourself is exhausting. Database schema design, event serialization, storage queries, retention policies... it's a rabbit hole.
What if you could add audit logging to your app in less time than it takes to grab coffee?
The problem we're solving
Last week, I helped a developer integrate audit logging into a Python app running inside Docker. They had a few options:
- Build it yourself — 2-3 weeks of development, testing, and maintenance
- Use a half-baked solution — ends up unreliable when you need it
- Use a hosted API — audit logs in minutes
They went with option 3. Here's how.
Before: What they were stuck with
# This is what logging looked like before
print(f"User {user_id} ran stats")
# Not structured. No query API. No compliance trail.
After: Auditledge in your app
Step 1: Install the SDK (30 seconds)
pip install auditledge
Or use the REST API directly from any language:
curl -X POST https://api.auditledge.com/v1/events \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"actor": {"id": "user_123", "name": "Alice"},
"action": "stats.run",
"resource": {"type": "report", "id": "monthly"}
}'
Step 2: Initialise the client (1 minute)
from auditledge import AuditLedge
import os
audit = AuditLedge(api_key=os.getenv('AUDITLEDGE_API_KEY'))
Python in Docker — add to requirements.txt:
auditledge==0.1.1
Then set the key in your Compose file:
# docker-compose.yml
services:
app:
build: .
environment:
AUDITLEDGE_API_KEY: ${AUDITLEDGE_API_KEY}
Step 3: Log events (3 minutes)
Replace print statements with structured audit events:
# Before
print(f"User {user_id} exported data")
# After
audit.log({
'actor': {'id': user_id, 'name': user_name},
'action': 'data.exported',
'resource': {'type': 'export', 'id': 'csv'},
'metadata': {'format': 'csv', 'row_count': 1042},
})
A real Flask route looks like this:
@app.route('/api/run-stats', methods=['POST'])
def run_stats():
user_id = request.json.get('user_id')
user_name = request.json.get('user_name')
# Your business logic
stats = calculate_stats()
# Log it
audit.log({
'actor': {'id': user_id, 'name': user_name},
'action': 'stats.run',
'resource': {'type': 'report', 'id': 'monthly'},
'metadata': {'row_count': len(stats)},
})
return {'success': True, 'stats': stats}
Add it to the actions that matter:
- User login / logout
- Data exports
- Permission changes
- Billing events
- API key generation
- Admin actions
Why this matters
For compliance
GDPR auditors ask: "Show me every access to user data for the past 12 months." With audit logs, you have the answer in seconds. Without them, you are exposed.
For debugging
A customer says "I never got that email." With audit logs:
result = audit.query({
'actor_id': 'john@example.com',
'action': 'email.sent',
'start_date': '2026-04-01T00:00:00Z',
})
for event in result['events']:
print(f"{event['timestamp']}: {event['action']}")
You instantly see what happened.
For security
A contractor's API key was compromised. How many records did they access?
result = audit.query({
'actor_id': 'contractor_456',
'start_date': '2026-05-01T00:00:00Z',
})
print(f"{result['total']} events in the window")
Full trail. Seconds.
Pricing that makes sense
- Free — 10K events/month, 14-day retention (no credit card)
- Starter — $19/month — 500K events/month, 1-year retention
- Growth — $49/month — 5M events/month, 2-year retention, compliance-ready (SOC 2 / HIPAA)
Most early-stage SaaS sit comfortably on the Starter plan ($19/month). For comparison, building this yourself costs 2-3 weeks of senior engineer time — conservatively $10–15K — plus ongoing maintenance.
$19/month suddenly looks very smart.
Next steps
- Sign up at auditledge.com (free tier, no credit card)
- Get your API key from the dashboard
- Install the SDK —
pip install auditledge - Add 3-5 audit events to your most critical user actions
- Verify they show up in the dashboard
- Sleep better knowing you have a compliance trail
The whole process takes 5 minutes. The peace of mind lasts forever.
Audit logs aren't a nice-to-have anymore. They're table stakes. Make them boring — let Auditledge handle it.
Add audit logs to your app in minutes
One API call per action. Queryable dashboard. No infrastructure to manage.
Start free →