[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Follow up on unpaid Pennylane invoices

> List late Pennylane customer invoices each week, group them by customer with the amount owed, and resend the invoice only where you say so.

Source: https://cotlet.dev/integrations/pennylane-api-mcp-server/follow-up-on-unpaid-invoices

Every Monday someone opens the late invoices in Pennylane, works out who really still owes money and who paid by transfer that was never matched, and writes to the rest.

Cotlet does it in your own Pennylane account with list\_customer\_invoices, get\_customer\_invoice, list\_transactions and send\_customer\_invoice, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=pennylane) [All Pennylane tools](https://cotlet.dev/integrations/pennylane-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Pennylane do this on its own?

Pennylane has native email reminder scenarios and sequences for unpaid invoices, and its API lists invoices with a status and the remaining amount (checked 14 Oct 2026). The official list endpoint cannot filter by status or due date, and the official MCP server is read-only. The reminder sequence runs on rules, so the gap is judgement: skipping the customer who promised payment on Friday and flagging the transfer nobody matched.

## How you do it in Pennylane today

1. Open the dashboard, where Pennylane shows invoice status and the payments to chase in real time, and open the customer invoices that are late.
2. For each late invoice, check whether the money already arrived: a payment made outside Pennylane, such as a bank transfer, has to be matched to the invoice by hand in the app.
3. Pennylane scans bank transactions for the invoice number or a custom reference in the transfer label, so a customer who left the label out leaves the invoice unmatched.
4. For invoices that are really unpaid, resend the invoice by email, or rely on the email reminder scenarios and sequences that Pennylane lets you configure.
5. Keep a running list of who was chased and when, because the reminders in Pennylane do not tell you who you agreed to wait for.

## How to follow up on unpaid Pennylane invoices

Prompt

```
Every Monday, list the Pennylane customer invoices that are late. Group them by customer with the amount still owed, look in last week's bank transactions for a credit I may have missed, and resend the invoice by email only to the customers I name.
```

1. 01  
### Pull the late invoices  
The agent calls list\_customer\_invoices with status late and pages until has\_more is false, so a customer with many open invoices is never cut off after the first page.
2. 02  
### Check for missed payments  
For each invoice it calls get\_customer\_invoice for the payments and matched transactions, then list\_transactions for recent credits that carry the invoice number or the exact remaining amount. An invoice with such an unmatched credit goes into a "check in Pennylane" list instead of the chase list.
3. 03  
### Group and total  
Invoices are grouped by customer, with the sum still owed per customer, the oldest due date and the number of days late, so you see the customer who owes 3 invoices before the one who owes 1.
4. 04  
### Resend only where you said so  
send\_customer\_invoice runs only for the customers you named in the prompt or after your reply. The agent never chases a customer you did not name, because an email reaches the customer.
5. 05  
### Report what was sent  
The report lists who got the invoice again today and who was left alone, so you can see on Monday evening whom you still have to call.

### What you get back

Example data

```
3 late invoices, 4,728.00 incl. VAT in total
Atelier Lumen SARL: F-2026-0148, 2,400.00, due 30 Sep
Studio Marais SAS: F-2026-0139, 960.00, due 5 Oct
Brasserie du Port: F-2026-0131, 1,368.00, due 8 Oct
F-2026-0131: a credit of 1,368.00 on 10 Oct carries the invoice number but is not matched, check in Pennylane
Invoice emailed again to: Atelier Lumen SARL
```

### Other ways to ask

- List only invoices more than 14 days late, and leave newer ones alone.
- Every Friday, send me the total still owed per customer, without emailing anyone.
- Resend the invoice to the accounting contact at Studio Marais, not the main address.
- Match the unmatched credit on F-2026-0131 to the invoice once I confirm it.

## What Pennylane allows, and what to know first

- Pennylane's invoice status has 17 values, including paid, partially\_paid, late, upcoming, draft and cancelled, and remaining\_amount\_with\_tax holds the amount still owed.
- Pennylane separates a payment, made through Qonto, the invoice payment link, GoCardless or Stripe and matched automatically, from a matched transaction, a payment made outside Pennylane that is matched by hand.
- Pennylane's invoice list takes filters on id, date, customer, invoice number, flow, draft, credit note, external reference and category, not on status or due date.
- An invoice sent through e-invoicing carries an e\_invoicing status with a reason, which the agent reports as it is.
- The page size is 1 to 100 invoices, default 20, with a cursor for the next page.

send\_customer\_invoice asks for your OK by default. To run it weekly without you, switch confirmation off for that tool in your dashboard.

Sources: [Pennylane API: List customer invoices](https://pennylane.readme.io/reference/getcustomerinvoices) · [Pennylane API: Payment vs matched transaction](https://pennylane.readme.io/docs/what-is-the-difference-between-a-payment-and-a-matched-transaction) · [Pennylane API: Automate payment matching](https://pennylane.readme.io/docs/automating-payment-matching) · [Pennylane: Invoicing software](https://www.pennylane.com/fr/logiciel-facturation) · [Pennylane MCP: Getting started](https://pennylane-mcp.readme.io/docs/getting-started)

## Call list\_customer\_invoices from a script

curl

```
curl "https://cotlet.dev/api/v1/pennylane/customer-invoices?status=late&limit=50" \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

Example response

```
{
"invoices": [
{
"invoice_id": 118342,
"invoice_number": "F-2026-0148",
"customer": {
"customer_id": 4021,
"name": "Atelier Lumen SARL"
},
"date": "2026-09-15",
"deadline": "2026-09-30",
"amount": "2400.00",
"remaining_amount_with_tax": "2400.00",
"status": "late",
"currency": "EUR"
},
{
"invoice_id": 118301,
"invoice_number": "F-2026-0139",
"customer": {
"customer_id": 4034,
"name": "Studio Marais SAS"
},
"date": "2026-09-20",
"deadline": "2026-10-05",
"amount": "960.00",
"remaining_amount_with_tax": "960.00",
"status": "late",
"currency": "EUR"
},
{
"invoice_id": 118277,
"invoice_number": "F-2026-0131",
"customer": {
"customer_id": 4012,
"name": "Brasserie du Port"
},
"date": "2026-09-23",
"deadline": "2026-10-08",
"amount": "1368.00",
"remaining_amount_with_tax": "1368.00",
"status": "late",
"currency": "EUR"
}
],
"total_remaining_with_tax": "4728.00",
"has_more": false,
"next_cursor": null
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is pennylane\_read → list\_customer\_invoices. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/pennylane-api-mcp-server.md#automations)

## Pennylane tools this automation uses

__Cotlet Pennylane tools used to follow up on unpaid Pennylane invoices__
| Tool | Parameters |
| ------------------------ | ------------------------------------------------------------------------------ |
| list\_customer\_invoices | status, customer\_id, date\_from, date\_to, external\_reference, limit, cursor |
| get\_customer\_invoice | invoice\_id |
| list\_transactions | date\_from, date\_to, bank\_account\_id, limit, cursor |
| send\_customer\_invoice | invoice\_id, recipients |

[All 14 Pennylane tools with descriptions](https://cotlet.dev/integrations/pennylane-api-mcp-server.md#tools)

## Frequently asked questions

### 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.

## More Pennylane automations

- [Create and send Pennylane invoices from a list](https://cotlet.dev/integrations/pennylane-api-mcp-server/create-and-send-invoices.md)
- [Categorise Pennylane bank transactions](https://cotlet.dev/integrations/pennylane-api-mcp-server/categorise-bank-transactions.md)
- [Pennylane API and MCP server: every tool](https://cotlet.dev/integrations/pennylane-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## 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.

[Sign up free](https://cotlet.dev/app/signup?app=pennylane)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
