[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)

# List past-due Recurly accounts

> List Recurly subscriptions with unpaid invoices each morning, with the account, invoice and amount, from Claude Code, n8n or a script. Hosted.

Source: https://cotlet.dev/integrations/recurly-api-mcp-server/list-past-due-accounts

Your billing team opens Recurly each morning to see who is behind on payment, then jumps between the accounts list, each subscription and each invoice to learn what is owed and for how long.

Cotlet does it in your own Recurly account with list\_subscriptions, list\_invoices and get\_account, called by your AI agent, an n8n workflow or a script.

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

Hosted · nothing to install or maintain

## Can Recurly do this on its own?

Recurly's API lists subscriptions with state past\_due and invoices with state past\_due (checked 14 Oct 2026), so the data is there. It leaves you to join subscriptions, invoices and accounts in your own code and run that code on a schedule. Recurly's Zapier app has triggers for new accounts, invoices, subscriptions and transactions, but no trigger that lists what is past due today.

## How you do it in Recurly today

1. In the Admin Console, open the accounts overview. Recurly lets you filter accounts by status; Past due is a subscription status for subscribers with at least one invoice not paid by its due date.
2. Open each account from the result and click the subscription name to see its state and current plan.
3. Go to the account's invoices and read which one is unpaid, its due date and its total.
4. Copy the account, the invoice number and the amount into the sheet or ticket the team works from.
5. Repeat tomorrow: invoices that dunning collected drop out, new ones appear, and the list has to be rebuilt by hand each time.

## How to list past-due Recurly accounts

Prompt

```
Every morning, list Recurly subscriptions that are past due. For each, show the account, the unpaid invoice and its amount, and sort by the oldest invoice first.
```

1. 01  
### Start from past-due subscriptions  
Your agent calls list\_subscriptions with state past\_due and pages until the list is empty, so a long backlog is read as one batch. Recurly returns active or canceled records here, because past due is a filter, not a stored state.
2. 02  
### Find the unpaid invoice  
For each account it calls list\_invoices with state past\_due and keeps the oldest one per account. An account with two unpaid invoices shows both amounts and counts as one row.
3. 03  
### Add who the customer is  
get\_account fills in the company name and email, so the row reads as a customer and not as a code. Accounts the agent cannot open are listed with the code only.
4. 04  
### Group by age  
The agent sorts by the invoice creation date and splits the list into new this week and older, so you start with the longest-overdue accounts.
5. 05  
### Report, do not collect  
This job only reads. Nothing is charged, closed or cancelled, and no customer gets a message.

### What you get back

Example data

```
Past-due subscriptions: 7 (checked 08:00)
Oldest first:
- acme-co, Acme Co: invoice 1042, $240.00, created 6 Sep
- bright-lab, Bright Lab: invoice 1077, $99.00, created 21 Sep
- north-yard, North Yard: invoices 1081 and 1090, $198.00 in total
No account has more than two unpaid invoices.
```

### Other ways to ask

- Every Monday, list past-due accounts whose unpaid invoice total is over $500.
- List canceled subscriptions that still have a past-due invoice, so I can mark the invoice as failed.
- Show past-due accounts that have a coupon redemption, so I can check if the discount caused the failed payment.
- Send me the list as a table I can paste into a Slack message, but do not contact the customers.

## What Recurly allows, and what to know first

- Recurly's accounts dashboard defines Past due as a subscription status for subscribers with at least one invoice that was not paid by its due date.
- A past\_due subscription query returns records marked active or canceled, because Recurly stores only the base states pending, active, canceled, expired and future.
- Recurly invoices have exactly one state: open, collected, failed or past\_due.
- If a subscription expires outside of dunning, its past-due invoices stay open and in dunning until someone marks them as failed manually.
- Recurly returns lists in pages of 50 by default and 200 at most, with the total in an X-Records header.

Every tool here only reads, so it can run daily from n8n, Make, Zapier or cron without waiting for your OK.

Sources: [Recurly Docs: Accounts dashboard](https://docs.recurly.com/recurly-subscriptions/docs/accounts-dashboard) · [Recurly API reference: List Subscriptions](https://docs.recurly.com/recurly-subscriptions/reference/listsubscriptions) · [Recurly API reference: List Invoices](https://docs.recurly.com/recurly-subscriptions/reference/listinvoices) · [Recurly Docs: Expire/cancel subscription](https://docs.recurly.com/recurly-subscriptions/docs/expire-subscription)

## Call list\_subscriptions from a script

curl

```
curl "https://cotlet.dev/api/v1/recurly/subscriptions?state=past_due&per_page=50" \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

Example response

```
{
"subscriptions": [
{
"subscription_id": "44f83d0cbf86d2b8a5b3d3e6c3e8b16f",
"account_code": "acme-co",
"plan_code": "team",
"state": "active",
"quantity": 1,
"unit_amount_in_cents": 24000,
"currency": "USD",
"current_period_ends_at": "2026-11-14T00:00:00Z"
}
],
"total": 1,
"next_cursor": null
}
```

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

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

## Recurly tools this automation uses

__Cotlet Recurly tools used to list past-due Recurly accounts__
| Tool | Parameters |
| ------------------- | ------------------------ |
| list\_subscriptions | state, per\_page, cursor |
| list\_invoices | state, per\_page, cursor |
| get\_account | account\_code |

[All 11 Recurly tools with descriptions](https://cotlet.dev/integrations/recurly-api-mcp-server.md#tools)

## Frequently asked questions

### Does the agent try to collect the payment?

No. This job reads subscriptions and invoices only. Recurly's own dunning keeps retrying according to your site settings, and your agent does not change that.

### Is it safe to connect Recurly to Cotlet?

Yes. You sign in to Recurly yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Recurly 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 Recurly automations

- [Refund a Recurly invoice line item](https://cotlet.dev/integrations/recurly-api-mcp-server/refund-invoice-line-item.md)
- [Cancel Recurly subscriptions at the end of the term](https://cotlet.dev/integrations/recurly-api-mcp-server/cancel-subscription-at-term-end.md)
- [Recurly API and MCP server: every tool](https://cotlet.dev/integrations/recurly-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Recurly.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Recurly.

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

---

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.
