← All articles
A control panel in a building at night

DocuSeal: Self-Hosted Document Signing That Replaces DocuSign

Productivity 2026-02-14 · 5 min read docuseal document-signing e-signatures pdf productivity
By Selfhosted Guides Editorial TeamSelf-hosting practitioners covering open source software, home lab infrastructure, and data sovereignty.

Every business signs documents. Contracts, NDAs, onboarding forms, vendor agreements. DocuSign charges $10-60/month per user for the privilege of putting a signature on a PDF. For a small business or self-hoster, that cost adds up fast -- especially when you only send a few documents per month.

Photo by Patrick Konior on Unsplash

DocuSeal is an open-source document signing platform that you host yourself. Upload a PDF, define signature fields, send it to signers, and get back a completed document with legally valid electronic signatures. No per-document fees, no per-user pricing, and your documents never leave your server.

DocuSeal document signing logo

What DocuSeal Offers

Docker Deployment

# docker-compose.yml
services:
  docuseal:
    image: docuseal/docuseal:latest
    ports:
      - "3000:3000"
    volumes:
      - docuseal_data:/data
    environment:
      - DATABASE_URL=postgresql://docuseal:docusealpass@db:5432/docuseal
      - SECRET_KEY_BASE=your-random-secret-key-here
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:16
    volumes:
      - docuseal_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=docuseal
      - POSTGRES_USER=docuseal
      - POSTGRES_PASSWORD=docusealpass
    restart: unless-stopped

volumes:
  docuseal_data:
  docuseal_db:
docker compose up -d

Access DocuSeal at http://your-server:3000 and create an admin account on the first visit.

Important configuration notes:

S3-Compatible Storage

By default, DocuSeal stores documents on the local filesystem. For better durability, configure S3-compatible storage:

environment:
  - AWS_ACCESS_KEY_ID=your-access-key
  - AWS_SECRET_ACCESS_KEY=your-secret-key
  - AWS_REGION=us-east-1
  - AWS_S3_BUCKET=docuseal-documents
  - AWS_S3_ENDPOINT=https://s3.your-minio.com  # For MinIO or other S3-compatible

This works with AWS S3, MinIO, Backblaze B2, or any S3-compatible storage.

Creating Templates

Templates are reusable document forms with predefined fields.

Template Editor

  1. Go to Templates and click New Template
  2. Upload a PDF or DOCX file
  3. The drag-and-drop editor opens. Add fields:
    • Signature -- Where signers place their signature
    • Initials -- For initialing individual pages
    • Date -- Auto-filled or manually entered dates
    • Text -- Free-text input fields
    • Checkbox -- Boolean checkboxes
    • Select -- Dropdown selections
    • Image -- Upload an image (company logo, photo ID)
  4. Assign each field to a signer role (e.g., "Client", "Company Representative")
  5. Save the template

Multi-Party Templates

For documents requiring multiple signers:

  1. Define signer roles when creating the template (e.g., "Landlord" and "Tenant")
  2. Assign each field to the appropriate role
  3. Set the signing order -- sequential (Landlord signs first, then Tenant) or parallel (both can sign simultaneously)

Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.

Sending Documents for Signing

  1. Select a template
  2. Enter signer details (name, email)
  3. Click Send
  4. Each signer receives an email with a unique signing link
  5. Signers complete their fields and submit
  6. You receive the completed, signed PDF

The signed document includes a certificate of completion with timestamps, IP addresses, and signer details -- the same audit trail that makes electronic signatures legally valid under the ESIGN Act and eIDAS.

API Integration

DocuSeal's REST API lets you automate document workflows programmatically. This is where it shines for developers.

Create and Send a Document via API

curl -X POST https://docuseal.yourdomain.com/api/submissions \
  -H "X-Auth-Token: your-api-token" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": 1,
    "send_email": true,
    "submitters": [
      {
        "role": "Client",
        "email": "[email protected]",
        "fields": [
          { "name": "Company Name", "default_value": "Acme Corp" },
          { "name": "Contract Date", "default_value": "2026-02-14" }
        ]
      }
    ]
  }'

List Completed Submissions

curl https://docuseal.yourdomain.com/api/submissions \
  -H "X-Auth-Token: your-api-token"

Download Signed Documents

curl https://docuseal.yourdomain.com/api/submissions/42/documents \
  -H "X-Auth-Token: your-api-token" \
  --output signed-contract.pdf

The API is clean and well-documented. Common integrations include:

Webhook Support

Configure webhooks to receive real-time notifications:

  1. Go to Settings > Webhooks
  2. Add your endpoint URL
  3. Select the events you want:
    • submission.created -- Document sent for signing
    • submission.completed -- All signers have completed
    • submitter.completed -- Individual signer completed their part

Example webhook payload:

{
  "event_type": "submission.completed",
  "timestamp": "2026-02-14T10:30:00Z",
  "data": {
    "id": 42,
    "template_id": 1,
    "status": "completed",
    "submitters": [
      {
        "email": "[email protected]",
        "completed_at": "2026-02-14T10:30:00Z"
      }
    ]
  }
}

Webhooks integrate naturally with n8n, Windmill, or any automation platform -- sign a document and trigger downstream workflows automatically.

DocuSeal vs DocuSign

Feature DocuSeal DocuSign
Pricing Free (self-hosted) $10-60/user/month
Document storage Your server DocuSign cloud
Templates Unlimited Plan-dependent
API access Included Business plan ($40+/mo)
Webhooks Included Business plan
Audit trail Yes Yes
Legal validity ESIGN/eIDAS ESIGN/eIDAS
Mobile signing Yes (responsive) Yes (native apps)
Advanced workflows Basic sequencing Complex routing
Integrations API + webhooks 400+ native
Branding Full customization Plan-dependent
Support Community Paid support

When to Choose DocuSeal

When DocuSign Still Makes Sense

Production Tips

Email Configuration

DocuSeal needs to send emails to signers. Configure SMTP:

environment:
  - SMTP_ADDRESS=smtp.yourdomain.com
  - SMTP_PORT=587
  - [email protected]
  - SMTP_PASSWORD=your-smtp-password
  - [email protected]

Use a dedicated sending domain to keep your signature emails out of spam folders.

Backups

Back up two things:

  1. PostgreSQL database -- Contains templates, submissions, and audit trails
  2. Document storage -- The actual PDF files (local volume or S3)
# Database backup
docker exec docuseal-db-1 pg_dump -U docuseal docuseal > docuseal-backup.sql

# Volume backup (if using local storage)
docker run --rm -v docuseal_data:/data -v $(pwd):/backup alpine \
  tar czf /backup/docuseal-data.tar.gz /data

Custom Branding

DocuSeal supports white-labeling in the settings panel -- custom logo, colors, and email templates. Your signers see your brand, not DocuSeal's.

The Bottom Line

DocuSeal handles the core document signing workflow -- templates, multi-party signing, email delivery, audit trails -- without the SaaS pricing model. The API is particularly strong, making it easy to embed signing into your own applications. If your signing needs are straightforward (send document, collect signatures, get signed PDF), DocuSeal does exactly that for zero recurring cost. Deploy it in Docker, configure your SMTP, and stop paying per-signature fees.

Get free weekly tips in your inbox. Subscribe to Self-Hosted Weekly