How to: Automate Stripe Invoice Reminders with Cronhooks

Rameez R.

Managing payments can be a headache, especially when customers forget to pay their invoices. If you’re using Stripe, you probably know how easy it is to create and send invoices — but following up on unpaid invoices is another story. That’s where Cronhooks comes in.

With Cronhooks, you can set up automated reminders that notify your customers when their Stripe invoices remain unpaid. No manual follow-ups, no lost revenue. Just simple, reliable automation.

Step 1: Create a cFlow in Cronhooks

To get started you need to create a cflow which looks like this. You can always customize as needed. cflow_request

cflow_request

You'll have access to full payload from stripe event and is accessible in all nodes of cflow.

{
  "id": "evt_1S82XSFIZXVjpZbejSdUJWTk",
  "object": "event",
  "api_version": "2022-08-01",
  "created": 1758043173,
  "data": {
    "object": {
      "id": "in_1S82XPFIZXVjpZbewXjmE4H2",
      "object": "invoice",
      "account_country": "GB",
      "account_name": "CRONHOOKS LTD",
      "account_tax_ids": null,
      "amount_due": 2000,
      "amount_overpaid": 0,
      "amount_paid": 0,
      "amount_remaining": 2000,
      "amount_shipping": 0,
      "application": null,
      "application_fee_amount": null,
      "attempt_count": 1,
      "attempted": true,
      "auto_advance": false,
      "automatic_tax": {
        "disabled_reason": null,
        "enabled": false,
        "liability": null,
        "provider": null,
        "status": null
      },
      "automatically_finalizes_at": null,
      "billing_reason": "manual",
      "charge": "ch_3S82XQFIZXVjpZbe0rwIkF4p",
      "collection_method": "charge_automatically",
      "created": 1758043171,
      "currency": "usd",
      "custom_fields": null,
      "customer": "cus_T4AtiJazF0kUgS",
      "customer_address": null,
      "customer_email": null,
      "customer_name": null,
      "customer_phone": null,
      "customer_shipping": null,
      "customer_tax_exempt": "none",
      "customer_tax_ids": [],
      "default_payment_method": null,
      "default_source": null,
      "default_tax_rates": [],
      "description": "(created by Stripe CLI)",
      "discount": null,
      "discounts": [],
      "due_date": null,
      "effective_at": 1758043171,
      "ending_balance": 0,
      "footer": null,
      "from_invoice": null,
      "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1LilOdFIZXVjpZbe/test_YWNjdF8xTGlsT2RGSVpYVmpwWmJlLF9UNEF0bHI4ZEdrQTlJTFdXaHpmMnBHa29qaXdHaEpiLDE0ODU4Mzk3NA0200PxknpVgj?s=ap",
      "invoice_pdf": "https://pay.stripe.com/invoice/acct_1LilOdFIZXVjpZbe/test_YWNjdF8xTGlsT2RGSVpYVmpwWmJlLF9UNEF0bHI4ZEdrQTlJTFdXaHpmMnBHa29qaXdHaEpiLDE0ODU4Mzk3NA0200PxknpVgj/pdf?s=ap",
      "issuer": {
        "type": "self"
      },
      "last_finalization_error": null,
      "latest_revision": null,
      "lines": {
        "object": "list",
        "data": [
          {
            "id": "il_1S82XOFIZXVjpZbexbtmKstd",
            "object": "line_item",
            "amount": 2000,
            "amount_excluding_tax": 2000,
            "currency": "usd",
            "description": "(created by Stripe CLI)",
            "discount_amounts": [],
            "discountable": true,
            "discounts": [],
            "invoice": "in_1S82XPFIZXVjpZbewXjmE4H2",
            "invoice_item": "ii_1S82XOFIZXVjpZbe0RGW5qxK",
            "livemode": false,
            "metadata": {},
            "parent": {
              "invoice_item_details": {
                "invoice_item": "ii_1S82XOFIZXVjpZbe0RGW5qxK",
                "proration": false,
                "proration_details": {
                  "credited_items": null
                },
                "subscription": null
              },
              "subscription_item_details": null,
              "type": "invoice_item_details"
            },
            "period": {
              "end": 1758043170,
              "start": 1758043170
            },
            "plan": null,
            "pretax_credit_amounts": [],
            "price": {
              "id": "price_1S80FnFIZXVjpZbeFpNl5ruG",
              "object": "price",
              "active": false,
              "billing_scheme": "per_unit",
              "created": 1758034391,
              "currency": "usd",
              "custom_unit_amount": null,
              "livemode": false,
              "lookup_key": null,
              "metadata": {},
              "nickname": null,
              "product": "prod_T48WcrSMNFfsG8",
              "recurring": null,
              "tax_behavior": "unspecified",
              "tiers_mode": null,
              "transform_quantity": null,
              "type": "one_time",
              "unit_amount": 2000,
              "unit_amount_decimal": "2000"
            },
            "pricing": {
              "price_details": {
                "price": "price_1S80FnFIZXVjpZbeFpNl5ruG",
                "product": "prod_T48WcrSMNFfsG8"
              },
              "type": "price_details",
              "unit_amount_decimal": "2000"
            },
            "proration": false,
            "proration_details": {
              "credited_items": null
            },
            "quantity": 1,
            "subscription": null,
            "tax_amounts": [],
            "tax_rates": [],
            "taxes": [],
            "type": "invoiceitem",
            "unit_amount_excluding_tax": "2000"
          }
        ],
        "has_more": false,
        "total_count": 1,
        "url": "/v1/invoices/in_1S82XPFIZXVjpZbewXjmE4H2/lines"
      },
      "livemode": false,
      "metadata": {},
      "next_payment_attempt": null,
      "number": "4E4B91F9-0088",
      "on_behalf_of": null,
      "paid": false,
      "paid_out_of_band": false,
      "parent": null,
      "payment_intent": "pi_3S82XQFIZXVjpZbe0yj1RfAH",
      "payment_settings": {
        "default_mandate": null,
        "payment_method_options": null,
        "payment_method_types": null
      },
      "period_end": 1758043170,
      "period_start": 1758043170,
      "post_payment_credit_notes_amount": 0,
      "pre_payment_credit_notes_amount": 0,
      "quote": null,
      "receipt_number": null,
      "rendering": {
        "amount_tax_display": null,
        "pdf": {
          "page_size": "letter"
        },
        "template": null,
        "template_version": null
      },
      "rendering_options": null,
      "shipping_cost": null,
      "shipping_details": null,
      "starting_balance": 0,
      "statement_descriptor": null,
      "status": "open",
      "status_transitions": {
        "finalized_at": 1758043171,
        "marked_uncollectible_at": null,
        "paid_at": null,
        "voided_at": null
      },
      "subscription": null,
      "subscription_details": {
        "metadata": null
      },
      "subtotal": 2000,
      "subtotal_excluding_tax": 2000,
      "tax": null,
      "test_clock": null,
      "total": 2000,
      "total_discount_amounts": [],
      "total_excluding_tax": 2000,
      "total_pretax_credit_amounts": [],
      "total_tax_amounts": [],
      "total_taxes": [],
      "transfer_data": null,
      "webhooks_delivered_at": 1758043171
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": "req_bLTAZ4G2Uv5rWn",
    "idempotency_key": "ba9d32fa-800a-43c0-8a4a-4ed5437e0411"
  },
  "type": "invoice.payment_failed",
  "flow_id": "a35632ca-bee4-4506-9492-871b6a26f541"
}

Full object is available using notation i.e: ${req['data']['object']['customer_email']}

Setup in Stripe

Head over to Stripe account -> Developers -> Webhooks and follow these steps. Keep cflow url handy.

cflow_request

cflow_request

cflow_request

Just with these simple steps now you have a fully automated flow to send invoice payment failure emails.

Why Send Reminders?

  • 🕒 Save time – No more checking Stripe dashboard daily for overdue invoices.
  • 💸 Recover revenue – Gentle reminders often mean faster payments.
  • 🤝 Improve customer relationships – Friendly, timely nudges instead of awkward late-payment emails.

Why Use Cronhooks for This?

Unlike Stripe’s built-in reminders, Cronhooks gives you:

  • Flexible scheduling (one-time or recurring).
  • Support for time zones and custom logic.
  • Ability to route reminders through your own channels (email, Slack, SMS, etc.).

👉 Whether you’re a SaaS business, freelancer, or agency, automating Stripe invoice reminders ensures you get paid faster without the manual chase.