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

# Tasks

> Automate actions triggered by events across your connected integrations.

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

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>;

## What are Ari Tasks?

Ari Tasks are event-driven automations that fire when something happens in your connected integrations. Instead of manually checking Stripe, HubSpot, or your inbox for changes, you define a trigger and Ari handles the rest.

For example, you can set up a task that automatically sends a payment reminder whenever a Stripe invoice becomes overdue, or cancel a subscription when a customer is marked as churned in your CRM.

We have built Ari to handle all of the nuance. If you only want it to execute on customers that are only in the US, just include that in the operating procedure.

***

## How Tasks Work

<Steps>
  <Step title="An event occurs" icon="signal">
    Something happens in one of your connected integrations. A Stripe invoice goes past due, a HubSpot deal moves stages, a contract renewal date arrives, or an email comes in from a customer.
  </Step>

  <Step title="Ari evaluates the trigger" icon="filter">
    Ari checks whether the event matches any of your configured task triggers. You control the conditions, so only the events you care about fire a task.
  </Step>

  <Step title="Ari takes action" icon="play">
    Depending on your configuration and the operating procedure outlined, Ari either executes the action automatically or presents an approval plan in Slack for you to review first.
  </Step>
</Steps>

***

## Supported Event Sources

Ari can listen for events from any of your connected integrations:

<CardGroup cols={2}>
  <Card title="LedgerUp" icon="credit-card" color="#2AD48A">
    Transactions from your bank account, emails from customers, and contract events like opt-outs & renewals.
  </Card>

  <Card title="Stripe" icon="credit-card" color="#2AD48A">
    Invoice status changes, failed payments, subscription updates, new charges, refunds, and dispute notifications.
  </Card>

  <Card title="Contracts" icon="file-contract" color="#2AD48A">
    Renewal dates approaching, contract start/end milestones, and billing schedule triggers.
  </Card>

  <Card title="HubSpot" icon="address-book" color="#2AD48A">
    Deal stage changes, new contacts created, company updates, and engagement activity.
  </Card>

  <Card title="Salesforce" icon="cloud" color="#2AD48A">
    Opportunity stage changes, closed-won deals, account updates, and order status changes.
  </Card>

  <Card title="QuickBooks" icon="calculator" color="#2AD48A">
    Payment received, invoice created, expense logged, and account balance changes.
  </Card>

  <Card title="Email" icon="envelope" color="#2AD48A">
    Inbound emails from customers, replies to collection threads, and bounce notifications.
  </Card>
</CardGroup>

***

## Example Tasks

Here are some common tasks teams set up with Ari:

<AccordionGroup>
  <Accordion title="Auto-remind on overdue invoices" icon="clock">
    **Trigger:** Stripe invoice status changes to `past_due`

    **Action:** Ari sends a professional dunning reminder email to the customer's billing contact, then posts a summary in your #collections Slack channel.

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

  <Accordion title="Send an email to a customer on payment failure" icon="clock">
    **Trigger:** A customer's payment fails

    **Action:** Ari sends a professional payment reminder email to the customer's billing contact, then posts a summary in your #collections Slack channel.

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

  <Accordion title="Follow up on closed-won deals" icon="handshake">
    **Trigger:** Salesforce opportunity moves to `Closed Won`

    **Action:** Ari looks up the account's billing details and drafts an invoice based on the opportunity amount, then posts it for your approval.

    <SlackMessage><AriMention /> create a task: when a Salesforce deal closes, draft an invoice for the deal amount and send it to me for approval</SlackMessage>
  </Accordion>

  <Accordion title="Contract renewal alerts" icon="calendar">
    **Trigger:** Contract renewal date is 30 days away

    **Action:** Ari posts a summary of the contract terms, current billing status, and outstanding balance to your #ar-team channel so you can prepare.

    <SlackMessage><AriMention /> create a task: 30 days before a contract renewal, post a summary of the contract and current billing status to #ar-team</SlackMessage>
  </Accordion>

  <Accordion title="Flag failed subscription payments" icon="triangle-exclamation">
    **Trigger:** Stripe subscription payment fails

    **Action:** Ari identifies the customer, checks their payment history, and notifies your team with recommended next steps.

    <SlackMessage><AriMention /> create a task: when a subscription payment fails, look up the customer and notify #ar-team with their payment history</SlackMessage>
  </Accordion>

  <Accordion title="Customer asks for a W-9" icon="triangle-exclamation">
    **Trigger:** Customer requests for your W-9 in email.

    **Action:** Ari identifies the customer, verifies they are a valid customer, then posts an approval message in Slack to send the W-9 to the customer.

    <SlackMessage><AriMention /> create a task: when a subscription payment fails, look up the customer and notify #ar-team with their payment history</SlackMessage>
  </Accordion>
</AccordionGroup>

***

## Creating a Task

You can create tasks by talking to Ari in Slack:

<SlackMessage><AriMention /> create a task: when \[event], \[action]</SlackMessage>

Ari will confirm the trigger, the action, and whether it should auto-execute or require approval. You can always adjust these settings later.

<Note>
  For actions that modify data (sending emails, creating invoices, updating records), Ari defaults to requiring approval. You can change a task to auto-execute once you're confident in the setup.
</Note>

***

## Auto-Execute vs. Approval

Every task can run in one of two modes:

| Mode                  | Behavior                                                         | Best for                                        |
| --------------------- | ---------------------------------------------------------------- | ----------------------------------------------- |
| **Approval required** | Ari posts a plan in Slack and waits for you to click **Approve** | Actions that modify data or contact customers   |
| **Auto-execute**      | Ari runs the action immediately when the event fires             | Read-only actions like notifications or lookups |

<Tip>
  Start with approval mode for new tasks. Once you've reviewed a few runs and are confident Ari is doing the right thing, you can switch to auto-execute.
</Tip>

***

## Task Chaining

Tasks can trigger other tasks. For example, you can set up a sequence where a failed payment triggers a customer lookup, which then triggers a reminder email, which then sets a follow-up reminder for 7 days later.

<SlackMessage><AriMention /> create a task: when a payment fails, send a reminder email. If no payment is received after 7 days, send a follow-up. If still unpaid after 14 days, notify #collections with a full account summary.</SlackMessage>

<Warning>
  Task chains will automatically execute. Make sure you review the full chain before enabling auto-execute on any step that contacts customers or modifies data.
</Warning>
