Docs
Every function, with an example you can paste and the result you should get back. Work through it top to bottom and you will have exercised the whole product.
Before you start
- Install the add-on from the Google Workspace™ Marketplace, open a spreadsheet, and choose Extensions → Bulk AI Studio → Open Bulk AI Studio.
- Sign in from the sidebar. This is required before any formula works — Google runs custom functions anonymously, so the sidebar is the only place that can establish who you are.
- Paste the sample data below into a blank sheet, starting at cell A1.
Sample data
Download the test workbook — a fictional retailer’s support tickets and prospect list, with every formula below already written out and the result to expect beside it.
In Google Sheets™: File → Import → Upload. The AI formulas will not run in Excel, only in Sheets with the add-on installed.
Or paste this by hand. Column A is a company name, column B is a customer message. Every example below refers to row 2.
| Row | A | B |
|---|---|---|
| 1 | Company | Message |
| 2 | Shopify | My order 8871 arrived cracked. I emailed sara@example.com twice and heard nothing. Refund please. |
| 3 | Stripe | The new dashboard is fantastic — checkout setup took ten minutes. |
| 4 | Notion | Cannot export to PDF since the update. Third time this month. |
Every function here starts with AI_. Google Sheets has its own built-in =AI(), which will appear first in the autocomplete when you type =AI. That one is Google’s — it answers from Gemini, without sources, and does not use your credits. Ours is =BAI_PROMPT().
Working with text you already have
These read the cell you point them at. They do not search the web.
=BAI_PROMPT(prompt)Free-form instruction. Named BAI_PROMPT because Google ships its own built-in =AI() in Sheets, which would shadow ours.
| Paste this | Expect |
|---|---|
=BAI_PROMPT("Write a one-line apology for: " & B2) | A short apology referring to the cracked order. |
=BAI_CLASSIFY(text, labels)Sorts a cell into one of your labels. Point it at a range you have already labelled and it reuses exactly those, so a new row cannot invent a category.
| Paste this | Expect |
|---|---|
=BAI_CLASSIFY(B2, F$2:F$40) | refund — one of the labels already in column F |
=BAI_EXTRACT(text, field)Pulls one field out of the cell's own text. Empty if it is not there.
| Paste this | Expect |
|---|---|
=BAI_EXTRACT(B2, "email address") | sara@example.com |
=BAI_TRANSLATE(text, language)Translates the cell. Arabic and Urdu are tuned rather than left to the model's defaults.
| Paste this | Expect |
|---|---|
=BAI_TRANSLATE(B2, "Arabic") | The message in Modern Standard Arabic, right-to-left. |
=BAI_SUMMARIZE(text, max_words)Shortens the cell to at most the number of words you give.
| Paste this | Expect |
|---|---|
=BAI_SUMMARIZE(B2, 8) | Eight words or fewer. |
=BAI_SENTIMENT(text)One of positive, negative, neutral, mixed.
| Paste this | Expect |
|---|---|
=BAI_SENTIMENT(B2) | negative |
=BAI_TABLE(text, fields)Several fields in one call, spilling across columns. Point it at your header row and each column is filled using its own heading. Three fields cost one credit, not three.
| Paste this | Expect |
|---|---|
=BAI_TABLE(B2, D$1:F$1) | One cell per heading in D1:F1. |
=BAI_ASK(prompt, range)Asks about several cells at once, so the model sees the whole row rather than one value.
| Paste this | Expect |
|---|---|
=BAI_ASK("Is this customer at risk of churning?", A2:B2) | A judgement that takes both the company and the message into account. |
Looking things up on the web
These run a live Google search. They cost 25 credits instead of 1, because each one is a real search rather than a recollection — and they are available on paid plans.
=BAI_ENRICH(entity, fact)Looks up one fact about the thing named in the cell. Returns NOT_FOUND rather than guessing.
| Paste this | Expect |
|---|---|
=BAI_ENRICH(A2, "CEO") | Tobias Lütke |
=BAI_ENRICH(entity, fact, TRUE)The same, with the source spilled into the next cell.
| Paste this | Expect |
|---|---|
=BAI_ENRICH(A2, "CEO", TRUE) | The name, and beside it the site it came from. |
=BAI_LIVE(question)Answers a question that needs current information.
| Paste this | Expect |
|---|---|
=BAI_LIVE("current USD to PKR exchange rate") | Today's rate, not a figure from training data. |
The test that matters most
Put a company you know well in a cell and ask for something that has changed recently — a CEO, a funding round, a headcount. Then try a company that does not exist:
=BAI_ENRICH("Zzyzxqq Holdings Ltd", "CEO")
It should return NOT_FOUND. Most AI enrichment will invent a plausible name here, and an invented name is indistinguishable from a real one once it is sitting in your spreadsheet. That refusal is the feature.
Whole columns at once
Custom functions stop after 30 seconds, which is Google’s limit, not ours. For anything larger, use Bulk run in the sidebar.
- Select a column of cells — try A2:A4 from the sample data.
- Type what you want in plain language: find the CEO of each company. Press Continue.
- Check the sentence it shows you. It says what it is about to do before spending any credits.
- Press Run. Results are written back in one pass; you can close the browser.
Then hover a result cell. Every looked-up value carries a note with the sources behind it and the date it was checked. That is the part no other spreadsheet AI tool does.
The Ask panel
Select a range and ask a question about it — what is the pattern in these complaints? Tick Live to search the web instead of answering from training data. Insert into cell writes the answer back into your sheet.
What things cost
| One row, any text function | 1 credit |
|---|---|
| The same on a better model | 2 or 4 credits |
| One looked-up fact | 25 credits |
| A repeated cell | free — served from cache |
A row costs the same whether the cell holds ten characters or a thousand, so you can count the cost of a run before starting it. See pricing for what each plan includes.
When something goes wrong
| #SIGN IN | Open the sidebar and sign in. Formulas cannot do it themselves. |
|---|---|
| NOT_FOUND | Working as intended — the search did not establish the answer, so nothing was invented. |
| #UPGRADE REQUIRED | A looked-up fact on the free plan, or a quality tier your plan does not include. |
| #DAILY LIMIT REACHED | Resets at 00:00 UTC. |
| #TOO MANY ROWS | Over 20 cells in one formula. Use Bulk run. |
Something not covered here? osamaaminemail@gmail.com