# Can an AI assistant build a Fishbowl CloudPage?

> CloudPages are pages that open inside Fishbowl. With ILC MCP, an AI assistant drafts one from a chat, previews it on your live Fishbowl data, fixes the problems the preview reports, and installs it when you say so.

Until now our developers built every CloudPage. With ILC MCP, an AI assistant can build one from a chat, show it to you on your own data, and install it when you say so.

## What CloudPages are

CloudPages are custom pages that run inside Fishbowl: reports, tools and printed documents built around how your business works. Our CloudPages add-on puts them in Fishbowl's list of pages, and your team opens one like any other Fishbowl screen.

CloudPages can do a lot. The ones our developers build can run several screens, take barcode scans and print labels. They can also enter work into Fishbowl, like receiving or moving inventory. Those pages act through Fishbowl itself, so each person's Fishbowl permissions apply.

With ILC MCP, we keep it to simple projects. Your AI assistant builds single pages that read, report and print.

| | Built by your AI assistant | Built by our developers |
|---|---|---|
| Size | One page | Several screens, like a small app |
| What it does | Reads, reports and prints | Also scans and enters work into Fishbowl |
| Examples | Sales by customer, a reorder list, a packing slip PDF, shelf labels | A receiving station, a pick and pack scanner, a label station |
| How you get it | Ask in a chat, preview it, install it | We quote it, build it, test it and maintain it |

## What your AI assistant can build

- **A report.** Choices at the top like a period or a date range, a table you can sort and group, subtotals and a grand total, and export to CSV or Excel.
- **A freeform page.** Anything a browser can show, like a custom layout, charts or a small tool.
- **A printed document or label.** A PDF made in the page, like a packing slip or an invoice, or labels sent to a Zebra printer.

## How it works

