> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ledgerup.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Collect What You're Owed

> Hand Ari your collections: reminders, follow-ups, payment promises, and escalations that never fall through the cracks.

export const DraftEmail = ({from, to, cc, subject, children}) => <div className="slack-email">
    <div className="slack-email-title">✉️ Draft Email</div>
    <div className="slack-email-fields">
      <div>
        <span className="slack-email-label">From</span>: {from}
      </div>
      <div>
        <span className="slack-email-label">To</span>:{" "}
        <span className="slack-email-addr">{to}</span>
      </div>
      {cc ? <div>
          <span className="slack-email-label">Cc</span>:{" "}
          <span className="slack-email-addr">{cc}</span>
        </div> : null}
      <div>
        <span className="slack-email-label">Subject</span>: {subject}
      </div>
    </div>
    <div className="slack-email-divider" />
    <div className="slack-email-body">{children}</div>
    <div>
      <span className="slack-btn slack-btn-primary">✉️ Send Email</span>
      <span className="slack-btn">🕐 Schedule send</span>
      <span className="slack-btn">🗑️ Discard</span>
    </div>
  </div>;

export const AriMention = () => <span className="slack-mention">@Ari</span>;

export const AriMessage = ({children, time = "2:47 PM"}) => <div className="slack-msg not-prose">
    <div className="slack-avatar" style={{
  backgroundColor: "transparent"
}}>
      <img src="/logo/ari/ledgerup-favicon.svg" alt="Ari" />
    </div>
    <div className="slack-msg-body">
      <span className="slack-name">Ari</span>
      <span className="slack-app-badge">APP</span>
      <span className="slack-time">{time}</span>
      <div className="slack-text">{children}</div>
    </div>
  </div>;

export const SlackMessage = ({children, name = "Bailey", initials = "B", color = "#611f69", avatar = "/images/bailey-avatar.png", app = false, time = "2:47 PM"}) => <div className="slack-msg not-prose">
    <div className="slack-avatar" style={{
  backgroundColor: avatar ? "transparent" : color
}}>
      {avatar ? <img src={avatar} alt={name} /> : initials}
    </div>
    <div className="slack-msg-body">
      <span className="slack-name">{name}</span>
      {app ? <span className="slack-app-badge">APP</span> : null}
      <span className="slack-time">{time}</span>
      <div className="slack-text">{children}</div>
    </div>
    <div className="slack-actions">
      <button type="button" className="slack-action-btn" aria-label="Copy message" title="Copy message" onClick={e => {
  const msg = e.currentTarget.closest(".slack-msg");
  const el = msg && msg.querySelector(".slack-text");
  if (el && navigator.clipboard) {
    navigator.clipboard.writeText(el.innerText);
    const btn = e.currentTarget;
    const prev = btn.innerHTML;
    btn.innerHTML = '<svg viewBox="0 0 24 24" fill="none" stroke="#2AD48A" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>';
    setTimeout(() => {
      btn.innerHTML = prev;
    }, 1200);
  }
}}>
        <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
          <rect x="9" y="9" width="13" height="13" rx="2" ry="2" />
          <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />
        </svg>
      </button>
    </div>
  </div>;

Collections work fails in the gaps: the follow-up nobody set, the promise nobody wrote
down. This is the job Ari never gets tired of. He watches due dates, drafts reminders in
your tone, tracks every payment promise, and escalates on the schedule you define.

## What Ari does here

<CardGroup cols={2}>
  <Card title="Collections" icon="envelope" href="/ari/features/collections">
    Send payment reminders (one customer or in batch), track payment promises, and
    manage overdue invoices from Slack.
  </Card>

  <Card title="Reminders" icon="bell" href="/ari/features/reminders">
    One-time and recurring nudges for you and your team: follow-up calls, escalation
    dates, weekly AR reviews.
  </Card>

  <Card title="Tasks" icon="bolt" href="/ari/features/tasks">
    Put collections on autopilot: "when an invoice goes past due, send the first
    reminder and notify #collections."
  </Card>

  <Card title="Email" icon="envelope" href="/ari/integrations/email">
    Reminder templates that escalate in tone (friendly at 30 days, formal at 60), sent
    from your domain, with replies surfaced back in Slack.
  </Card>
</CardGroup>

## Try it

<SlackMessage><AriMention /> show me overdue invoices over 30 days</SlackMessage>

<SlackMessage><AriMention /> send a professional reminder to Growth Labs about invoice inv\_OLD456</SlackMessage>

<SlackMessage><AriMention /> log a payment promise from Acme Corp: {"$"}5,000 to be paid by February 28</SlackMessage>

<SlackMessage><AriMention /> what's our Days Sales Outstanding (DSO)?</SlackMessage>

## What a real run looks like

<Steps>
  <Step title="See what's overdue">
    `@Ari show me overdue invoices over 30 days`

    Ari returns the list with amounts, days overdue, and invoice IDs, then asks if
    you'd like him to send follow-ups.
  </Step>

  <Step title="Send the reminder">
    <SlackMessage time="2:48 PM"><AriMention /> send a professional reminder to Growth Labs about invoice inv\_OLD456</SlackMessage>

    Ari drafts the email, suggesting the right template for how overdue it is (friendly
    at 30 days, firmer at 60). You see the full text before anything sends:

    <AriMessage time="2:48 PM">
      Growth Labs is 38 days overdue, so I went with the standard friendly reminder:

      <DraftEmail from="Your Company Billing <ar@yourcompany.com>" to="Finance@growthlabs.com" subject="Payment Reminder - Invoice #inv_OLD456 ($1,500)">
        Hi Growth Labs team,

        <br />

        <br />

        We noticed that invoice #inv\_OLD456 for {"$"}1,500 is now 38 days overdue.
        Could you arrange payment at your earliest convenience?

        <br />

        <br />

        If you have any questions, we're happy to help.
      </DraftEmail>
    </AriMessage>
  </Step>

  <Step title="Send it, or adjust the tone">
    Click **Send Email**, or tell Ari "make it more formal" and review the revision.
  </Step>

  <Step title="Close the loop">
    `@Ari remind me to follow up on Growth Labs again in 1 week`

    If the customer replies to the email, Ari surfaces it in Slack. If the promised
    payment doesn't arrive, your reminder fires. Nothing depends on your memory.
  </Step>
</Steps>

## Define your escalation playbook once

Teach Ari your collections process with
[Instructions](/ari/work-together/instructions), and he follows it for everyone on the
team:

<SlackMessage><AriMention /> remember: for overdue invoices, send a friendly reminder at 7 days, a firmer reminder at 30 days, and escalate to me directly at 60 days.</SlackMessage>

<SlackMessage><AriMention /> remember: never send collection emails to customers tagged as "strategic" without my approval first.</SlackMessage>

Then automate the trigger with a [Task](/ari/features/tasks):

<SlackMessage><AriMention /> create a task: when a Stripe invoice becomes overdue, send a payment reminder email and notify #collections</SlackMessage>

<Warning>
  Batch reminders and auto-executing tasks contact real customers. Start every new
  automation in approval mode, review a few runs, and only then consider auto-execute.
  See [Review plans and approvals](/ari/work-together/approvals).
</Warning>

## Powered by

[Stripe](/ari/integrations/stripe) (invoice and payment status) ·
[Email](/ari/integrations/email) (reminders and replies) ·
[HubSpot](/ari/integrations/hubspot) / [Salesforce](/ari/integrations/salesforce)
(billing contacts)
