Skip to content
All Skills

Statement of Work Generator

Generates formal Statements of Work (SOW) with project scope, milestones, acceptance criteria, payment schedule, and legal terms. Exports to PDF via pandoc. Prerequisites: python3, pandoc.

Business & Freelance|v1|Updated 5/19/2026
MCP get_skill({ skillId: "statement-of-work-generator-add9bc9e" })

Use this skill with your agent

Create a free account and connect via MCP

Get Started Free
# Statement of Work Generator

Generate formal Statements of Work with milestones, acceptance criteria, and payment schedules.

## When to Use

- "Create a SOW for {project}"
- "I need a formal statement of work for {client}"
- "Help me define the scope for a client project"

## Requirements

- **python3** for milestone and payment calculations
- **pandoc** for PDF/DOCX export

## Workflow

### Step 1 — Project Details

- **Client name and company**
- **Project name and description**
- **Start date and duration**
- **Total project value**
- **Payment structure** (milestones, monthly, upfront+final)
- **Key deliverables**
- **Acceptance criteria** (how deliverables are approved)

### Step 2 — Generate SOW

```markdown
# Statement of Work

**Project:** {PROJECT_NAME}
**Client:** {CLIENT_NAME}, {CLIENT_COMPANY}
**Contractor:** {YOUR_NAME}, {YOUR_COMPANY}
**Effective Date:** {START_DATE}
**SOW #:** {SOW_NUMBER}

---

## 1. Purpose
This Statement of Work defines the scope, deliverables, timeline, and terms for {PROJECT_DESCRIPTION}.

## 2. Scope of Work

### 2.1 In Scope
- {Deliverable 1}: {Detailed description}
- {Deliverable 2}: {Detailed description}
- {Deliverable 3}: {Detailed description}

### 2.2 Out of Scope
- {Excluded item 1}
- {Excluded item 2}
- {Excluded item 3}

### 2.3 Assumptions
- {Assumption 1 — e.g., client provides content by X date}
- {Assumption 2}

## 3. Milestones & Timeline

| # | Milestone | Deliverable | Due Date | Payment |
|---|-----------|------------|----------|--------|
| 1 | Project Kickoff | Discovery complete | {DATE} | ${AMOUNT} |
| 2 | {Milestone 2} | {Deliverable} | {DATE} | ${AMOUNT} |
| 3 | {Milestone 3} | {Deliverable} | {DATE} | ${AMOUNT} |
| 4 | Final Delivery | All deliverables | {DATE} | ${AMOUNT} |
| | **Total** | | | **${TOTAL}** |

## 4. Acceptance Criteria
- Each deliverable will be reviewed within {N} business days of submission
- Client provides written approval or specific revision requests
- Maximum {N} rounds of revisions per deliverable included
- Deliverable is considered accepted if no feedback within {N} business days

## 5. Payment Terms
- **Total value:** ${TOTAL}
- **Payment schedule:** Per milestone completion
- **Payment method:** {Bank transfer / PayPal / etc.}
- **Net terms:** {Net 15 / Net 30}
- **Late payment:** {Interest rate or policy}

## 6. Change Management
- Changes to scope require a written Change Order signed by both parties
- Change Orders may adjust timeline and budget
- Rate for additional work: ${RATE}/hr

## 7. Intellectual Property
- All deliverables become Client property upon full payment
- Contractor retains right to use work in portfolio
- Pre-existing IP remains with its owner

## 8. Confidentiality
- Both parties agree to keep project details confidential
- This obligation survives termination for {N} years

## 9. Termination
- Either party may terminate with {N} days written notice
- Client pays for all completed work and work-in-progress
- Contractor delivers all completed work upon termination

## 10. Signatures

| | Client | Contractor |
|---|--------|------------|
| Name | _____________ | _____________ |
| Title | _____________ | _____________ |
| Date | _____________ | _____________ |
| Signature | _____________ | _____________ |
```

### Step 3 — Payment Schedule Calculator

```bash
python3 << 'PYEOF'
milestones = [
    {"name": "Kickoff / Discovery", "pct": 25},
    {"name": "{Milestone 2}", "pct": 25},
    {"name": "{Milestone 3}", "pct": 25},
    {"name": "Final Delivery", "pct": 25},
]
total = {TOTAL_VALUE}

print("Payment Schedule:")
running = 0
for m in milestones:
    amount = total * m["pct"] / 100
    running += amount
    print(f"  {m['name']}: ${amount:,.2f} ({m['pct']}%) — Cumulative: ${running:,.2f}")
print(f"\nTotal: ${total:,.2f}")
PYEOF
```

### Step 4 — Export

```bash
mkdir -p outputs/contracts
pandoc "outputs/contracts/SOW-{NUMBER}.md" -o "outputs/contracts/SOW-{NUMBER}.pdf" --pdf-engine=wkhtmltopdf -V geometry:margin=1in
echo "SOW saved: outputs/contracts/SOW-{NUMBER}.pdf"
```

## Important Rules

- Always define Out of Scope explicitly — this prevents disputes
- Include acceptance criteria with specific timeframes
- Payment milestones should be tied to deliverables, not dates
- Include change management process — scope creep kills projects
- Add a disclaimer: this is a template, not legal advice — recommend legal review

## Example Prompts

- "Create a SOW for a 3-month website development project worth $15,000"
- "I need a statement of work for my consulting engagement"
- "Help me write a formal SOW for {client}'s mobile app project"
#business#freelance#contract#sowpython3pandoc