<figure>
<svg class="cphw" viewBox="0 0 720 432" role="img" aria-label="Five steps: you describe the page, the AI drafts it, you open a live preview on your Fishbowl data while the AI reads the problems it reports and fixes them, the AI asks before installing, and the page opens in Fishbowl under Available Pages with every version kept." style="display:block;width:100%;height:auto;border-radius:16px;font-family:'Hanken Grotesk',system-ui,sans-serif"><style>@keyframes cphw-r0{0%,7%{opacity:.28}10%,92%{opacity:1}100%{opacity:.28}}@keyframes cphw-c0{0%,12%{opacity:0;transform:scale(.85)}15%,92%{opacity:1;transform:scale(1)}100%{opacity:0}}.cphw .r0{animation:cphw-r0 14s infinite}.cphw .c0{animation:cphw-c0 14s infinite;transform-box:fill-box;transform-origin:center}@keyframes cphw-r1{0%,21%{opacity:.28}24%,92%{opacity:1}100%{opacity:.28}}@keyframes cphw-c1{0%,26%{opacity:0;transform:scale(.85)}29%,92%{opacity:1;transform:scale(1)}100%{opacity:0}}.cphw .r1{animation:cphw-r1 14s infinite}.cphw .c1{animation:cphw-c1 14s infinite;transform-box:fill-box;transform-origin:center}@keyframes cphw-r2{0%,36%{opacity:.28}39%,92%{opacity:1}100%{opacity:.28}}@keyframes cphw-c2{0%,41%{opacity:0;transform:scale(.85)}44%,92%{opacity:1;transform:scale(1)}100%{opacity:0}}.cphw .r2{animation:cphw-r2 14s infinite}.cphw .c2{animation:cphw-c2 14s infinite;transform-box:fill-box;transform-origin:center}@keyframes cphw-r3{0%,50%{opacity:.28}53%,92%{opacity:1}100%{opacity:.28}}@keyframes cphw-c3{0%,55%{opacity:0;transform:scale(.85)}58%,92%{opacity:1;transform:scale(1)}100%{opacity:0}}.cphw .r3{animation:cphw-r3 14s infinite}.cphw .c3{animation:cphw-c3 14s infinite;transform-box:fill-box;transform-origin:center}@keyframes cphw-r4{0%,64%{opacity:.28}67%,92%{opacity:1}100%{opacity:.28}}@keyframes cphw-c4{0%,69%{opacity:0;transform:scale(.85)}72%,92%{opacity:1;transform:scale(1)}100%{opacity:0}}.cphw .r4{animation:cphw-r4 14s infinite}.cphw .c4{animation:cphw-c4 14s infinite;transform-box:fill-box;transform-origin:center}@media (prefers-reduced-motion:reduce){.cphw g{animation:none!important;opacity:1!important;transform:none!important}}</style><rect width="720" height="432" rx="16" fill="#1C2045"/><g class="r0"><rect x="24" y="24" width="672" height="64" rx="12" fill="#fff"/><circle cx="60" cy="56" r="17" fill="#FAB435"/><text x="60" y="63" text-anchor="middle" font-size="19" font-weight="800" fill="#1C2045">1</text><text x="92" y="63" font-size="20" font-weight="700" fill="#1C2045">You describe the page</text></g><g class="c0"><rect x="412" y="40" width="260" height="32" rx="16" fill="#EEF0F7"/><text x="542.0" y="61" text-anchor="middle" font-size="14.5" font-weight="800" fill="#1C2045">Sales by customer, with a total</text></g><g class="r1"><rect x="24" y="104" width="672" height="64" rx="12" fill="#fff"/><circle cx="60" cy="136" r="17" fill="#FAB435"/><text x="60" y="143" text-anchor="middle" font-size="19" font-weight="800" fill="#1C2045">2</text><text x="92" y="143" font-size="20" font-weight="700" fill="#1C2045">Drafts it</text></g><g class="c1"><rect x="482" y="120" width="190" height="32" rx="16" fill="#EEF0F7"/><text x="577.0" y="141" text-anchor="middle" font-size="14.5" font-weight="800" fill="#1C2045">Report, page or print</text></g><g class="r2"><rect x="24" y="184" width="672" height="64" rx="12" fill="#fff"/><circle cx="60" cy="216" r="17" fill="#FAB435"/><text x="60" y="223" text-anchor="middle" font-size="19" font-weight="800" fill="#1C2045">3</text><text x="92" y="223" font-size="20" font-weight="700" fill="#1C2045">Previews it on your data</text></g><g class="c2"><rect x="552" y="200" width="120" height="32" rx="16" fill="#DDF1E5"/><text x="612.0" y="221" text-anchor="middle" font-size="14.5" font-weight="800" fill="#17603A">✓ 0 problems</text></g><g class="r3"><rect x="24" y="264" width="672" height="64" rx="12" fill="#fff"/><circle cx="60" cy="296" r="17" fill="#FAB435"/><text x="60" y="303" text-anchor="middle" font-size="19" font-weight="800" fill="#1C2045">4</text><text x="92" y="303" font-size="20" font-weight="700" fill="#1C2045">Asks before it installs</text></g><g class="c3"><rect x="442" y="280" width="230" height="32" rx="16" fill="#EEF0F7"/><text x="557.0" y="301" text-anchor="middle" font-size="14.5" font-weight="800" fill="#1C2045">“Install it?” · Yes</text></g><g class="r4"><rect x="24" y="344" width="672" height="64" rx="12" fill="#fff"/><circle cx="60" cy="376" r="17" fill="#FAB435"/><text x="60" y="383" text-anchor="middle" font-size="19" font-weight="800" fill="#1C2045">5</text><text x="92" y="383" font-size="20" font-weight="700" fill="#1C2045">Opens in Fishbowl</text></g><g class="c4"><rect x="442" y="360" width="230" height="32" rx="16" fill="#EEF0F7"/><text x="557.0" y="381" text-anchor="middle" font-size="14.5" font-weight="800" fill="#1C2045">Available Pages · v1</text></g></svg>
<figcaption>The AI builds a CloudPage in five steps, and you see it on your own data before it installs.</figcaption>
</figure>

1. **You describe the page.** For example, "sales by customer for a period I pick, with a total at the bottom."
2. **The AI drafts it.** It writes the query, the columns and the choices at the top of the page.
3. **You open a live preview.** The preview runs on your Fishbowl data and can't change it. You click around, change the period and look at the numbers.
4. **The AI asks before it installs.** Drafting a page and installing it are separate permissions, so the people who can try ideas aren't automatically the people who can change Fishbowl.
5. **It opens in Fishbowl.** The page shows up under Available Pages, and an admin grants it to the groups that should see it.

