This is a proof-of-concept API server implementation based on the OpenOutreach project. The API provides programmatic access to LinkedIn automation capabilities through a FastAPI-based REST interface.
Note: This implementation is unstable and was put together in an afternoon. Do not use with a live account without thorough testing—if you do, you accept all risks.
- FastAPI Server for programmatic access to LinkedIn automation
- Replaced Playwright & Playwright-Stealth with Patchright for better stealth and anti-detection
- Removed message/note templating features from upstream
- Removed CSV-based bulk input processing
- Removed AI/LLM-based content generation features
- Docker and Docker Compose
- (Optional)
.envfile for environment variables (API keys, etc.)
# Clone repository
git clone https://github.com/eracle/OpenOutreach.git
cd OpenOutreach
# Build Docker image
docker compose build# Start FastAPI server with Docker Compose
docker compose upServer runs on http://localhost:8000 by default. VNC access for browser debugging is available on port 5900.
GET /health- Health check
POST /api/v1/accounts- Create or update a LinkedIn account{ "handle": "account1", "username": "user@example.com", "password": "password123", "active": true, "proxy": null, "daily_connections": 50, "daily_messages": 20, "booking_link": null }GET /api/v1/accounts- List all accountsGET /api/v1/accounts/{handle}- Get account by handleDELETE /api/v1/accounts/{handle}- Delete account
POST /api/v1/runs- Create and queue a touchpoint execution{ "handle": "account1", "touchpoint": { "type": "connect", "url": "https://www.linkedin.com/in/username/", "note": "Optional connection note" }, "dry_run": false, "tags": {} }profile_enrich- Enrich LinkedIn profile dataprofile_visit- Visit profile with configurable duration/scrollingconnect- Send connection request (with optional note)direct_message- Send direct message to connected profilepost_react- React to LinkedIn postpost_comment- Comment on LinkedIn postinmail- Send InMail
GET /api/v1/runs/{run_id}- Get run status and resultsGET /api/v1/runs- List runs (filter byhandle,status, pagination)
POST /api/v1/schedules- Create recurring touchpoint schedule{ "handle": "account1", "touchpoint": { "type": "profile_visit", "url": "..." }, "cron": "0 9 * * *", "tags": {} }GET /api/v1/schedules- List schedulesDELETE /api/v1/schedules/{schedule_id}- Delete schedule
All endpoints (except /health) require API key authentication via header:
X-API-Key: your-secret-key
If API_KEY environment variable is not set, authentication is disabled (development mode).
GNU GPLv3 — see LICENCE.md
Not affiliated with LinkedIn.
Automation may violate LinkedIn's terms. Risk of account suspension exists.
Use at your own risk — no liability assumed.