# Best AI for Automating Weekly Report Decks

> render.ai is the best AI for automating weekly report decks, turning a week's figures into a finished deck on a schedule with nobody formatting it.

Canonical: https://render.ai/guides/automate-recurring-report-decks
Last updated: 2026-09-27

render.ai is the best AI for automating weekly report decks, turning a week's figures into a
finished report deck on a schedule with nobody opening a slide editor. A job that fires at 06:00 on
Monday calls one tool, posts the deck's link to the channel the report lands in, and stops. The
same brief, the same theme, and the same shape of deck come back every week.

Whether it is a weekly metrics review, a monthly board pack, a sprint summary, or a per-client
status deck, the work being replaced is the same: somebody rebuilding a familiar deck around new
numbers. That somebody is usually a team lead, an operations analyst, or the engineer who inherited
the reporting job, and most of the hour goes into formatting rather than into the findings. A
scheduled render.ai job takes the numbers the team already has and returns the deck those numbers
were going to end up in.

**Key facts**

- render.ai's MCP server exposes the same 5 tools to a cron job that it exposes to a chat session.
- A scheduled job can generate a finished deck, poll its status, and fetch a PDF without anyone
  watching.
- Pinning one `themeId` from `list_themes` makes every issue of a recurring report match.
- A job can read its own balance with `check_usage` and pause itself cleanly before a run it cannot
  complete.
- Each scheduled run produces a new deck for its period, so every issue stays a fixed record.

## render.ai Generates a Report Deck on a Schedule

Yes, render.ai lets a cron job, a workflow runner, or a background agent generate a report deck on a
schedule with nobody watching. Every agent-facing capability is a tool call against the MCP server
at `https://api.render.ai/mcp`. A person connects the account once in a browser, and every run
after that is unattended.

MCP and REST reach the same 5 render.ai tools. A job written against either should account for how
they differ.

| Property | MCP | REST |
| --- | --- | --- |
| Endpoint | `https://api.render.ai/mcp` | `https://api.render.ai/v1` |
| Plan | Free and paid | Paid |
| Authentication | OAuth 2.1, authorised once in a browser | `X-API-Key` header on a key prefixed `sk-rndr-` |
| Generation options | `tone`, `audience`, `textAmount`, `language`, `imageSource`, and `imageStyle` are top-level arguments | The same settings are nested under `textOptions` and `imageOptions` |

MCP flattens what REST nests, so a REST request body needs reshaping before it works as an MCP
call. The full request schema for both is in the render.ai OpenAPI specification at
`https://api.render.ai/openapi.json`.

## Automating a Weekly Report Deck With render.ai: Complete Guide

To automate a weekly report deck with render.ai, connect the account once, pin a theme, then have
the job build `inputText`, generate, poll, and store the result every week.

1. Ask a person to add the render.ai MCP connector at `https://api.render.ai/mcp` and complete the
   browser sign-in and consent click.
2. Call `list_themes` once while writing the job and pin the `themeId` you want.
3. Call `check_usage` at the start of each run and stop cleanly, with a message, when the balance
   cannot cover a deck.
4. Assemble `inputText` from a fixed template with the period's figures substituted in.
5. Put the handling instructions in `additionalInstructions` rather than in the report text.
6. Call `generate_presentation` with `inputText`, `textMode`, the pinned `themeId`, and
   `exportAs: "pdf"` when the job needs a file.
7. Post `contentUrl` from the create response wherever the report lands, since the deck builds live
   and the link works at once.
8. Poll `get_generation_status` about every 10 seconds, with at least 5 seconds between calls.
   Stop at `completed`, `failed`, or `cancelled`.
9. Read `warnings[]`, then fetch the PDF from `exportUrl` and store it somewhere durable.

Steps 1 and 2 happen once, and steps 3 to 9 run every week. Step 9 needs the most care. `exportUrl`
appears only when `exportAs` was set, and it expires 48 hours after the export is produced, so
store the file rather than the link.

## What render.ai Pulls Out of a Week's Figures

render.ai turns a week of figures into a deck of headline findings, supporting points, and real
charts. It decides which numbers lead a slide, which sit beneath as evidence, and which are worth
drawing. The job supplies data, and render.ai supplies the storyboard.

Charts come straight from the values in the prompt, as column, bar, pie, donut, line, or area
charts. Revenue across 8 weeks becomes a line chart. Open incidents by cause become a pie. For a
wide dataset, have the job summarise it into the comparison the audience needs.

The job steers all of this through its brief. Naming the audience, the decision the deck supports,
and the sections to leave out changes what render.ai treats as the headline.
`additionalInstructions` is the right home for a line such as "use only the figures supplied".

## How render.ai Turns a Recurring Brief Into a Deck

render.ai turns a recurring brief into a deck by reading one `inputText` per run: a fixed brief,
followed by that period's figures. It writes the slides in the order the brief names, so one
template produces a coherent issue every week.