## Fixing problems in the preview

<figure>
<svg class="cpf" viewBox="0 0 720 432" role="img" aria-label="A live preview of a Sales by Customer page reports one problem, a query error. The AI assistant reads it, fixes the query and says to reload. The preview then shows the report with a Period dropdown, CSV and Excel export, a row per customer and a total for all customers, with zero problems." style="display:block;width:100%;height:auto;border-radius:16px;font-family:'Hanken Grotesk',system-ui,sans-serif"><style>
.cpf .err{opacity:0;animation:cpf-err 12s infinite}
.cpf .bad{opacity:0;animation:cpf-err 12s infinite}
.cpf .ok{animation:cpf-ok 12s infinite}
.cpf .bub{opacity:0;animation:cpf-bub 12s infinite}
.cpf .r1{animation:cpf-r1 12s infinite}
.cpf .r2{animation:cpf-r2 12s infinite}
.cpf .r3{animation:cpf-r3 12s infinite}
.cpf .r4{animation:cpf-r4 12s infinite}
.cpf .r5{animation:cpf-r5 12s infinite}
@keyframes cpf-err{0%,4%{opacity:0}8%,40%{opacity:1}44%,100%{opacity:0}}
@keyframes cpf-ok{0%,44%{opacity:0}48%,92%{opacity:1}100%{opacity:0}}
@keyframes cpf-bub{0%,20%{opacity:0}24%,44%{opacity:1}48%,100%{opacity:0}}
@keyframes cpf-r1{0%,44%{opacity:0}48%,92%{opacity:1}100%{opacity:0}}
@keyframes cpf-r2{0%,47%{opacity:0}51%,92%{opacity:1}100%{opacity:0}}
@keyframes cpf-r3{0%,50%{opacity:0}54%,92%{opacity:1}100%{opacity:0}}
@keyframes cpf-r4{0%,53%{opacity:0}57%,92%{opacity:1}100%{opacity:0}}
@keyframes cpf-r5{0%,58%{opacity:0}62%,92%{opacity:1}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.cpf *{animation:none!important}}
</style>
<rect width="720" height="432" rx="16" fill="#1C2045"/>
<rect x="24" y="24" width="672" height="384" rx="12" fill="#fff"/>
<rect x="24" y="24" width="672" height="40" rx="12" fill="#F4F5FA"/><rect x="24" y="52" width="672" height="12" fill="#F4F5FA"/><line x1="24" y1="64" x2="696" y2="64" stroke="#E6E7EF"/>
<text x="42" y="49" font-size="14" font-weight="800" fill="#1C2045">Preview · your live Fishbowl data</text>
<g class="bad"><rect x="572" y="33" width="108" height="22" rx="11" fill="#FBE1E1"/><text x="626" y="48" text-anchor="middle" font-size="11.5" font-weight="800" fill="#9B1C1C">● 1 problem</text></g>
<g class="ok"><rect x="572" y="33" width="108" height="22" rx="11" fill="#DDF1E5"/><text x="626" y="48" text-anchor="middle" font-size="11.5" font-weight="800" fill="#17603A">✓ 0 problems</text></g>
<text x="48" y="102" font-size="21" font-weight="800" fill="#1C2045">Sales by Customer</text>
<text x="48" y="134" font-size="12" font-weight="700" fill="#6B6F86">Period</text>
<rect x="96" y="117" width="140" height="26" rx="6" fill="#fff" stroke="#D5D8E4"/><text x="106" y="135" font-size="13" font-weight="700" fill="#1C2045">This quarter</text><text x="224" y="135" text-anchor="end" font-size="11" fill="#6B6F86">▼</text>
<rect x="560" y="117" width="52" height="26" rx="6" fill="#fff" stroke="#D5D8E4"/><text x="586" y="135" text-anchor="middle" font-size="12" font-weight="800" fill="#1C2045">CSV</text>
<rect x="620" y="117" width="56" height="26" rx="6" fill="#fff" stroke="#D5D8E4"/><text x="648" y="135" text-anchor="middle" font-size="12" font-weight="800" fill="#1C2045">XLSX</text>
<g font-size="12" font-weight="800" fill="#6B6F86" letter-spacing=".05em"><text x="48" y="176">CUSTOMER</text><text x="430" y="176" text-anchor="end">ORDERS</text><text x="672" y="176" text-anchor="end">SALES</text></g>
<line x1="44" y1="188" x2="676" y2="188" stroke="#E6E7EF"/>
<g font-size="16" font-weight="600" fill="#1C2045">
<g class="r1"><text x="48" y="214">Acme Supply</text><text x="430" y="214" text-anchor="end">14</text><text x="672" y="214" text-anchor="end">$42,180</text><line x1="44" y1="226" x2="676" y2="226" stroke="#E6E7EF"/></g>
<g class="r2"><text x="48" y="252">Bayside Marine</text><text x="430" y="252" text-anchor="end">9</text><text x="672" y="252" text-anchor="end">$27,640</text><line x1="44" y1="264" x2="676" y2="264" stroke="#E6E7EF"/></g>
<g class="r3"><text x="48" y="290">Cedar Labs</text><text x="430" y="290" text-anchor="end">6</text><text x="672" y="290" text-anchor="end">$18,905</text><line x1="44" y1="302" x2="676" y2="302" stroke="#E6E7EF"/></g>
<g class="r4"><text x="48" y="328">Delta Tools</text><text x="430" y="328" text-anchor="end">11</text><text x="672" y="328" text-anchor="end">$31,220</text></g>
<g class="r5"><rect x="44" y="342" width="632" height="36" rx="6" fill="#FFF3D6"/><text x="56" y="366" font-weight="800">All customers</text><text x="430" y="366" text-anchor="end" font-weight="800">40</text><text x="664" y="366" text-anchor="end" font-weight="800">$119,945</text></g>
</g>
<g class="err"><rect x="44" y="200" width="632" height="82" rx="10" fill="#FDF2F2" stroke="#E8A3A3"/><text x="64" y="230" font-size="15" font-weight="800" fill="#9B1C1C">The preview reported a problem</text><text x="64" y="258" font-size="13" font-weight="700" fill="#9B1C1C" font-family="ui-monospace,Consolas,monospace">Query error: unknown column 'customerName'</text></g>
<g class="bub"><rect x="300" y="300" width="376" height="64" rx="14" fill="#1C2045"/><text x="320" y="326" font-size="11" font-weight="800" fill="#FAB435" letter-spacing=".06em">AI ASSISTANT</text><text x="320" y="349" font-size="14.5" font-weight="700" fill="#fff">Fixed the customer column. Reload the preview.</text></g>
</svg>
<figcaption>The preview reports a query error, the AI reads it and fixes the query, and the reloaded preview shows the report.</figcaption>
</figure>

