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

# Generate a weekly sales report

> Show sales pipeline changes and trends from HubSpot every week.

export const Connectors = ({items}) => <div style={{
  margin: "8px 0 20px"
}}>
    <style>{`
      .connectors-list, .connectors-list * { margin-top: 0 !important; margin-bottom: 0 !important; }
      .connectors-row {
        display: flex !important;
        align-items: flex-start !important;
        gap: 10px !important;
        padding: 4px 0 !important;
        min-height: 0 !important;
        height: auto !important;
      }
      .connectors-row img {
        width: 20px !important;
        height: 20px !important;
        max-width: 20px !important;
        max-height: 20px !important;
        margin: 2px 0 0 !important;
        display: block !important;
      }
    `}</style>
    <div className="connectors-list">
      {items.map((item, i) => <div key={item.id} className="connectors-row" style={{
  borderTop: i === 0 ? "none" : "1px solid rgba(130,130,130,0.22)"
}}>
          <img src={`/images/connectors/${item.id}.svg`} alt="" width={20} height={20} />
          <div style={{
  minWidth: 0
}}>
            <div>
              <strong>{item.name}</strong>
              {item.why ? <span style={{
  opacity: 0.72
}}> · {item.why}</span> : null}
            </div>
            {item.auth === "api-key" ? <div style={{
  fontSize: "11.5px",
  lineHeight: 1.35,
  color: "#F26207",
  marginTop: "2px"
}}>
                Not a native connector. Agent will ask for your API key.
              </div> : null}
          </div>
        </div>)}
    </div>
  </div>;

export const AiPrompt = ({children}) => {
  return <CodeBlock className="relative block max-w-full overflow-x-hidden font-sans !whitespace-pre-wrap !break-words" style={{
    overflowWrap: "anywhere",
    wordBreak: "break-word"
  }}>
      <div className="pr-7" style={{
    whiteSpace: "pre-wrap",
    overflowWrap: "anywhere",
    wordBreak: "break-word"
  }}>
        {children}
      </div>
    </CodeBlock>;
};

Pull this week's sales pipeline from HubSpot, compare it to last week, and write a
short report: new deals, stage movement, slipped deals, and forecast. Put the table in
Google Sheets and post the highlights to Slack so standup is about change, not a static
snapshot.

## Best for

* Sales managers who need Monday standups with movement, not a static snapshot.
* Revenue operations leads who need week-over-week pipeline change in one place.

## Connectors

<Connectors
  items={[
{ id: "hubspot", name: "HubSpot", why: "Deals, stages, and amounts" },
{
  id: "google-sheets",
  name: "Google Sheets",
  why: "Trend table you can audit",
},
{ id: "slack", name: "Slack", why: "Deliver the report" },
]}
/>

<Note>Also works with Salesforce, Attio, Pipedrive, or another CRM.</Note>

## Before you start

Connect HubSpot, Sheets, and Slack. Say which pipeline or team to include.

## Prompt the agent

<AiPrompt>
  Create a routine that runs every Monday at 9:00. Pull this week's pipeline
  from HubSpot. Write a weekly report showing pipeline changes and trends: new
  deals, stage movement, slipped deals, and forecast vs last week. Put the table
  in Google Sheets and post the highlights to Slack.
</AiPrompt>

## What to expect

Agent compares this week to last week and writes a short narrative plus a sheet. Check a few
deal amounts against HubSpot. Use the Slack highlights in standup; keep the sheet for the
audit trail. Pick one new deal and one slipped deal, open them in HubSpot, and confirm
stage, amount, and close date match the sheet.

## Make it work for you

<AiPrompt>
  Call out deals over \$\[amount] that haven't moved in 14 days.
</AiPrompt>

<AiPrompt>
  Add an "at risk" section using close date and last activity.
</AiPrompt>

## Troubleshooting

* **Deal amounts don't match HubSpot:** say which pipeline or team to include, and which amount field to use (amount vs weighted forecast). Check a few deals against HubSpot before you trust the sheet.
* **Slipped deals look wrong:** confirm close dates and stages in HubSpot. Ask Agent to treat a deal as slipped only when the close date moved out or the stage went backward.
* **Slack posts to the wrong place:** name the channel and whether you want highlights only or a link to the full sheet.

## Related

<CardGroup cols={2}>
  <Card title="Monitor competitors" href="/use-cases/monitor-competitors">
    Same Slack alerts for sales before a pricing change hits a deal.
  </Card>

  <Card title="Build an investor pitch deck" href="/use-cases/pitch-deck-from-website">
    Same Google Sheets source for founders building the investor financials
    slide.
  </Card>
</CardGroup>