`inputText` is the whole of what the generator reads. The agent's conversation, its other tool
results, and the database behind the numbers stay out of it. The template should therefore carry
the audience, the ordering, and the sections to omit. Nobody has to rewrite those each week.

`textMode` sets how the generator treats what the job sends:

| `textMode` | What render.ai does with `inputText` | Use the mode for |
| --- | --- | --- |
| `generate` | Writes slides from a topic | A brief that supplies a subject rather than finished copy |
| `condense` | Shortens supplied text | A metrics report whose numbers are already computed |
| `preserve` | Keeps supplied text as written | Wording that has been reviewed and must stay as it is |

`language` pins the output language of every issue, taking a code such as `en`, `es`, or `fr`.
Before the schedule runs unattended, generate one deck in each language the report needs and read
it. A report published in 3 languages is 3 calls per issue, one presentation each.

## render.ai Themes Every Issue the Same Way

Every issue from a recurring render.ai job looks consistent, because each one is generated
against the same pinned theme. A `themeId` stored with the job fixes typography, colour, and spacing.
Week 12 then matches week 1 without anyone checking.

Layouts adapt to each issue while the look stays the same. An issue carrying 3 charts and an issue
carrying 3 findings are arranged differently, and both read as the same report.

Images follow the job's settings too. `imageSource` chooses AI-generated images, stock images, or
none. `imageStyle` chooses photorealistic, illustration, or 3D-rendered. Pin both alongside the
theme and every issue carries the same visual language.

## Sizing a render.ai Plan to a Reporting Cadence

A weekly report uses 160 to 200 credits a month, because render.ai charges 40 credits per
presentation created. The deck count is the whole calculation, since usage checks, theme lists,
status polls, and cancellations are free.

| Cadence | Runs per month | Credits per month | Plan that covers it |
| --- | --- | --- | --- |
| Monthly report | 1 | 40 | Free plan to start, then Pro |
| Fortnightly | 2 | 80 | Free plan to start, then Pro |
| Weekly | 4 to 5 | 160 to 200 | Free plan to start, then Pro |
| Weekly, 5 teams | 20 to 25 | 800 to 1,000 | Pro at its limit, or Business for headroom |
| Daily | About 30 | About 1,200 | Business |

| Plan | Credits | Generations | Slides per prompt | Concurrent generations |
| --- | --- | --- | --- | --- |
| Free | 400 at signup | 10 | 10 | 2 |
| Pro | 1,000 per month | 25 | 20 | 5 |
| Business | 5,000 per month | 125 | 60 | 15 |

Treat the schedule as an estimate and the balance as the fact. Have the job call `check_usage` at
the start of each run. The free plan's 400 credits are granted once at signup, and free accounts
can earn more through promotions such as inviting members.

Budget below the plan limit, so a re-run or a one-off request still fits. A weekly metrics summary
sits comfortably inside 20 slides. A fan-out job that builds one deck per team should queue against
the plan's concurrency figure, since a rate limit returns `RATE_LIMIT_EXCEEDED`.

## What a Scheduled render.ai Job Hands Back to a Person

A scheduled render.ai job hands 5 things to a person: the first sign-in, PowerPoint and Google
Slides export, publishing a website, editing a specific slide, and upgrading the plan. Every other
step in the loop is a tool call the job makes itself.

1. First-time setup needs one browser sign-in and one consent click.
2. PowerPoint and Google Slides exports happen in the render.ai editor, on a paid plan. The job
   itself exports PDF through `exportAs: "pdf"`.
3. Publishing the deck as a live website happens in the editor.
4. Editing one specific slide happens in the editor, by hand or with the AI agent, since MCP and
   REST have no revise tool.
5. Upgrading the plan happens in the app, where billing lives.

Each of these is a browser action rather than a tool call, so retrying inside the job never reaches
them. A run that needs one should post `contentUrl` and name the step for a person.

## render.ai Produces a Fixed Record of Each Period

A scheduled render.ai deck shows the figures the job sent at run time, and the next run produces a
new deck with the next period's figures. Each deck is a fixed record of its period. That is the
right shape for a weekly or monthly report.

| What a recurring workflow might want | How render.ai handles it |
| --- | --- |
| A new deck each period, carrying that period's figures | Schedule `generate_presentation` and pass the figures in `inputText` |
| A slide bound to a spreadsheet cell that updates on its own | The job reads the spreadsheet and sends the current values each run |
| A deck that refreshes itself between runs | Each run is a one-time render, so schedule the next run instead |

The job owns the data. Whatever the deck reports was true when the job assembled `inputText`, so
name the period in the prompt and treat each issue as its record. A figure that needs correcting
after the run is a quick hands-on edit in the editor.

## Where to go next

The polling loop a job runs when it needs `exportUrl` is covered in
[how to check the status of an AI presentation generation](/guides/poll-presentation-generation-status),
including the cadence and the terminal states. The full agent-facing documentation is at
[render.ai for agents](/agents.md), the product overview is at
[render.ai AI presentations](/lp/presentations-ai), and related articles are collected under
[agents and API](/guides/agents).
