Pennylane automation
Create and send Pennylane invoices from a list
At month end you hold a list of customers, hours and rates, and every line becomes a customer record, an invoice with lines and VAT, and an email, typed into Pennylane one customer at a time.
Cotlet does it in your own Pennylane account with list_customers, create_customer, create_customer_invoice, finalize_customer_invoice and send_customer_invoice, called by your AI agent, an n8n workflow or a script.
Hosted · nothing to install or maintain
Can Pennylane do this on its own?
Pennylane's Company API v2 creates customers, draft and final invoices and sends them by email, with a token from an Essentiel plan or higher (checked 14 Oct 2026). Pennylane's own MCP server cannot do any of it because it is read-only, and the Zapier app creates customers and invoices but lists no action that sends one. The gap is an agent that works the whole list in your own account, without a token and without code.
How you do it in Pennylane today
- Add the customer to the customer catalogue in Pennylane, or import the catalogue, so the invoice has someone to bill.
- Create the invoice and fill in the lines from your product catalogue or by hand, with quantity, unit price and VAT rate; Pennylane applies your default accounting mapping unless you pick a ledger account.
- Check the totals and the due date, then finalize the invoice. Pennylane's API documents that a finalized invoice can no longer be edited.
- Send the invoice by email from Pennylane, and follow the email sending status that Pennylane tracks per invoice.
- Repeat for every customer on the list. Pennylane's setup guide asks for company details, bank details, a logo and sequential invoice numbering before the first invoice, and a missed field shows up only after the email is out.
How to create and send Pennylane invoices from a list
Here is this month's billing list with customer, hours and rate. For each line, create the customer in Pennylane if it does not exist, create a draft invoice due in 30 days and show me the drafts. When I say go, finalize and email them. - 01
Match customers first
Your agent looks every name on the list up with list_customers and only calls create_customer for names with no match, so a customer billed last month is never duplicated.
- 02
Build the lines from your list
create_customer_invoice gets one line per row with quantity, unit price and VAT rate. If the total Pennylane returns differs from hours times rate on your list, the agent stops and names the customer.
- 03
Keep every invoice a draft
The agent creates each invoice with draft set to true and an external_reference such as the month and customer, then shows you the list. Re-running the job finds the reference and skips an invoice that already exists.
- 04
Wait for your go
finalize_customer_invoice issues the invoice number and locks the invoice, so the agent asks before it runs and lists the customers and totals it is about to finalize.
- 05
Email and report failures
send_customer_invoice goes to the customer's email on file unless you gave recipients. If Pennylane says the PDF is not ready yet, the agent retries later instead of reporting a failure; a customer with no email is listed for you to fix.
What you get back
Created 3 drafts for October
Atelier Lumen SARL, 12 h at 95.00, total 1,368.00 incl. VAT
Studio Marais SAS, 8 h at 120.00, total 1,152.00 incl. VAT
Bureau Nord (new customer), 4 h at 80.00, total 384.00 incl. VAT
Waiting for your go to finalize and email all three Other ways to ask
- Create the invoices as drafts only and leave finalizing to my accountant.
- Bill the same three customers on the last day of every month, using last month's lines as the template.
- Convert the open quote for Atelier Lumen into an invoice and email it.
- Create the invoices in the invoice template I use for retainers.
What Pennylane allows, and what to know first
- Pennylane's API takes amounts as strings, and it answers 422 when the invoice totals do not add up or the VAT code is invalid.
- Without a ledger account on a line, Pennylane applies the company's default mapping for the chart of accounts and VAT.
- Pennylane emails an invoice from facturation@pennylane.com and routes replies to the address set under Paramètres > "Facturation clients".
- Pennylane sends the default invoice template in French or English depending on the customer's billing language, and the API does not accept CC or BCC.
- The invoice PDF is generated first, which can take a few minutes, and sending before then returns 409 in the API.
create_customer, create_customer_invoice, finalize_customer_invoice and send_customer_invoice ask for your OK by default. To run it on a schedule without you, switch confirmation off for those tools in your dashboard.
Sources: Pennylane API: Create a customer invoice · Pennylane API: Send documents by email · Pennylane API: Finalize a customer invoice · Pennylane: Invoicing software · Pennylane on Zapier: triggers and actions
Call create_customer_invoice from a script
curl -X POST https://cotlet.dev/api/v1/pennylane/customers/4021/invoice \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-10-31","deadline":"2026-11-30","draft":true,"external_reference":"2026-10-atelier-lumen","lines":[{"label":"Consulting, October","quantity":12,"unit":"hour","unit_price":"95.00","vat_rate":20}]}' {
"invoice_id": 118390,
"customer": {
"customer_id": 4021,
"name": "Atelier Lumen SARL"
},
"status": "draft",
"draft": true,
"date": "2026-10-31",
"deadline": "2026-11-30",
"external_reference": "2026-10-atelier-lumen",
"amount_before_tax": "1140.00",
"tax": "228.00",
"amount": "1368.00",
"currency": "EUR"
} MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is pennylane_write → create_customer_invoice. Example data.
Schedule it in n8n, Make, Zapier or cronPennylane tools this automation uses
| Tool | Parameters |
|---|---|
| list_customers | name, limit, cursor |
| create_customer | name, type, email |
| create_customer_invoice | customer_id, date, deadline, lines, draft, external_reference |
| finalize_customer_invoice | invoice_id |
| send_customer_invoice | invoice_id, recipients |
Frequently asked questions
Can I edit an invoice the agent finalized by mistake?
No. Pennylane documents that a finalized invoice can no longer be edited, which is why the agent keeps invoices as drafts until you say go.
Is it safe to connect Pennylane to Cotlet?
Yes. You sign in to Pennylane yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Pennylane once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.
Give your agent access to Pennylane.
Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Pennylane.