When something on the page breaks, like a query error or a script error, the preview reports it back to the AI. You don't copy error messages into the chat. You tell the AI it's broken, it reads what the preview reported, fixes it and asks you to reload.

## Changing a page

Ask for a change to an installed page and the AI opens it, makes the change and previews it again. Installing the change saves a new version. Every version is kept, so you can roll back to an earlier one if the new version is wrong.

## Limits today

- A page your AI assistant builds is one page that reads, reports and prints.
- The preview runs in your browser. Check printing from inside Fishbowl after the page is installed.

Building CloudPages is part of the Custom reports add-on for ILC MCP, for teams that need it.

## When you need more than one page

When a page you started with your AI assistant outgrows one page, our developers can take it from there, and we [quote that like any other project](/custom-software). We wrote about how that starts in [from idea to app](/blog/idea-to-app-cloudpages).

## Where to start

Pick a report your team builds in Excel every week from a Fishbowl export. If there's a page you wish Fishbowl had, [tell us what it would do](/contact).

**Related:**
- [Can an AI assistant build a Fishbowl report and install it?](/blog/ai-builds-fishbowl-reports)
- [From idea to app: designing a Fishbowl tool with ILC MCP and CloudPages](/blog/idea-to-app-cloudpages)
- [Can Fishbowl print and scan 2D barcodes today?](/blog/fishbowl-2d-barcodes)

---

*From Israel Lopez Consulting (ILC). Custom Fishbowl Inventory integrations and software, and Fishbowl experts since 2015. Written by Israel Lopez, published October 19, 2026. Questions about this topic, or want to reach the people who wrote it? Visit https://israellopezconsulting.com/contact*
