Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
claude-office-skills avatar

Invoice Template

  • 3.7k installs
  • 357 repo stars
  • Updated January 31, 2026
  • claude-office-skills/skills

invoice-template is an agent skill that generates professional branded PDF invoices from structured order or billing data with itemized lines, tax calculations, and payment terms.

About

invoice-template is a Claude Office skill (version 1.0) that produces professional, branded PDF invoices from structured billing data and reusable templates. The skill documents an invoice_data schema covering invoice numbers, dates, from and to addresses, itemized line items with quantity and rate, tax_rate, and payment notes. It shows ReportLab canvas generation for headers, item tables, subtotal, tax, and total lines on letter-sized pages. Integration with office-mcp exposes create_docx, fill_docx_template, and docx_to_pdf for template-driven workflows alongside direct PDF rendering. Example prompts include batch monthly invoices, recurring billing runs, and per-client template customization. The skill supports English and Chinese templates and targets claude-sonnet-4, claude-opus-4, and compatible GPT models. Developers reach for invoice-template when agents must turn order exports or subscription schedules into client-ready invoice PDFs with consistent company branding, itemized charges, and calculated tax totals without leaving the coding session.

  • Structured invoice_data schema with from or to blocks, line items, tax_rate, and payment notes.
  • ReportLab PDF generation example with item table, subtotal, tax, and total calculations.
  • office-mcp tools: create_docx, fill_docx_template, and docx_to_pdf for template workflows.
  • Supports batch generation, recurring invoices, and per-client template customization prompts.
  • English and Chinese language support with finance department categorization.

Invoice Template by the numbers

  • 3,688 all-time installs (skills.sh)
  • +59 installs in the week ending Aug 5, 2026 (Skillselion tracking)
  • Ranked #38 of 1,106 Finance & Trading skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
At a glance

invoice-template capabilities & compatibility

Capabilities
structured invoice_data schema for line items an · reportlab pdf layout with item tables and totals · docx template fill and pdf conversion via office · batch and recurring invoice generation prompts
From the docs

What invoice-template says it does

Generate professional PDF invoices from templates
SKILL.md
tax_rate
SKILL.md
npx skills add https://github.com/claude-office-skills/skills --skill invoice-template

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs3.7k
repo stars357
Security audit3 / 3 scanners passed
Last updatedJanuary 31, 2026
Repositoryclaude-office-skills/skills

How do I turn structured billing data into branded PDF invoices with itemized charges, tax totals, and payment terms inside an agent workflow?

Instantly generate professional, branded PDF invoices from order data or recurring billing schedules.

Who is it for?

Teams automating client billing who need repeatable invoice PDFs from structured order or subscription data.

Skip if: Skip when you need full accounting ledger reconciliation or payment processing instead of document generation.

When should I use this skill?

User asks to generate invoices, batch monthly billing PDFs, fill invoice templates, or export itemized bills with tax.

What you get

A finished PDF invoice with company branding, line items, calculated tax, totals, and optional DOCX template intermediates.

  • Branded PDF invoices
  • Optional DOCX template fills

By the numbers

  • Skill version 1.0

Files

SKILL.mdMarkdownGitHub ↗

Invoice Template Skill

Overview

This skill generates professional PDF invoices from structured data and templates. Create invoices with company branding, itemized lists, tax calculations, and payment details.

How to Use

1. Describe what you want to accomplish 2. Provide any required input data or files 3. I'll execute the appropriate operations

Example prompts:

  • "Generate invoices from order data"
  • "Create recurring invoices"
  • "Batch generate monthly invoices"
  • "Customize invoice templates per client"

Domain Knowledge

Invoice Data Structure

invoice_data = {
    "invoice_number": "INV-2026-001",
    "date": "2026-01-30",
    "due_date": "2026-02-28",
    
    "from": {
        "name": "Your Company",
        "address": "123 Business St",
        "email": "billing@company.com"
    },
    
    "to": {
        "name": "Client Name",
        "address": "456 Client Ave",
        "email": "client@example.com"
    },
    
    "items": [
        {"description": "Consulting", "quantity": 10, "rate": 150.00},
        {"description": "Development", "quantity": 20, "rate": 100.00}
    ],
    
    "tax_rate": 0.08,
    "notes": "Payment due within 30 days"
}

PDF Generation with ReportLab

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch

def create_invoice(data: dict, output_path: str):
    c = canvas.Canvas(output_path, pagesize=letter)
    width, height = letter
    
    # Header
    c.setFont("Helvetica-Bold", 24)
    c.drawString(1*inch, height - 1*inch, "INVOICE")
    
    # Invoice details
    c.setFont("Helvetica", 12)
    c.drawString(1*inch, height - 1.5*inch, f"Invoice #: {data['invoice_number']}")
    c.drawString(1*inch, height - 1.75*inch, f"Date: {data['date']}")
    
    # From/To
    y = height - 2.5*inch
    c.drawString(1*inch, y, f"From: {data['from']['name']}")
    c.drawString(4*inch, y, f"To: {data['to']['name']}")
    
    # Items table
    y = height - 4*inch
    c.setFont("Helvetica-Bold", 10)
    c.drawString(1*inch, y, "Description")
    c.drawString(4*inch, y, "Qty")
    c.drawString(5*inch, y, "Rate")
    c.drawString(6*inch, y, "Amount")
    
    c.setFont("Helvetica", 10)
    subtotal = 0
    for item in data['items']:
        y -= 0.3*inch
        amount = item['quantity'] * item['rate']
        subtotal += amount
        c.drawString(1*inch, y, item['description'])
        c.drawString(4*inch, y, str(item['quantity']))
        c.drawString(5*inch, y, f"${item['rate']:.2f}")
        c.drawString(6*inch, y, f"${amount:.2f}")
    
    # Totals
    tax = subtotal * data['tax_rate']
    total = subtotal + tax
    
    y -= 0.5*inch
    c.drawString(5*inch, y, f"Subtotal: ${subtotal:.2f}")
    y -= 0.25*inch
    c.drawString(5*inch, y, f"Tax ({data['tax_rate']*100}%): ${tax:.2f}")
    y -= 0.25*inch
    c.setFont("Helvetica-Bold", 12)
    c.drawString(5*inch, y, f"Total: ${total:.2f}")
    
    c.save()
    return output_path

HTML Template Approach

from weasyprint import HTML
from jinja2 import Template

invoice_template = """
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial; margin: 40px; }
        .header { display: flex; justify-content: space-between; }
        table { width: 100%; border-collapse: collapse; margin: 20px 0; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
        .total { font-weight: bold; font-size: 18px; }
    </style>
</head>
<body>
    <div class="header">
        <h1>INVOICE</h1>
        <div>
            <p>Invoice #: {{ invoice_number }}</p>
            <p>Date: {{ date }}</p>
        </div>
    </div>
    <table>
        <tr><th>Description</th><th>Qty</th><th>Rate</th><th>Amount</th></tr>
        {% for item in items %}
        <tr>
            <td>{{ item.description }}</td>
            <td>{{ item.quantity }}</td>
            <td>${{ "%.2f"|format(item.rate) }}</td>
            <td>${{ "%.2f"|format(item.quantity * item.rate) }}</td>
        </tr>
        {% endfor %}
    </table>
    <p class="total">Total: ${{ "%.2f"|format(total) }}</p>
</body>
</html>
"""

def create_invoice_html(data: dict, output_path: str):
    template = Template(invoice_template)
    
    # Calculate total
    total = sum(i['quantity'] * i['rate'] for i in data['items'])
    total *= (1 + data.get('tax_rate', 0))
    data['total'] = total
    
    html = template.render(**data)
    HTML(string=html).write_pdf(output_path)
    return output_path

Best Practices

1. Validate required fields before generation 2. Use templates for consistent branding 3. Auto-calculate totals (don't trust input) 4. Include payment instructions and terms

Installation

# Install required dependencies
pip install python-docx openpyxl python-pptx reportlab jinja2

Resources

Related skills

Forks & variants (1)

Invoice Template has 1 known copy in the catalog totaling 3 installs. They canonicalize to this original listing.

How it compares

Focused invoice PDF generation from templates, not a full accounting platform.

FAQ

What data shape does invoice-template expect?

An invoice_data object with invoice_number, dates, from and to contacts, items with quantity and rate, tax_rate, and optional notes.

Which office-mcp tools does it use?

create_docx, fill_docx_template, and docx_to_pdf for template workflows alongside direct ReportLab PDF generation.

Is Invoice Template safe to install?

skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.

Finance & Tradingfinancepaymentsecommerce

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.