Open-source multi-property management platform for short-term rental hosts.
Built for Latin America. Free for your first property. Self-hostable.
Airbnb Manager is a self-hosted (or cloud) platform that helps hosts manage multiple properties from a single dashboard. It syncs reservations via Airbnb-supported iCal feeds, provides template-based guest response suggestions, pricing recommendations, cleaning management, and operational alerts.
Why this exists: Many property management tools are priced and designed around US/EU operators. This project keeps a LatAm-first, self-hostable path for hosts who want control of their calendar, pricing, cleaning, and guest operations.
- Authentication — JWT-based auth, bcrypt passwords, multi-user support
- Multi-Property — Manage unlimited properties per account, each fully isolated
- iCal Sync — Import reservations via Airbnb-supported iCal feeds. Export your calendar as .ics
- Host Ops Dashboard — Reservation Ops, Inbox Priority, Listing Readiness, Pricing Insights, Checkout Checklist, Quick Replies, Calendar Health, Guest Trip Assist, and monitor delivery gates informed by official Airbnb host docs
- Template Suggestions — Property-aware message suggestions for common guest questions (check-in, WiFi, restaurants, etc.)
- Pricing Assist — Weekend multipliers, Mexican holiday premiums, seasonal adjustments, long-stay discounts, demand-based pricing recommendations
- Analytics — Occupancy rate, revenue tracking, rating monitoring
- Cleaning Management — Auto-scheduled tasks tied to checkouts with status tracking
- Review Tracking — Monitor and respond to guest reviews
- Responsive UI — Dark/light themes, mobile-friendly, skeleton loading states
- Security — Helmet.js headers, rate limiting on auth, input validation/sanitization
- Logging — Structured logging with Pino
- This is not an approved Airbnb API integration. Airbnb calendar data is synced through iCal feeds.
- Guest messages, reviews, listing edits, cancellation policy, and pricing changes are not pushed to Airbnb unless a future approved API/partner integration is added.
- Current response suggestions are template-based. Real OpenAI/Claude integration remains roadmap work.
- Pricing automation is assistive/manual by default. ML/bandit experiments require persisted reward data and guardrails before production use.
The current host-ops workflow maps local Casa Diamante operations to public Airbnb documentation only:
- Airbnb 2026 Summer Release: services, experiences, boutique hotels, app planning, and support rollout signals
- All-new listing insights: price, availability, minimum-stay, discount, and review-improvement prompts
- Reservations, redesigned: booking request review, countdown, notes, messaging, cancellation cutoff, and earnings breakdown cues
- Respond faster in Messages: auto-replies, priority messages, and suggested action framing
- Scheduled quick replies: reusable guest templates and reservation-timed reminders
- Clear checkout and calendar sync docs: checkout tasks plus iCal import/export and refresh expectations
These modules are assistive and iCal-based. They do not write changes back to Airbnb.
# Clone
git clone https://github.com/your-username/airbnb-manager.git
cd airbnb-manager
# Install dependencies
cd backend && npm install
# Configure environment
cp .env.example .env
# Edit .env — at minimum, set JWT_SECRET to a random string
# Seed demo data (creates demo user: demo@airbnbmanager.com / demo1234)
npm run seed
# Start
npm start
# → http://localhost:3001Or use Make from the project root:
make start # install + seed + start
make dev # install + seed + start with --watchThen visit:
- Landing page: http://localhost:3001/landing
- Sign in: http://localhost:3001/login
- Onboarding: http://localhost:3001/onboarding
- Dashboard: http://localhost:3001 (requires login)
Demo credentials: demo@airbnbmanager.com / demo1234
# Build and run
docker compose up --build
# Or with Make
make dockerThe Docker setup uses a multi-stage build with node:20-alpine. Database is persisted via volume mount at ./backend/db.
Set JWT_SECRET in your environment or .env file before running in production.
backend/ Node.js + Express API (port 3001)
├── db/ SQLite database, schema, seed data
│ └── schema.sql Multi-tenant schema (users, properties, reservations...)
├── middleware/ Auth (JWT), error handling, input validation
├── services/ Template responder, pricing engine, iCal, notifications
└── server.js Main server with all routes
frontend/ Vanilla HTML/CSS/JS (served by Express)
├── index.html Dashboard SPA
├── login.html Sign-in page
├── landing.html Marketing / landing page
├── onboarding.html 4-step setup wizard
├── app.js Dashboard logic
└── style.css Design system
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
No | Create account (rate limited) |
| POST | /api/auth/login |
No | Login, get JWT (rate limited) |
| GET | /api/auth/me |
Yes | Current user info |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/properties |
Yes | List user's properties |
| POST | /api/properties |
Yes | Add a property |
| GET | /api/properties/:id |
Yes | Get property details |
| PUT | /api/properties/:id |
Yes | Update property |
| DELETE | /api/properties/:id |
Yes | Delete property |
All data is scoped per property:
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/properties/:id/reservations |
Reservations for property |
| GET | /api/properties/:id/calendar |
Calendar data |
| GET | /api/properties/:id/messages |
Guest messages |
| GET | /api/properties/:id/analytics |
Stats and metrics |
| GET | /api/properties/:id/reviews |
Reviews |
| GET | /api/properties/:id/cleaning |
Cleaning tasks |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/properties/:id/ical/sync |
Import from iCal URL |
| GET | /api/properties/:id/ical/export |
Export as .ics file |
| GET | /api/ical/:id.ics |
Public .ics URL (no auth, for sharing) |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Health check |
| GET | /api/property |
First property (legacy) |
| GET | /api/reservations |
All reservations |
| GET | /api/calendar |
Calendar data |
| GET | /api/messages |
Messages |
| POST | /api/messages/send |
Send message |
| POST | /api/messages/suggest |
Template suggestions |
| GET | /api/analytics |
Dashboard stats |
| POST | /api/pricing |
Update pricing |
| GET | /api/pricing/calculate |
Calculate stay price |
| GET | /api/reviews |
Reviews |
| GET | /api/cleaning |
Cleaning tasks |
| PATCH | /api/cleaning/:id |
Update cleaning status |
Copy backend/.env.example to backend/.env:
PORT=3001
DB_PATH=./db/airbnb.db
# REQUIRED — change in production
JWT_SECRET=change-me-to-a-random-secret-in-production
JWT_EXPIRES_IN=7d
# OpenAI (optional — for AI responses)
OPENAI_API_KEY=
# Pricing defaults
BASE_PRICE=1500
WEEKEND_MULTIPLIER=1.3
CURRENCY=MXN
# Notification webhook (optional)
NOTIFICATION_WEBHOOK_URL=
# Airbnb-supported iCal feed. Keep real tokens in .env only.
AIRBNB_ICAL_URL=
# WhatsApp alert recipients (optional, comma-separated E.164)
WHATSAPP_ALERT_RECIPIENTS=
AIRBNB_DECISION_RECIPIENTS=| Component | Technology |
|---|---|
| Backend | Node.js + Express |
| Database | SQLite (WAL mode, better-sqlite3) |
| Auth | JWT + bcrypt |
| Security | helmet.js, express-rate-limit, input validation |
| Logging | Pino (structured JSON) |
| Frontend | Vanilla HTML/CSS/JS |
| Icons | Lucide (CDN) |
| Fonts | Inter (Google Fonts) |
| iCal | Custom parser (no external deps) |
- Multi-tenant auth + multi-property
- iCal import/export
- Landing page + onboarding
- Security hardening (helmet, rate limiting, validation)
- Structured logging
- Docker support
- Host Ops dashboard based on official Airbnb 2026 host workflows
- Alert-only WhatsApp notification scaffolding
- Initial Node test suite for pricing and response suggestions
- Real AI responses (OpenAI/Claude)
- Persisted pricing recommendations and reward tracking
- Multi-platform sync (Booking.com, VRBO)
- Mobile app (PWA)
- Payment tracking
- Cleaning team management with photo verification
See CONTRIBUTING.md for guidelines. We welcome PRs!
MIT — see LICENSE