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

# Bill From Contracts & Deals

> Ari reads your contracts, extracts the billing terms, and makes sure every invoice matches what was signed.

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

The terms that drive your revenue live in PDFs nobody wants to reread. Ari does the
rereading: he extracts payment terms, pricing, and renewal dates from signed contracts,
then uses them to invoice accurately and to catch the deal that closed but never got
billed.

## What Ari does here

<CardGroup cols={2}>
  <Card title="Contracts" icon="file-contract" href="/ari/features/contracts">
    Upload contracts, extract billing terms, track renewals and amendments, and verify
    invoices against what was signed.
  </Card>

  <Card title="CRM deals" icon="handshake">
    When a deal closes in [Salesforce](/ari/integrations/salesforce),
    [HubSpot](/ari/integrations/hubspot), or [Attio](/ari/integrations/attio), Ari can
    pick it up and draft the invoice from the deal amount.
  </Card>

  <Card title="Document sources" icon="file-signature">
    Pull signed agreements from [PandaDoc](/ari/integrations/pandadoc) and
    [DocuSign](/ari/integrations/docusign) so Ari always works from the executed
    version.
  </Card>

  <Card title="Renewal automation" icon="calendar" href="/ari/features/tasks">
    "30 days before a renewal, post the contract terms and billing status to #ar-team."
  </Card>
</CardGroup>

## Try it

<SlackMessage><AriMention /> extract the billing terms from Acme Corp's contract</SlackMessage>

<SlackMessage><AriMention /> what contracts renew in the next 90 days?</SlackMessage>

<SlackMessage><AriMention /> confirm that invoice #INV-12345 for TechStart Inc matches their contract terms</SlackMessage>

<SlackMessage><AriMention /> record an amendment to Acme Corp's contract - price increased to {"$"}6,000/month effective March 1</SlackMessage>

## What a real run looks like

<Steps>
  <Step title="Pull up the contract">
    `@Ari pull up the contract for DataViz Solutions`

    Ari summarizes the executed terms: contract value, billing frequency, amount per
    invoice, and what's already been paid versus what's coming due.
  </Step>

  <Step title="Invoice from the terms">
    `@Ari create the Q2 invoice for DataViz Solutions based on their contract`

    Ari drafts the invoice with the contract-specified amount, period, and a reference
    to the agreement, ready for your approval.
  </Step>

  <Step title="Approve and schedule the rest">
    Approve to create and send. Then let Ari handle the remaining quarters:
    "set up automatic billing for DataViz Solutions" creates the schedule, with each
    invoice still passing through your approval.
  </Step>
</Steps>

## Catch what fell through the cracks

The highest-value question in this job is the one nobody has time to ask manually:

<SlackMessage><AriMention /> look through all our active contracts and compare them to Stripe. Which contracts don't have corresponding invoices or subscriptions?</SlackMessage>

Ari cross-references every signed agreement against your billing system and flags
unbilled contracts, lapsed billing, and pricing mismatches.

<Note>
  Ari's term extraction is accurate, but contracts carry nuance. Always review the
  extracted terms on complex or heavily negotiated agreements before invoicing from them.
  See [Guardrails and limits](/ari/manage/guardrails-and-limits).
</Note>

## Powered by

[PandaDoc](/ari/integrations/pandadoc) / [DocuSign](/ari/integrations/docusign)
(signed agreements) · [Salesforce](/ari/integrations/salesforce) /
[HubSpot](/ari/integrations/hubspot) / [Attio](/ari/integrations/attio) (deals) ·
[Stripe](/ari/integrations/stripe) (invoices and subscriptions)
